/**
  * Lists the blobs in the container. An inventory will be retrieved to obtain the list. Note that
  * this will take hours and the result may be inaccurate (Inventories are updated every 24 hours).
  *
  * @param container container name
  * @param listContainerOptions list options
  * @return the blob list
  * @see <a href="http://aws.amazon.com/glacier/faqs/#data-inventories" />
  */
 @Override
 public PageSet<? extends StorageMetadata> list(
     String container, ListContainerOptions listContainerOptions) {
   String jobId =
       sync.initiateJob(
           container, containerOptionsToInventoryRetrieval.apply(listContainerOptions));
   try {
     if (pollingStrategy.get().waitForSuccess(container, jobId)) {
       return archivesToBlobs.apply(sync.getInventoryRetrievalOutput(container, jobId));
     }
   } catch (InterruptedException e) {
     Throwables.propagate(e);
   }
   return null;
 }
  /**
   * Retrieves the blob This operation will take several hours.
   *
   * @param container container name
   * @param key blob name
   * @return The blob to retrieve, or null if the blob doesn't exist or the archive retrieval fails
   */
  @Override
  public Blob getBlob(String container, String key, GetOptions getOptions) {
    String jobId = sync.initiateJob(container, buildArchiveRetrievalRequest(key, getOptions));
    try {
      if (pollingStrategy.get().waitForSuccess(container, jobId)) {
        MutableBlobMetadata blobMetadata = new MutableBlobMetadataImpl();
        blobMetadata.setContainer(container);
        blobMetadata.setName(key);

        Blob blob = new BlobImpl(blobMetadata);
        blob.setPayload(sync.getJobOutput(container, jobId));
        return blob;
      }
    } catch (InterruptedException e) {
      Throwables.propagate(e);
    }
    return null;
  }