Updated Cloud Files examples for 1.7.3
diff --git a/rackspace/pom.xml b/rackspace/pom.xml
index 9ed2fe2..939bf52 100644
--- a/rackspace/pom.xml
+++ b/rackspace/pom.xml
@@ -22,11 +22,11 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.jclouds.examples</groupId>
<artifactId>rackspace-examples</artifactId>
- <version>1.7.3-SNAPSHOT</version>
+ <version>1.7.4-SNAPSHOT</version>
<name>rackspace-examples</name>
<properties>
- <jclouds.version>1.7.2</jclouds.version>
+ <jclouds.version>1.7.3</jclouds.version>
</properties>
<dependencies>
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 41e88f5..bc69671 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
@@ -34,11 +34,13 @@
import org.jclouds.io.Payloads;
import org.jclouds.openstack.swift.v1.features.ObjectApi;
import org.jclouds.openstack.swift.v1.options.CreateContainerOptions;
+import org.jclouds.openstack.swift.v1.reference.SwiftHeaders;
import org.jclouds.rackspace.cloudfiles.v1.CloudFilesApi;
import org.jclouds.rackspace.cloudfiles.v1.features.CDNApi;
import com.google.common.base.Charsets;
-import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.Multimap;
import com.google.common.io.ByteSource;
import com.google.common.io.Closeables;
import com.google.common.io.Files;
@@ -83,8 +85,13 @@
*/
private void createContainer() {
System.out.format("Create Container%n");
-
- cloudFiles.containerApiInRegion(REGION).createIfAbsent(CONTAINER_PUBLISH, CreateContainerOptions.NONE);
+ // 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");
+
+ CreateContainerOptions opts = new CreateContainerOptions().headers(enableStaticWebHeaders);
+ cloudFiles.getContainerApiForRegion(REGION).create(CONTAINER_PUBLISH, opts);
System.out.format(" %s%n", CONTAINER_PUBLISH);
}
@@ -100,14 +107,12 @@
try {
Files.write("Hello Cloud Files", tempFile, Charsets.UTF_8);
- ObjectApi objectApi = cloudFiles.objectApiInRegionForContainer(REGION, CONTAINER_PUBLISH);
+ ObjectApi objectApi = cloudFiles.getObjectApiForRegionAndContainer(REGION, CONTAINER_PUBLISH);
ByteSource byteSource = Files.asByteSource(tempFile);
Payload payload = Payloads.newByteSourcePayload(byteSource);
- objectApi.replace(FILENAME + SUFFIX, payload, ImmutableMap.<String, String>of());
-
- System.out.format(" %s%s%n", FILENAME, SUFFIX);
+ objectApi.put(FILENAME + SUFFIX, payload);
} finally {
tempFile.delete();
}
@@ -119,8 +124,8 @@
*/
private void enableCdnContainer() {
System.out.format("Enable CDN Container%n");
-
- CDNApi cdnApi = cloudFiles.cdnApiInRegion(REGION);
+
+ CDNApi cdnApi = cloudFiles.getCDNApiForRegion(REGION);
URI cdnURI = cdnApi.enable(CONTAINER_PUBLISH);
System.out.format(" Go to %s/%s%s%n", cdnURI, FILENAME, SUFFIX);
diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CreateContainer.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CreateContainer.java
index e982389..a678739 100644
--- a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CreateContainer.java
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CreateContainer.java
@@ -71,7 +71,7 @@
CreateContainerOptions options = CreateContainerOptions.Builder
.metadata(ImmutableMap.of("key1", "value1", "key2", "value2"));
- cloudFiles.containerApiInRegion(REGION).createIfAbsent(CONTAINER, options);
+ cloudFiles.getContainerApiForRegion(REGION).create(CONTAINER, options);
System.out.format(" %s%n", CONTAINER);
}
diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CrossOriginResourceSharingContainer.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CrossOriginResourceSharingContainer.java
index 0de0ff4..7d74d99 100644
--- a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CrossOriginResourceSharingContainer.java
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CrossOriginResourceSharingContainer.java
@@ -33,6 +33,8 @@
import org.jclouds.rackspace.cloudfiles.v1.CloudFilesApi;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.Multimap;
import com.google.common.io.Closeables;
/**
@@ -71,7 +73,7 @@
cloudFiles = ContextBuilder.newBuilder(PROVIDER)
.credentials(username, apiKey)
.buildApi(CloudFilesApi.class);
- containerApi = cloudFiles.containerApiInRegion(REGION);
+ containerApi = cloudFiles.getContainerApiForRegion(REGION);
}
/**
@@ -85,13 +87,13 @@
private void createCorsContainer() {
System.out.format("Create Cross Origin Resource Sharing Container%n");
- Map<String, String> corsMetadata = ImmutableMap.of(
+ Multimap<String, String> headers = ImmutableMultimap.of(
"Access-Control-Allow-Origin", "*",
"Access-Control-Max-Age", "600",
"Access-Control-Allow-Headers", "X-My-Header");
- CreateContainerOptions options = CreateContainerOptions.Builder.metadata(corsMetadata);
+ CreateContainerOptions options = CreateContainerOptions.Builder.headers(headers);
- containerApi.createIfAbsent(CONTAINER, options);
+ containerApi.create(CONTAINER, options);
System.out.format(" %s%n", CONTAINER);
Container container = containerApi.get(CONTAINER);
diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/DeleteObjectsAndContainer.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/DeleteObjectsAndContainer.java
index 9337e46..1d69b13 100644
--- a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/DeleteObjectsAndContainer.java
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/DeleteObjectsAndContainer.java
@@ -76,13 +76,13 @@
private void deleteObjectsAndContainer() {
System.out.format("Delete Container%n");
- List<Container> containers = cloudFiles.containerApiInRegion(REGION)
+ List<Container> containers = cloudFiles.getContainerApiForRegion(REGION)
.list(ListContainerOptions.Builder.prefix(CONTAINER)).toList();
for (Container container: containers) {
System.out.format(" %s%n", container.getName());
- ObjectApi objectApi = cloudFiles.objectApiInRegionForContainer(REGION, container.getName());
+ ObjectApi objectApi = cloudFiles.getObjectApiForRegionAndContainer(REGION, container.getName());
ObjectList objects = objectApi.list(ListContainerOptions.NONE);
for (SwiftObject object: objects) {
@@ -90,7 +90,7 @@
objectApi.delete(object.getName());
}
- cloudFiles.containerApiInRegion(REGION).deleteIfEmpty(container.getName());
+ cloudFiles.getContainerApiForRegion(REGION).deleteIfEmpty(container.getName());
}
}
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 b24f981..72e0fb2 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
@@ -128,10 +128,14 @@
// GET the file using jclouds
File file = File.createTempFile(FILENAME, ".tmp");
- String content = Strings2.toString(blobStoreContext.utils().http().invoke(request).getPayload());
- Files.write(content, file, Charsets.UTF_8);
-
- System.out.format(" GET Success (%s)%n", file.getAbsolutePath());
+ try {
+ String content = Strings2.toString(blobStoreContext.utils().http().invoke(request).getPayload());
+ Files.write(content, file, Charsets.UTF_8);
+
+ System.out.format(" GET Success (%s)%n", file.getAbsolutePath());
+ } finally {
+ file.delete();
+ }
}
private void generateDeleteTempURL() throws IOException {
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
new file mode 100644
index 0000000..1f128e4
--- /dev/null
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GetContainer.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.jclouds.examples.rackspace.cloudfiles;
+
+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;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+import org.jclouds.ContextBuilder;
+import org.jclouds.openstack.swift.v1.domain.Container;
+import org.jclouds.rackspace.cloudfiles.v1.CloudFilesApi;
+
+import com.google.common.io.Closeables;
+
+/**
+ * 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;
+
+ /**
+ * To get a username and API key see http://jclouds.apache.org/guides/rackspace/
+ *
+ * The first argument (args[0]) must be your username
+ * The second argument (args[1]) must be your API key
+ */
+ public static void main(String[] args) throws IOException {
+ GetContainer getContainer = new GetContainer(args[0], args[1]);
+
+ try {
+ getContainer.getContainer();
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ finally {
+ getContainer.close();
+ }
+ }
+
+ public GetContainer(String username, String apiKey) {
+ cloudFiles = ContextBuilder.newBuilder(PROVIDER)
+ .credentials(username, apiKey)
+ .buildApi(CloudFilesApi.class);
+ }
+
+ private void getContainer() {
+ System.out.format("Get Container%n");
+
+ Container container = cloudFiles.getContainerApiForRegion(REGION).get(CONTAINER);
+ System.out.format(" %s%n", container);
+ }
+
+ /**
+ * Always close your service when you're done with it.
+ */
+ public void close() throws IOException {
+ Closeables.close(cloudFiles, true);
+ }
+}
diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GetObject.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GetObject.java
index fd6e88a..e5dd3f4 100644
--- a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GetObject.java
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/GetObject.java
@@ -72,7 +72,7 @@
private void getObject() {
System.out.format("Get Object%n");
- ObjectApi objectApi = cloudFiles.objectApiInRegionForContainer(REGION, CONTAINER);
+ ObjectApi objectApi = cloudFiles.getObjectApiForRegionAndContainer(REGION, CONTAINER);
SwiftObject object = objectApi.get("uploadObjectFromFile.txt", GetOptions.NONE);
System.out.format(" %s%n", object);
diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/ListContainers.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/ListContainers.java
index 4483290..14187e7 100644
--- a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/ListContainers.java
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/ListContainers.java
@@ -67,7 +67,7 @@
private void listContainers() {
System.out.format("List Containers%n");
- List<Container> containers = cloudFiles.containerApiInRegion(REGION).list().toList();
+ List<Container> containers = cloudFiles.getContainerApiForRegion(REGION).list().toList();
for (Container container: containers) {
System.out.format(" %s%n", container);
}
diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/ListObjects.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/ListObjects.java
index b53a89c..81512d9 100644
--- a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/ListObjects.java
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/ListObjects.java
@@ -71,7 +71,7 @@
private void listObjects() {
System.out.format("List Objects%n");
- ObjectApi objectApi = cloudFiles.objectApiInRegionForContainer(REGION, CONTAINER);
+ ObjectApi objectApi = cloudFiles.getObjectApiForRegionAndContainer(REGION, CONTAINER);
ObjectList objects = objectApi.list(ListContainerOptions.NONE);
for (SwiftObject object: objects) {
@@ -82,7 +82,7 @@
private void listObjectsWithFiltering() {
System.out.format("List Objects With Filtering%n");
- ObjectApi objectApi = cloudFiles.objectApiInRegionForContainer(REGION, CONTAINER);
+ ObjectApi objectApi = cloudFiles.getObjectApiForRegionAndContainer(REGION, CONTAINER);
ListContainerOptions filter = ListContainerOptions.Builder.prefix("createObjectFromString");
ObjectList objects = objectApi.list(filter);
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 30a11a6..1527a05 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
@@ -36,11 +36,13 @@
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 org.jclouds.rackspace.cloudfiles.v1.features.CDNApi;
-import org.jclouds.rackspace.cloudfiles.v1.options.UpdateCDNContainerOptions;
+import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
import com.google.common.io.ByteSource;
import com.google.common.io.Closeables;
import com.google.common.io.Files;
@@ -168,12 +170,15 @@
*/
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");
- CDNApi cdnApi = cloudFiles.cdnApiInRegion(REGION);
- URI cdnURI = cdnApi.enable(container);
+ UpdateContainerOptions opts = new UpdateContainerOptions().headers(enableStaticWebHeaders);
+ cloudFiles.getContainerApiForRegion(REGION).update(container, opts);
- cdnApi.update(container, UpdateCDNContainerOptions.Builder.staticWebsiteIndexPage("index.html"));
-
+ // enable the CDN container
+ URI cdnURI = cloudFiles.getCDNApiForRegion(REGION).enable(container);
System.out.format(" Go to %s/%n", cdnURI);
}
@@ -197,7 +202,6 @@
this.toBeUploadedBlobDetail = toBeUploadedBlobDetail;
}
- @Override
public BlobDetail call() throws Exception {
ByteSource byteSource = Files.asByteSource(toBeUploadedBlobDetail.getLocalFile());
@@ -218,12 +222,11 @@
* the user of upload progress.
*/
private class BlobUploaderCallback implements FutureCallback<BlobDetail> {
- @Override
+
public void onSuccess(BlobDetail result) {
System.out.format(".");
}
- @Override
public void onFailure(Throwable t) {
System.out.format("X %s", t);
}
diff --git a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/UploadObjects.java b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/UploadObjects.java
index 1363b58..aadcd61 100644
--- a/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/UploadObjects.java
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/UploadObjects.java
@@ -37,7 +37,6 @@
import org.jclouds.rackspace.cloudfiles.v1.CloudFilesApi;
import com.google.common.base.Charsets;
-import com.google.common.collect.ImmutableMap;
import com.google.common.io.ByteSource;
import com.google.common.io.Closeables;
import com.google.common.io.Files;
@@ -96,8 +95,8 @@
ByteSource byteSource = Files.asByteSource(tempFile);
Payload payload = Payloads.newByteSourcePayload(byteSource);
- cloudFiles.objectApiInRegionForContainer(REGION, CONTAINER)
- .replace(filename + suffix, payload, ImmutableMap.<String, String> of());
+ cloudFiles.getObjectApiForRegionAndContainer(REGION, CONTAINER)
+ .put(filename + suffix, payload);
System.out.format(" %s%s%n", filename, suffix);
} finally {
@@ -116,8 +115,7 @@
ByteSource source = ByteSource.wrap("uploadObjectFromString".getBytes());
Payload payload = Payloads.newByteSourcePayload(source);
- cloudFiles.objectApiInRegionForContainer(REGION, CONTAINER)
- .replace(filename, payload, ImmutableMap.<String, String>of());
+ cloudFiles.getObjectApiForRegionAndContainer(REGION, CONTAINER).put(filename, payload);
System.out.format(" %s%n", filename);
}