@Override public GAVToplevelDependencies getToplevelDependenciesFromModules(SCMLocator scml) throws ScmException, PomAnalysisException { Optional<MavenProject> pom = scmConnector.getPom(scml.getScmUrl(), scml.getRevision(), scml.getPomPath()); GAV gav = pom.orElseThrow(() -> new ScmException("Failed to find specified pom: " + scml)).getGAV(); Map<GA, Set<GAV>> dependenciesOfModules = scmConnector.getDependenciesOfModules(scml.getScmUrl(), scml.getRevision(), scml.getPomPath(), scml.getRepositories()); Set<GAV> deps = dependenciesOfModules.values().stream() .flatMap(Set::stream) .filter(g -> !dependenciesOfModules.containsKey(g.getGA())) .collect(Collectors.toCollection(HashSet::new)); return new GAVToplevelDependencies(gav, deps); }
/** * Looks up built versions for the ProjectDetail. Sets internallyBuilt, availableVersions. */ private void getBuiltVersions(ProjectDetail project) { CompletableFuture<Set<ProductArtifacts>> artifacts = productProvider.getArtifacts(project.getGav().getGA()); futures.add(versionFinder.getVersionsFor(project.getGav(), artifacts).thenAccept(lr -> { project.setAvailableVersions(lr.getAvailableVersions()); project.setInternallyBuilt(lr.getBestMatchVersion()); })); } }
private List<LookupReport> createLookupReports(LookupGAVsRequest request, Map<GA, CompletableFuture<Set<ProductArtifacts>>> gaProductArtifactsMap) throws CommunicationException { List<CompletableFuture<Void>> futures = new ArrayList<>(); List<LookupReport> reports = new ArrayList<>(); String suffix = request.getVersionSuffix(); VersionParser versionParser; if (suffix == null || suffix.isEmpty()) { versionParser = new VersionParser(VersionParser.DEFAULT_SUFFIX); }else{ versionParser = new VersionParser(suffix); } request.getGavs().stream() .distinct() .forEach((gav) -> { LookupReport lr = new LookupReport(gav); reports.add(lr); CompletableFuture<Set<ProductArtifacts>> artifacts = gaProductArtifactsMap.get(gav.getGA()); futures.add(analyzeVersions(versionParser, gav.getVersion(), artifacts).thenAccept(v -> { lr.setAvailableVersions(v.getAvailableVersions()); lr.setBestMatchVersion(v.getBestMatchVersion().orElse(null)); })); futures.add(artifacts.thenAccept(pas -> { lr.setWhitelisted(toWhitelisted(pas)); })); lr.setBlacklisted(blackArtifactService.isArtifactPresent(gav)); }); joinFutures(futures); return reports; }
private CompletableFuture<Void> fillArtifactReport(ArtifactReport report, Set<Product> products) { GAV gav = report.getGav(); CompletableFuture<Set<ProductArtifacts>> artifacts = productProvider.getArtifacts(gav .getGA()); artifacts = filterProductArtifacts(products, artifacts); report.setBlacklisted(blackArtifactService.isArtifactPresent(gav)); VersionParser parser = new VersionParser(VersionParser.DEFAULT_SUFFIX); CompletableFuture<Void> fillVersions = analyzeVersions(parser, gav.getVersion(), artifacts) .thenAccept(v -> { report.setAvailableVersions(v.getAvailableVersions()); report.setBestMatchVersion(v.getBestMatchVersion()); }); CompletableFuture<Void> fillWhitelist = artifacts.thenAccept(pas -> { List<Product> whiteProducts = pas.stream() .map(pa -> pa.getProduct()) .filter(p -> !UNKNOWN.equals(p)) .collect(Collectors.toList()); report.setWhitelisted(whiteProducts); }); return CompletableFuture.allOf(fillVersions, fillWhitelist); }
@Override public Set<BuiltReportModule> getBuiltReport(SCMLocator scml) throws ScmException, PomAnalysisException, CommunicationException { VersionParser versionParser = new VersionParser(VersionParser.DEFAULT_SUFFIX); Map<GA, Set<GAV>> dependenciesOfModules = scmConnector.getDependenciesOfModules( scml.getScmUrl(), scml.getRevision(), scml.getPomPath(), scml.getRepositories()); Set<CompletableFuture<BuiltReportModule>> builtSet = new HashSet<>(); for (Map.Entry<GA, Set<GAV>> e : dependenciesOfModules.entrySet()) { for (GAV gav : e.getValue()) { CompletableFuture<Set<ProductArtifacts>> artifacts = productProvider.getArtifacts(gav.getGA()); artifacts = filterBuiltArtifacts(artifacts); builtSet.add(analyzeVersions(versionParser, gav.getVersion(), artifacts) .thenApply(v -> toBuiltReportModule(gav, v))); } } return joinFutures(builtSet); }
@Override public Map<GA, Set<GAV>> getDependenciesOfModules(File scmDir, String pomPath, List<String> repositories) throws PomAnalysisException { try (GalleyWrapper wrapper = new GalleyWrapper(carto.getGalley(), scmDir, disConf, processor)) { wrapper.addDefaultLocations(config); wrapper.addLocations(repositories); wrapper.addLocationsFromPoms(pomReader); GalleyWrapper.Artifact rootPom = wrapper.getPom(pomPath); Set<GalleyWrapper.Artifact> allModules = wrapper.getAllModules(rootPom); Map<GA, Set<GAV>> ret = new HashMap<>(); for (GalleyWrapper.Artifact a : allModules) { try { Set<GAV> dependencies = wrapper.getDependencies(a); ret.put(a.getGAV().getGA(), dependencies); } catch (PomAnalysisException ex) { log.warn("Failed to get dependencies for module " + a, ex); } } return ret; } catch (IOException | PomAnalysisException ex) { throw new PomAnalysisException("Failted to get dependencies of modules for " + new File(scmDir, pomPath), ex); } }
useUnknownProduct, products, productProvider.getArtifacts(gav.getGA())); CompletableFuture<VersionAnalysisResult> versions = analyzeVersions( versionParser, gav.getVersion(), artifacts);