public VersionAnalysisResult analyseVersions(String querry, Collection<String> versions){ VersionComparator comparator = new VersionComparator(querry, versionParser); List<String> sortedVersions = new ArrayList<>(); List<SuffixedVersion> parsedVersions = versions.stream() .sorted(comparator) .distinct() .peek(v -> sortedVersions.add(v)) .map(versionParser::parse) .collect(Collectors.toList()); SuffixedVersion version = versionParser.parse(querry); Optional<String> bmv = findBiggestMatchingVersion(version, parsedVersions); return new VersionAnalysisResult(bmv, sortedVersions); }
private static Set<ProductArtifacts> getBuiltDifferent(Set<ProductArtifacts> a, VersionAnalysisResult v) { Optional<String> bmv = v.getBestMatchVersion(); if (bmv.isPresent()) { return Collections.emptySet(); } else { return a; } }
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); }
private BuiltReportModule toBuiltReportModule(GAV gav, VersionAnalysisResult vlr) { BuiltReportModule report = new BuiltReportModule(gav); report.setAvailableVersions(vlr.getAvailableVersions()); vlr.getBestMatchVersion().ifPresent(bmv -> report.setBuiltVersion(bmv)); return report; }
private static Set<ProductArtifacts> getBuilt(Set<ProductArtifacts> a, VersionAnalysisResult v) { return v.getBestMatchVersion().map(b -> AggregatedProductProvider .filterArtifacts(a, x -> b.equals(x.getGav().getVersion()))) .orElse(Collections.emptySet()); }