/**
   * Get the list of mirrors for the selected repository.
   *
   * @param repositoryId The repository to retrieve the assigned mirrors for.
   */
  @Override
  @GET
  @ResourceMethodSignature(
      pathParams = {@PathParam(AbstractRepositoryMirrorPlexusResource.REPOSITORY_ID_KEY)},
      output = MirrorResourceListResponse.class)
  public Object get(Context context, Request request, Response response, Variant variant)
      throws ResourceException {
    MirrorResourceListResponse dto = new MirrorResourceListResponse();

    // Hack to get the object created, so response contains the 'data'
    // element even if no mirrors defined
    dto.getData();

    try {
      Repository repository = getRepositoryRegistry().getRepository(getRepositoryId(request));

      for (Mirror mirror : getMirrors(repository)) {
        dto.addData(nexusToRestModel(mirror));
      }
    } catch (NoSuchRepositoryException e) {
      throw new ResourceException(
          Status.CLIENT_ERROR_BAD_REQUEST, "Invalid repository id " + getRepositoryId(request), e);
    }

    return dto;
  }
  /**
   * Update the list of mirrors for a repository.
   *
   * @param repositoryId The repository to update the assigned mirrors for.
   */
  @Override
  @POST
  @ResourceMethodSignature(
      pathParams = {@PathParam(AbstractRepositoryMirrorPlexusResource.REPOSITORY_ID_KEY)},
      input = MirrorResourceListRequest.class,
      output = MirrorResourceListResponse.class)
  public Object post(Context context, Request request, Response response, Object payload)
      throws ResourceException {
    MirrorResourceListResponse dto = new MirrorResourceListResponse();

    try {
      List<MirrorResource> resources =
          (List<MirrorResource>) ((MirrorResourceListRequest) payload).getData();

      List<Mirror> mirrors = restToNexusModel(resources);

      Repository repository = getRepositoryRegistry().getRepository(getRepositoryId(request));

      setMirrors(repository, mirrors);

      dto.setData(nexusToRestModel(mirrors));
    } catch (NoSuchRepositoryException e) {
      throw new ResourceException(
          Status.CLIENT_ERROR_BAD_REQUEST, "Invalid repository id " + getRepositoryId(request), e);
    }
    //        catch ( ConfigurationException e )
    //        {
    //            handleConfigurationException( e );
    //        }
    catch (IOException e) {
      throw new ResourceException(Status.SERVER_ERROR_INTERNAL, "Unable to create mirror", e);
    }

    return dto;
  }
  @Test
  public void testMetadata() throws Exception {
    createProxyRepository();

    File metadata =
        new File(
            AbstractNexusIntegrationTest.nexusWorkDir
                + "/storage/nexus-test-harness-repo/.meta/repository-metadata.xml");

    RepositoryMetadataXpp3Reader reader = new RepositoryMetadataXpp3Reader();
    RepositoryMetadataXpp3Writer writer = new RepositoryMetadataXpp3Writer();

    FileInputStream fis = new FileInputStream(metadata);
    FileWriter fw = new FileWriter(metadata);

    RepositoryMetadata rm = null;

    try {
      rm = reader.read(fis);
    } catch (Exception e) {
      rm = new RepositoryMetadata();
    } finally {
      fis.close();
    }

    rm.getMirrors().clear();

    RepositoryMirrorMetadata rmm = new RepositoryMirrorMetadata();
    rmm.setId("id1");
    rmm.setUrl("http://localhost:8081/somemirror/");

    rm.addMirror(rmm);

    rmm = new RepositoryMirrorMetadata();
    rmm.setId("id2");
    rmm.setUrl("http://localhost:8086/somemirror2/");

    rm.addMirror(rmm);

    rmm = new RepositoryMirrorMetadata();
    rmm.setId("id3");
    rmm.setUrl("http://localhost:8086/somemirror3/");

    rm.addMirror(rmm);

    try {
      writer.write(fw, rm);
    } finally {
      fw.close();
    }

    MirrorResourceListResponse response = mirrorUtils.getPredefinedMirrors(PROXY_REPO_ID);

    Assert.assertEquals(3, response.getData().size());
    Assert.assertEquals(((MirrorResource) response.getData().get(0)).getId(), "id1");
    Assert.assertEquals(
        ((MirrorResource) response.getData().get(0)).getUrl(), "http://localhost:8081/somemirror/");
    Assert.assertEquals(((MirrorResource) response.getData().get(1)).getId(), "id2");
    Assert.assertEquals(
        ((MirrorResource) response.getData().get(1)).getUrl(),
        "http://localhost:8086/somemirror2/");
    Assert.assertEquals(((MirrorResource) response.getData().get(2)).getId(), "id3");
    Assert.assertEquals(
        ((MirrorResource) response.getData().get(2)).getUrl(),
        "http://localhost:8086/somemirror3/");
  }