/**
   * Use the async http client library to download artifacts and metadata.
   *
   * @param artifactDownloads The artifact downloads to perform, may be {@code null} or empty.
   * @param metadataDownloads The metadata downloads to perform, may be {@code null} or empty.
   */
  public void get(
      Collection<? extends ArtifactDownload> artifactDownloads,
      Collection<? extends MetadataDownload> metadataDownloads) {
    if (closed.get()) {
      throw new IllegalStateException("connector closed");
    }

    artifactDownloads = safe(artifactDownloads);
    metadataDownloads = safe(metadataDownloads);

    CountDownLatch latch = new CountDownLatch(artifactDownloads.size() + metadataDownloads.size());

    Collection<GetTask<?>> tasks = new ArrayList<GetTask<?>>();

    for (MetadataDownload download : metadataDownloads) {
      String resource = layout.getPath(download.getMetadata()).getPath();
      GetTask<?> task =
          new GetTask<MetadataTransfer>(
              resource,
              download.getFile(),
              download.getChecksumPolicy(),
              latch,
              download,
              METADATA,
              false);
      tasks.add(task);
      task.run();
    }

    for (ArtifactDownload download : artifactDownloads) {
      String resource = layout.getPath(download.getArtifact()).getPath();
      GetTask<?> task =
          new GetTask<ArtifactTransfer>(
              resource,
              download.isExistenceCheck() ? null : download.getFile(),
              download.getChecksumPolicy(),
              latch,
              download,
              ARTIFACT,
              true);
      tasks.add(task);
      task.run();
    }

    try {
      latch.await();

      for (GetTask<?> task : tasks) {
        task.flush();
      }
    } catch (InterruptedException e) {
      for (GetTask<?> task : tasks) {
        task.flush(e);
      }
    }
  }
 @Override
 public void get(
     Collection<? extends ArtifactDownload> artifactDownloads,
     Collection<? extends MetadataDownload> metadataDownloads) {
   if (artifactDownloads != null) {
     for (ArtifactDownload a : artifactDownloads) {
       a.setException(new ArtifactNotFoundException(a.getArtifact(), repository));
     }
   }
   if (metadataDownloads != null) {
     for (MetadataDownload m : metadataDownloads) {
       m.setException(new MetadataNotFoundException(m.getMetadata(), repository));
     }
   }
 }