JCLOUDS-457: Multiple fixes

This commit addresses some problems found in the code:

- Now VaultMetadata returns a copy of the creation date instead
of their own instance.

- Added a checkNotNull for PaginatedVaultCollection iterable.

- Added a test for listVaults with an empty list of vaults.
diff --git a/glacier/src/main/java/org/jclouds/glacier/domain/PaginatedVaultCollection.java b/glacier/src/main/java/org/jclouds/glacier/domain/PaginatedVaultCollection.java
index f39e02f..8f0eae4 100644
--- a/glacier/src/main/java/org/jclouds/glacier/domain/PaginatedVaultCollection.java
+++ b/glacier/src/main/java/org/jclouds/glacier/domain/PaginatedVaultCollection.java
@@ -16,6 +16,8 @@
  */
 package org.jclouds.glacier.domain;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import java.beans.ConstructorProperties;
 import java.util.Iterator;
 
@@ -37,7 +39,7 @@
 
    @ConstructorProperties({ "VaultList", "Marker" })
    public PaginatedVaultCollection(Iterable<VaultMetadata> vaults, String marker) {
-      this.vaults = vaults;
+      this.vaults = checkNotNull(vaults, "vaults");
       this.marker = marker;
    }
 
diff --git a/glacier/src/main/java/org/jclouds/glacier/domain/VaultMetadata.java b/glacier/src/main/java/org/jclouds/glacier/domain/VaultMetadata.java
index 6a6c5fd..0acb20c 100644
--- a/glacier/src/main/java/org/jclouds/glacier/domain/VaultMetadata.java
+++ b/glacier/src/main/java/org/jclouds/glacier/domain/VaultMetadata.java
@@ -51,7 +51,7 @@
          long numberOfArchives, long sizeInBytes) {
       this.vaultName = checkNotNull(vaultName, "vaultName");
       this.vaultARN = checkNotNull(vaultARN, "vaultARN");
-      this.creationDate = checkNotNull(creationDate, "creationDate");
+      this.creationDate = (Date) checkNotNull(creationDate, "creationDate").clone();
       this.lastInventoryDate = lastInventoryDate;
       this.numberOfArchives = numberOfArchives;
       this.sizeInBytes = sizeInBytes;
@@ -66,7 +66,7 @@
    }
 
    public Date getCreationDate() {
-      return creationDate;
+      return (Date) creationDate.clone();
    }
 
    public Date getLastInventoryDate() {
diff --git a/glacier/src/test/java/org/jclouds/glacier/GlacierClientMockTest.java b/glacier/src/test/java/org/jclouds/glacier/GlacierClientMockTest.java
index acc6a39..6efb566 100644
--- a/glacier/src/test/java/org/jclouds/glacier/GlacierClientMockTest.java
+++ b/glacier/src/test/java/org/jclouds/glacier/GlacierClientMockTest.java
@@ -186,6 +186,17 @@
    }
 
    @Test
+   public void testListVaultsWithEmptyList() throws InterruptedException, IOException {
+      MockResponse mr = buildBaseResponse(200);
+      mr.addHeader(HttpHeaders.CONTENT_TYPE, MediaType.JSON_UTF_8);
+      mr.setBody(getResponseBody("/json/listVaultsWithEmptyListResponseBody.json"));
+      mr.addHeader(HttpHeaders.CONTENT_LENGTH, mr.getBody().length);
+      server.enqueue(mr);
+
+      assertTrue(client.listVaults().isEmpty());
+   }
+
+   @Test
    public void testListVaultsWithQueryParams() throws InterruptedException, IOException {
       MockResponse mr = buildBaseResponse(200);
       mr.addHeader(HttpHeaders.CONTENT_TYPE, MediaType.JSON_UTF_8);
diff --git a/glacier/src/test/resources/json/listVaultsWithEmptyListResponseBody.json b/glacier/src/test/resources/json/listVaultsWithEmptyListResponseBody.json
new file mode 100644
index 0000000..0eb76a2
--- /dev/null
+++ b/glacier/src/test/resources/json/listVaultsWithEmptyListResponseBody.json
@@ -0,0 +1,4 @@
+{
+  "Marker": null,
+  "VaultList": []
+}