You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2014/10/05 01:32:38 UTC

[1/2] git commit: Fix glacier's pom structure.

Repository: jclouds-labs-aws
Updated Branches:
  refs/heads/master 7a49533e2 -> 9df3a3890


Fix glacier's pom structure.


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/39885f55
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/tree/39885f55
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/diff/39885f55

Branch: refs/heads/master
Commit: 39885f5556578a872a09cc38ce72467311680753
Parents: 7a49533
Author: Adrian Cole <ad...@gmail.com>
Authored: Sat Oct 4 10:53:24 2014 -0700
Committer: Adrian Cole <ad...@apache.org>
Committed: Sat Oct 4 16:32:19 2014 -0700

----------------------------------------------------------------------
 glacier/pom.xml | 53 +++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 38 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/39885f55/glacier/pom.xml
----------------------------------------------------------------------
diff --git a/glacier/pom.xml b/glacier/pom.xml
index c86a1bd..d236156 100644
--- a/glacier/pom.xml
+++ b/glacier/pom.xml
@@ -21,14 +21,16 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
-    <groupId>org.apache.jclouds.labs</groupId>
-    <artifactId>jclouds-labs-aws</artifactId>
+    <groupId>org.apache.jclouds</groupId>
+    <artifactId>jclouds-project</artifactId>
     <version>2.0.0-SNAPSHOT</version>
+    <relativePath />
   </parent>
 
+  <!-- TODO: when out of labs, switch to org.jclouds.api -->
   <groupId>org.apache.jclouds.labs</groupId>
   <artifactId>glacier</artifactId>
-  <name>jclouds glacier api</name>
+  <name>Apache jclouds :: AWS :: Glacier API</name>
   <description>jclouds components to access an implementation of glacier</description>
   <packaging>bundle</packaging>
 
@@ -40,46 +42,68 @@
     <test.glacier.build-version />
     <test.glacier.identity>${test.aws.identity}</test.glacier.identity>
     <test.glacier.credential>${test.aws.credential}</test.glacier.credential>
-
     <jclouds.osgi.export>org.jclouds.glacier*;version="${project.version}"</jclouds.osgi.export>
-    <jclouds.osgi.import>
-      org.jclouds.labs*;version="${project.version}",
-      org.jclouds*;version="${project.version}",
-      *
-    </jclouds.osgi.import>
+    <jclouds.osgi.import>org.jclouds*;version="${project.version}",*</jclouds.osgi.import>
   </properties>
 
+  <repositories>
+    <repository>
+      <id>apache-snapshots</id>
+      <url>https://repository.apache.org/content/repositories/snapshots</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </repository>
+  </repositories>
+
+  <!-- For modernizer, which depends on jclouds-resources snapshot. -->
+  <pluginRepositories>
+    <pluginRepository>
+      <id>apache-snapshots</id>
+      <url>https://repository.apache.org/content/repositories/snapshots</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </pluginRepository>
+  </pluginRepositories>
+
   <dependencies>
     <dependency>
       <groupId>org.apache.jclouds.api</groupId>
       <artifactId>sts</artifactId>
-      <version>${project.version}</version>
+      <version>${project.parent.version}</version>
       <type>jar</type>
     </dependency>
     <dependency>
       <groupId>org.apache.jclouds</groupId>
       <artifactId>jclouds-blobstore</artifactId>
-      <version>${project.version}</version>
+      <version>${project.parent.version}</version>
       <type>jar</type>
     </dependency>
     <dependency>
       <groupId>org.apache.jclouds</groupId>
       <artifactId>jclouds-core</artifactId>
-      <version>${project.version}</version>
+      <version>${project.parent.version}</version>
       <type>test-jar</type>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.jclouds</groupId>
       <artifactId>jclouds-blobstore</artifactId>
-      <version>${project.version}</version>
+      <version>${project.parent.version}</version>
       <type>test-jar</type>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.jclouds.driver</groupId>
       <artifactId>jclouds-log4j</artifactId>
-      <version>${project.version}</version>
+      <version>${project.parent.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -95,7 +119,6 @@
     <dependency>
       <groupId>org.assertj</groupId>
       <artifactId>assertj-core</artifactId>
-      <version>1.6.1</version>
       <scope>test</scope>
     </dependency>
   </dependencies>


[2/2] git commit: JCLOUDS-40 unasync glacier.

Posted by ad...@apache.org.
JCLOUDS-40 unasync glacier.


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/9df3a389
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/tree/9df3a389
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/diff/9df3a389

Branch: refs/heads/master
Commit: 9df3a3890400c4ebc4bd7d5b60179c0bcf956e1b
Parents: 39885f5
Author: Adrian Cole <ac...@twitter.com>
Authored: Fri Oct 3 23:16:46 2014 -0700
Committer: Adrian Cole <ad...@apache.org>
Committed: Sat Oct 4 16:32:31 2014 -0700

----------------------------------------------------------------------
 .../org/jclouds/glacier/GlacierApiMetadata.java |  23 +-
 .../org/jclouds/glacier/GlacierAsyncClient.java | 354 -------------------
 .../java/org/jclouds/glacier/GlacierClient.java | 255 ++++++++++---
 .../blobstore/GlacierAsyncBlobStore.java        | 125 -------
 .../config/GlacierBlobStoreContextModule.java   |   9 +-
 .../glacier/config/GlacierHttpApiModule.java    |  78 ++++
 .../glacier/config/GlacierRestClientModule.java |  79 -----
 .../jclouds/glacier/GlacierClientMockTest.java  |   2 +-
 8 files changed, 296 insertions(+), 629 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/9df3a389/glacier/src/main/java/org/jclouds/glacier/GlacierApiMetadata.java
----------------------------------------------------------------------
diff --git a/glacier/src/main/java/org/jclouds/glacier/GlacierApiMetadata.java b/glacier/src/main/java/org/jclouds/glacier/GlacierApiMetadata.java
index 3244eeb..e72ee21 100644
--- a/glacier/src/main/java/org/jclouds/glacier/GlacierApiMetadata.java
+++ b/glacier/src/main/java/org/jclouds/glacier/GlacierApiMetadata.java
@@ -24,25 +24,18 @@ import java.util.Properties;
 
 import org.jclouds.blobstore.BlobStoreContext;
 import org.jclouds.glacier.blobstore.config.GlacierBlobStoreContextModule;
+import org.jclouds.glacier.config.GlacierHttpApiModule;
 import org.jclouds.glacier.config.GlacierParserModule;
-import org.jclouds.glacier.config.GlacierRestClientModule;
 import org.jclouds.glacier.reference.GlacierHeaders;
-import org.jclouds.rest.internal.BaseRestApiMetadata;
+import org.jclouds.rest.internal.BaseHttpApiMetadata;
 
 import com.google.common.collect.ImmutableSet;
-import com.google.common.reflect.TypeToken;
 import com.google.inject.Module;
 
 /**
  * Implementation of ApiMetadata for Amazon Glacier API
  */
-public class GlacierApiMetadata extends BaseRestApiMetadata {
-
-   @Deprecated
-   public static final TypeToken<org.jclouds.rest.RestContext<GlacierClient, GlacierAsyncClient>> CONTEXT_TOKEN = new TypeToken<org.jclouds.rest.RestContext<GlacierClient, GlacierAsyncClient>>() {
-
-      private static final long serialVersionUID = 1L;
-   };
+public class GlacierApiMetadata extends BaseHttpApiMetadata {
 
    private static Builder builder() {
       return new Builder();
@@ -62,16 +55,15 @@ public class GlacierApiMetadata extends BaseRestApiMetadata {
    }
 
    public static Properties defaultProperties() {
-      Properties properties = BaseRestApiMetadata.defaultProperties();
+      Properties properties = BaseHttpApiMetadata.defaultProperties();
       properties.setProperty(PROPERTY_HEADER_TAG, GlacierHeaders.DEFAULT_AMAZON_HEADERTAG);
       return properties;
    }
 
-   public static class Builder extends BaseRestApiMetadata.Builder<Builder> {
+   public static class Builder extends BaseHttpApiMetadata.Builder<GlacierClient, Builder> {
 
-      @SuppressWarnings("deprecation")
       protected Builder() {
-         super(GlacierClient.class, GlacierAsyncClient.class);
+         super(GlacierClient.class);
          id("glacier")
                .name("Amazon Glacier API")
                .identityName("Access Key ID")
@@ -80,9 +72,8 @@ public class GlacierApiMetadata extends BaseRestApiMetadata {
                .documentation(URI.create("http://docs.aws.amazon.com/amazonglacier/latest/dev/amazon-glacier-api.html"))
                .version("2012-06-01")
                .defaultProperties(GlacierApiMetadata.defaultProperties())
-               .context(CONTEXT_TOKEN)
                .view(typeToken(BlobStoreContext.class))
-               .defaultModules(ImmutableSet.<Class<? extends Module>> of(GlacierRestClientModule.class,
+               .defaultModules(ImmutableSet.<Class<? extends Module>> of(GlacierHttpApiModule.class,
                      GlacierParserModule.class, GlacierBlobStoreContextModule.class));
       }
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/9df3a389/glacier/src/main/java/org/jclouds/glacier/GlacierAsyncClient.java
----------------------------------------------------------------------
diff --git a/glacier/src/main/java/org/jclouds/glacier/GlacierAsyncClient.java b/glacier/src/main/java/org/jclouds/glacier/GlacierAsyncClient.java
deleted file mode 100644
index c7893ed..0000000
--- a/glacier/src/main/java/org/jclouds/glacier/GlacierAsyncClient.java
+++ /dev/null
@@ -1,354 +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;
-
-import static org.jclouds.blobstore.attr.BlobScopes.CONTAINER;
-
-import java.io.Closeable;
-import java.net.URI;
-import java.util.Map;
-
-import javax.inject.Named;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.blobstore.attr.BlobScope;
-import org.jclouds.glacier.binders.BindArchiveOutputRangeToHeaders;
-import org.jclouds.glacier.binders.BindArchiveSizeToHeaders;
-import org.jclouds.glacier.binders.BindContentRangeToHeaders;
-import org.jclouds.glacier.binders.BindDescriptionToHeaders;
-import org.jclouds.glacier.binders.BindHashesToHeaders;
-import org.jclouds.glacier.binders.BindJobRequestToJsonPayload;
-import org.jclouds.glacier.binders.BindMultipartTreeHashToHeaders;
-import org.jclouds.glacier.binders.BindPartSizeToHeaders;
-import org.jclouds.glacier.domain.ArchiveMetadataCollection;
-import org.jclouds.glacier.domain.JobMetadata;
-import org.jclouds.glacier.domain.JobRequest;
-import org.jclouds.glacier.domain.MultipartUploadMetadata;
-import org.jclouds.glacier.domain.PaginatedJobCollection;
-import org.jclouds.glacier.domain.PaginatedMultipartUploadCollection;
-import org.jclouds.glacier.domain.PaginatedVaultCollection;
-import org.jclouds.glacier.domain.VaultMetadata;
-import org.jclouds.glacier.fallbacks.FalseOnIllegalArgumentException;
-import org.jclouds.glacier.filters.RequestAuthorizeSignature;
-import org.jclouds.glacier.functions.GetPayloadFromHttpContent;
-import org.jclouds.glacier.functions.ParseArchiveIdHeader;
-import org.jclouds.glacier.functions.ParseArchiveMetadataCollectionFromHttpContent;
-import org.jclouds.glacier.functions.ParseJobIdHeader;
-import org.jclouds.glacier.functions.ParseJobMetadataFromHttpContent;
-import org.jclouds.glacier.functions.ParseJobMetadataListFromHttpContent;
-import org.jclouds.glacier.functions.ParseMultipartUploadIdHeader;
-import org.jclouds.glacier.functions.ParseMultipartUploadListFromHttpContent;
-import org.jclouds.glacier.functions.ParseMultipartUploadPartListFromHttpContent;
-import org.jclouds.glacier.functions.ParseMultipartUploadTreeHashHeader;
-import org.jclouds.glacier.functions.ParseVaultMetadataFromHttpContent;
-import org.jclouds.glacier.functions.ParseVaultMetadataListFromHttpContent;
-import org.jclouds.glacier.options.PaginationOptions;
-import org.jclouds.glacier.predicates.validators.DescriptionValidator;
-import org.jclouds.glacier.predicates.validators.PartSizeValidator;
-import org.jclouds.glacier.predicates.validators.PayloadValidator;
-import org.jclouds.glacier.predicates.validators.VaultNameValidator;
-import org.jclouds.glacier.reference.GlacierHeaders;
-import org.jclouds.glacier.util.ContentRange;
-import org.jclouds.io.Payload;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.Headers;
-import org.jclouds.rest.annotations.ParamValidators;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-
-import com.google.common.hash.HashCode;
-import com.google.common.util.concurrent.ListenableFuture;
-
-/**
- * Provides asynchronous access to Amazon Glacier resources via their REST API.
- * <p/>
- *
- * @see GlacierClient
- * @see <a href="http://aws.amazon.com/documentation/glacier/" />
- */
-@Headers(keys = GlacierHeaders.VERSION, values = "2012-06-01")
-@RequestFilters(RequestAuthorizeSignature.class)
-@BlobScope(CONTAINER)
-public interface GlacierAsyncClient extends Closeable {
-
-   /**
-    * @see GlacierClient#createVault
-    */
-   @Named("CreateVault")
-   @PUT
-   @Path("/-/vaults/{vault}")
-   ListenableFuture<URI> createVault(@ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName);
-
-   /**
-    * @see GlacierClient#deleteVaultIfEmpty
-    */
-   @Named("DeleteVault")
-   @DELETE
-   @Path("/-/vaults/{vault}")
-   @Fallback(FalseOnIllegalArgumentException.class)
-   ListenableFuture<Boolean> deleteVault(@ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName);
-
-   /**
-    * @see GlacierClient#describeVault
-    */
-   @Named("DescribeVault")
-   @GET
-   @Path("/-/vaults/{vault}")
-   @ResponseParser(ParseVaultMetadataFromHttpContent.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<VaultMetadata> describeVault(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName);
-
-   /**
-    * @see GlacierClient#listVaults(PaginationOptions)
-    */
-   @Named("ListVaults")
-   @GET
-   @Path("/-/vaults")
-   @ResponseParser(ParseVaultMetadataListFromHttpContent.class)
-   ListenableFuture<PaginatedVaultCollection> listVaults(PaginationOptions options);
-
-   /**
-    * @see GlacierClient#listVaults
-    */
-   @Named("ListVaults")
-   @GET
-   @Path("/-/vaults")
-   @ResponseParser(ParseVaultMetadataListFromHttpContent.class)
-   ListenableFuture<PaginatedVaultCollection> listVaults();
-
-   /**
-    * @see GlacierClient#uploadArchive
-    */
-   @Named("UploadArchive")
-   @POST
-   @Path("/-/vaults/{vault}/archives")
-   @ResponseParser(ParseArchiveIdHeader.class)
-   ListenableFuture<String> uploadArchive(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @ParamValidators(PayloadValidator.class) @BinderParam(BindHashesToHeaders.class) Payload payload,
-         @ParamValidators(DescriptionValidator.class) @BinderParam(BindDescriptionToHeaders.class) String description);
-
-   /**
-    * @see GlacierClient#uploadArchive
-    */
-   @Named("UploadArchive")
-   @POST
-   @Path("/-/vaults/{vault}/archives")
-   @ResponseParser(ParseArchiveIdHeader.class)
-   ListenableFuture<String> uploadArchive(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @ParamValidators(PayloadValidator.class) @BinderParam(BindHashesToHeaders.class) Payload payload);
-
-   /**
-    * @see GlacierClient#deleteArchive
-    */
-   @Named("DeleteArchive")
-   @DELETE
-   @Path("/-/vaults/{vault}/archives/{archive}")
-   ListenableFuture<Boolean> deleteArchive(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @PathParam("archive") String archiveId);
-
-   /**
-    * @see GlacierClient#initiateMultipartUpload
-    */
-   @Named("InitiateMultipartUpload")
-   @POST
-   @Path("/-/vaults/{vault}/multipart-uploads")
-   @ResponseParser(ParseMultipartUploadIdHeader.class)
-   ListenableFuture<String> initiateMultipartUpload(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @ParamValidators(PartSizeValidator.class) @BinderParam(BindPartSizeToHeaders.class) long partSizeInMB,
-         @ParamValidators(DescriptionValidator.class) @BinderParam(BindDescriptionToHeaders.class) String description);
-
-   /**
-    * @see GlacierClient#initiateMultipartUpload
-    */
-   @Named("InitiateMultipartUpload")
-   @POST
-   @Path("/-/vaults/{vault}/multipart-uploads")
-   @ResponseParser(ParseMultipartUploadIdHeader.class)
-   ListenableFuture<String> initiateMultipartUpload(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @ParamValidators(PartSizeValidator.class) @BinderParam(BindPartSizeToHeaders.class) long partSizeInMB);
-
-   /**
-    * @see GlacierClient#uploadPart
-    */
-   @Named("UploadPart")
-   @PUT
-   @Path("/-/vaults/{vault}/multipart-uploads/{uploadId}")
-   @ResponseParser(ParseMultipartUploadTreeHashHeader.class)
-   ListenableFuture<HashCode> uploadPart(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @PathParam("uploadId") String uploadId,
-         @BinderParam(BindContentRangeToHeaders.class) ContentRange range,
-         @ParamValidators(PayloadValidator.class) @BinderParam(BindHashesToHeaders.class) Payload payload);
-
-   /**
-    * @see GlacierClient#completeMultipartUpload
-    */
-   @Named("CompleteMultipartUpload")
-   @POST
-   @Path("/-/vaults/{vault}/multipart-uploads/{uploadId}")
-   @ResponseParser(ParseArchiveIdHeader.class)
-   ListenableFuture<String> completeMultipartUpload(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @PathParam("uploadId") String uploadId,
-         @BinderParam(BindMultipartTreeHashToHeaders.class) Map<Integer, HashCode> hashes,
-         @BinderParam(BindArchiveSizeToHeaders.class) long archiveSize);
-
-   /**
-    * @see GlacierClient#abortMultipartUpload
-    */
-   @Named("AbortMultipartUpload")
-   @DELETE
-   @Path("/-/vaults/{vault}/multipart-uploads/{uploadId}")
-   ListenableFuture<Boolean> abortMultipartUpload(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @PathParam("uploadId") String uploadId);
-
-   /**
-    * @see GlacierClient#listParts
-    */
-   @Named("ListParts")
-   @GET
-   @Path("/-/vaults/{vault}/multipart-uploads/{uploadId}")
-   @ResponseParser(ParseMultipartUploadPartListFromHttpContent.class)
-   ListenableFuture<MultipartUploadMetadata> listParts(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @PathParam("uploadId") String uploadId,
-         PaginationOptions options);
-
-   /**
-    * @see GlacierClient#listParts
-    */
-   @Named("ListParts")
-   @GET
-   @Path("/-/vaults/{vault}/multipart-uploads/{uploadId}")
-   @ResponseParser(ParseMultipartUploadPartListFromHttpContent.class)
-   ListenableFuture<MultipartUploadMetadata> listParts(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @PathParam("uploadId") String uploadId);
-
-   /**
-    * @see GlacierClient#listMultipartUploads
-    */
-   @Named("ListMultipartUploads")
-   @GET
-   @Path("/-/vaults/{vault}/multipart-uploads")
-   @ResponseParser(ParseMultipartUploadListFromHttpContent.class)
-   ListenableFuture<PaginatedMultipartUploadCollection> listMultipartUploads(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         PaginationOptions options);
-
-   /**
-    * @see GlacierClient#listMultipartUploads
-    */
-   @Named("ListMultipartUploads")
-   @GET
-   @Path("/-/vaults/{vault}/multipart-uploads")
-   @ResponseParser(ParseMultipartUploadListFromHttpContent.class)
-   ListenableFuture<PaginatedMultipartUploadCollection> listMultipartUploads(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName);
-
-   /**
-    * @see GlacierClient#initiateJob
-    */
-   @Named("InitiateJob")
-   @POST
-   @Path("/-/vaults/{vault}/jobs")
-   @ResponseParser(ParseJobIdHeader.class)
-   ListenableFuture<String> initiateJob(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @BinderParam(BindJobRequestToJsonPayload.class) JobRequest job);
-
-   /**
-    * @see GlacierClient#describeJob
-    */
-   @Named("DescribeJob")
-   @GET
-   @Path("/-/vaults/{vault}/jobs/{job}")
-   @ResponseParser(ParseJobMetadataFromHttpContent.class)
-   @Fallback(NullOnNotFoundOr404.class)
-   ListenableFuture<JobMetadata> describeJob(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @PathParam("job") String jobId);
-
-   /**
-    * @see GlacierClient#listJobs(PaginationOptions)
-    */
-   @Named("ListJobs")
-   @GET
-   @Path("/-/vaults/{vault}/jobs")
-   @ResponseParser(ParseJobMetadataListFromHttpContent.class)
-   ListenableFuture<PaginatedJobCollection> listJobs(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         PaginationOptions options);
-
-   /**
-    * @see GlacierClient#listJobs
-    */
-   @Named("ListJobs")
-   @GET
-   @Path("/-/vaults/{vault}/jobs")
-   @ResponseParser(ParseJobMetadataListFromHttpContent.class)
-   ListenableFuture<PaginatedJobCollection> listJobs(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName);
-
-   /**
-    * @see GlacierClient#getJobOutput
-    */
-   @Named("GetJobOutput")
-   @GET
-   @Path("/-/vaults/{vault}/jobs/{job}/output")
-   @ResponseParser(GetPayloadFromHttpContent.class)
-   ListenableFuture<Payload> getJobOutput(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @PathParam("job") String jobId,
-         @BinderParam(BindArchiveOutputRangeToHeaders.class) ContentRange range);
-
-   /**
-    * @see GlacierClient#getJobOutput
-    */
-   @Named("GetJobOutput")
-   @GET
-   @Path("/-/vaults/{vault}/jobs/{job}/output")
-   @ResponseParser(GetPayloadFromHttpContent.class)
-   ListenableFuture<Payload> getJobOutput(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @PathParam("job") String jobId);
-
-   /**
-    * @see GlacierClient#getInventoryRetrievalOutput
-    */
-   @Named("GetInventoryRetrievalOutput")
-   @GET
-   @Path("/-/vaults/{vault}/jobs/{job}/output")
-   @ResponseParser(ParseArchiveMetadataCollectionFromHttpContent.class)
-   ListenableFuture<ArchiveMetadataCollection> getInventoryRetrievalOutput(
-         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
-         @PathParam("job") String jobId);
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/9df3a389/glacier/src/main/java/org/jclouds/glacier/GlacierClient.java
----------------------------------------------------------------------
diff --git a/glacier/src/main/java/org/jclouds/glacier/GlacierClient.java b/glacier/src/main/java/org/jclouds/glacier/GlacierClient.java
index ca3aaa4..251deb7 100644
--- a/glacier/src/main/java/org/jclouds/glacier/GlacierClient.java
+++ b/glacier/src/main/java/org/jclouds/glacier/GlacierClient.java
@@ -16,10 +16,30 @@
  */
 package org.jclouds.glacier;
 
+import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import static org.jclouds.blobstore.attr.BlobScopes.CONTAINER;
+
 import java.io.Closeable;
 import java.net.URI;
 import java.util.Map;
 
+import javax.inject.Named;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
+import org.jclouds.blobstore.attr.BlobScope;
+import org.jclouds.glacier.binders.BindArchiveOutputRangeToHeaders;
+import org.jclouds.glacier.binders.BindArchiveSizeToHeaders;
+import org.jclouds.glacier.binders.BindContentRangeToHeaders;
+import org.jclouds.glacier.binders.BindDescriptionToHeaders;
+import org.jclouds.glacier.binders.BindHashesToHeaders;
+import org.jclouds.glacier.binders.BindJobRequestToJsonPayload;
+import org.jclouds.glacier.binders.BindMultipartTreeHashToHeaders;
+import org.jclouds.glacier.binders.BindPartSizeToHeaders;
 import org.jclouds.glacier.domain.ArchiveMetadataCollection;
 import org.jclouds.glacier.domain.JobMetadata;
 import org.jclouds.glacier.domain.JobRequest;
@@ -28,19 +48,41 @@ import org.jclouds.glacier.domain.PaginatedJobCollection;
 import org.jclouds.glacier.domain.PaginatedMultipartUploadCollection;
 import org.jclouds.glacier.domain.PaginatedVaultCollection;
 import org.jclouds.glacier.domain.VaultMetadata;
+import org.jclouds.glacier.fallbacks.FalseOnIllegalArgumentException;
+import org.jclouds.glacier.filters.RequestAuthorizeSignature;
+import org.jclouds.glacier.functions.GetPayloadFromHttpContent;
+import org.jclouds.glacier.functions.ParseArchiveIdHeader;
+import org.jclouds.glacier.functions.ParseArchiveMetadataCollectionFromHttpContent;
+import org.jclouds.glacier.functions.ParseJobIdHeader;
+import org.jclouds.glacier.functions.ParseJobMetadataFromHttpContent;
+import org.jclouds.glacier.functions.ParseJobMetadataListFromHttpContent;
+import org.jclouds.glacier.functions.ParseMultipartUploadIdHeader;
+import org.jclouds.glacier.functions.ParseMultipartUploadListFromHttpContent;
+import org.jclouds.glacier.functions.ParseMultipartUploadPartListFromHttpContent;
+import org.jclouds.glacier.functions.ParseMultipartUploadTreeHashHeader;
+import org.jclouds.glacier.functions.ParseVaultMetadataFromHttpContent;
+import org.jclouds.glacier.functions.ParseVaultMetadataListFromHttpContent;
 import org.jclouds.glacier.options.PaginationOptions;
+import org.jclouds.glacier.predicates.validators.DescriptionValidator;
+import org.jclouds.glacier.predicates.validators.PartSizeValidator;
+import org.jclouds.glacier.predicates.validators.PayloadValidator;
+import org.jclouds.glacier.predicates.validators.VaultNameValidator;
+import org.jclouds.glacier.reference.GlacierHeaders;
 import org.jclouds.glacier.util.ContentRange;
 import org.jclouds.io.Payload;
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.Headers;
+import org.jclouds.rest.annotations.ParamValidators;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.ResponseParser;
 
 import com.google.common.hash.HashCode;
 
-/**
- * Provides access to Amazon Glacier resources via their REST API.
- * <p/>
- *
- * @see GlacierAsyncClient
- * @see <a href="http://aws.amazon.com/documentation/glacier/" />
- */
+/** Provides access to Amazon Glacier resources via their REST API. */
+@Headers(keys = GlacierHeaders.VERSION, values = "2012-06-01")
+@RequestFilters(RequestAuthorizeSignature.class)
+@BlobScope(CONTAINER)
 public interface GlacierClient extends Closeable {
 
    /**
@@ -50,9 +92,11 @@ public interface GlacierClient extends Closeable {
     * @param vaultName
     *           A name for the Vault being created.
     * @return A reference to an URI pointing to the resource created.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-put.html" />
     */
-   URI createVault(String vaultName);
+   @Named("CreateVault")
+   @PUT
+   @Path("/-/vaults/{vault}")
+   URI createVault(@ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName);
 
    /**
     * Deletes a vault. Vaults can only be deleted if there are no archives in the vault in the last inventory computed
@@ -62,9 +106,12 @@ public interface GlacierClient extends Closeable {
     * @param vaultName
     *           Name of the Vault being deleted.
     * @return False if the vault was not empty and therefore not deleted, true otherwise.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-delete.html" />
     */
-   boolean deleteVault(String vaultName);
+   @Named("DeleteVault")
+   @DELETE
+   @Path("/-/vaults/{vault}")
+   @Fallback(FalseOnIllegalArgumentException.class)
+   boolean deleteVault(@ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName);
 
    /**
     * Retrieves the metadata for a vault. The response include information like the vault ARN, the creation data, the
@@ -75,9 +122,13 @@ public interface GlacierClient extends Closeable {
     *           Name of the Vault being described.
     * @return A VaultMetadata object containing all the information relevant to the vault if the vault exists,
     * null otherwise.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vault-get.html" />
     */
-   VaultMetadata describeVault(String vaultName);
+   @Named("DescribeVault")
+   @GET
+   @Path("/-/vaults/{vault}")
+   @ResponseParser(ParseVaultMetadataFromHttpContent.class)
+   @Fallback(NullOnNotFoundOr404.class)
+   VaultMetadata describeVault(@ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName);
 
    /**
     * Lists vaults according to specified options. By default this operation returns up to 1,000 vaults.
@@ -85,13 +136,20 @@ public interface GlacierClient extends Closeable {
     * @param options
     *          Options used for pagination.
     * @return A PaginatedVaultCollection object containing the list of vaults.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-vaults-get.html" />
     */
+   @Named("ListVaults")
+   @GET
+   @Path("/-/vaults")
+   @ResponseParser(ParseVaultMetadataListFromHttpContent.class)
    PaginatedVaultCollection listVaults(PaginationOptions options);
 
    /**
     * @see GlacierClient#listVaults(PaginationOptions)
     */
+   @Named("ListVaults")
+   @GET
+   @Path("/-/vaults")
+   @ResponseParser(ParseVaultMetadataListFromHttpContent.class)
    PaginatedVaultCollection listVaults();
 
    /**
@@ -106,14 +164,26 @@ public interface GlacierClient extends Closeable {
     * @param description
     *           Description for the archive.
     * @return A String containing the Archive identifier in Amazon Glacier.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-archive-post.html" />
     */
-   String uploadArchive(String vaultName, Payload payload, String description);
+   @Named("UploadArchive")
+   @POST
+   @Path("/-/vaults/{vault}/archives")
+   @ResponseParser(ParseArchiveIdHeader.class)
+   String uploadArchive(
+         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @ParamValidators(PayloadValidator.class) @BinderParam(BindHashesToHeaders.class) Payload payload,
+         @ParamValidators(DescriptionValidator.class) @BinderParam(BindDescriptionToHeaders.class) String description);
 
    /**
     * @see GlacierClient#uploadArchive(String, org.jclouds.io.Payload, String)
     */
-   String uploadArchive(String vaultName, Payload payload);
+   @Named("UploadArchive")
+   @POST
+   @Path("/-/vaults/{vault}/archives")
+   @ResponseParser(ParseArchiveIdHeader.class)
+   String uploadArchive(
+         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @ParamValidators(PayloadValidator.class) @BinderParam(BindHashesToHeaders.class) Payload payload);
 
    /**
     * Deletes an archive from a vault. Be aware that after deleting an archive it may still be listed in the
@@ -124,9 +194,13 @@ public interface GlacierClient extends Closeable {
     * @param archiveId
     *           Amazon Glacier archive identifier.
     * @return False if the archive was not deleted, true otherwise.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-archive-delete.html" />
     */
-   boolean deleteArchive(String vaultName, String archiveId);
+   @Named("DeleteArchive")
+   @DELETE
+   @Path("/-/vaults/{vault}/archives/{archive}")
+   boolean deleteArchive(
+         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @PathParam("archive") String archiveId);
 
    /**
     * Starts a new multipart upload. Using a multipart upload you can upload archives up to 40,000GB (10,000 parts,
@@ -141,14 +215,27 @@ public interface GlacierClient extends Closeable {
     * @param description
     *           The archive description.
     * @return The Multipart Upload Id.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-initiate-upload.html" />
     */
-   String initiateMultipartUpload(String vaultName, long partSizeInMB, String description);
+   @Named("InitiateMultipartUpload")
+   @POST
+   @Path("/-/vaults/{vault}/multipart-uploads")
+   @ResponseParser(ParseMultipartUploadIdHeader.class)
+   String initiateMultipartUpload(
+         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @ParamValidators(PartSizeValidator.class) @BinderParam(BindPartSizeToHeaders.class) long partSizeInMB,
+         @ParamValidators(DescriptionValidator.class) @BinderParam(BindDescriptionToHeaders.class) String description);
 
    /**
     * @see GlacierClient#initiateMultipartUpload(String, long, String)
     */
-   String initiateMultipartUpload(String vaultName, long partSizeInMB);
+   @Named("InitiateMultipartUpload")
+   @POST
+   @Path("/-/vaults/{vault}/multipart-uploads")
+   @ResponseParser(ParseMultipartUploadIdHeader.class)
+   String initiateMultipartUpload(
+         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @ParamValidators(PartSizeValidator.class) @BinderParam(BindPartSizeToHeaders.class) long partSizeInMB);
+
 
    /**
     * Uploads one of the multipart upload parts. The part size has to match the one specified in the multipart upload
@@ -165,9 +252,16 @@ public interface GlacierClient extends Closeable {
     *           Content for this part.
     * @return Tree-hash of the payload calculated by Amazon. This hash needs to be stored to complete the multipart
     *         upload.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-upload-part.html" />
     */
-   HashCode uploadPart(String vaultName, String uploadId, ContentRange range, Payload payload);
+   @Named("UploadPart")
+   @PUT
+   @Path("/-/vaults/{vault}/multipart-uploads/{uploadId}")
+   @ResponseParser(ParseMultipartUploadTreeHashHeader.class)
+   HashCode uploadPart(
+         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @PathParam("uploadId") String uploadId,
+         @BinderParam(BindContentRangeToHeaders.class) ContentRange range,
+         @ParamValidators(PayloadValidator.class) @BinderParam(BindHashesToHeaders.class) Payload payload);
 
    /**
     * Completes the multipart upload. After uploading all the parts this operation should be called to inform Glacier.
@@ -182,9 +276,17 @@ public interface GlacierClient extends Closeable {
     * @param archiveSize
     *           Size of the complete archive.
     * @return A String containing the Archive identifier in Amazon Glacier.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-complete-upload.html" />
     */
-   String completeMultipartUpload(String vaultName, String uploadId, Map<Integer, HashCode> hashes, long archiveSize);
+   @Named("CompleteMultipartUpload")
+   @POST
+   @Path("/-/vaults/{vault}/multipart-uploads/{uploadId}")
+   @ResponseParser(ParseArchiveIdHeader.class)
+   String completeMultipartUpload(
+         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @PathParam("uploadId") String uploadId,
+         @BinderParam(BindMultipartTreeHashToHeaders.class) Map<Integer, HashCode> hashes,
+         @BinderParam(BindArchiveSizeToHeaders.class) long archiveSize);
+
 
    /**
     * Aborts the multipart upload. Once aborted, you cannot upload any more parts to it.
@@ -194,9 +296,13 @@ public interface GlacierClient extends Closeable {
     * @param uploadId
     *           Multipart upload identifier.
     * @return True if the multipart upload was aborted, false otherwise.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-abort-upload.html" />
     */
-   boolean abortMultipartUpload(String vaultName, String uploadId);
+   @Named("AbortMultipartUpload")
+   @DELETE
+   @Path("/-/vaults/{vault}/multipart-uploads/{uploadId}")
+   boolean abortMultipartUpload(
+         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @PathParam("uploadId") String uploadId);
 
    /**
     * Lists the multipart upload parts. You can list the parts of an ongoing multipart upload at any time. By default
@@ -209,14 +315,27 @@ public interface GlacierClient extends Closeable {
     * @param options
     *          Options used for pagination.
     * @return A MultipartUploadMetadata, containing an iterable part list with a marker.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-list-parts.html" />
     */
-   MultipartUploadMetadata listParts(String vaultName, String uploadId, PaginationOptions options);
+   @Named("ListParts")
+   @GET
+   @Path("/-/vaults/{vault}/multipart-uploads/{uploadId}")
+   @ResponseParser(ParseMultipartUploadPartListFromHttpContent.class)
+   MultipartUploadMetadata listParts(
+         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @PathParam("uploadId") String uploadId,
+         PaginationOptions options);
+
 
    /**
     * @see GlacierClient#listParts(String, String, org.jclouds.glacier.options.PaginationOptions)
     */
-   MultipartUploadMetadata listParts(String vaultName, String uploadId);
+   @Named("ListParts")
+   @GET
+   @Path("/-/vaults/{vault}/multipart-uploads/{uploadId}")
+   @ResponseParser(ParseMultipartUploadPartListFromHttpContent.class)
+   MultipartUploadMetadata listParts(
+         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @PathParam("uploadId") String uploadId);
 
    /**
     * Lists the ongoing multipart uploads in a vault. By default, this operation returns up to  1,000 multipart uploads.
@@ -227,14 +346,24 @@ public interface GlacierClient extends Closeable {
     * @param options
     *          Options used for pagination.
     * @return A PaginatedMultipartUploadCollection, containing an iterable multipart upload list with a marker.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-multipart-list-uploads.html" />
     */
-   PaginatedMultipartUploadCollection listMultipartUploads(String vaultName, PaginationOptions options);
-
+   @Named("ListMultipartUploads")
+   @GET
+   @Path("/-/vaults/{vault}/multipart-uploads")
+   @ResponseParser(ParseMultipartUploadListFromHttpContent.class)
+   PaginatedMultipartUploadCollection listMultipartUploads(
+         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         PaginationOptions options);
+   
    /**
     * @see GlacierClient#listMultipartUploads(String, org.jclouds.glacier.options.PaginationOptions)
     */
-   PaginatedMultipartUploadCollection listMultipartUploads(String vaultName);
+   @Named("ListMultipartUploads")
+   @GET
+   @Path("/-/vaults/{vault}/multipart-uploads")
+   @ResponseParser(ParseMultipartUploadListFromHttpContent.class)
+   PaginatedMultipartUploadCollection listMultipartUploads(
+         @ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName);
 
    /**
     * Initiates a job. The job can be an inventory retrieval or an archive retrieval. Once the job is started the
@@ -245,9 +374,13 @@ public interface GlacierClient extends Closeable {
     * @param job
     *          JobRequest instance with the concrete request.
     * @return The job identifier.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-initiate-job-post.html" />
     */
-   String initiateJob(String vaultName, JobRequest job);
+   @Named("InitiateJob")
+   @POST
+   @Path("/-/vaults/{vault}/jobs")
+   @ResponseParser(ParseJobIdHeader.class)
+   String initiateJob(@ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @BinderParam(BindJobRequestToJsonPayload.class) JobRequest job);
 
    /**
     * Retrieves information about an ongoing job. Among the information you will find the initiation date, the user who
@@ -258,9 +391,14 @@ public interface GlacierClient extends Closeable {
     * @param jobId
     *          Job identifier.
     * @return The job metadata if the job exists in the vault, null otherwise.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-describe-job-get.html" />
     */
-   JobMetadata describeJob(String vaultName, String jobId);
+   @Named("DescribeJob")
+   @GET
+   @Path("/-/vaults/{vault}/jobs/{job}")
+   @ResponseParser(ParseJobMetadataFromHttpContent.class)
+   @Fallback(NullOnNotFoundOr404.class)
+   JobMetadata describeJob(@ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @PathParam("job") String jobId);
 
    /**
     * Lists the ongoing jobs and the recently finished jobs for a vault. By default this operation returns up to
@@ -272,14 +410,22 @@ public interface GlacierClient extends Closeable {
     * @param options
     *          Options used for pagination
     * @return A PaginatedJobCollection, containing an iterable job list with a marker.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-jobs-get.html" />
     */
-   PaginatedJobCollection listJobs(String vaultName, PaginationOptions options);
+   @Named("ListJobs")
+   @GET
+   @Path("/-/vaults/{vault}/jobs")
+   @ResponseParser(ParseJobMetadataListFromHttpContent.class)
+   PaginatedJobCollection listJobs(@ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         PaginationOptions options);
 
    /**
     * Lists jobs.
     */
-   PaginatedJobCollection listJobs(String vaultName);
+   @Named("ListJobs")
+   @GET
+   @Path("/-/vaults/{vault}/jobs")
+   @ResponseParser(ParseJobMetadataListFromHttpContent.class)
+   PaginatedJobCollection listJobs(@ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName);
 
    /**
     * Gets the raw job output of any kind of job. You can download the job output within the 24 hour period after
@@ -292,9 +438,14 @@ public interface GlacierClient extends Closeable {
     * @param range
     *          The range of bytes to retrieve from the output.
     * @return The content data.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-job-output-get.html" />
     */
-   Payload getJobOutput(String vaultName, String jobId, ContentRange range);
+   @Named("GetJobOutput")
+   @GET
+   @Path("/-/vaults/{vault}/jobs/{job}/output")
+   @ResponseParser(GetPayloadFromHttpContent.class)
+   Payload getJobOutput(@ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @PathParam("job") String jobId,
+         @BinderParam(BindArchiveOutputRangeToHeaders.class) ContentRange range);
 
    /**
     * Downloads the output of an archive retrieval job.
@@ -304,9 +455,13 @@ public interface GlacierClient extends Closeable {
     * @param jobId
     *          Job identifier.
     * @return The content data.
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-job-output-get.html" />
     */
-   Payload getJobOutput(String vaultName, String jobId);
+   @Named("GetJobOutput")
+   @GET
+   @Path("/-/vaults/{vault}/jobs/{job}/output")
+   @ResponseParser(GetPayloadFromHttpContent.class)
+   Payload getJobOutput(@ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @PathParam("job") String jobId);
 
    /**
     * Gets the job output for the given job ID. The job must be an inventory retrieval, otherwise this operation will
@@ -317,7 +472,11 @@ public interface GlacierClient extends Closeable {
     * @param jobId
     *          Job identifier.
     * @return The ArchiveMetadata collection
-    * @see <a href="http://docs.aws.amazon.com/amazonglacier/latest/dev/api-job-output-get.html" />
     */
-   ArchiveMetadataCollection getInventoryRetrievalOutput(String vaultName, String jobId);
+   @Named("GetInventoryRetrievalOutput")
+   @GET
+   @Path("/-/vaults/{vault}/jobs/{job}/output")
+   @ResponseParser(ParseArchiveMetadataCollectionFromHttpContent.class)
+   ArchiveMetadataCollection getInventoryRetrievalOutput(@ParamValidators(VaultNameValidator.class) @PathParam("vault") String vaultName,
+         @PathParam("job") String jobId);
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/9df3a389/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierAsyncBlobStore.java
----------------------------------------------------------------------
diff --git a/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierAsyncBlobStore.java b/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierAsyncBlobStore.java
deleted file mode 100644
index 6dda036..0000000
--- a/glacier/src/main/java/org/jclouds/glacier/blobstore/GlacierAsyncBlobStore.java
+++ /dev/null
@@ -1,125 +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;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Set;
-
-import org.jclouds.Constants;
-import org.jclouds.blobstore.BlobStoreContext;
-import org.jclouds.blobstore.domain.Blob;
-import org.jclouds.blobstore.domain.BlobMetadata;
-import org.jclouds.blobstore.domain.PageSet;
-import org.jclouds.blobstore.domain.StorageMetadata;
-import org.jclouds.blobstore.internal.BaseAsyncBlobStore;
-import org.jclouds.blobstore.options.CreateContainerOptions;
-import org.jclouds.blobstore.options.GetOptions;
-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.GlacierAsyncClient;
-import org.jclouds.glacier.GlacierClient;
-import org.jclouds.javax.annotation.Nullable;
-
-import com.google.common.base.Supplier;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.inject.Inject;
-import com.google.inject.name.Named;
-
-public class GlacierAsyncBlobStore extends BaseAsyncBlobStore {
-   private final GlacierAsyncClient async;
-   private final GlacierClient sync;
-   private final Crypto crypto;
-
-   @Inject
-   GlacierAsyncBlobStore(BlobStoreContext context, BlobUtils blobUtils, Supplier<Location> defaultLocation,
-                         @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor,
-                         @Memoized Supplier<Set<? extends Location>> locations, GlacierAsyncClient async, Crypto crypto,
-                         GlacierClient sync) {
-      super(context, blobUtils, userExecutor, defaultLocation, locations);
-      this.sync = checkNotNull(sync, "sync");
-      this.async = checkNotNull(async, "async");
-      this.crypto = checkNotNull(crypto, "crypto");
-   }
-
-   @Override
-   protected boolean deleteAndVerifyContainerGone(String container) {
-      throw new UnsupportedOperationException();
-   }
-
-   @Override
-   public ListenableFuture<PageSet<? extends StorageMetadata>> list() {
-      throw new UnsupportedOperationException();
-   }
-
-   @Override
-   public ListenableFuture<Boolean> containerExists(String container) {
-      throw new UnsupportedOperationException();
-   }
-
-   @Override
-   public ListenableFuture<Boolean> createContainerInLocation(@Nullable Location location, String container) {
-      throw new UnsupportedOperationException();
-   }
-
-   @Override
-   public ListenableFuture<Boolean> createContainerInLocation(@Nullable Location location, String container,
-                                                              CreateContainerOptions options) {
-      throw new UnsupportedOperationException();
-   }
-
-   @Override
-   public ListenableFuture<PageSet<? extends StorageMetadata>> list(String container,
-                                                                    ListContainerOptions listContainerOptions) {
-      throw new UnsupportedOperationException();
-   }
-
-   @Override
-   public ListenableFuture<Boolean> blobExists(String container, String key) {
-      throw new UnsupportedOperationException();
-   }
-
-   @Override
-   public ListenableFuture<String> putBlob(String container, Blob blob) {
-      throw new UnsupportedOperationException();
-   }
-
-   @Override
-   public ListenableFuture<String> putBlob(String container, Blob blob, PutOptions options) {
-      throw new UnsupportedOperationException();
-   }
-
-   @Override
-   public ListenableFuture<BlobMetadata> blobMetadata(String container, String key) {
-      throw new UnsupportedOperationException();
-   }
-
-   @Override
-   public ListenableFuture<Blob> getBlob(String container, String key, GetOptions getOptions) {
-      throw new UnsupportedOperationException();
-   }
-
-   @Override
-   public ListenableFuture<Void> removeBlob(String container, String key) {
-      throw new UnsupportedOperationException();
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/9df3a389/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 6492640..fa92426 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
@@ -19,28 +19,25 @@ package org.jclouds.glacier.blobstore.config;
 import org.jclouds.blobstore.AsyncBlobStore;
 import org.jclouds.blobstore.BlobStore;
 import org.jclouds.blobstore.attr.ConsistencyModel;
+import org.jclouds.blobstore.internal.SubmissionAsyncBlobStore;
 import org.jclouds.blobstore.strategy.ClearListStrategy;
-import org.jclouds.glacier.blobstore.GlacierAsyncBlobStore;
 import org.jclouds.glacier.blobstore.GlacierBlobStore;
-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;
 import org.jclouds.glacier.blobstore.strategy.internal.BasePollingStrategy;
 import org.jclouds.glacier.blobstore.strategy.internal.BaseSlicingStrategy;
+import org.jclouds.glacier.blobstore.strategy.internal.ClearVaultStrategy;
 import org.jclouds.glacier.blobstore.strategy.internal.SequentialMultipartUploadStrategy;
 
 import com.google.inject.AbstractModule;
 
-/**
- * Configures the context. Requires {@link GlacierAsyncBlobStore} bound.
- */
 public class GlacierBlobStoreContextModule extends AbstractModule {
    @Override
    protected void configure() {
       bind(ConsistencyModel.class).toInstance(ConsistencyModel.EVENTUAL);
       bind(BlobStore.class).to(GlacierBlobStore.class);
-      bind(AsyncBlobStore.class).to(GlacierAsyncBlobStore.class);
+      bind(AsyncBlobStore.class).to(SubmissionAsyncBlobStore.class);
       bind(MultipartUploadStrategy.class).to(SequentialMultipartUploadStrategy.class);
       bind(SlicingStrategy.class).to(BaseSlicingStrategy.class);
       bind(ClearListStrategy.class).to(ClearVaultStrategy.class);

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/9df3a389/glacier/src/main/java/org/jclouds/glacier/config/GlacierHttpApiModule.java
----------------------------------------------------------------------
diff --git a/glacier/src/main/java/org/jclouds/glacier/config/GlacierHttpApiModule.java b/glacier/src/main/java/org/jclouds/glacier/config/GlacierHttpApiModule.java
new file mode 100644
index 0000000..7e32eab
--- /dev/null
+++ b/glacier/src/main/java/org/jclouds/glacier/config/GlacierHttpApiModule.java
@@ -0,0 +1,78 @@
+/*
+ * 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.config;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.inject.Named;
+
+import org.jclouds.Constants;
+import org.jclouds.date.DateService;
+import org.jclouds.date.TimeStamp;
+import org.jclouds.glacier.GlacierClient;
+import org.jclouds.glacier.filters.RequestAuthorizeSignature;
+import org.jclouds.glacier.handlers.ParseGlacierErrorFromJsonContent;
+import org.jclouds.http.HttpErrorHandler;
+import org.jclouds.http.annotation.ClientError;
+import org.jclouds.http.annotation.Redirection;
+import org.jclouds.http.annotation.ServerError;
+import org.jclouds.rest.ConfiguresHttpApi;
+import org.jclouds.rest.config.HttpApiModule;
+
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
+import com.google.inject.Provides;
+import com.google.inject.Scopes;
+
+/**
+ * Configures the mappings. Installs the Object and Parser modules.
+ */
+@ConfiguresHttpApi
+public class GlacierHttpApiModule extends HttpApiModule<GlacierClient> {
+
+   @Override
+   protected void configure() {
+      super.configure();
+      bind(RequestAuthorizeSignature.class).in(Scopes.SINGLETON);
+   }
+
+   @Provides
+   @TimeStamp
+   protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
+      return cache.get();
+   }
+
+   @Provides
+   @TimeStamp
+   Supplier<String> provideTimeStampCache(@Named(Constants.PROPERTY_SESSION_INTERVAL) long seconds,
+         final DateService dateService) {
+      return Suppliers.memoizeWithExpiration(new Supplier<String>() {
+
+         @Override
+         public String get() {
+            return dateService.iso8601SecondsDateFormat().replaceAll("[-:]", "");
+         }
+      }, seconds, TimeUnit.SECONDS);
+   }
+
+   @Override
+   protected void bindErrorHandlers() {
+      bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ParseGlacierErrorFromJsonContent.class);
+      bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(ParseGlacierErrorFromJsonContent.class);
+      bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(ParseGlacierErrorFromJsonContent.class);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/9df3a389/glacier/src/main/java/org/jclouds/glacier/config/GlacierRestClientModule.java
----------------------------------------------------------------------
diff --git a/glacier/src/main/java/org/jclouds/glacier/config/GlacierRestClientModule.java b/glacier/src/main/java/org/jclouds/glacier/config/GlacierRestClientModule.java
deleted file mode 100644
index 1d771c6..0000000
--- a/glacier/src/main/java/org/jclouds/glacier/config/GlacierRestClientModule.java
+++ /dev/null
@@ -1,79 +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.config;
-
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Named;
-
-import org.jclouds.Constants;
-import org.jclouds.date.DateService;
-import org.jclouds.date.TimeStamp;
-import org.jclouds.glacier.GlacierAsyncClient;
-import org.jclouds.glacier.GlacierClient;
-import org.jclouds.glacier.filters.RequestAuthorizeSignature;
-import org.jclouds.glacier.handlers.ParseGlacierErrorFromJsonContent;
-import org.jclouds.http.HttpErrorHandler;
-import org.jclouds.http.annotation.ClientError;
-import org.jclouds.http.annotation.Redirection;
-import org.jclouds.http.annotation.ServerError;
-import org.jclouds.rest.ConfiguresRestClient;
-import org.jclouds.rest.config.RestClientModule;
-
-import com.google.common.base.Supplier;
-import com.google.common.base.Suppliers;
-import com.google.inject.Provides;
-import com.google.inject.Scopes;
-
-/**
- * Configures the mappings. Installs the Object and Parser modules.
- */
-@ConfiguresRestClient
-public class GlacierRestClientModule extends RestClientModule<GlacierClient, GlacierAsyncClient> {
-
-   @Override
-   protected void configure() {
-      super.configure();
-      bind(RequestAuthorizeSignature.class).in(Scopes.SINGLETON);
-   }
-
-   @Provides
-   @TimeStamp
-   protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
-      return cache.get();
-   }
-
-   @Provides
-   @TimeStamp
-   Supplier<String> provideTimeStampCache(@Named(Constants.PROPERTY_SESSION_INTERVAL) long seconds,
-         final DateService dateService) {
-      return Suppliers.memoizeWithExpiration(new Supplier<String>() {
-
-         @Override
-         public String get() {
-            return dateService.iso8601SecondsDateFormat().replaceAll("[-:]", "");
-         }
-      }, seconds, TimeUnit.SECONDS);
-   }
-
-   @Override
-   protected void bindErrorHandlers() {
-      bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ParseGlacierErrorFromJsonContent.class);
-      bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(ParseGlacierErrorFromJsonContent.class);
-      bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(ParseGlacierErrorFromJsonContent.class);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-aws/blob/9df3a389/glacier/src/test/java/org/jclouds/glacier/GlacierClientMockTest.java
----------------------------------------------------------------------
diff --git a/glacier/src/test/java/org/jclouds/glacier/GlacierClientMockTest.java b/glacier/src/test/java/org/jclouds/glacier/GlacierClientMockTest.java
index 19dda1c..5a83b32 100644
--- a/glacier/src/test/java/org/jclouds/glacier/GlacierClientMockTest.java
+++ b/glacier/src/test/java/org/jclouds/glacier/GlacierClientMockTest.java
@@ -71,7 +71,7 @@ import com.squareup.okhttp.mockwebserver.RecordedRequest;
 /**
  * Mock test for Glacier.
  */
-@Test(singleThreaded = true, groups = {"mock"})
+@Test(singleThreaded = true, groups = {"mock"}, testName = "GlacierClientMockTest")
 public class GlacierClientMockTest {
 
    private static final String REQUEST_ID = "AAABZpJrTyioDC_HsOmHae8EZp_uBSJr6cnGOLKp_XJCl-Q";