@Override protected void validateMemberRepository(final Repository repository) throws InvalidGroupingException { if (repository.getRepositoryKind().isFacetAvailable(P2CompositeGroupRepository.class)) { throw new InvalidGroupingException(String.format( "Repository '%s' cannot be grouped as P2 composite groups are not supported as members of P2 legacy groups", repository.getName() )); } super.validateMemberRepository(repository); }
private void checkForCyclicReference( final String id, List<String> memberRepositoryIds, String path ) throws InvalidGroupingException { if ( memberRepositoryIds.contains( id ) ) { throw new InvalidGroupingException( id, path ); } for ( String memberId : memberRepositoryIds ) { try { GroupRepository group = repoRegistry.getRepositoryWithFacet( memberId, GroupRepository.class ); checkForCyclicReference( id, group.getMemberRepositoryIds(), path + '/' + memberId ); } catch ( NoSuchRepositoryException e ) { // not a group repo, just ignore } } }
public void addMemberRepositoryId( String repositoryId ) throws NoSuchRepositoryException, InvalidGroupingException { // validate THEN modify // this will throw NoSuchRepository if needed Repository repo = repoRegistry.getRepository( repositoryId ); // check for cycles List<String> memberIds = new ArrayList<String>( getExternalConfiguration( false ).getMemberRepositoryIds() ); memberIds.add( repo.getId() ); checkForCyclicReference( getId(), memberIds, getId() ); // check for compatibility if ( !repo.getRepositoryContentClass().isCompatible( getRepositoryContentClass() ) ) { throw new InvalidGroupingException( getRepositoryContentClass(), repo.getRepositoryContentClass() ); } // if we are here, all is well getExternalConfiguration( true ).addMemberRepositoryId( repo.getId() ); }