Updated Branches:
  refs/heads/master 48b0c1651 -> a5dab7061

Example to show how to enable CORS on a Container.


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

Branch: refs/heads/master
Commit: a5dab7061dec4a370984277e9db0e15e70865835
Parents: 48b0c16
Author: Everett Toews <[email protected]>
Authored: Tue Jun 4 11:13:29 2013 -0500
Committer: Everett Toews <[email protected]>
Committed: Tue Jun 4 11:28:49 2013 -0500

----------------------------------------------------------------------
 .../org/jclouds/examples/rackspace/SmokeTest.java  |    2 +
 .../CrossOriginResourceSharingContainer.java       |  133 +++++++++++++++
 2 files changed, 135 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-jclouds-examples/blob/a5dab706/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java
----------------------------------------------------------------------
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 6214e21..96b8dfa 100644
--- a/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java
+++ b/rackspace/src/main/java/org/jclouds/examples/rackspace/SmokeTest.java
@@ -38,6 +38,7 @@ import org.jclouds.examples.rackspace.clouddns.UpdateDomains;
 import org.jclouds.examples.rackspace.clouddns.UpdateRecords;
 import org.jclouds.examples.rackspace.cloudfiles.CloudFilesPublish;
 import org.jclouds.examples.rackspace.cloudfiles.CreateContainer;
+import 
org.jclouds.examples.rackspace.cloudfiles.CrossOriginResourceSharingContainer;
 import org.jclouds.examples.rackspace.cloudfiles.DeleteObjectsAndContainer;
 import org.jclouds.examples.rackspace.cloudfiles.ListContainers;
 import org.jclouds.examples.rackspace.cloudfiles.ListObjects;
@@ -90,6 +91,7 @@ public class SmokeTest {
       ListContainers.main(args);
       UploadObjects.main(args);
       ListObjects.main(args);
+      CrossOriginResourceSharingContainer.main(args);
       DeleteObjectsAndContainer.main(args);
 
       CreateVolumeAndAttach.main(args);

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-examples/blob/a5dab706/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CrossOriginResourceSharingContainer.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..f01a477
--- /dev/null
+++ 
b/rackspace/src/main/java/org/jclouds/examples/rackspace/cloudfiles/CrossOriginResourceSharingContainer.java
@@ -0,0 +1,133 @@
+/*
+ * 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 java.util.Map;
+
+import org.jclouds.ContextBuilder;
+import org.jclouds.blobstore.BlobStore;
+import org.jclouds.blobstore.BlobStoreContext;
+import org.jclouds.openstack.swift.CommonSwiftAsyncClient;
+import org.jclouds.openstack.swift.CommonSwiftClient;
+import org.jclouds.openstack.swift.domain.ContainerMetadata;
+import org.jclouds.openstack.swift.options.CreateContainerOptions;
+import org.jclouds.rest.RestContext;
+
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * Create an object storage container with Cross Origin Resource Sharing 
(CORS) allowed. CORS container headers allow
+ * users to upload files from one website--or origin--to your Cloud Files 
account. When you set the CORS headers on 
+ * your container, you tell Cloud Files which sites may post to your account, 
how often your container checks its 
+ * allowed sites list, and whether or not metadata headers can be passed with 
the objects.
+ *  
+ * @author Everett Toews
+ */
+public class CrossOriginResourceSharingContainer {
+   private BlobStore storage;
+   private RestContext<CommonSwiftClient, CommonSwiftAsyncClient> swift;
+
+   /**
+    * To get a username and API key see 
http://www.jclouds.org/documentation/quickstart/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) {
+      CrossOriginResourceSharingContainer corsContainer = new 
CrossOriginResourceSharingContainer();
+
+      try {
+         corsContainer.init(args);
+         corsContainer.createCorsContainer();
+         corsContainer.updateCorsContainer();
+      }
+      catch (Exception e) {
+         e.printStackTrace();
+      }
+      finally {
+         corsContainer.close();
+      }
+   }
+
+   private void init(String[] args) {
+      // The provider configures jclouds To use the Rackspace Cloud (US)
+      // To use the Rackspace Cloud (UK) set the provider to "cloudfiles-uk"
+      String provider = "cloudfiles-us";
+
+      String username = args[0];
+      String apiKey = args[1];
+
+      BlobStoreContext context = ContextBuilder.newBuilder(provider)
+            .credentials(username, apiKey)
+            .buildView(BlobStoreContext.class);
+      storage = context.getBlobStore();
+      swift = context.unwrap();
+   }
+
+   /**
+    * Create a Cross Origin Resource Sharing container.
+    * 
+    * Access-Control-Allow-Origin:  Which URLs can make Cross Origin Requests. 
Format is http://www.example.com. 
+    *                               Separate URLs with a space. An asterisk 
(*) allows all.
+    * Access-Control-Max-Age:       The maximum age for the browser to cache 
the options request, in seconds.
+    * Access-Control-Allow-Headers: Which custom metadata headers you allow to 
be assigned to objects in this container.
+    */
+   private void createCorsContainer() {
+      System.out.println("Create Cross Origin Resource Sharing Container");
+
+      Map<String, String> corsMetadata = ImmutableMap.of(
+            "Access-Control-Allow-Origin", "*",
+            "Access-Control-Max-Age", "600",
+            "Access-Control-Allow-Headers", "X-My-Header");
+      CreateContainerOptions options = 
CreateContainerOptions.Builder.withMetadata(corsMetadata);
+
+      swift.getApi().createContainer(Constants.CONTAINER, options);
+      System.out.println("  " + Constants.CONTAINER);
+      
+      ContainerMetadata containerMetadata = 
swift.getApi().getContainerMetadata(Constants.CONTAINER);      
+      System.out.println("    " + containerMetadata.getMetadata());
+   }
+
+   /**
+    * Update a Cross Origin Resource Sharing container.
+    */
+   private void updateCorsContainer() {
+      System.out.println("Update Cross Origin Resource Sharing Container");
+
+      Map<String, String> corsMetadata = ImmutableMap.of(
+            "Access-Control-Allow-Origin", "http://www.example.com";,
+            "Access-Control-Max-Age", "60",
+            "Access-Control-Allow-Headers", "X-My-Other-Header");
+
+      swift.getApi().setContainerMetadata(Constants.CONTAINER, corsMetadata);
+      System.out.println("  " + Constants.CONTAINER);
+      
+      ContainerMetadata containerMetadata = 
swift.getApi().getContainerMetadata(Constants.CONTAINER);      
+      System.out.println("    " + containerMetadata.getMetadata());
+   }   
+
+   /**
+    * Always close your service when you're done with it.
+    */
+   public void close() {
+      if (storage != null) {
+         storage.getContext().close();
+      }
+   }
+}

Reply via email to