You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2015/08/21 03:10:35 UTC

[2/4] jclouds-labs-google git commit: JCLOUDS-929: Plumb delimiter and prefix to GCS.

JCLOUDS-929: Plumb delimiter and prefix to GCS.


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/commit/6e00fb45
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/tree/6e00fb45
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/diff/6e00fb45

Branch: refs/heads/master
Commit: 6e00fb45fa06db534fef780f9e590b9f912f24f4
Parents: 082fc9a
Author: Timur Alperovich <ti...@gmail.com>
Authored: Thu Aug 20 15:29:41 2015 -0700
Committer: Timur Alperovich <ti...@gmail.com>
Committed: Thu Aug 20 17:55:48 2015 -0700

----------------------------------------------------------------------
 ...ListContainerOptionsToListObjectOptions.java | 11 ++++++-
 .../functions/ObjectListToStorageMetadata.java  | 30 ++++++++------------
 ...loudStorageContainerIntegrationLiveTest.java | 10 -------
 3 files changed, 22 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/6e00fb45/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java
index 581e9ce..15b5f4f 100644
--- a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java
+++ b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/BlobStoreListContainerOptionsToListObjectOptions.java
@@ -26,18 +26,27 @@ import com.google.common.base.Function;
 public class BlobStoreListContainerOptionsToListObjectOptions implements
          Function<ListContainerOptions, ListObjectOptions> {
    public ListObjectOptions apply(ListContainerOptions from) {
+      if (from.getDir() != null && (from.getPrefix() != null || from.getDelimiter() != null)) {
+         throw new IllegalArgumentException("Cannot pass both directory and prefix/delimiter");
+      }
       checkNotNull(from, "set options to instance NONE instead of passing null");
       ListObjectOptions httpOptions = new ListObjectOptions();
 
-      if (!from.isRecursive()) {
+      if (!from.isRecursive() && from.getDelimiter() == null) {
          httpOptions = httpOptions.delimiter("/");
       }
+      if (from.getDelimiter() != null) {
+         httpOptions = httpOptions.delimiter(from.getDelimiter());
+      }
       if (from.getDir() != null) {
          String path = from.getDir();
          if (!path.endsWith("/"))
             path += "/";
          httpOptions = httpOptions.prefix(path);
       }
+      if (from.getPrefix() != null) {
+         httpOptions.prefix(from.getPrefix());
+      }
       if (from.getMarker() != null) {
          httpOptions = httpOptions.pageToken(from.getMarker());
       }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/6e00fb45/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java
index 22f00da..4f7f1d0 100644
--- a/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java
+++ b/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/functions/ObjectListToStorageMetadata.java
@@ -16,22 +16,22 @@
  */
 package org.jclouds.googlecloudstorage.blobstore.functions;
 
-import java.util.Map;
+import java.util.SortedSet;
 
 import javax.inject.Inject;
 
-import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.MutableStorageMetadata;
 import org.jclouds.blobstore.domain.PageSet;
 import org.jclouds.blobstore.domain.StorageMetadata;
 import org.jclouds.blobstore.domain.StorageType;
+import org.jclouds.blobstore.domain.internal.MutableStorageMetadataImpl;
 import org.jclouds.blobstore.domain.internal.PageSetImpl;
-import org.jclouds.blobstore.domain.internal.StorageMetadataImpl;
 import org.jclouds.googlecloudstorage.domain.GoogleCloudStorageObject;
 import org.jclouds.googlecloudstorage.domain.ListPageWithPrefixes;
 
 import com.google.common.base.Function;
-import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
 
 public class ObjectListToStorageMetadata
       implements Function<ListPageWithPrefixes<GoogleCloudStorageObject>, PageSet<? extends StorageMetadata>> {
@@ -46,19 +46,13 @@ public class ObjectListToStorageMetadata
          from = ListPageWithPrefixes.create(null, null, null);
       }
 
-      return new PageSetImpl<StorageMetadata>(Iterables.transform(Iterables.transform(from, object2blobMd),
-               new Function<BlobMetadata, StorageMetadata>() {
-                  public StorageMetadata apply(BlobMetadata input) {
-                     Map<String, String> userMetaData = (input != null && input.getUserMetadata() != null) ? input
-                              .getUserMetadata() : ImmutableMap.<String, String> of();
-                     if (input.getContentMetadata().getContentType().equals("application/directory")) {
-                        return new StorageMetadataImpl(StorageType.RELATIVE_PATH, input.getProviderId(), input
-                                 .getName(), input.getLocation(), input.getUri(), input.getETag(), input
-                                 .getCreationDate(), input.getLastModified(), userMetaData,
-                                 input.getSize());
-                     }
-                     return input;
-                  }
-               }), from.nextPageToken());
+      SortedSet<StorageMetadata> results = Sets.<StorageMetadata> newTreeSet(Iterables.transform(from, object2blobMd));
+      for (String prefix : from.prefixes()) {
+          MutableStorageMetadata metadata = new MutableStorageMetadataImpl();
+          metadata.setType(StorageType.RELATIVE_PATH);
+          metadata.setName(prefix);
+          results.add(metadata);
+      }
+      return new PageSetImpl<StorageMetadata>(results, from.nextPageToken());
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/6e00fb45/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java b/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
index d4f5fb8..c129ae8 100644
--- a/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
+++ b/google-cloud-storage/src/test/java/org/jclouds/googlecloudstorage/blobstore/integration/GoogleCloudStorageContainerIntegrationLiveTest.java
@@ -105,14 +105,4 @@ public class GoogleCloudStorageContainerIntegrationLiveTest extends BaseContaine
    public void testListMarkerAfterLastKey() throws Exception {
       throw new SkipException("cannot specify arbitrary markers");
    }
-
-   @Override
-   public void testContainerListWithPrefix() {
-      throw new SkipException("Prefix option has not been plumbed down to GCS");
-   }
-
-   @Override
-   public void testDelimiterList() {
-      throw new SkipException("Prefix option has not been plumbed down to GCS");
-   }
 }