Updated Branches:
  refs/heads/1.6.x 9e8d3b1c9 -> d344e52bf

Introduce listing blobs with detailed metadata

TODO: partial information returned already by list()?


Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/commit/3000d85d
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/tree/3000d85d
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/diff/3000d85d

Branch: refs/heads/1.6.x
Commit: 3000d85dfcd104fba24d7b058aa0c3cf5db4c849
Parents: 9e8d3b1
Author: Andrew Gaul <[email protected]>
Authored: Thu Aug 1 11:22:35 2013 -0700
Committer: Andrew Gaul <[email protected]>
Committed: Wed Sep 25 21:46:10 2013 -0700

----------------------------------------------------------------------
 .../commands/blobstore/BlobListCommand.java     | 34 ++++++++++++++++++--
 .../commands/blobstore/BlobMetadataCommand.java | 21 +-----------
 .../blobstore/BlobStoreCommandWithOptions.java  | 25 ++++++++++++++
 3 files changed, 57 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/blob/3000d85d/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java
----------------------------------------------------------------------
diff --git 
a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java
 
b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java
index f541b60..c5c16eb 100644
--- 
a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java
+++ 
b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java
@@ -21,14 +21,19 @@ import java.io.PrintStream;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.Callable;
 
 import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
 
 import org.apache.felix.gogo.commands.Argument;
 import org.apache.felix.gogo.commands.Command;
 import org.apache.felix.gogo.commands.CommandException;
 import org.apache.felix.gogo.commands.Option;
 import org.jclouds.blobstore.BlobStore;
+import org.jclouds.blobstore.domain.BlobMetadata;
 import org.jclouds.blobstore.domain.PageSet;
 import org.jclouds.blobstore.domain.StorageMetadata;
 import org.jclouds.blobstore.options.ListContainerOptions;
@@ -47,11 +52,14 @@ public class BlobListCommand extends 
BlobStoreCommandWithOptions {
    @Argument(index = 1, name = "directoryPath", description = "List blobs only 
in this directory path", required = false)
    String directoryPath;
 
+   @Option(name = "-d", aliases = "--details", description = "Display blob 
details", required = false, multiValued = false)
+   boolean details;
+
    private static final PrintStream out = System.out;
 
    @Override
    protected Object doExecute() throws Exception {
-      BlobStore blobStore = getBlobStore();
+      final BlobStore blobStore = getBlobStore();
 
       ListContainerOptions options = ListContainerOptions.Builder.recursive();
       if (directoryPath != null) {
@@ -69,8 +77,28 @@ public class BlobListCommand extends 
BlobStoreCommandWithOptions {
          }
 
          Collections.sort(blobNames);
-         for (String blobName : blobNames) {
-            out.println(blobName);
+         if (details) {
+            ListeningExecutorService executor = 
blobStore.getContext().utils().userExecutor();
+            Collection<ListenableFuture<BlobMetadata>> futures = 
Lists.newArrayList();
+            for (final String blobName : blobNames) {
+               futures.add(executor.submit(new Callable<BlobMetadata>() {
+                  @Override
+                  public BlobMetadata call() {
+                     return blobStore.blobMetadata(containerName, blobName);
+                  }
+               }));
+            }
+            Collection<BlobMetadata> metadatas = 
Futures.allAsList(futures).get();
+
+            for (BlobMetadata metadata : metadatas) {
+                out.println(metadata.getName() + ":");
+                BlobStoreCommandWithOptions.printMetadata(out, 
metadata.getContentMetadata());
+                out.println();
+            }
+         } else {
+            for (String blobName : blobNames) {
+               out.println(blobName);
+            }
          }
 
          String marker = blobStoreMetadatas.getNextMarker();

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/blob/3000d85d/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobMetadataCommand.java
----------------------------------------------------------------------
diff --git 
a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobMetadataCommand.java
 
b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobMetadataCommand.java
index 0549e6b..915b531 100644
--- 
a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobMetadataCommand.java
+++ 
b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobMetadataCommand.java
@@ -22,7 +22,6 @@ import java.util.Date;
 import java.util.List;
 
 import com.google.common.collect.Lists;
-import com.google.common.io.BaseEncoding;
 
 import org.apache.felix.gogo.commands.Argument;
 import org.apache.felix.gogo.commands.Command;
@@ -57,29 +56,11 @@ public class BlobMetadataCommand extends 
BlobStoreCommandWithOptions {
             throw new KeyNotFoundException(containerName, blobName, "while 
getting metadata");
          }
 
-         ContentMetadata contentMetdata = blobMetadata.getContentMetadata();
          out.println(blobName + ":");
-
-         printMetadata("Content-Disposition", 
contentMetdata.getContentDisposition());
-         printMetadata("Content-Encoding", 
contentMetdata.getContentEncoding());
-         printMetadata("Content-Language", 
contentMetdata.getContentLanguage());
-         byte[] contentMD5 = contentMetdata.getContentMD5();
-         if (contentMD5 != null) {
-            printMetadata("Content-MD5",
-                  BaseEncoding.base16().lowerCase().encode(contentMD5));
-         }
-         printMetadata("Content-Type", contentMetdata.getContentType());
-         printMetadata("Expires", contentMetdata.getExpires());
-         printMetadata("Length", contentMetdata.getContentLength());
+         BlobStoreCommandWithOptions.printMetadata(out, 
blobMetadata.getContentMetadata());
 
          out.println("");
       }
       return null;
    }
-
-   private static void printMetadata(String key, Object value) {
-      if (value != null) {
-         out.println(String.format("    %s: %s", key, value));
-      }
-   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/blob/3000d85d/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandWithOptions.java
----------------------------------------------------------------------
diff --git 
a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandWithOptions.java
 
b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandWithOptions.java
index 28d104e..3bd5026 100644
--- 
a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandWithOptions.java
+++ 
b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandWithOptions.java
@@ -19,6 +19,7 @@ package org.jclouds.karaf.commands.blobstore;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.io.BaseEncoding;
 import com.google.inject.Module;
 import org.apache.felix.gogo.commands.Option;
 import org.apache.felix.service.command.CommandSession;
@@ -26,12 +27,14 @@ import org.jclouds.Constants;
 import org.jclouds.ContextBuilder;
 import org.jclouds.blobstore.BlobStore;
 import org.jclouds.blobstore.BlobStoreContext;
+import org.jclouds.io.ContentMetadata;
 import org.jclouds.karaf.utils.EnvHelper;
 import org.jclouds.karaf.utils.ServiceHelper;
 import org.jclouds.logging.log4j.config.Log4JLoggingModule;
 
 import java.io.IOException;
 import java.io.File;
+import java.io.PrintStream;
 import java.util.Collections;
 import java.util.List;
 
@@ -150,4 +153,26 @@ public abstract class BlobStoreCommandWithOptions extends 
BlobStoreCommandBase {
       }
       return blobStore;
    }
+
+
+   static void printMetadata(PrintStream out, ContentMetadata metadata) {
+      printMetadata(out, "Content-Disposition", 
metadata.getContentDisposition());
+      printMetadata(out, "Content-Encoding", metadata.getContentEncoding());
+      printMetadata(out, "Content-Language", metadata.getContentLanguage());
+      byte[] contentMD5 = metadata.getContentMD5();
+      if (contentMD5 != null) {
+         printMetadata(out, "Content-MD5",
+               BaseEncoding.base16().lowerCase().encode(contentMD5));
+      }
+      printMetadata(out, "Content-Type", metadata.getContentType());
+      printMetadata(out, "Expires", metadata.getExpires());
+      printMetadata(out, "Length", metadata.getContentLength());
+   }
+
+   static void printMetadata(PrintStream out, String key, Object value) {
+      if (value != null) {
+         out.println(String.format("    %s: %s", key, value));
+      }
+   }
+
 }

Reply via email to