Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
I
inspect
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
912协同工作系统
项目监控管理工具
inspect
Commits
2392cdac
提交
2392cdac
authored
3月 04, 2020
作者:
马晨俊
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
mcj:编写注释
上级
88bbce8f
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
194 行增加
和
148 行删除
+194
-148
Budget.java
src/main/java/com/zjty/inspect/entity/Budget.java
+4
-1
DependencyVo.java
src/main/java/com/zjty/inspect/entity/DependencyVo.java
+1
-1
Pages.java
src/main/java/com/zjty/inspect/entity/Pages.java
+0
-13
PomAnalysis.java
src/main/java/com/zjty/inspect/entity/PomAnalysis.java
+0
-20
Properties.java
src/main/java/com/zjty/inspect/entity/Properties.java
+0
-13
ReportVo.java
src/main/java/com/zjty/inspect/entity/ReportVo.java
+1
-2
Warn.java
src/main/java/com/zjty/inspect/entity/Warn.java
+5
-0
DependenceManagement.java
...ain/java/com/zjty/inspect/enums/DependenceManagement.java
+20
-0
Language.java
src/main/java/com/zjty/inspect/enums/Language.java
+37
-0
InspectServiceImpl.java
...ava/com/zjty/inspect/service/impl/InspectServiceImpl.java
+4
-1
Inspector.java
src/main/java/com/zjty/inspect/utils/Inspector.java
+122
-97
没有找到文件。
src/main/java/com/zjty/inspect/entity/Budget.java
浏览文件 @
2392cdac
...
...
@@ -17,8 +17,11 @@ import java.sql.Timestamp;
@Data
public
class
Budget
{
/**
* 代码重构预算、代码修改预算、
* 名称
* 代码重构预算
* 代码修改预算、
*/
private
String
budgetName
;
/**
...
...
src/main/java/com/zjty/inspect/entity/Dep
Tree
Vo.java
→
src/main/java/com/zjty/inspect/entity/Dep
endency
Vo.java
浏览文件 @
2392cdac
...
...
@@ -12,7 +12,7 @@ import java.util.List;
* @date 2020-02-21 20:26
*/
@Data
public
class
Dep
Tree
Vo
implements
Serializable
{
public
class
Dep
endency
Vo
implements
Serializable
{
private
List
<
ProjectPom
>
depTreeList
=
new
ArrayList
<>();
private
List
<
ProjectPom
>
frontend
=
new
ArrayList
<>();
...
...
src/main/java/com/zjty/inspect/entity/Pages.java
deleted
100644 → 0
浏览文件 @
88bbce8f
package
com
.
zjty
.
inspect
.
entity
;
import
lombok.Data
;
/**
* @author Mcj
* @date 2020-03-03 11:56
*/
@Data
public
class
Pages
{
private
int
page
;
private
String
id
;
}
src/main/java/com/zjty/inspect/entity/PomAnalysis.java
浏览文件 @
2392cdac
...
...
@@ -23,25 +23,5 @@ public class PomAnalysis {
private
String
name
;
private
String
url
;
private
String
description
;
//private List<Prerequisite> prerequisites;//描述了这个项目构建环境中的前提条件。 -->
//private IssueManagement issueManagement;//项目的问题管理系统(Bugzilla, Jira, Scarab,或任何你喜欢的问题管理系统)的名称和URL
//private CiManagement ciManagement;//项目持续集成信息
//private String inceptionYear;//项目创建年份,4位数字。当产生版权信息时需要使用这个值
//private MailingLists mailingLists;//项目相关邮件列表信息
//private Developers developers;//项目开发者列表
//private Contributors contributors;//项目的其他贡献者列表
//private List<License> licenses;//该元素描述了项目所有License列表。 应该只列出该项目的license列表,不要列出依赖项目的 license列表。如果列出多个license,用户可以选择它们中的一个而不是接受所有license
//private Scm scm;//SCM(Source Control Management)标签允许你配置你的代码库,供Maven web站点和其它插件使用
//private Organization organization;//描述项目所属组织的各种属性。Maven产生的文档用
//private Build build;//构建项目需要的信息
//private List<Profile> profiles;//在列的项目构建profile,如果被激活,会修改构建处理
//private List<Module> modules;//模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径
//private List<Repository> repositories;//发现依赖和扩展的远程仓库列表
//private List<PluginRepository> pluginRepositiries;//发现插件的远程仓库列表,这些插件用于构建和报表
private
List
<
PomDependency
>
dependencies
;
//private Repoting repoting;//该元素描述使用报表插件产生报表的规范。当用户执行“mvn site”,这些报表就会运行。 在页面导航栏能看到所有报表的链接
//private DependencyManagement dependencyManagement;//继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和artifact ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID匹配到这里的依赖,并使用这里的依赖信息
//private DistributionManagement distributionManagement;//项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库
//private Properties properties;//以值替代名称,Properties可以在整个POM中使用,也可以作为触发条件(见settings.xml配置文件里activation元素的说明)。格式是<name>value</name>
}
src/main/java/com/zjty/inspect/entity/Properties.java
deleted
100644 → 0
浏览文件 @
88bbce8f
package
com
.
zjty
.
inspect
.
entity
;
import
lombok.Data
;
/**
* @author Mcj
* @date 2020-02-17 16:11
*/
@Data
public
class
Properties
{
private
String
name
;
private
String
value
;
}
src/main/java/com/zjty/inspect/entity/ReportVo.java
浏览文件 @
2392cdac
...
...
@@ -3,7 +3,6 @@ package com.zjty.inspect.entity;
import
lombok.Data
;
import
javax.persistence.Column
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -59,7 +58,7 @@ public class ReportVo {
/**
* 依赖
*/
private
Dep
TreeVo
depTree
Vo
;
private
Dep
endencyVo
dependency
Vo
;
/**
* 匹配技术列表
...
...
src/main/java/com/zjty/inspect/entity/Warn.java
浏览文件 @
2392cdac
...
...
@@ -29,6 +29,11 @@ public class Warn {
*/
private
String
technologyId
;
/**
* 适配技术名称
*/
private
String
technologyName
;
/**
* 关键字id
*/
...
...
src/main/java/com/zjty/inspect/enums/DependenceManagement.java
0 → 100644
浏览文件 @
2392cdac
package
com
.
zjty
.
inspect
.
enums
;
/**
* @author mcj
*/
public
enum
DependenceManagement
{
/**
* maven方式
*/
MAVEN
,
/**
* gradle方式
*/
GRADLE
,
}
src/main/java/com/zjty/inspect/enums/Language.java
0 → 100644
浏览文件 @
2392cdac
package
com
.
zjty
.
inspect
.
enums
;
/**
*
*
* @author mcj
*/
public
enum
Language
{
/**
* java类型
*/
JAVA
,
/**
* pyth类型
*/
PYTHON
,
/**
* asp
*/
ASP
,
/**
* js
*/
JAVASCRIPT
,
/**
* go
*/
GO
,
/**
* html
*/
HTML
,
UNKNOW
,
}
src/main/java/com/zjty/inspect/service/impl/InspectServiceImpl.java
浏览文件 @
2392cdac
...
...
@@ -32,12 +32,15 @@ public class InspectServiceImpl implements InspectService {
suffixLanguageMapping
.
put
(
"vue"
,
Report
.
Language
.
VUE
);
suffixLanguageMapping
.
put
(
"cpp"
,
Report
.
Language
.
CPP
);
suffixLanguageMapping
.
put
(
"py"
,
Report
.
Language
.
PYTHON
);
suffixLanguageMapping
.
put
(
"jsp"
,
Report
.
Language
.
J
SP
);
suffixLanguageMapping
.
put
(
"jsp"
,
Report
.
Language
.
J
AVA
);
suffixLanguageMapping
.
put
(
"go"
,
Report
.
Language
.
GO
);
suffixLanguageMapping
.
put
(
"js"
,
Report
.
Language
.
JAVASCRIPT
);
suffixLanguageMapping
.
put
(
"html"
,
Report
.
Language
.
HTML
);
//构造成员变量
inspector
.
setInspectParameter
(
inspectParameter
);
//构造报告vo
inspector
.
setReport
(
reportVo
);
//需要重构
inspector
.
setSuffixLanguageMapping
(
suffixLanguageMapping
);
ReportVo
report
=
inspector
.
inspect
();
return
report
;
...
...
src/main/java/com/zjty/inspect/utils/Inspector.java
浏览文件 @
2392cdac
...
...
@@ -5,6 +5,7 @@ import com.zjty.inspect.entity.*;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
...
...
@@ -25,6 +26,7 @@ import java.util.stream.Collectors;
@AllArgsConstructor
@NoArgsConstructor
@Service
@Slf4j
public
class
Inspector
{
@Autowired
...
...
@@ -41,7 +43,7 @@ public class Inspector {
@Autowired
private
ParameterDao
parameterDao
;
private
Dep
TreeVo
depTreeVo
=
new
DepTree
Vo
();
private
Dep
endencyVo
dependencyVo
=
new
Dependency
Vo
();
private
ArrayList
<
Rule
>
rules
=
new
ArrayList
<
Rule
>();
private
ArrayList
<
Warn
>
warns
=
new
ArrayList
<>();
...
...
@@ -50,7 +52,7 @@ public class Inspector {
* key:mysql-connect:*
* value:随意
*/
private
HashMap
<
String
,
Rule
>
ruleMap
=
new
HashMap
<>();
private
HashMap
<
String
,
Rule
>
ruleMap
=
new
HashMap
<>();
/**
* 支持的国产化技术
...
...
@@ -142,7 +144,7 @@ public class Inspector {
ruleSuffixList
.
get
(
rule
.
getSuffix
()).
add
(
rule
);
}
//规则添加时去重使用,mysql-connect:*
ruleMap
.
put
(
rule
.
getTarget
()
+
":"
+
rule
.
getSuffix
(),
rule
);
ruleMap
.
put
(
rule
.
getTarget
()
+
":"
+
rule
.
getSuffix
(),
rule
);
}
try
{
...
...
@@ -153,10 +155,12 @@ public class Inspector {
for
(
String
s
:
suffixLanguageMapping
.
keySet
())
{
languageSuffixMatcherMapping
.
put
(
s
,
aDefault
.
getPathMatcher
(
"glob:**/*."
+
s
));
}
//构造各个配置文件的正则表达式,用于解析依赖
Map
<
PathMatcher
,
String
>
configFileMatcherSuffixMapping
=
new
HashMap
<>(
16
);
for
(
String
s
:
configFileTypePathsMapping
.
keySet
())
{
configFileMatcherSuffixMapping
.
put
(
aDefault
.
getPathMatcher
(
"glob:**/*."
+
s
),
s
);
}
//构造规则后缀的正则表达式
Map
<
PathMatcher
,
String
>
ruleSuffix
=
new
HashMap
<>(
16
);
for
(
String
s
:
ruleSuffixMap
.
keySet
())
{
ruleSuffix
.
put
(
aDefault
.
getPathMatcher
(
"glob:**/*."
+
s
),
s
);
...
...
@@ -175,47 +179,59 @@ public class Inspector {
public
FileVisitResult
visitFile
(
Path
file
,
BasicFileAttributes
attrs
)
{
for
(
Map
.
Entry
<
String
,
PathMatcher
>
entry
:
languageSuffixMatcherMapping
.
entrySet
())
{
//通过正则表达式匹配.java类型后缀文件,并+1
if
(
entry
.
getValue
().
matches
(
file
))
{
languageMatchMap
.
get
(
entry
.
getKey
()).
plus
();
}
}
for
(
Map
.
Entry
<
PathMatcher
,
String
>
entry
:
configFileMatcherSuffixMapping
.
entrySet
())
{
//通过配置文件正则表达式匹配.xml文件,记录文件地址
if
(
entry
.
getKey
().
matches
(
file
))
{
configFileTypePathsMapping
.
get
(
entry
.
getValue
()).
add
(
file
);
}
}
for
(
Map
.
Entry
<
PathMatcher
,
String
>
entry
:
ruleSuffix
.
entrySet
())
{
//通过规则匹配后缀正则表达式匹配,记录匹配上的文件地址
if
(
entry
.
getKey
().
matches
(
file
))
{
ruleSuffixMap
.
get
(
entry
.
getValue
()).
add
(
file
);
}
}
//
获取普通依赖jar
//
检查到普通jar包
if
(
file
.
toString
().
endsWith
(
".jar"
))
{
//新建一个pom对象
ProjectPom
projectPom
=
new
ProjectPom
();
//
TODO: 2020-02-28 jar文件需要修改格式变为string
//
截取jar名称
String
[]
split
=
file
.
getFileName
().
toString
().
split
(
"\\."
);
//新建一个依赖对象
PomDependency
pomDependency
=
new
PomDependency
();
pomDependency
.
setArtifactId
(
split
[
0
]);
projectPom
.
getDependencies
().
add
(
pomDependency
);
if
(
inspectParameter
.
getAdmin
()==
1
){
//当参数为1时代表上传者管理员,代码可绝对信任,将jar名称当作可支持依赖添加进规则库中
if
(
inspectParameter
.
getAdmin
()
==
1
)
{
//新建规则对象
Rule
rule
=
new
Rule
();
//设置适配技术id
rule
.
setTechnologyId
(
techJavaSupport
.
getId
());
rule
.
setTarget
(
split
[
0
]);
//设置文件后缀
rule
.
setSuffix
(
"*"
);
rule
.
setId
(
UUIDUtil
.
getUUID
());
if
(!
ruleMap
.
containsKey
(
split
[
0
]+
":"
+
rule
.
getSuffix
())){
//做规则查询,不用去数据库查询
if
(!
ruleMap
.
containsKey
(
split
[
0
]
+
":"
+
rule
.
getSuffix
()))
{
rules
.
add
(
rule
);
ruleMap
.
put
(
split
[
0
]
+
":"
+
rule
.
getSuffix
(),
rule
);
ruleMap
.
put
(
split
[
0
]
+
":"
+
rule
.
getSuffix
(),
rule
);
}
//设置当前依赖为可支持
pomDependency
.
setSupport
(
1
);
}
else
{
}
else
{
//为普通用户上传,依赖需要检查是否支持。
int
i
=
valiWarn
(
ruleList
,
file
,
split
[
0
],
0
);
if
(
i
==
0
){
//如果值为0则代表是有不支持技术到匹配
if
(
i
==
0
)
{
pomDependency
.
setSupport
(
2
);
projectPom
.
getDependencies
().
add
(
pomDependency
);
}
}
dep
Tree
Vo
.
add
(
projectPom
);
dep
endency
Vo
.
add
(
projectPom
);
}
return
FileVisitResult
.
CONTINUE
;
}
...
...
@@ -243,24 +259,27 @@ public class Inspector {
*/
@Transactional
public
ReportVo
analysis
()
{
Dep
TreeVo
depTreeVo
=
new
DepTree
Vo
();
Dep
endencyVo
dependencyVo
=
new
Dependency
Vo
();
String
most
=
null
;
int
maxnum
=
0
;
//统计文件最多的
for
(
Map
.
Entry
<
String
,
Counter
>
entry
:
languageMatchMap
.
entrySet
())
{
if
(
entry
.
getValue
().
getNumber
()
>
maxnum
)
{
most
=
suffixLanguageMapping
.
get
(
entry
.
getKey
()).
name
();
maxnum
=
entry
.
getValue
().
getNumber
();
}
}
//设置语言
report
.
setLanguage
(
most
==
null
?
Report
.
Language
.
UNKNOW
.
name
()
:
most
);
//设置架构
report
.
setFramework
(
languageMatchMap
.
get
(
"jsp"
).
i
>
0
?
"混合型架构"
:
"分离型架构"
);
//设置是否需要重构
if
(
languageMatchMap
.
get
(
"jsp"
).
i
==
0
&
languageMatchMap
.
get
(
"java"
).
i
==
0
)
{
report
.
setRecastMethod
(
2
);
}
else
{
report
.
setRecastMethod
(
1
);
}
// TODO: 2020-02-28 jsFiles, jarFiles
//解析配置文件集合
for
(
Map
.
Entry
<
String
,
List
<
Path
>>
entry
:
configFileTypePathsMapping
.
entrySet
())
{
switch
(
entry
.
getKey
())
{
/**
...
...
@@ -275,38 +294,9 @@ public class Inspector {
StringBuilder
stringBuilder
=
new
StringBuilder
();
for
(
PomDependency
dependency
:
projectPom
.
getDependencies
())
{
stringBuilder
.
append
(
dependency
.
getGroupId
()).
append
(
":"
).
append
(
dependency
.
getArtifactId
());
if
(
inspectParameter
.
getAdmin
()==
1
){
Rule
rule
=
new
Rule
();
rule
.
setTechnologyId
(
techJavaSupport
.
getId
());
rule
.
setTarget
(
dependency
.
getGroupId
());
rule
.
setSuffix
(
"*"
);
rule
.
setId
(
UUIDUtil
.
getUUID
());
Rule
rule1
=
new
Rule
();
rule1
.
setTechnologyId
(
techJavaSupport
.
getId
());
rule1
.
setTarget
(
dependency
.
getArtifactId
());
rule1
.
setSuffix
(
"*"
);
rule1
.
setId
(
UUIDUtil
.
getUUID
());
if
(!
ruleMap
.
containsKey
(
dependency
.
getGroupId
()+
":"
+
rule
.
getSuffix
())){
rules
.
add
(
rule
);
ruleMap
.
put
(
dependency
.
getGroupId
()+
":"
+
rule
.
getSuffix
(),
rule
);
}
if
(!
ruleMap
.
containsKey
(
dependency
.
getArtifactId
()+
":"
+
rule1
.
getSuffix
())){
rules
.
add
(
rule1
);
ruleMap
.
put
(
dependency
.
getArtifactId
()+
":"
+
rule1
.
getSuffix
(),
rule1
);
}
dependency
.
setSupport
(
1
);
}
else
{
int
i
=
valiWarn
(
ruleList
,
path
,
stringBuilder
.
toString
(),
0
);
if
(
i
==
0
){
dependency
.
setSupport
(
2
);
}
}
stringBuilder
.
delete
(
0
,
stringBuilder
.
length
());
setRule
(
path
,
stringBuilder
,
dependency
);
}
dep
Tree
Vo
.
add
(
projectPom
);
dep
endency
Vo
.
add
(
projectPom
);
}
}
break
;
...
...
@@ -320,111 +310,144 @@ public class Inspector {
//设置依赖
StringBuilder
stringBuilder
=
new
StringBuilder
();
for
(
PomDependency
dependency
:
pomDependencies
)
{
stringBuilder
.
append
(
dependency
.
getGroupId
()).
append
(
":"
).
append
(
dependency
.
getArtifactId
());
if
(
inspectParameter
.
getAdmin
()==
1
){
Rule
rule
=
new
Rule
();
rule
.
setTechnologyId
(
techJavaSupport
.
getId
());
rule
.
setTarget
(
dependency
.
getGroupId
());
rule
.
setSuffix
(
"*"
);
rule
.
setId
(
UUIDUtil
.
getUUID
());
Rule
rule1
=
new
Rule
();
rule1
.
setTechnologyId
(
techJavaSupport
.
getId
());
rule1
.
setTarget
(
dependency
.
getArtifactId
());
rule1
.
setSuffix
(
"*"
);
rule1
.
setId
(
UUIDUtil
.
getUUID
());
if
(!
ruleMap
.
containsKey
(
dependency
.
getGroupId
()+
":"
+
rule
.
getSuffix
())){
rules
.
add
(
rule
);
ruleMap
.
put
(
dependency
.
getGroupId
()+
":"
+
rule
.
getSuffix
(),
rule
);
}
if
(!
ruleMap
.
containsKey
(
dependency
.
getArtifactId
()+
":"
+
rule1
.
getSuffix
())){
rules
.
add
(
rule1
);
ruleMap
.
put
(
dependency
.
getArtifactId
()+
":"
+
rule1
.
getSuffix
(),
rule1
);
}
dependency
.
setSupport
(
1
);
}
else
{
int
i
=
valiWarn
(
ruleList
,
path
,
stringBuilder
.
toString
(),
0
);
if
(
i
==
0
){
dependency
.
setSupport
(
2
);
}
}
stringBuilder
.
delete
(
0
,
stringBuilder
.
length
());
setRule
(
path
,
stringBuilder
,
dependency
);
}
dep
Tree
Vo
.
add
(
projectPom
);
dep
endency
Vo
.
add
(
projectPom
);
}
}
break
;
default
:
}
}
//指定后缀到文件匹配关键字
for
(
Map
.
Entry
<
String
,
List
<
Path
>>
entry
:
ruleSuffixMap
.
entrySet
())
{
//entry,key为后缀,value为文件列表
String
key
=
entry
.
getKey
();
//从ruleSuffixList获取指定后缀的规则列表
List
<
Rule
>
rules
=
ruleSuffixList
.
get
(
key
);
for
(
Path
path1
:
entry
.
getValue
())
{
try
{
if
(
path1
.
toAbsolutePath
().
toString
().
endsWith
(
"jar"
)
||
path1
.
toAbsolutePath
().
toString
().
endsWith
(
"class"
)){
//如果文件类型为jar活着class则不读取
if
(
path1
.
toAbsolutePath
().
toString
().
endsWith
(
"jar"
)
||
path1
.
toAbsolutePath
().
toString
().
endsWith
(
"class"
))
{
continue
;
}
//将文件的每一行都与规则匹配
List
<
String
>
strings
=
Files
.
readAllLines
(
path1
);
for
(
int
i
=
0
;
i
<
strings
.
size
();
i
++)
{
valiWarn
(
rules
,
path1
,
strings
.
get
(
i
),
i
+
1
);
}
}
catch
(
MalformedInputException
e
){
}
catch
(
IOException
e
)
{
e
.
printStackTrace
(
);
log
.
error
(
"解析{}出错,异常信息为{}"
,
path1
.
toAbsolutePath
().
toString
(),
e
.
getMessage
()
);
}
}
}
//将得到的告警信息根据技术id进行转换
Set
<
String
>
collect
=
warns
.
stream
().
map
(
Warn:
:
getTechnologyId
).
collect
(
Collectors
.
toSet
());
List
<
Technology
>
allById
=
technologyDao
.
findAllById
(
collect
);
Integer
fund
=
0
;
//计算技术金额
for
(
Technology
tech
:
allById
)
{
fund
+=
tech
.
getFund
();
}
//计算预算,三种预算
//计算预算
if
(
inspectParameter
.
getValid
()
!=
null
)
{
List
<
Budget
>
budget
=
budgetUitl
.
getBudget
(
fund
,
inspectParameter
);
report
.
setBudgets
(
budget
);
inspectParameter
.
setId
(
UUIDUtil
.
getUUID
());
parameterDao
.
save
(
inspectParameter
);
}
//填充地址(如果有)
report
.
setGitAddress
(
inspectParameter
.
getGitAddress
());
//填充适配技术
report
.
setTechnologies
(
allById
);
report
.
setDepTreeVo
(
depTreeVo
);
//填充依赖
report
.
setDependencyVo
(
dependencyVo
);
//数据转换
HashMap
<
String
,
Technology
>
map
=
new
HashMap
<>();
for
(
Technology
technology1
:
allById
)
{
map
.
put
(
technology1
.
getId
(),
technology1
);
map
.
put
(
technology1
.
getId
(),
technology1
);
}
HashMap
<
String
,
List
<
Warn
>>
warnMap
=
new
HashMap
<>();
for
(
Warn
warn
:
warns
)
{
if
(!
warnMap
.
containsKey
(
map
.
get
(
warn
.
getTechnologyId
()).
getTechnologyName
()))
{
if
(!
warnMap
.
containsKey
(
map
.
get
(
warn
.
getTechnologyId
()).
getTechnologyName
()))
{
ArrayList
<
Warn
>
warns1
=
new
ArrayList
<>();
warns1
.
add
(
warn
);
warnMap
.
put
(
map
.
get
(
warn
.
getTechnologyId
()).
getTechnologyName
(),
warns1
);
}
else
{
warnMap
.
put
(
map
.
get
(
warn
.
getTechnologyId
()).
getTechnologyName
(),
warns1
);
}
else
{
warnMap
.
get
(
map
.
get
(
warn
.
getTechnologyId
()).
getTechnologyName
()).
add
(
warn
);
}
}
ruleDao
.
saveAll
(
rules
);
report
.
setWarnDetails
(
warnMap
);
// TODO: 2020-02-28 生成报告,返回地址 report.setsourceaddress;
return
report
;
}
public
int
valiWarn
(
List
<
Rule
>
rules
,
Path
path
,
String
name
,
int
num
)
{
/**
* @param path 文件路径
* @param stringBuilder string缓冲区
* @param dependency 依赖
*/
private
void
setRule
(
Path
path
,
StringBuilder
stringBuilder
,
PomDependency
dependency
)
{
stringBuilder
.
append
(
dependency
.
getGroupId
()).
append
(
":"
).
append
(
dependency
.
getArtifactId
());
if
(
inspectParameter
.
getAdmin
()
==
1
)
{
Rule
rule
=
new
Rule
();
rule
.
setTechnologyId
(
techJavaSupport
.
getId
());
rule
.
setTarget
(
dependency
.
getGroupId
());
//?
rule
.
setSuffix
(
"*"
);
rule
.
setId
(
UUIDUtil
.
getUUID
());
Rule
rule1
=
new
Rule
();
rule1
.
setTechnologyId
(
techJavaSupport
.
getId
());
rule1
.
setTarget
(
dependency
.
getArtifactId
());
//?
rule1
.
setSuffix
(
"*"
);
rule1
.
setId
(
UUIDUtil
.
getUUID
());
if
(!
ruleMap
.
containsKey
(
dependency
.
getGroupId
()
+
":"
+
rule
.
getSuffix
()))
{
rules
.
add
(
rule
);
ruleMap
.
put
(
dependency
.
getGroupId
()
+
":"
+
rule
.
getSuffix
(),
rule
);
}
if
(!
ruleMap
.
containsKey
(
dependency
.
getArtifactId
()
+
":"
+
rule1
.
getSuffix
()))
{
rules
.
add
(
rule1
);
ruleMap
.
put
(
dependency
.
getArtifactId
()
+
":"
+
rule1
.
getSuffix
(),
rule1
);
}
dependency
.
setSupport
(
1
);
}
else
{
int
i
=
valiWarn
(
ruleList
,
path
,
stringBuilder
.
toString
(),
0
);
if
(
i
==
0
)
{
dependency
.
setSupport
(
2
);
}
}
stringBuilder
.
delete
(
0
,
stringBuilder
.
length
());
}
/**
* 将数据与规则进行匹配,得出是否支持
*
* @param rules 规则
* @param path 匹配的文件
* @param data 行数据
* @param num 行数
* @return 1:正常、2:不支持依赖
*/
public
int
valiWarn
(
List
<
Rule
>
rules
,
Path
path
,
String
data
,
int
num
)
{
//a为1代表当前依赖没有问题
int
a
=
1
;
for
(
Rule
rule
:
rules
)
{
if
(
name
.
isEmpty
()){
//规则目标字符串为null 或者 空时
if
(
rule
.
getTarget
()==
null
||
rule
.
getTarget
().
isEmpty
())
{
continue
;
}
int
ik
=
KmpUtil
.
kmpMatch
(
name
,
rule
.
getTarget
());
if
(
ik
>
0
)
{
//rule匹配上了
if
(
rule
.
getTechnologyId
().
equals
(
techNotCnSupport
.
getId
())){
//匹配字符串
int
index
=
KmpUtil
.
kmpMatch
(
data
,
rule
.
getTarget
());
//当index>0时代表data中有当前规则
if
(
index
>
0
)
{
//判断当前规则是否是不支持规则
if
(
rule
.
getTechnologyId
().
equals
(
techNotCnSupport
.
getId
()))
{
//如果是不支持规则则需要保存匹配信息
Warn
warn
=
new
Warn
();
warn
.
setFilePath
(
path
.
toAbsolutePath
().
toString
());
warn
.
setLineNum
(
num
);
...
...
@@ -432,12 +455,14 @@ public class Inspector {
warn
.
setRuleId
(
rule
.
getId
());
warn
.
setRule
(
rule
.
getTarget
());
warns
.
add
(
warn
);
a
=
0
;
//设置a=0代表当前依赖有问题
a
=
0
;
}
}
}
return
a
;
}
public
class
Counter
{
private
int
i
=
0
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论