Fixes to Cloud Files examples from PR #50
diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java
index 3eb1434..a6539dd 100644
--- a/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java
@@ -62,6 +62,7 @@
CloudFilesPublish.main(args);
CreateContainer.main(args);
ListContainers.main(args);
+ GenerateTempURL.main(args);
UploadObjects.main(args);
ListObjects.main(args);
CrossOriginResourceSharingContainer.main(args);
diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CloudFilesPublish.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CloudFilesPublish.java
index bc69671..0e00cab 100644
--- a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CloudFilesPublish.java
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CloudFilesPublish.java
@@ -23,6 +23,8 @@
import static org.jclouds.examples.rackspace.cloudfiles.Constants.PROVIDER;
import static org.jclouds.examples.rackspace.cloudfiles.Constants.REGION;
import static org.jclouds.examples.rackspace.cloudfiles.Constants.SUFFIX;
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_ERROR;
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_INDEX;
import java.io.Closeable;
import java.io.File;
@@ -85,10 +87,10 @@
*/
private void createContainer() {
System.out.format("Create Container%n");
- // create a Multimap for the static web headers
+
Multimap<String, String> enableStaticWebHeaders =
- ImmutableMultimap.of(SwiftHeaders.STATIC_WEB_INDEX, FILENAME + SUFFIX,
- SwiftHeaders.STATIC_WEB_ERROR, "error.html");
+ ImmutableMultimap.of(STATIC_WEB_INDEX, FILENAME + SUFFIX,
+ STATIC_WEB_ERROR, "error.html");
CreateContainerOptions opts = new CreateContainerOptions().headers(enableStaticWebHeaders);
cloudFiles.getContainerApiForRegion(REGION).create(CONTAINER_PUBLISH, opts);
diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GenerateTempURL.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GenerateTempURL.java
index 72e0fb2..4abfe93 100644
--- a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GenerateTempURL.java
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GenerateTempURL.java
@@ -18,11 +18,9 @@
*/
package org.jclouds.examples.rackspace.cloudfiles;
-import com.google.common.base.Charsets;
import com.google.common.io.ByteSource;
import com.google.common.io.Closeables;
import com.google.common.io.Files;
-
import org.jclouds.ContextBuilder;
import org.jclouds.blobstore.BlobStore;
import org.jclouds.blobstore.BlobStoreContext;
@@ -32,7 +30,7 @@
import org.jclouds.http.HttpResponseException;
import org.jclouds.io.Payload;
import org.jclouds.io.Payloads;
-import org.jclouds.util.Strings2;
+import org.jclouds.openstack.swift.v1.blobstore.RegionScopedBlobStoreContext;
import java.io.Closeable;
import java.io.File;
@@ -40,6 +38,7 @@
import static org.jclouds.examples.rackspace.cloudfiles.Constants.CONTAINER;
import static org.jclouds.examples.rackspace.cloudfiles.Constants.PROVIDER;
+import static org.jclouds.examples.rackspace.cloudfiles.Constants.REGION;
/**
* The Temporary URL feature (TempURL) allows you to create limited-time Internet addresses which allow you to grant
@@ -62,7 +61,7 @@
private static final int TEN_MINUTES = 10 * 60;
private final BlobStore blobStore;
- private final BlobStoreContext blobStoreContext;
+ private final RegionScopedBlobStoreContext blobStoreContext;
/**
* To get a username and API key see http://jclouds.apache.org/guides/rackspace/
@@ -89,8 +88,8 @@
public GenerateTempURL(String username, String apiKey) {
blobStoreContext = ContextBuilder.newBuilder(PROVIDER)
.credentials(username, apiKey)
- .buildView(BlobStoreContext.class);
- blobStore = blobStoreContext.getBlobStore();
+ .buildView(RegionScopedBlobStoreContext.class);
+ blobStore = blobStoreContext.blobStoreInRegion(REGION);
}
private void generatePutTempURL() throws IOException {
@@ -105,7 +104,7 @@
Blob blob = blobStore.blobBuilder(FILENAME).payload(payload).contentType("text/plain").build();
HttpRequest request = blobStoreContext.getSigner().signPutBlob(CONTAINER, blob, TEN_MINUTES);
- System.out.format(" %s %s", request.getMethod(), request.getEndpoint());
+ System.out.format(" %s %s%n", request.getMethod(), request.getEndpoint());
// PUT the file using jclouds
HttpResponse response = blobStoreContext.utils().http().invoke(request);
@@ -124,16 +123,18 @@
HttpRequest request = blobStoreContext.getSigner().signGetBlob(CONTAINER, FILENAME, TEN_MINUTES);
- System.out.format(" %s %s", request.getMethod(), request.getEndpoint());
+ System.out.format(" %s %s%n", request.getMethod(), request.getEndpoint());
// GET the file using jclouds
File file = File.createTempFile(FILENAME, ".tmp");
+ Payload payload = blobStoreContext.utils().http().invoke(request).getPayload();
+
try {
- String content = Strings2.toString(blobStoreContext.utils().http().invoke(request).getPayload());
- Files.write(content, file, Charsets.UTF_8);
-
+ Files.asByteSink(file).writeFrom(payload.openStream());
+
System.out.format(" GET Success (%s)%n", file.getAbsolutePath());
} finally {
+ payload.release();
file.delete();
}
}
@@ -143,7 +144,7 @@
HttpRequest request = blobStoreContext.getSigner().signRemoveBlob(CONTAINER, FILENAME);
- System.out.format(" %s %s", request.getMethod(), request.getEndpoint());
+ System.out.format(" %s %s%n", request.getMethod(), request.getEndpoint());
// DELETE the file using jclouds
HttpResponse response = blobStoreContext.utils().http().invoke(request);
diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GetContainer.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GetContainer.java
index 1f128e4..0d62448 100644
--- a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GetContainer.java
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GetContainer.java
@@ -33,9 +33,6 @@
/**
* Create a Cloud Files container with some metadata associated with it.
- *
- * @author Everett Toews
- * @author Jeremy Daggett
*/
public class GetContainer implements Closeable {
private final CloudFilesApi cloudFiles;
diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/UploadDirectoryToCDN.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/UploadDirectoryToCDN.java
index 1527a05..ad04f95 100644
--- a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/UploadDirectoryToCDN.java
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/UploadDirectoryToCDN.java
@@ -18,29 +18,8 @@
*/
package org.jclouds.examples.rackspace.cloudfiles;
-import static com.google.common.base.Preconditions.checkArgument;
-import static java.util.concurrent.Executors.newFixedThreadPool;
-import static org.jclouds.examples.rackspace.cloudfiles.Constants.PROVIDER;
-import static org.jclouds.examples.rackspace.cloudfiles.Constants.REGION;
-
-import java.io.Closeable;
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.util.List;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-
-import org.jclouds.ContextBuilder;
-import org.jclouds.blobstore.BlobStore;
-import org.jclouds.blobstore.BlobStoreContext;
-import org.jclouds.blobstore.domain.Blob;
-import org.jclouds.io.Payloads;
-import org.jclouds.openstack.swift.v1.options.UpdateContainerOptions;
-import org.jclouds.openstack.swift.v1.reference.SwiftHeaders;
-import org.jclouds.rackspace.cloudfiles.v1.CloudFilesApi;
-
import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.io.ByteSource;
@@ -51,6 +30,30 @@
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
+import org.jclouds.ContextBuilder;
+import org.jclouds.blobstore.BlobStore;
+import org.jclouds.blobstore.domain.Blob;
+import org.jclouds.domain.Location;
+import org.jclouds.io.Payloads;
+import org.jclouds.openstack.swift.v1.blobstore.RegionScopedBlobStoreContext;
+import org.jclouds.openstack.swift.v1.options.UpdateContainerOptions;
+import org.jclouds.rackspace.cloudfiles.v1.CloudFilesApi;
+
+import java.io.Closeable;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.collect.Iterables.getOnlyElement;
+import static java.util.concurrent.Executors.newFixedThreadPool;
+import static org.jclouds.examples.rackspace.cloudfiles.Constants.PROVIDER;
+import static org.jclouds.examples.rackspace.cloudfiles.Constants.REGION;
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_ERROR;
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_INDEX;
/**
* Upload an entire directory and all of its sub-directories to a Cloud Files container. The local directory hierarchy
@@ -87,9 +90,10 @@
}
public UploadDirectoryToCDN(String username, String apiKey) {
- ContextBuilder builder = ContextBuilder.newBuilder(PROVIDER)
- .credentials(username, apiKey);
- blobStore = builder.buildView(BlobStoreContext.class).getBlobStore();
+ RegionScopedBlobStoreContext context = ContextBuilder.newBuilder(PROVIDER)
+ .credentials(username, apiKey)
+ .buildView(RegionScopedBlobStoreContext.class);
+ blobStore = context.blobStoreInRegion(REGION);
cloudFiles = blobStore.getContext().unwrapApi(CloudFilesApi.class);
}
@@ -99,10 +103,12 @@
private void uploadDirectory(String dirPath, String container) throws InterruptedException, ExecutionException {
File dir = new File(dirPath);
checkArgument(dir.isDirectory(), "%s is not a directory", dirPath);
-
+
System.out.format("Uploading %s to %s", dirPath, container);
- blobStore.createContainerInLocation(null, container);
+ // There is only one assignable location because we are using the RegionScopedBlobStoreContext
+ Location location = getOnlyElement(blobStore.listAssignableLocations());
+ blobStore.createContainerInLocation(location, container);
List<BlobDetail> blobDetails = Lists.newArrayList();
generateFileList(dir, "", blobDetails);
@@ -171,8 +177,8 @@
private void enableCdnContainer(String container) {
System.out.format("Enable CDN%n");
Multimap<String, String> enableStaticWebHeaders =
- ImmutableMultimap.of(SwiftHeaders.STATIC_WEB_INDEX, "index.html",
- SwiftHeaders.STATIC_WEB_ERROR, "error.html");
+ ImmutableMultimap.of(STATIC_WEB_INDEX, "index.html",
+ STATIC_WEB_ERROR, "error.html");
UpdateContainerOptions opts = new UpdateContainerOptions().headers(enableStaticWebHeaders);
cloudFiles.getContainerApiForRegion(REGION).update(container, opts);