/**
   * Retrieve a list of repository templates in nexus. Some default configurations for common
   * repository types.
   */
  @Override
  @GET
  @ResourceMethodSignature(output = RepositoryListResourceResponse.class)
  public Object get(Context context, Request request, Response response, Variant variant)
      throws ResourceException {
    RepositoryListResourceResponse result = new RepositoryListResourceResponse();

    RepositoryListResource repoRes;

    TemplateSet repoTemplates = getNexus().getRepositoryTemplates();

    for (Template tmp : repoTemplates) {
      RepositoryTemplate template = (RepositoryTemplate) tmp;

      repoRes = new RepositoryListResource();

      repoRes.setResourceURI(createChildReference(request, this, template.getId()).toString());

      repoRes.setId(template.getId());

      repoRes.setName(template.getDescription());

      if (ProxyRepository.class.isAssignableFrom(template.getMainFacet())) {
        repoRes.setRepoType("proxy");
      } else if (HostedRepository.class.isAssignableFrom(template.getMainFacet())) {
        repoRes.setRepoType("hosted");
      } else if (ShadowRepository.class.isAssignableFrom(template.getMainFacet())) {
        repoRes.setRepoType("virtual");
      } else if (GroupRepository.class.isAssignableFrom(template.getMainFacet())) {
        repoRes.setRepoType("group");
      } else {
        // huh?
        repoRes.setRepoType(template.getMainFacet().getName());
      }

      // policy
      // another hack
      if (template.getCoreConfiguration().getExternalConfiguration().getConfiguration(false)
          instanceof AbstractMavenRepositoryConfiguration) {
        repoRes.setRepoPolicy(
            ((AbstractMavenRepositoryConfiguration)
                    template
                        .getCoreConfiguration()
                        .getExternalConfiguration()
                        .getConfiguration(false))
                .getRepositoryPolicy()
                .toString());
      }

      // format
      repoRes.setFormat(template.getContentClass().getId());

      // userManaged
      repoRes.setUserManaged(template.getConfigurableRepository().isUserManaged());

      // exposed
      repoRes.setExposed(template.getConfigurableRepository().isExposed());

      // ==
      // below are not used for templates (and does not make any sense)
      // effectiveLocalStorageUrl
      // remoteUri

      result.addData(repoRes);
    }

    return result;
  }
  // clean
  protected RepositoryListResourceResponse listRepositories(
      Request request, boolean allReposes, boolean includeGroups) throws ResourceException {
    RepositoryListResourceResponse result = new RepositoryListResourceResponse();

    RepositoryListResource repoRes;

    Collection<Repository> repositories = getRepositoryRegistry().getRepositories();

    for (Repository repository : repositories) {
      // To save UI changes at the moment, not including groups in repo call
      if ((allReposes || repository.isUserManaged())
          && (includeGroups
              || !repository.getRepositoryKind().isFacetAvailable(GroupRepository.class))) {
        repoRes = new RepositoryListResource();

        repoRes.setResourceURI(createRepositoryReference(request, repository.getId()).toString());

        repoRes.setContentResourceURI(
            repositoryURLBuilder.getExposedRepositoryContentUrl(repository));

        repoRes.setRepoType(getRestRepoType(repository));

        repoRes.setProvider(NexusCompat.getRepositoryProviderHint(repository));

        repoRes.setProviderRole(NexusCompat.getRepositoryProviderRole(repository));

        repoRes.setFormat(repository.getRepositoryContentClass().getId());

        repoRes.setId(repository.getId());

        repoRes.setName(repository.getName());

        repoRes.setUserManaged(repository.isUserManaged());

        repoRes.setExposed(repository.isExposed());

        repoRes.setEffectiveLocalStorageUrl(repository.getLocalUrl());

        if (repository.getRepositoryKind().isFacetAvailable(MavenRepository.class)) {
          repoRes.setRepoPolicy(
              repository.adaptToFacet(MavenRepository.class).getRepositoryPolicy().toString());
        }

        if (repository.getRepositoryKind().isFacetAvailable(ProxyRepository.class)) {
          repoRes.setRemoteUri(repository.adaptToFacet(ProxyRepository.class).getRemoteUrl());
        }

        result.addData(repoRes);
      }
    }

    return result;
  }