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)); + } + } + }
