提交 b10ecf0f authored 作者: wyl's avatar wyl

Merge branch 'master' of 192.168.1.249:ty_wyl/adaptation-master1 into wyl

# Conflicts: # src/main/java/com/zjty/adaptationmaster/utils/Inspector.java
......@@ -29,13 +29,4 @@ public class Test {
return ServerResponse.success();
}
@GetMapping("/testCollection")
public ServerResponse testCollection(){
Report report = new Report();
String[] array = {"aa","bb","cc"};
List<String> jarPath = Arrays.asList(array);
report.setJarPath(jarPath);
reportDao.save(report);
return ServerResponse.success();
}
}
package com.zjty.adaptationmaster.adaptor.entity;
import com.zjty.adaptationmaster.adaptor.entity.pomEntity.ProjectPom;
import com.zjty.adaptationmaster.adaptor.entity.pomEntity.SecondFloor.Dependency;
import com.zjty.adaptationmaster.utils.Assessor;
import com.zjty.adaptationmaster.utils.Inspector;
import lombok.AllArgsConstructor;
......@@ -17,15 +18,13 @@ import java.util.List;
@AllArgsConstructor
public class Report {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private Language language;//语言
private String framework;//架构
private DatabaseType databaseType;//数据库类型
private int fileNum;
private long lineNum;
private List<Dependency> dependencies;
@Transient
private ProjectPom projectPom;
......@@ -49,6 +48,6 @@ public class Report {
MYSQL,ORACLE,SQLSERVER,POSTGRE
}
public enum Language{
JAVA,PYTHON,CPP,JSP,ASP,ONLYVIEW
JAVA,PYTHON,CPP,JSP,ASP,ONLYVIEW,UNKNOW,JAVASCRIPT
}
}
package com.zjty.adaptationmaster.adaptor.entity;
import com.zjty.adaptationmaster.adaptor.entity.pomEntity.SecondFloor.Dependency;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.List;
/**
* 返回
* @author Mcj
* @date 2020-01-03 10:33
*/
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ReportEntity {
@Id
@GeneratedValue
private Integer id;
private Report.Language language;//语言
private String framework;//架构
private Report.DatabaseType databaseType;//数据库类型
private int fileNum;
private long lineNum;
private Report.Separate isSeparate;//前后端是否分离
private String compileFilePath;//项目编译文件,如果是maven项目,用maven编译,那么就是pom.xml
public Report.DependenceManagement dependenceManagement;//版本管理方式
private String packagePath;
public enum DependenceManagement{
MAVEN,GRADLE,ANT
}
public enum Separate{
WHOLE,SEPARATE
}
public enum DatabaseType{
MYSQL,ORACLE,SQLSERVER,POSTGRE
}
public enum Language{
JAVA,PYTHON,CPP,JSP,ASP,ONLYVIEW
}
}
......@@ -8,12 +8,10 @@ import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.List;
@Entity
@NoArgsConstructor
@Data
public class ProjectPom {
@Id
private int id;
//private Parent parent;
private String modelVersion;
private String groupId;
......@@ -38,7 +36,7 @@ public class ProjectPom {
//private List<Module> modules;//模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径
//private List<Repository> repositories;//发现依赖和扩展的远程仓库列表
//private List<PluginRepository> pluginRepositiries;//发现插件的远程仓库列表,这些插件用于构建和报表
//private List<Dependency> dependencies;
private List<Dependency> 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后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库
......
......@@ -62,5 +62,5 @@ public class Dependency {
//private List<Dependency> parentDependencies;//
private int pomId;
private int reportId;
}
package com.zjty.adaptationmaster.adaptor.repository;
import com.zjty.adaptationmaster.adaptor.entity.Dependency;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
......
package com.zjty.adaptationmaster.adaptor.repository;
import com.zjty.adaptationmaster.adaptor.entity.pomEntity.SecondFloor.Dependency;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PomDependencyDao extends JpaRepository<Dependency, Integer> {
}
package com.zjty.adaptationmaster.adaptor.repository;
import com.zjty.adaptationmaster.adaptor.entity.Report;
import com.zjty.adaptationmaster.adaptor.entity.ReportEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface ReportDao extends JpaRepository<Report, Integer>, JpaSpecificationExecutor {
public interface ReportDao extends JpaRepository<ReportEntity, Integer>, JpaSpecificationExecutor {
}
......@@ -2,6 +2,10 @@ package com.zjty.adaptationmaster.adaptor.service.Impl;
import com.zjty.adaptationmaster.adaptor.entity.Project;
import com.zjty.adaptationmaster.adaptor.entity.Report;
import com.zjty.adaptationmaster.adaptor.entity.ReportEntity;
import com.zjty.adaptationmaster.adaptor.entity.pomEntity.SecondFloor.Dependency;
import com.zjty.adaptationmaster.adaptor.repository.DependencyDao;
import com.zjty.adaptationmaster.adaptor.repository.PomDependencyDao;
import com.zjty.adaptationmaster.adaptor.repository.ProjectDao;
import com.zjty.adaptationmaster.adaptor.repository.ReportDao;
import com.zjty.adaptationmaster.adaptor.service.InspectService;
......@@ -14,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
......@@ -23,6 +28,9 @@ public class InspectServiceImpl implements InspectService {
@Autowired
private ReportDao reportDao;
@Autowired
private PomDependencyDao pomDependencyDao;
@Transactional
@Override
......@@ -38,12 +46,30 @@ public class InspectServiceImpl implements InspectService {
//suffixLanguageMapping.put("html",Report.Language.ONLYVIEW);
LoggerFactory.getLogger(getClass()).info("这里rulelist为空,需要设置");
Report report = new Inspector(project, suffixLanguageMapping, new ArrayList<>()).inspect();
ReportEntity reportEntity = new ReportEntity();
reportEntity.setCompileFilePath(report.getCompileFilePath());
reportEntity.setDatabaseType(report.getDatabaseType());
reportEntity.setDependenceManagement(report.getDependenceManagement());
reportEntity.setFileNum(report.getFileNum());
reportEntity.setFramework(report.getFramework());
reportEntity.setIsSeparate(report.getIsSeparate());
reportEntity.setLanguage(report.getLanguage());
reportEntity.setPackagePath(report.getPackagePath());
List<Dependency> dependencies = report.getDependencies();
if(report.getPackagePath() == null){
report.setPackagePath(project.getCodeUrl());
}
reportDao.save(report);
Project one = projectDao.getOne(project.getId());
ReportEntity reportEntitySave = reportDao.save(reportEntity);
for (Dependency dependency : dependencies) {
dependency.setReportId(reportEntitySave.getId());
}
one.setReport(report);
report.setId(reportEntitySave.getId());
pomDependencyDao.saveAll(dependencies);
return ServerResponse.success(report);
}else{
return ServerResponse.error("未上传源代码");
......
package com.zjty.adaptationmaster.utils;
import com.thoughtworks.xstream.XStream;
import com.zjty.adaptationmaster.adaptor.entity.Project;
import com.zjty.adaptationmaster.adaptor.entity.Report;
import com.zjty.adaptationmaster.adaptor.entity.Rule;
import com.zjty.adaptationmaster.adaptor.entity.pomEntity.ProjectPom;
import com.zjty.adaptationmaster.adaptor.entity.pomEntity.SecondFloor.Dependency;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -28,7 +26,7 @@ import java.util.*;
/**
* 项目体检,根据既定特征值,
* 扫描、统计、分析项目特征,
* 生成报告
* 生成报告VO
*
*/
public class Inspector {
......@@ -45,26 +43,49 @@ public class Inspector {
suffixLanguageMapping.put("cpp",Report.Language.CPP);
suffixLanguageMapping.put("py",Report.Language.PYTHON);
suffixLanguageMapping.put("jsp",Report.Language.JSP);
suffixLanguageMapping.put("html",Report.Language.ONLYVIEW);
suffixLanguageMapping.put("js",Report.Language.JAVASCRIPT);
List<Rule> ruleList = new ArrayList<>();
ruleList.add(new Rule("com.mysql.cj.jdbc.Driver","建议修改为postgre数据库驱动"));
ruleList.add(new Rule("<artifactId>mysql-connector-java</artifactId>","建议修改为postgre依赖声明"));
//com.mysql.cj.jdbc.Driver//com.mysql.jdbc.Driver
ruleList.add(new Rule("com.mysql.cj.jdbc.Driver","建议修改为postgresql数据库驱动"));
ruleList.add(new Rule("com.mysql.jdbc.Driver","建议修改为postgresql数据库驱动"));
//net.sourceforge.jtds.jdbc.Driver//sqlserver
ruleList.add(new Rule("net.sourceforge.jtds.jdbc.Driver","建议修改为postgresql数据库驱动"));
//COM.ibm.db2.jdbc.app.DB2Driver//com.ibm.db2.jcc.DB2Driver//COM.ibm.db2.jdbc.net.DB2Driver//com.ibm.db2.jcc.DB2Driver
ruleList.add(new Rule("DB2Driver","建议修改为postgresql数据库驱动"));
//oracle.jdbc.OracleDriver//oracle.jdbc.driver.OracleDriver
ruleList.add(new Rule("OracleDriver","建议修改为postgresql数据库驱动"));
ruleList.add(new Rule("mysql-connector-java","建议修改为postgresql依赖声明"));
ruleList.add(new Rule("com.microsoft.sqlserver","建议修改为postgresql依赖声明"));
ruleList.add(new Rule("com.oracle","建议修改为postgresql依赖声明"));
ruleList.add(new Rule("org.mariadb.jdbc","建议修改为postgresql依赖声明"));
ruleList.add(new Rule("com.sap.cloud.db.jdbc","建议修改为postgresql依赖声明"));
ruleList.add(new Rule("com.ibm.informix","建议修改为postgresql依赖声明"));
ruleList.add(new Rule("org.firebirdsql.jdbc","建议修改为postgresql依赖声明"));
ruleList.add(new Rule("org.hsqldb","建议修改为postgresql依赖声明"));
ruleList.add(new Rule("com.h2database","建议修改为postgresql依赖声明"));
ruleList.add(new Rule("org.apache.derby","建议修改为postgresql依赖声明"));
ruleList.add(new Rule("org.mongodb","建议修改为postgresql依赖声明"));
ruleList.add(new Rule("public native","这里用到了JNI"));
ruleList.add(new Rule("<packaging>jar</packaging>","建议修改打包方式为war包并排除掉springboot内置的tomcat"));
ruleList.add(new Rule("WebOffice",""));
ruleList.add(new Rule("pdfobject.min.js",""));
ruleList.add(new Rule("pdfobject.js",""));
ruleList.add(new Rule("PDFJS.getDocument",""));
ruleList.add(new Rule(".swf","flash插件"));
ruleList.add(new Rule("<packaging>jar</packaging>","建议修改打包方式为war包并排除掉springboot内置的tomcat,以部署到国产化中间件上"));
ruleList.add(new Rule("WebOffice","这里用到了weboffice文档展示编辑插件"));
ruleList.add(new Rule("pdfobject.min.js","这里用到了pdf文档展示插件"));
ruleList.add(new Rule("pdfobject.js","这里用到了pdf文档展示插件"));
ruleList.add(new Rule(".swf","这里用到了flash流媒体播放插件"));
String[] projectSrc = {"D:\\project\\testAccess\\SpringBoot-Labs-master"/*"D:\\project\\bservice","D:\\project\\debug","D:\\project\\glutton"*/};
String[] projectSrc = {"D:\\project\\testAccess\\nodetube-master"};
//多个子项目
//String[] projectSrc = {"D:\\project\\testAccess\\SpringBoot-Labs-master"/*"D:\\project\\bservice","D:\\project\\debug","D:\\project\\glutton"*/};
//String[] projectSrc = {"D:\\project\\testAccess\\Telegram-master"};
for(String s:projectSrc){
Project project = new Project();
project.setCodeUrl(s);
Inspector inspector = new Inspector(project,suffixLanguageMapping,ruleList);
Report inspect = inspector.inspect();
System.out.println("语言:"+inspect.getLanguage()+" 数据库:"+inspect.getDatabaseType()+" 依赖管理:"+inspect.getDependenceManagement());
System.out.println("语言:"+inspect.getLanguage()+" 数据库:"+inspect.getDatabaseType()+" 依赖管理:"+inspect.getDependenceManagement()+" 文件数量:"+inspect.getFileNum()+" 代码行数:"+inspect.getLineNum());
for(Warn warn:inspect.getWarnList()){
System.out.println("\t"+warn);
}
......@@ -97,7 +118,7 @@ public class Inspector {
* 先检测是否存在html文件,如果存在,假定为前端项目
* 然后检测其他条件,如果符合,将假定冲掉
*/
languageMatchMap.put("html",new Counter());
//languageMatchMap.put("html",new Counter());
this.configFileTypePathsMapping = new HashMap<>();
configFileTypePathsMapping.put("xml",new ArrayList<>());
configFileTypePathsMapping.put("properties",new ArrayList<>());
......@@ -196,14 +217,21 @@ public class Inspector {
public Report analysis(){
report.setFileNum(fileNum);
report.setLineNum(lineNum);
report.setLanguage(Report.Language.ONLYVIEW);
//report.setLanguage(Report.Language.ONLYVIEW);
Report.Language most = null;
int maxnum = 0;
for(Map.Entry<String,Counter> entry:languageMatchMap.entrySet()){
if(entry.getValue().getNumber()>0){
if(!entry.getKey().equals("html")){
report.setLanguage(suffixLanguageMapping.get(entry.getKey()));
}
if(entry.getValue().getNumber()>maxnum){
most = suffixLanguageMapping.get(entry.getKey());
maxnum = entry.getValue().getNumber();
}
// if(entry.getValue().getNumber()>0){
// if(!entry.getKey().equals("html")){
// report.setLanguage(suffixLanguageMapping.get(entry.getKey()));
// }
// }
}
report.setLanguage(most==null? Report.Language.UNKNOW:most);
/**
* 对于具体的配置文件对应的处理方法
* 增加要处理的文件类型需要在这里增加相应的处理方法
......@@ -224,7 +252,13 @@ public class Inspector {
if(path.getFileName().endsWith("pom.xml")){
report.setDependenceManagement(Report.DependenceManagement.MAVEN);
report.setCompileFilePath(path.toString());
report.setProjectPom(AnalysisPom.analysis(path));
//解析pom文件
ProjectPom analysis = AnalysisPom.analysis(path);
//设置依赖
// List<Dependency> dependencies = analysis.getDependencies();
// report.setDependencies(dependencies);
SAXReader reader = new SAXReader();
Document document = null;
try {
......@@ -257,20 +291,30 @@ public class Inspector {
e.printStackTrace();
}
String datasourceDriver = properties.getProperty("spring.datasource.driver-class-name");
String driverClassName = properties.getProperty("jdbc.driverClassName");
String active = properties.getProperty("spring.profiles.active");
//System.out.println(path.getParent());
File file = new File(path.getParent().toString() + "/application-" + active + ".properties");
if (file.exists()) {
Properties properties1 = new Properties();
try {
properties1.load(new FileInputStream(file));
String driver = properties1.getProperty("spring.datasource.driver-class-name");
if (driver != null) datasourceDriver = driver;
} catch (IOException e) {
e.printStackTrace();
if(active!=null){
System.out.println("生效的配置文件:" + active + path);
//System.out.println(path.getParent());
File file = new File(path.getParent().toString() + "/application-" + active + ".properties");
if (file.exists()) {
Properties properties1 = new Properties();
try {
properties1.load(new FileInputStream(file));
String driver = properties1.getProperty("spring.datasource.driver-class-name");
if (driver != null) {
datasourceDriver = driver;
}
String driverName = properties1.getProperty("jdbc.driverClassName");
if(driverClassName != null){
driverClassName = driverName;
}
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.println("没有找到active配置文件");
}
} else {
System.out.println("没有找到active配置文件");
}
if (datasourceDriver != null) {
if (datasourceDriver.contains(Report.DatabaseType.MYSQL.name().toLowerCase())) {
......@@ -283,6 +327,17 @@ public class Inspector {
report.setDatabaseType(Report.DatabaseType.SQLSERVER);
}
}
if (driverClassName != null) {
if (driverClassName.contains(Report.DatabaseType.MYSQL.name().toLowerCase())) {
report.setDatabaseType(Report.DatabaseType.MYSQL);
} else if (driverClassName.contains(Report.DatabaseType.POSTGRE.name().toLowerCase())) {
report.setDatabaseType(Report.DatabaseType.POSTGRE);
} else if (driverClassName.contains(Report.DatabaseType.ORACLE.name().toLowerCase())) {
report.setDatabaseType(Report.DatabaseType.ORACLE);
} else if (driverClassName.contains(Report.DatabaseType.SQLSERVER.name().toLowerCase())) {
report.setDatabaseType(Report.DatabaseType.SQLSERVER);
}
}
}
}
break;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论