in dashboard/src/main/java/com/google/cloud/tools/opensource/dashboard/DashboardMain.java [353:419]
private static ArtifactResults generateArtifactReport(
Configuration configuration,
Path output,
Artifact artifact,
ArtifactInfo artifactInfo,
List<DependencyGraph> globalDependencies,
ImmutableMap<ClassPathEntry, ImmutableSet<LinkageProblem>> linkageProblemTable,
ClassPathResult classPathResult,
Bom bom)
throws IOException, TemplateException {
String coordinates = Artifacts.toCoordinates(artifact);
File outputFile = output.resolve(coordinates.replace(':', '_') + ".html").toFile();
try (Writer out = new OutputStreamWriter(
new FileOutputStream(outputFile), StandardCharsets.UTF_8)) {
// includes all versions
DependencyGraph graph = artifactInfo.getCompleteDependencies();
List<Update> convergenceIssues = graph.findUpdates();
// picks versions according to Maven rules
DependencyGraph transitiveDependencies = artifactInfo.getTransitiveDependencies();
Map<Artifact, Artifact> upperBoundFailures =
findUpperBoundsFailures(graph.getHighestVersionMap(), transitiveDependencies);
Map<Artifact, Artifact> globalUpperBoundFailures = findUpperBoundsFailures(
collectLatestVersions(globalDependencies), transitiveDependencies);
long totalLinkageErrorCount =
linkageProblemTable.values().stream()
.flatMap(problemToClasses -> problemToClasses.stream().map(LinkageProblem::getSymbol))
.distinct() // The dashboard counts linkage errors by the symbols
.count();
Template report = configuration.getTemplate("/templates/component.ftl");
Map<String, Object> templateData = new HashMap<>();
DefaultObjectWrapper wrapper =
new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_28).build();
TemplateHashModel staticModels = wrapper.getStaticModels();
templateData.put("linkageProblem", staticModels.get(LinkageProblem.class.getName()));
templateData.put("artifact", artifact);
templateData.put("updates", convergenceIssues);
templateData.put("upperBoundFailures", upperBoundFailures);
templateData.put("globalUpperBoundFailures", globalUpperBoundFailures);
templateData.put("lastUpdated", LocalDateTime.now());
templateData.put("dependencyGraph", graph);
templateData.put("linkageProblems", linkageProblemTable);
templateData.put("classPathResult", classPathResult);
templateData.put("totalLinkageErrorCount", totalLinkageErrorCount);
templateData.put("coordinates", bom.getCoordinates());
report.process(templateData, out);
ArtifactResults results = new ArtifactResults(artifact);
results.addResult(TEST_NAME_UPPER_BOUND, upperBoundFailures.size());
results.addResult(TEST_NAME_GLOBAL_UPPER_BOUND, globalUpperBoundFailures.size());
results.addResult(TEST_NAME_DEPENDENCY_CONVERGENCE, convergenceIssues.size());
results.addResult(TEST_NAME_LINKAGE_CHECK, (int) totalLinkageErrorCount);
return results;
}
}