}
protected RepositoryGroupResource buildGroupResource(Request request, GroupRepository group)
throws ResourceException
{
RepositoryGroupResource resource = new RepositoryGroupResource();
resource.setContentResourceURI(getRepositoryURLBuilder().getExposedRepositoryContentUrl(group));
resource.setId(group.getId());
resource.setName(group.getName());
resource.setProvider(NexusCompat.getRepositoryProviderHint(group));
resource.setRepoType(RepositoryBaseResourceConverter.REPO_TYPE_GROUP);
resource.setFormat(group.getRepositoryContentClass().getId());
resource.setExposed(group.isExposed());
// just to trigger list creation, and not stay null coz of XStream serialization
resource.getRepositories();
for (String repoId : group.getMemberRepositoryIds()) {
RepositoryGroupMemberRepository member = new RepositoryGroupMemberRepository();
member.setId(repoId);
try {
// NOTE: we must hit the registry each time and NOT call groupRepo.getMemberRepositories, that doesn't block access
member.setName(getRepositoryRegistry().getRepository(repoId).getName());
}
catch (NoSuchRepositoryAccessException e) {
// access denied 403
getLogger().debug("Blocking access to repository group, based on permissions.");
throw new ResourceException(Status.CLIENT_ERROR_FORBIDDEN);
}
catch (NoSuchRepositoryException e) {
getLogger().debug("Found missing repo id: " + repoId + " contained in group");
}
member.setResourceURI(createChildReference(request, this, repoId).toString());
resource.addRepository(member);
}
return resource;
}