Repository: jclouds-labs-aws
Updated Branches:
  refs/heads/master fd324fbfa -> 95d9b002e


JCLOUDS-457: Small fixes and documentation

Now the BlobStore and the strategy implementations are annotated with 
@Singleton.

Added a small documentation to the blobstore classes.


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/commit/95d9b002
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/tree/95d9b002
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/diff/95d9b002

Branch: refs/heads/master
Commit: 95d9b002ec1cfb61b78f597e47aae324bde29ffa
Parents: fd324fb
Author: Roman Coedo <[email protected]>
Authored: Mon Jul 28 09:49:25 2014 +0200
Committer: Andrew Gaul <[email protected]>
Committed: Mon Jul 28 01:17:42 2014 -0700

----------------------------------------------------------------------
 .../glacier/blobstore/GlacierBlobStore.java     | 124 ++++++++++++++++++-
 .../config/GlacierBlobStoreContextModule.java   |   5 +-
 ...hiveMetadataCollectionToStorageMetadata.java |   3 +
 .../ArchiveMetadataToBlobMetadata.java          |   3 +
 ...erOptionsToInventoryRetrievalJobRequest.java |   3 +
 ...ginatedVaultCollectionToStorageMetadata.java |   3 +
 .../VaultMetadataToStorageMetadata.java         |   3 +
 .../blobstore/strategy/ClearVaultStrategy.java  |  60 ---------
 .../strategy/MultipartUploadStrategy.java       |   3 +
 .../blobstore/strategy/PayloadSlice.java        |   3 +
 .../blobstore/strategy/PollingStrategy.java     |   3 +
 .../blobstore/strategy/SlicingStrategy.java     |   3 +
 .../strategy/internal/BasePollingStrategy.java  |   6 +
 .../strategy/internal/BaseSlicingStrategy.java  |   7 ++
 .../strategy/internal/ClearVaultStrategy.java   |  65 ++++++++++
 .../SequentialMultipartUploadStrategy.java      |   6 +
 16 files changed, 235 insertions(+), 65 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java
index f2f6226..eba0732 100644
--- a/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java
+++ b/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierBlobStore.java
@@ -39,7 +39,6 @@ import org.jclouds.blobstore.options.ListContainerOptions;
 import org.jclouds.blobstore.options.PutOptions;
 import org.jclouds.blobstore.util.BlobUtils;
 import org.jclouds.collect.Memoized;
-import org.jclouds.crypto.Crypto;
 import org.jclouds.domain.Location;
 import org.jclouds.glacier.GlacierClient;
 import 
org.jclouds.glacier.blobstore.functions.ArchiveMetadataCollectionToStorageMetadata;
@@ -55,8 +54,10 @@ import com.google.common.base.Predicate;
 import com.google.common.base.Supplier;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
+import com.google.inject.Singleton;
 import com.google.inject.name.Named;
 
+@Singleton
 public class GlacierBlobStore extends BaseBlobStore {
    public static final long DEFAULT_INVENTORY_UPDATE_TIME = 
TimeUnit.HOURS.toMillis(24);
 
@@ -65,7 +66,6 @@ public class GlacierBlobStore extends BaseBlobStore {
    private final long inventoryUpdateTime = DEFAULT_INVENTORY_UPDATE_TIME;
 
    private final GlacierClient sync;
-   private final Crypto crypto;
    private final Provider<MultipartUploadStrategy> multipartUploadStrategy;
    private final Provider<PollingStrategy> pollingStrategy;
    private final PaginatedVaultCollectionToStorageMetadata vaultsToContainers;
@@ -74,7 +74,7 @@ public class GlacierBlobStore extends BaseBlobStore {
 
    @Inject
    GlacierBlobStore(BlobStoreContext context, BlobUtils blobUtils, 
Supplier<Location> defaultLocation,
-                    @Memoized Supplier<Set<? extends Location>> locations, 
GlacierClient sync, Crypto crypto,
+                    @Memoized Supplier<Set<? extends Location>> locations, 
GlacierClient sync,
                     Provider<MultipartUploadStrategy> multipartUploadStrategy,
                     Provider<PollingStrategy> pollingStrategy,
                     PaginatedVaultCollectionToStorageMetadata 
vaultsToContainers,
@@ -87,9 +87,15 @@ public class GlacierBlobStore extends BaseBlobStore {
       this.vaultsToContainers = checkNotNull(vaultsToContainers, 
"vaultsToContainers");
       this.multipartUploadStrategy = checkNotNull(multipartUploadStrategy, 
"multipartUploadStrategy");
       this.sync = checkNotNull(sync, "sync");
-      this.crypto = checkNotNull(crypto, "crypto");
    }
 
+   /**
+    * Delete the container and all its blobs.
+    * This may be a VERY long duration method.
+    *
+    * @param container
+    *          container name
+    */
    @Override
    public void deleteContainer(String container) {
       // attempt to delete possibly-empty vault to avoid inventory retrieval
@@ -108,32 +114,82 @@ public class GlacierBlobStore extends BaseBlobStore {
        }, inventoryUpdateTime).apply(container), "%s still exists after 
deleting!", container);
    }
 
+   /**
+    * Delete the container if empty.
+    * This method is idempotent.
+    *
+    * @param container
+    *          container name
+    * @return false if the container still exists, true otherwise
+    */
    @Override
    protected boolean deleteAndVerifyContainerGone(String container) {
       return sync.deleteVault(container);
    }
 
+   /**
+    * Lists the containers
+    *
+    * @return the container list
+    */
    @Override
    public PageSet<? extends StorageMetadata> list() {
       return vaultsToContainers.apply(sync.listVaults());
    }
 
+   /**
+    * This implementation invokes {@link GlacierClient#describeVault(String)}
+    *
+    * @param container
+    *          container name
+    * @return true if the vault exists, false otherwise
+    */
    @Override
    public boolean containerExists(String container) {
       return sync.describeVault(container) != null;
    }
 
+   /**
+    * Creates a container
+    *
+    * @param location
+    *          currently ignored
+    * @param container
+    *          container name
+    * @return true if the container was created, false otherwise
+    */
    @Override
    public boolean createContainerInLocation(@Nullable Location location, 
String container) {
       return sync.createVault(container) != null;
    }
 
+   /**
+    * Creates a container
+    *
+    * @param location
+    *          currently ignored
+    * @param container
+    *          container name
+    * @param options
+    *          currently ignored
+    * @return true if the container was created, false otherwise
+    */
    @Override
    public boolean createContainerInLocation(@Nullable Location location, 
String container,
                                             CreateContainerOptions options) {
       return createContainerInLocation(location, container);
    }
 
+   /**
+    * Lists the blobs in the container
+    * This is a long duration method. The result may be inaccurate since it 
depends on the Glacier Inventory status.
+    *
+    * @param container
+    *          container name
+    * @param listContainerOptions
+    *          list options
+    * @return the blob list
+    */
    @Override
    public PageSet<? extends StorageMetadata> list(String container, 
ListContainerOptions listContainerOptions) {
       String jobId = sync.initiateJob(container, 
containerOptionsToInventoryRetrieval.apply(listContainerOptions));
@@ -147,16 +203,46 @@ public class GlacierBlobStore extends BaseBlobStore {
       }
    }
 
+   /**
+    * This implementation invokes {@link GlacierBlobStore#blobMetadata}
+    * This is a long duration method. The result may be inaccurate since it 
depends on the Glacier Inventory status.
+    *
+    * @param container
+    *          container name
+    * @param key
+    *          blob key
+    * @return true if the blob exists, false otherwise
+    */
    @Override
    public boolean blobExists(String container, String key) {
       return this.blobMetadata(container, key) != null;
    }
 
+   /**
+    * This implementation invokes {@link GlacierClient#uploadArchive}
+    *
+    * @param container
+    *          container name
+    * @param blob
+    *          blob to upload
+    * @return the blob name
+    */
    @Override
    public String putBlob(String container, Blob blob) {
       return sync.uploadArchive(container, blob.getPayload());
    }
 
+   /**
+    * Puts the blob in the container.
+    *
+    * @param container
+    *          container name
+    * @param blob
+    *          blob to upload
+    * @param options
+    *          upload options. If multipart is set, multiple rpcs will be 
issued.
+    * @return the blob name
+    */
    @Override
    public String putBlob(String container, Blob blob, PutOptions options) {
       if (options.isMultipart()) {
@@ -165,6 +251,16 @@ public class GlacierBlobStore extends BaseBlobStore {
       return putBlob(container, blob);
    }
 
+   /**
+    * Retrieves the blob metadata.
+    * This is a long duration method. The result may be inaccurate since it 
depends on the Glacier Inventory status.
+    *
+    * @param container
+    *          container name
+    * @param key
+    *          blob name
+    * @return null if the blob doesn't exist, the blob metadata otherwise
+    */
    @Override
    public BlobMetadata blobMetadata(String container, String key) {
       PageSet<? extends StorageMetadata> blobs = this.list(container, null);
@@ -187,6 +283,18 @@ public class GlacierBlobStore extends BaseBlobStore {
       return requestBuilder.build();
    }
 
+   /**
+    * Retrieves the blob
+    * This is a long duration method.
+    *
+    * @param container
+    *          container name
+    * @param key
+    *          blob name
+    * @param getOptions
+    *          getOptions
+    * @return null if the blob doesn't exist or the archive retrieval fails, 
the blob otherwise
+    */
    @Override
    public Blob getBlob(String container, String key, GetOptions getOptions) {
       String jobId = sync.initiateJob(container, 
buildArchiveRetrievalRequest(key, getOptions));
@@ -206,6 +314,14 @@ public class GlacierBlobStore extends BaseBlobStore {
       }
    }
 
+   /**
+    * This implementation invokes {@link GlacierClient#deleteArchive(String, 
String)}
+    *
+    * @param container
+    *          container name
+    * @param key
+    *          blob name
+    */
    @Override
    public void removeBlob(String container, String key) {
       sync.deleteArchive(container, key);

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/config/GlacierBlobStoreContextModule.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/config/GlacierBlobStoreContextModule.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/config/GlacierBlobStoreContextModule.java
index e45c809..6492640 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/config/GlacierBlobStoreContextModule.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/config/GlacierBlobStoreContextModule.java
@@ -22,7 +22,7 @@ import org.jclouds.blobstore.attr.ConsistencyModel;
 import org.jclouds.blobstore.strategy.ClearListStrategy;
 import org.jclouds.glacier.blobstore.GlacierAsyncBlobStore;
 import org.jclouds.glacier.blobstore.GlacierBlobStore;
-import org.jclouds.glacier.blobstore.strategy.ClearVaultStrategy;
+import org.jclouds.glacier.blobstore.strategy.internal.ClearVaultStrategy;
 import org.jclouds.glacier.blobstore.strategy.MultipartUploadStrategy;
 import org.jclouds.glacier.blobstore.strategy.PollingStrategy;
 import org.jclouds.glacier.blobstore.strategy.SlicingStrategy;
@@ -32,6 +32,9 @@ import 
org.jclouds.glacier.blobstore.strategy.internal.SequentialMultipartUpload
 
 import com.google.inject.AbstractModule;
 
+/**
+ * Configures the context. Requires {@link GlacierAsyncBlobStore} bound.
+ */
 public class GlacierBlobStoreContextModule extends AbstractModule {
    @Override
    protected void configure() {

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataCollectionToStorageMetadata.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataCollectionToStorageMetadata.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataCollectionToStorageMetadata.java
index 2df2016..06d6884 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataCollectionToStorageMetadata.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataCollectionToStorageMetadata.java
@@ -24,6 +24,9 @@ import org.jclouds.glacier.domain.ArchiveMetadataCollection;
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 
+/**
+ * Converts ArchiveMetadataCollection into PageSet<StorageMetadata>
+ */
 public class ArchiveMetadataCollectionToStorageMetadata implements 
Function<ArchiveMetadataCollection,
       PageSet<? extends StorageMetadata>>  {
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataToBlobMetadata.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataToBlobMetadata.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataToBlobMetadata.java
index 255252a..f8b9a58 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataToBlobMetadata.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ArchiveMetadataToBlobMetadata.java
@@ -25,6 +25,9 @@ import org.jclouds.io.payloads.BaseMutableContentMetadata;
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableMap;
 
+/**
+ * Converts ArchiveMetadata into BlobMetadata
+ */
 public class ArchiveMetadataToBlobMetadata implements 
Function<ArchiveMetadata, MutableBlobMetadata> {
    @Override
    public MutableBlobMetadata apply(ArchiveMetadata from) {

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ListContainerOptionsToInventoryRetrievalJobRequest.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ListContainerOptionsToInventoryRetrievalJobRequest.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ListContainerOptionsToInventoryRetrievalJobRequest.java
index 4bf5297..3c0ad4b 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ListContainerOptionsToInventoryRetrievalJobRequest.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/ListContainerOptionsToInventoryRetrievalJobRequest.java
@@ -21,6 +21,9 @@ import 
org.jclouds.glacier.domain.InventoryRetrievalJobRequest;
 
 import com.google.common.base.Function;
 
+/**
+ * Converts ListContainerOptions into InventoryRetrievalJobRequest
+ */
 public class ListContainerOptionsToInventoryRetrievalJobRequest implements 
Function<ListContainerOptions,
       InventoryRetrievalJobRequest>  {
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/PaginatedVaultCollectionToStorageMetadata.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/PaginatedVaultCollectionToStorageMetadata.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/PaginatedVaultCollectionToStorageMetadata.java
index 67e4d9c..51aba1b 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/PaginatedVaultCollectionToStorageMetadata.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/PaginatedVaultCollectionToStorageMetadata.java
@@ -24,6 +24,9 @@ import org.jclouds.glacier.domain.PaginatedVaultCollection;
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
 
+/**
+ * Converts PaginatedVaultCollection into PageSet<StorageMetadata>
+ */
 public class PaginatedVaultCollectionToStorageMetadata implements 
Function<PaginatedVaultCollection,
       PageSet<? extends StorageMetadata>>  {
    @Override

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/VaultMetadataToStorageMetadata.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/VaultMetadataToStorageMetadata.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/VaultMetadataToStorageMetadata.java
index 54e8ba3..873747d 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/VaultMetadataToStorageMetadata.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/functions/VaultMetadataToStorageMetadata.java
@@ -24,6 +24,9 @@ import org.jclouds.glacier.domain.VaultMetadata;
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableMap;
 
+/**
+ * Converts VaultMetadata into StorageMetadata
+ */
 public class VaultMetadataToStorageMetadata implements Function<VaultMetadata, 
StorageMetadata> {
    @Override
    public StorageMetadata apply(VaultMetadata vault) {

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/ClearVaultStrategy.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/ClearVaultStrategy.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/ClearVaultStrategy.java
deleted file mode 100644
index 1758460..0000000
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/ClearVaultStrategy.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.glacier.blobstore.strategy;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.jclouds.blobstore.options.ListContainerOptions;
-import org.jclouds.blobstore.strategy.ClearListStrategy;
-import org.jclouds.glacier.GlacierClient;
-import org.jclouds.glacier.domain.ArchiveMetadata;
-import org.jclouds.glacier.domain.ArchiveMetadataCollection;
-import org.jclouds.glacier.domain.InventoryRetrievalJobRequest;
-import org.jclouds.rest.ResourceNotFoundException;
-
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-
-@Singleton
-public class ClearVaultStrategy implements ClearListStrategy {
-   private final GlacierClient sync;
-   private final PollingStrategy pollingStrategy;
-
-   @Inject
-   public ClearVaultStrategy(GlacierClient sync, PollingStrategy 
pollingStrategy) {
-      this.pollingStrategy = checkNotNull(pollingStrategy, "pollingStrategy");
-      this.sync = checkNotNull(sync, "sync");
-   }
-
-   @Override
-   public void execute(String container, ListContainerOptions 
listContainerOptions) {
-      String jobId = sync.initiateJob(container, 
InventoryRetrievalJobRequest.builder().build());
-      try {
-         if (pollingStrategy.waitForSuccess(container, jobId)) {
-            ArchiveMetadataCollection archives = 
sync.getInventoryRetrievalOutput(container, jobId);
-            for (ArchiveMetadata archive : archives) {
-               try {
-                  sync.deleteArchive(container, archive.getArchiveId());
-               } catch (ResourceNotFoundException ignored) {
-               }
-            }
-         }
-      } catch (InterruptedException e) {
-         throw new RuntimeException(e);
-      }
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/MultipartUploadStrategy.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/MultipartUploadStrategy.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/MultipartUploadStrategy.java
index 3afb970..fd6b723 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/MultipartUploadStrategy.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/MultipartUploadStrategy.java
@@ -18,6 +18,9 @@ package org.jclouds.glacier.blobstore.strategy;
 
 import org.jclouds.blobstore.domain.Blob;
 
+/**
+ * Strategy for Multipart Uploads
+ */
 public interface MultipartUploadStrategy {
    String execute(String container, Blob blob);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PayloadSlice.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PayloadSlice.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PayloadSlice.java
index ca68da3..51fc029 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PayloadSlice.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PayloadSlice.java
@@ -22,6 +22,9 @@ import static 
com.google.common.base.Preconditions.checkNotNull;
 import org.jclouds.glacier.util.ContentRange;
 import org.jclouds.io.Payload;
 
+/**
+ * Represents an ordered part of data from a payload
+ */
 public class PayloadSlice {
    private final Payload payload;
    private final ContentRange range;

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PollingStrategy.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PollingStrategy.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PollingStrategy.java
index b208809..f5be082 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PollingStrategy.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/PollingStrategy.java
@@ -16,6 +16,9 @@
  */
 package org.jclouds.glacier.blobstore.strategy;
 
+/**
+ * Strategy for polling jobs
+ */
 public interface PollingStrategy {
    boolean waitForSuccess(String vault, String job) throws 
InterruptedException;
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/SlicingStrategy.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/SlicingStrategy.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/SlicingStrategy.java
index 03dc96c..ab986e2 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/SlicingStrategy.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/SlicingStrategy.java
@@ -18,6 +18,9 @@ package org.jclouds.glacier.blobstore.strategy;
 
 import org.jclouds.io.Payload;
 
+/**
+ * Strategy for payload slicing
+ */
 public interface SlicingStrategy {
    public static final int MAX_LIST_PARTS_RETURNED = 1000;
    public static final int MAX_LIST_MPU_RETURNED = 1000;

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BasePollingStrategy.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BasePollingStrategy.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BasePollingStrategy.java
index b9c90df..d4997ec 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BasePollingStrategy.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BasePollingStrategy.java
@@ -26,7 +26,13 @@ import org.jclouds.glacier.domain.JobMetadata;
 import org.jclouds.glacier.domain.JobStatus;
 
 import com.google.inject.Inject;
+import com.google.inject.Singleton;
 
+/**
+ * Base implementation of PollingStrategy.
+ * This implementation waits a fixed amount of time before start polling.
+ */
+@Singleton
 public class BasePollingStrategy implements PollingStrategy {
    public static final long DEFAULT_INITIAL_WAIT = TimeUnit.HOURS.toMillis(3);
    public static final long DEFAULT_TIME_BETWEEN_POLLS = 
TimeUnit.MINUTES.toMillis(15);

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BaseSlicingStrategy.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BaseSlicingStrategy.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BaseSlicingStrategy.java
index d5173a4..ebb42b5 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BaseSlicingStrategy.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/BaseSlicingStrategy.java
@@ -19,6 +19,8 @@ package org.jclouds.glacier.blobstore.strategy.internal;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static java.lang.Math.sqrt;
 
+import javax.inject.Singleton;
+
 import org.jclouds.glacier.blobstore.strategy.PayloadSlice;
 import org.jclouds.glacier.blobstore.strategy.SlicingStrategy;
 import org.jclouds.glacier.util.ContentRange;
@@ -28,6 +30,11 @@ import org.jclouds.io.PayloadSlicer;
 import com.google.inject.Inject;
 import com.google.inject.name.Named;
 
+/**
+ * Base implementation of SlicingStrategy.
+ * This implementation slice a payload based on the (part size)/(number of 
parts) ratio. This ratio may be overriden.
+ */
+@Singleton
 public class BaseSlicingStrategy implements SlicingStrategy {
 
    public static final double DEFAULT_RATIO = 0.32; // (part size/number of 
parts) ratio

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/ClearVaultStrategy.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/ClearVaultStrategy.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/ClearVaultStrategy.java
new file mode 100644
index 0000000..68dfe01
--- /dev/null
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/ClearVaultStrategy.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.glacier.blobstore.strategy.internal;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.blobstore.options.ListContainerOptions;
+import org.jclouds.blobstore.strategy.ClearListStrategy;
+import org.jclouds.glacier.GlacierClient;
+import org.jclouds.glacier.blobstore.strategy.PollingStrategy;
+import org.jclouds.glacier.domain.ArchiveMetadata;
+import org.jclouds.glacier.domain.ArchiveMetadataCollection;
+import org.jclouds.glacier.domain.InventoryRetrievalJobRequest;
+import org.jclouds.rest.ResourceNotFoundException;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+/**
+ * Implementation of ClearListStrategy.
+ * This is a long duration operation.
+ */
+@Singleton
+public class ClearVaultStrategy implements ClearListStrategy {
+   private final GlacierClient sync;
+   private final PollingStrategy pollingStrategy;
+
+   @Inject
+   public ClearVaultStrategy(GlacierClient sync, PollingStrategy 
pollingStrategy) {
+      this.pollingStrategy = checkNotNull(pollingStrategy, "pollingStrategy");
+      this.sync = checkNotNull(sync, "sync");
+   }
+
+   @Override
+   public void execute(String container, ListContainerOptions 
listContainerOptions) {
+      String jobId = sync.initiateJob(container, 
InventoryRetrievalJobRequest.builder().build());
+      try {
+         if (pollingStrategy.waitForSuccess(container, jobId)) {
+            ArchiveMetadataCollection archives = 
sync.getInventoryRetrievalOutput(container, jobId);
+            for (ArchiveMetadata archive : archives) {
+               try {
+                  sync.deleteArchive(container, archive.getArchiveId());
+               } catch (ResourceNotFoundException ignored) {
+               }
+            }
+         }
+      } catch (InterruptedException e) {
+         throw new RuntimeException(e);
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/95d9b002/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
----------------------------------------------------------------------
diff --git 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
index 72368c5..4ef4468 100644
--- 
a/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
+++ 
b/glacier/src/main/java/org/jclouds/glacier/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java
@@ -27,7 +27,13 @@ import 
org.jclouds.glacier.blobstore.strategy.SlicingStrategy;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.hash.HashCode;
 import com.google.inject.Inject;
+import com.google.inject.Singleton;
 
+/**
+ * Base implementation of MultipartUploadStrategy.
+ * This implementation uploads the parts sequentially.
+ */
+@Singleton
 public class SequentialMultipartUploadStrategy implements 
MultipartUploadStrategy {
    private final GlacierClient client;
    private final SlicingStrategy slicer;

Reply via email to