/** * Returns stream of all non-group repositories reachable from the given repository. */ private static Stream<Repository> members(final Repository repository) { return repository.facet(GroupFacet.class).leafMembers().stream(); }
@VisibleForTesting Map<String, List<String>> getRepoToContainedGroupMap(List<Repository> repositories) { Map<String, List<String>> repoToContainedGroupMap = new HashMap<>(); for (Repository repository : repositories) { List<String> groupNames = new ArrayList<>(); groupNames.add(repository.getName()); groupNames.addAll(repositories.stream().filter(groupRepository -> { Optional<GroupFacet> groupFacet = groupRepository.optionalFacet(GroupFacet.class); return groupFacet.isPresent() && groupFacet.get().leafMembers().stream() .anyMatch(leafMember -> repository.getName().equals(leafMember.getName())); }).map(groupRepository -> groupRepository.getName()).collect(Collectors.toSet())); repoToContainedGroupMap.put(repository.getName(), groupNames); } return repoToContainedGroupMap; }
private List<Repository> getRepositories(final Repository repository) { checkNotNull(repository); if (groupType.equals(repository.getType())) { return repository.facet(GroupFacet.class).leafMembers(); } return ImmutableList.of(repository); }
@Override public List<Repository> leafMembers() { Set<Repository> leafMembers = new LinkedHashSet<>(); for (Repository repository : members()) { if (groupType.equals(repository.getType())) { leafMembers.addAll(repository.facet(GroupFacet.class).leafMembers()); } else { leafMembers.add(repository); } } return new ArrayList<>(leafMembers); }
@Override public void contribute(final BoolQueryBuilder query, final String type, final String value) { if (value == null) { return; } Repository repository = repositoryManager.get(value); if (repository != null) { Optional<GroupFacet> groupFacet = repository.optionalFacet(GroupFacet.class); if (groupFacet.isPresent()) { List<Repository> members = groupFacet.get().leafMembers(); query.must(QueryBuilders.termsQuery(type, members.stream().map(Repository::getName).toArray(String[]::new))); return; } } super.contribute(query, type, value); } }
@Override protected Content buildIndex(final StorageTx tx, final Path path) throws IOException { final List<Repository> members = facet(GroupFacet.class).leafMembers(); final Closer closer = Closer.create(); try {
@Override public void publishIndex() throws IOException { UnitOfWork.begin(getRepository().facet(StorageFacet.class).txSupplier()); try (DuplicateDetectionStrategy<Record> strategy = duplicateDetectionStrategyProvider.get()) { List<Repository> leafMembers = facet(GroupFacet.class).leafMembers(); ArrayList<String> withoutIndex = new ArrayList<>(); for (Iterator<Repository> ri = leafMembers.iterator(); ri.hasNext(); ) { Repository repository = ri.next(); if (repository.facet(MavenIndexFacet.class).lastPublished() == null) { withoutIndex.add(repository.getName()); ri.remove(); } } if (!withoutIndex.isEmpty()) { log.info("Following members of group {} have no index, will not participate in merged index: {}", getRepository().getName(), withoutIndex ); } MavenIndexPublisher.publishMergedIndex(getRepository(), leafMembers, strategy); } finally { UnitOfWork.end(); } } }
List<Repository> previewRepositories; if (repositories.size() == 1 && groupType.equals(repository.getType())) { previewRepositories = repository.facet(GroupFacet.class).leafMembers();