@Override protected void doInit(final Configuration configuration) throws Exception { super.doInit(configuration); this.mavenFacet = facet(MavenFacet.class); }
@Override public List<Repository> allMembers() { return allMembers(new ArrayList<>(), getRepository()); }
@Override protected void doValidate(final Configuration configuration) throws Exception { facet(ConfigurationFacet.class).validateSection(configuration, CONFIG_KEY, Config.class); if (getStateGuard().is(STARTED)) { Config configToValidate = facet(ConfigurationFacet.class).readSection(configuration, CONFIG_KEY, Config.class); Set<ConstraintViolation<?>> violations = new HashSet<>(); maybeAdd(violations, validateGroupDoesNotContainItself(configuration.getRepositoryName(), configToValidate)); maybePropagate(violations, log); } }
@Override public void invalidateGroupCaches() { log.info("Invalidating group caches of {}", getRepository().getName()); cacheController.invalidateCache(); for (Repository repository : members()) { RepositoryCacheUtils.invalidateCaches(repository); } }
private boolean containsGroup(Repository root, String repositoryName, Set<Repository> checkedGroups) { return root.facet(GroupFacet.class).members().stream().anyMatch((repository) -> { return checkedGroups.add(repository) && (repository.getName().equals(repositoryName) || (groupType.equals(repository.getType()) && containsGroup(repository, repositoryName, checkedGroups))); }); }
private static List<Repository> allMembers(final List<Repository> members, final Repository root) { members.add(root); List<Repository> groupMembers = root.optionalFacet(GroupFacet.class).map(GroupFacet::members) .orElseGet(Collections::emptyList); for (Repository child : groupMembers) { allMembers(members, child); } return members; }
@Override protected void doConfigure(final Configuration configuration) throws Exception { config = facet(ConfigurationFacet.class).readSection(configuration, CONFIG_KEY, Config.class); cacheController = new CacheController(-1, null); log.debug("Config: {}", config); }
@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 @Guarded(by = STARTED) public List<Repository> members() { final Repository repository = getRepository(); List<Repository> members = new ArrayList<>(config.memberNames.size()); for (String name : config.memberNames) { Repository member = repositoryManager.get(name); if (member == null) { log.warn("Ignoring missing member repository: {}", name); } else if (!repository.getFormat().equals(member.getFormat())) { log.warn("Group {} includes an incompatible-format member: {} with format {}", repository.getName(), name, member.getFormat()); } else { members.add(member); } } return members; }
ConstraintViolation<?> validateGroupDoesNotContainItself(String repositoryName, Config config) { Set<Repository> checkedGroups = new HashSet<>(); for (String memberName : config.memberNames) { Repository repository = repositoryManager.get(memberName); if (repository.getName().equals(repositoryName) || (groupType.equals(repository.getType()) && containsGroup(repository, repositoryName, checkedGroups))) { return constraintViolationFactory.createViolation(P_ATTRIBUTES + "." + CONFIG_KEY + ".memberNames", "Group '" + repository.getName() + "' has a member repository '" + repositoryName + "' and cannot be added to this list."); } } return null; }
@Override protected void doInit(final Configuration configuration) throws Exception { super.doInit(configuration); buildCooperation(); }