package jdepend.webserver.service;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import jdepend.framework.exception.JDependException;
import jdepend.framework.file.AnalyzeData;
import jdepend.framework.file.JarFileReader;
import jdepend.framework.file.TargetFileInfo;
import jdepend.knowledge.database.AnalysisResultRepository;
import jdepend.metadata.JavaPackage;
import jdepend.model.Component;
import jdepend.model.result.AnalysisResult;
import jdepend.service.impl.JDependLocalServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class AnalyseService {
public Collection<JavaPackage> listPackages(AnalyzeData analyseData) throws JDependException {
JDependLocalServiceImpl service = new JDependLocalServiceImpl(null, null);
service.setAnalyzeData(analyseData);
Collection<JavaPackage> innerJavaPackages = new ArrayList<JavaPackage>();
for (JavaPackage javaPackage : service.getPackages()) {
if (javaPackage.isInner()) {
innerJavaPackages.add(javaPackage);
}
}
return innerJavaPackages;
}
public AnalysisResult analyze(String group, String command, AnalyzeData data, Component component)
throws JDependException {
JDependLocalServiceImpl service = new JDependLocalServiceImpl(group, command);
service.setAnalyzeData(data);
service.setComponent(component);
// 调用分析服务
AnalysisResult result = service.analyze();
result.getRunningContext().setPath(data.getPath());
// 保存分析结果
AnalysisResultRepository.getInstance().save(result);
return result;
}
public AnalyzeData createAnalyseData(Map<String, byte[]> fileDatas) {
AnalyzeData data = new AnalyzeData();
for (String fileName : fileDatas.keySet()) {
byte[] fileData = fileDatas.get(fileName);
JarFileReader reader = new JarFileReader(true);
try {
InputStream in = new ByteArrayInputStream(fileData);
List<TargetFileInfo> targetFileInfos = reader.readDatas(in);
for (TargetFileInfo targetFileInfo : targetFileInfos) {
data.addFileInfo(fileName, targetFileInfo);
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return data;
}
}