You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2014/04/02 11:14:27 UTC

[15/25] forking jclouds ec2 api

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/BundleInstanceS3StorageOptions.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/BundleInstanceS3StorageOptions.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/BundleInstanceS3StorageOptions.java
new file mode 100644
index 0000000..ec655ae
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/BundleInstanceS3StorageOptions.java
@@ -0,0 +1,95 @@
+/*
+ * 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.ec2.options;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import org.jclouds.domain.Credentials;
+import org.jclouds.ec2.options.internal.BaseEC2RequestOptions;
+import org.jclouds.location.Provider;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Supplier;
+import com.google.common.collect.Multimap;
+import com.google.inject.Inject;
+
+/**
+ * Contains options supported in the Form API for the RegisterImage operation.
+ * <h2>
+ * Usage</h2> The recommended way to instantiate a
+ * BundleInstanceS3StorageOptions object is to statically import
+ * BundleInstanceS3StorageOptions.Builder.* and invoke a static creation method
+ * followed by an instance mutator (if needed):
+ * <p/>
+ * <code>
+ * import static org.jclouds.ec2.options.BundleInstanceS3StorageOptions.Builder.*
+ * <p/>
+ * EC2Api connection = // get connection
+ * String imageId = connection.getWindowsServices().bundleInstanceInRegion(...bucketOwnedBy(anotherAccessKey));
+ * <code>
+ * 
+ * @author Adrian Cole
+ * @see <a
+ *      href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-BundleInstance.html"
+ *      />
+ */
+public class BundleInstanceS3StorageOptions extends BaseEC2RequestOptions {
+
+   @Inject
+   @VisibleForTesting
+   @Provider
+   Supplier<Credentials> creds;
+
+   @Override
+   public Multimap<String, String> buildFormParameters() {
+      if (getAwsAccessKeyId() == null) {
+         checkState(creds != null, "creds should have been injected");
+         bucketOwnedBy(creds.get().identity);
+      }
+      return super.buildFormParameters();
+   }
+
+   /**
+    * 
+    * @param ccessKeyId
+    *           The Access Key ID of the owner of the Amazon S3 bucket.
+    */
+   public BundleInstanceS3StorageOptions bucketOwnedBy(String ccessKeyId) {
+      formParameters.put("Storage.S3.AWSAccessKeyId", checkNotNull(ccessKeyId, "ccessKeyId"));
+      return this;
+   }
+
+   /**
+    * 
+    * @return The Access Key ID of the owner of the Amazon S3 bucket.
+    */
+   public String getAwsAccessKeyId() {
+      return getFirstFormOrNull("Storage.S3.AWSAccessKeyId");
+   }
+
+   public static class Builder {
+      /**
+       * @see BundleInstanceS3StorageOptions#bucketOwnedBy(accessKeyId)
+       */
+      public static BundleInstanceS3StorageOptions bucketOwnedBy(String accessKeyId) {
+         BundleInstanceS3StorageOptions options = new BundleInstanceS3StorageOptions();
+         return options.bucketOwnedBy(accessKeyId);
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/CreateImageOptions.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/CreateImageOptions.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/CreateImageOptions.java
new file mode 100644
index 0000000..8c604d5
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/CreateImageOptions.java
@@ -0,0 +1,94 @@
+/*
+ * 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.ec2.options;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.ec2.options.internal.BaseEC2RequestOptions;
+
+/**
+ * Contains options supported in the Form API for the CreateImage operation. <h2>
+ * Usage</h2> The recommended way to instantiate a CreateImageOptions object is to statically import
+ * CreateImageOptions.Builder.* and invoke a static creation method followed by an instance mutator
+ * (if needed):
+ * <p/>
+ * <code>
+ * import static org.jclouds.ec2.options.CreateImageOptions.Builder.*
+ * <p/>
+ * EC2Api connection = // get connection
+ * Future<Set<ImageMetadata>> images = connection.getAMIApi().get().createImage(withDescription("123125").noReboot());
+ * <code>
+ * 
+ * @author Adrian Cole
+ * @see <a
+ *      href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-form-CreateImage.html"
+ *      />
+ */
+public class CreateImageOptions extends BaseEC2RequestOptions {
+   public static final CreateImageOptions NONE = new CreateImageOptions();
+
+   /**
+    * The description of the AMI that was provided during image creation.
+    * <p/>
+    * 
+    * Up to 255 characters
+    */
+   public CreateImageOptions withDescription(String description) {
+      formParameters.put("Description", checkNotNull(description, "description"));
+      return this;
+   }
+
+   public String getDescription() {
+      return getFirstFormOrNull("Description");
+
+   }
+
+   /**
+    * By default this property is set to false, which means Amazon EC2 attempts to cleanly shut down
+    * the instance before image creation and reboots the instance afterwards. When set to true,
+    * Amazon EC2 does not shut down the instance before creating the image. When this option is
+    * used, file system integrity on the created image cannot be guaranteed.
+    */
+   public CreateImageOptions noReboot() {
+      formParameters.put("NoReboot", "true");
+      return this;
+   }
+
+   public boolean getNoReboot() {
+      return getFirstFormOrNull("NoReboot") != null;
+   }
+
+   public static class Builder {
+
+      /**
+       * @see CreateImageOptions#withDescription(String )
+       */
+      public static CreateImageOptions withDescription(String description) {
+         CreateImageOptions options = new CreateImageOptions();
+         return options.withDescription(description);
+      }
+
+      /**
+       * @see CreateImageOptions#noReboot()
+       */
+      public static CreateImageOptions noReboot() {
+         CreateImageOptions options = new CreateImageOptions();
+         return options.noReboot();
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/CreateSnapshotOptions.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/CreateSnapshotOptions.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/CreateSnapshotOptions.java
new file mode 100644
index 0000000..2c05a27
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/CreateSnapshotOptions.java
@@ -0,0 +1,70 @@
+/*
+ * 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.ec2.options;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.ec2.options.internal.BaseEC2RequestOptions;
+
+/**
+ * Contains options supported in the Form API for the CreateSnapshot operation. <h2>
+ * Usage</h2> The recommended way to instantiate a CreateSnapshotOptions object is to statically
+ * import CreateSnapshotOptions.Builder.* and invoke a static creation method followed by an
+ * instance mutator (if needed):
+ * <p/>
+ * <code>
+ * import static org.jclouds.ec2.options.CreateSnapshotOptions.Builder.*
+ * <p/>
+ * EC2Api connection = // get connection
+ * Snapshot snapshot = connection.getElasticBlockStoreApi().get().createSnapshotInRegion(volumeId, withDescription("123125"));
+ * <code>
+ * 
+ * @author Adrian Cole
+ * @see <a
+ *      href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-form-CreateSnapshot.html"
+ *      />
+ */
+public class CreateSnapshotOptions extends BaseEC2RequestOptions {
+
+   /**
+    * Description of the Amazon EBS snapshot.
+    * <p/>
+    * 
+    * Up to 255 characters
+    */
+   public CreateSnapshotOptions withDescription(String description) {
+      formParameters.put("Description", checkNotNull(description, "description"));
+      return this;
+   }
+
+   public String getDescription() {
+      return getFirstFormOrNull("Description");
+
+   }
+
+   public static class Builder {
+
+      /**
+       * @see CreateSnapshotOptions#withDescription(String )
+       */
+      public static CreateSnapshotOptions withDescription(String identityId) {
+         CreateSnapshotOptions options = new CreateSnapshotOptions();
+         return options.withDescription(identityId);
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeAvailabilityZonesOptions.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeAvailabilityZonesOptions.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeAvailabilityZonesOptions.java
new file mode 100644
index 0000000..5b3f693
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeAvailabilityZonesOptions.java
@@ -0,0 +1,68 @@
+/*
+ * 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.ec2.options;
+
+import java.util.Arrays;
+import java.util.Set;
+
+import org.jclouds.ec2.options.internal.BaseEC2RequestOptions;
+
+/**
+ * Contains options supported in the Form API for the DescribeAvailabilityZones operation. <h2>
+ * Usage</h2> The recommended way to instantiate a DescribeAvailabilityZonesOptions object is to
+ * statically import DescribeAvailabilityZonesOptions.Builder.* and invoke a static creation method
+ * followed by an instance mutator (if needed):
+ * <p/>
+ * <code>
+ * import static org.jclouds.ec2.options.DescribeAvailabilityZonesOptions.Builder.*
+ * <p/>
+ * EC2Api connection = // get connection
+ * Future<Set<ImageMetadata>> images = connection.getAvailabilityZoneAndRegionApi().get().describeAvailabilityZones(zones("us-east-1a", "us-east-1b"));
+ * <code>
+ * 
+ * @author Adrian Cole
+ * @see <a
+ *      href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-form-DescribeAvailabilityZones.html"
+ *      />
+ */
+public class DescribeAvailabilityZonesOptions extends BaseEC2RequestOptions {
+
+   /**
+    * Availability Zone name.
+    */
+   public DescribeAvailabilityZonesOptions zones(String... zones) {
+      String[] zoneStrings = Arrays.copyOf(zones, zones.length, String[].class);
+      indexFormValuesWithPrefix("ZoneName", zoneStrings);
+      return this;
+   }
+
+   public Set<String> getZones() {
+      return getFormValuesWithKeysPrefixedBy("ZoneName.");
+   }
+
+   public static class Builder {
+
+      /**
+       * @see DescribeAvailabilityZonesOptions#zones(String...)
+       */
+      public static DescribeAvailabilityZonesOptions availabilityZones(String... zones) {
+         DescribeAvailabilityZonesOptions options = new DescribeAvailabilityZonesOptions();
+         return options.zones(zones);
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeImagesOptions.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeImagesOptions.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeImagesOptions.java
new file mode 100644
index 0000000..d81ba88
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeImagesOptions.java
@@ -0,0 +1,115 @@
+/*
+ * 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.ec2.options;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Set;
+
+import org.jclouds.ec2.options.internal.BaseEC2RequestOptions;
+
+/**
+ * Contains options supported in the Form API for the DescribeImages operation. <h2>
+ * Usage</h2> The recommended way to instantiate a DescribeImagesOptions object is to statically
+ * import DescribeImagesOptions.Builder.* and invoke a static creation method followed by an
+ * instance mutator (if needed):
+ * <p/>
+ * <code>
+ * import static org.jclouds.ec2.options.DescribeImagesOptions.Builder.*
+ * <p/>
+ * EC2Api connection = // get connection
+ * Future<Set<ImageMetadata>> images = connection.getAMIApi().get().describeImages(executableBy("123125").imageIds(1000, 1004));
+ * <code>
+ * 
+ * @author Adrian Cole
+ * @see <a
+ *      href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-form-DescribeImages.html"
+ *      />
+ */
+public class DescribeImagesOptions extends BaseEC2RequestOptions {
+   public static final DescribeImagesOptions NONE = new DescribeImagesOptions();
+
+   /**
+    * AMIs for which the specified user has explicit launch permissions.
+    * 
+    */
+   public DescribeImagesOptions executableBy(String identityId) {
+      formParameters.put("ExecutableBy", checkNotNull(identityId, "identityId"));
+      return this;
+   }
+
+   public String getExecutableBy() {
+      return getFirstFormOrNull("ExecutableBy");
+   }
+
+   /**
+    * AMI IDs to describe.
+    */
+   public DescribeImagesOptions imageIds(String... imageIds) {
+      indexFormValuesWithPrefix("ImageId", imageIds);
+      return this;
+   }
+
+   public DescribeImagesOptions imageIds(Iterable<String> imageIds) {
+      indexFormValuesWithPrefix("ImageId", imageIds);
+      return this;
+   }
+
+   public Set<String> getImageIds() {
+      return getFormValuesWithKeysPrefixedBy("ImageId.");
+   }
+
+   /**
+    * Returns AMIs owned by the specified owner. Multiple owners can be specified.
+    */
+   public DescribeImagesOptions ownedBy(String... owners) {
+      indexFormValuesWithPrefix("Owner", owners);
+      return this;
+   }
+
+   public Set<String> getOwners() {
+      return getFormValuesWithKeysPrefixedBy("Owner.");
+   }
+
+   public static class Builder {
+
+      /**
+       * @see DescribeImagesOptions#executableBy(String )
+       */
+      public static DescribeImagesOptions executableBy(String identityId) {
+         DescribeImagesOptions options = new DescribeImagesOptions();
+         return options.executableBy(identityId);
+      }
+
+      /**
+       * @see DescribeImagesOptions#imageIds(String[] )
+       */
+      public static DescribeImagesOptions imageIds(String... imageIds) {
+         DescribeImagesOptions options = new DescribeImagesOptions();
+         return options.imageIds(imageIds);
+      }
+
+      /**
+       * @see DescribeImagesOptions#ownedBy(String[] )
+       */
+      public static DescribeImagesOptions ownedBy(String... owners) {
+         DescribeImagesOptions options = new DescribeImagesOptions();
+         return options.ownedBy(owners);
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeRegionsOptions.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeRegionsOptions.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeRegionsOptions.java
new file mode 100644
index 0000000..594194d
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeRegionsOptions.java
@@ -0,0 +1,68 @@
+/*
+ * 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.ec2.options;
+
+import java.util.Arrays;
+import java.util.Set;
+
+import org.jclouds.ec2.options.internal.BaseEC2RequestOptions;
+
+/**
+ * Contains options supported in the Form API for the DescribeRegions operation. <h2>
+ * Usage</h2> The recommended way to instantiate a DescribeRegionsOptions object is to statically
+ * import DescribeRegionsOptions.Builder.* and invoke a static creation method followed by an
+ * instance mutator (if needed):
+ * <p/>
+ * <code>
+ * import static org.jclouds.ec2.options.DescribeRegionsOptions.Builder.*
+ * <p/>
+ * EC2Api connection = // get connection
+ * Future<Set<ImageMetadata>> images = connection.getRegionsAndRegionsServices().describeRegions(regions("us-east-1a", "us-east-1b"));
+ * <code>
+ * 
+ * @author Adrian Cole
+ * @see <a
+ *      href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-form-DescribeRegions.html"
+ *      />
+ */
+public class DescribeRegionsOptions extends BaseEC2RequestOptions {
+
+   /**
+    * Name of a Region.
+    */
+   public DescribeRegionsOptions regions(String... regions) {
+      String[] regionStrings = Arrays.copyOf(regions, regions.length, String[].class);
+      indexFormValuesWithPrefix("RegionName", regionStrings);
+      return this;
+   }
+
+   public Set<String> getZones() {
+      return getFormValuesWithKeysPrefixedBy("RegionName.");
+   }
+
+   public static class Builder {
+
+      /**
+       * @see DescribeRegionsOptions#regions(String[] )
+       */
+      public static DescribeRegionsOptions regions(String... regions) {
+         DescribeRegionsOptions options = new DescribeRegionsOptions();
+         return options.regions(regions);
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeSnapshotsOptions.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeSnapshotsOptions.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeSnapshotsOptions.java
new file mode 100644
index 0000000..8dfe3cb
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DescribeSnapshotsOptions.java
@@ -0,0 +1,109 @@
+/*
+ * 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.ec2.options;
+
+import java.util.Set;
+
+import org.jclouds.ec2.options.internal.BaseEC2RequestOptions;
+
+/**
+ * Contains options supported in the Form API for the DescribeSnapshots operation. <h2>
+ * Usage</h2> The recommended way to instantiate a DescribeSnapshotsOptions object is to statically
+ * import DescribeSnapshotsOptions.Builder.* and invoke a static creation method followed by an
+ * instance mutator (if needed):
+ * <p/>
+ * <code>
+ * import static org.jclouds.ec2.options.DescribeSnapshotsOptions.Builder.*
+ * <p/>
+ * EC2Api connection = // get connection
+ * Set<Snapshot> snapshots = connection.getElasticBlockStoreApi().get().describeSnapshots(restorableBy("123125").snapshotIds(1000, 1004));
+ * <code>
+ * 
+ * @author Adrian Cole
+ * @see <a
+ *      href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-form-DescribeSnapshots.html"
+ *      />
+ */
+public class DescribeSnapshotsOptions extends BaseEC2RequestOptions {
+
+   /**
+    * Account ID of a user that can create volumes from the snapshot.
+    * 
+    */
+   public DescribeSnapshotsOptions restorableBy(String... accountIds) {
+      indexFormValuesWithPrefix("RestorableBy", accountIds);
+      return this;
+   }
+
+   public String getRestorableBy() {
+      return getFirstFormOrNull("RestorableBy");
+   }
+
+   /**
+    * The ID of the Amazon EBS snapshot.
+    */
+   public DescribeSnapshotsOptions snapshotIds(String... snapshotIds) {
+      indexFormValuesWithPrefix("SnapshotId", snapshotIds);
+      return this;
+   }
+
+   public Set<String> getSnapshotIds() {
+      return getFormValuesWithKeysPrefixedBy("SnapshotId.");
+   }
+
+   /**
+    * Returns snapshots owned by the specified owner. Multiple owners can be specified.
+    * <p/>
+    * Valid Values: self | amazon | AWS Account ID
+    */
+   public DescribeSnapshotsOptions ownedBy(String... owners) {
+      indexFormValuesWithPrefix("Owner", owners);
+      return this;
+   }
+
+   public Set<String> getOwners() {
+      return getFormValuesWithKeysPrefixedBy("Owner.");
+   }
+
+   public static class Builder {
+
+      /**
+       * @see DescribeSnapshotsOptions#restorableBy(String[] )
+       */
+      public static DescribeSnapshotsOptions restorableBy(String... accountIds) {
+         DescribeSnapshotsOptions options = new DescribeSnapshotsOptions();
+         return options.restorableBy(accountIds);
+      }
+
+      /**
+       * @see DescribeSnapshotsOptions#snapshotIds(String[] )
+       */
+      public static DescribeSnapshotsOptions snapshotIds(String... snapshotIds) {
+         DescribeSnapshotsOptions options = new DescribeSnapshotsOptions();
+         return options.snapshotIds(snapshotIds);
+      }
+
+      /**
+       * @see DescribeSnapshotsOptions#ownedBy(String[] )
+       */
+      public static DescribeSnapshotsOptions ownedBy(String... owners) {
+         DescribeSnapshotsOptions options = new DescribeSnapshotsOptions();
+         return options.ownedBy(owners);
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DetachVolumeOptions.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DetachVolumeOptions.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DetachVolumeOptions.java
new file mode 100644
index 0000000..0b9fc89
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/DetachVolumeOptions.java
@@ -0,0 +1,86 @@
+/*
+ * 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.ec2.options;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.ec2.options.internal.BaseEC2RequestOptions;
+
+/**
+ * Contains options supported in the Form API for the DetachVolume operation. <h2>
+ * Usage</h2> The recommended way to instantiate a DetachVolumeOptions object is to statically
+ * import DetachVolumeOptions.Builder.* and invoke a static creation method followed by an instance
+ * mutator (if needed):
+ * <p/>
+ * <code>
+ * import static org.jclouds.ec2.options.DetachVolumeOptions.Builder.*
+ * <p/>
+ * EC2Api client = // get connection
+ * client.getElasticBlockStoreApi().get().detachVolumeInRegion(null, id, fromDevice("123125").force());
+ * <code>
+ * 
+ * @author Adrian Cole
+ * @see <a
+ *      href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-form-DetachVolume.html"
+ *      />
+ */
+public class DetachVolumeOptions extends BaseEC2RequestOptions {
+   /**
+    * The ID of the instance.
+    */
+   public DetachVolumeOptions fromInstance(String instanceId) {
+      formParameters.put("InstanceId", checkNotNull(instanceId, "instanceId"));
+      return this;
+   }
+
+   public String getInstance() {
+      return getFirstFormOrNull("InstanceId");
+
+   }
+
+   /**
+    * The device name.
+    */
+   public DetachVolumeOptions fromDevice(String device) {
+      formParameters.put("Device", checkNotNull(device, "device"));
+      return this;
+   }
+
+   public String getDevice() {
+      return getFirstFormOrNull("Device");
+
+   }
+
+   public static class Builder {
+      /**
+       * @see DetachVolumeOptions#fromInstance(String )
+       */
+      public static DetachVolumeOptions fromInstance(String instance) {
+         DetachVolumeOptions options = new DetachVolumeOptions();
+         return options.fromInstance(instance);
+      }
+
+      /**
+       * @see DetachVolumeOptions#fromDevice(String )
+       */
+      public static DetachVolumeOptions fromDevice(String device) {
+         DetachVolumeOptions options = new DetachVolumeOptions();
+         return options.fromDevice(device);
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/RegisterImageBackedByEbsOptions.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/RegisterImageBackedByEbsOptions.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/RegisterImageBackedByEbsOptions.java
new file mode 100644
index 0000000..1da21c0
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/RegisterImageBackedByEbsOptions.java
@@ -0,0 +1,235 @@
+/*
+ * 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.ec2.options;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.ec2.domain.Image.Architecture;
+import org.jclouds.javax.annotation.Nullable;
+
+/**
+ * Contains options supported in the Form API for the RegisterImage operation. <h2>
+ * Usage</h2> The recommended way to instantiate a RegisterImageBackedByEbsOptions object is to statically
+ * import RegisterImageBackedByEbsOptions.Builder.* and invoke a static creation method followed by an instance
+ * mutator (if needed):
+ * <p/>
+ * <code>
+ * import static org.jclouds.ec2.options.RegisterImageBackedByEbsOptions.Builder.*
+ * <p/>
+ * EC2Api connection = // get connection
+ * String imageId = connection.getImageServices().registerImageBackedByEbs(...addEphemeralBlockDeviceFromSnapshot("/dev/sda2","virtual-1","snapshot-id"));
+ * <code>
+ * 
+ * @author Adrian Cole
+ * @see <a
+ *      href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-form-RegisterImage.html"
+ *      />
+ */
+public class RegisterImageBackedByEbsOptions extends RegisterImageOptions {
+
+   private int deviceIndex = 1;
+
+   /**
+    * 
+    * adds a block device to the image from an ebs snapshot. This device is deleted on instance
+    * termination.
+    * 
+    * @param name
+    *           The device name (e.g., /dev/sdh).
+    * @param virtualName
+    *           The virtual device name. (nullable)
+    * @param snapshotId
+    *           The ID of the snapshot.
+    */
+   public RegisterImageBackedByEbsOptions addEphemeralBlockDeviceFromSnapshot(String deviceName,
+            @Nullable String virtualName, String snapshotId) {
+      formParameters.put("BlockDeviceMapping." + deviceIndex + ".DeviceName", checkNotNull(
+               deviceName, "deviceName"));
+      if (virtualName != null)
+         formParameters.put("BlockDeviceMapping." + deviceIndex + ".VirtualName", checkNotNull(
+                  virtualName, "virtualName"));
+      formParameters.put("BlockDeviceMapping." + deviceIndex + ".Ebs.SnapshotId", checkNotNull(
+               snapshotId, "snapshotId"));
+      deviceIndex++;
+      return this;
+   }
+
+   /**
+    * 
+    * adds a new block device to the image. This device is deleted on instance termination.
+    * 
+    * @param name
+    *           The device name (e.g., /dev/sdh).
+    * @param virtualName
+    *           The virtual device name.
+    * @param volumeSize
+    *           The size of the volume, in GiBs.
+    */
+   public RegisterImageBackedByEbsOptions addNewEphemeralBlockDevice(String deviceName,
+            @Nullable String virtualName, int volumeSize) {
+      checkArgument(volumeSize > 0 && volumeSize < 1025, "volumeSize must be between 1 and 1024 gb");
+      formParameters.put("BlockDeviceMapping." + deviceIndex + ".DeviceName", checkNotNull(
+               deviceName, "deviceName"));
+      if (virtualName != null)
+         formParameters.put("BlockDeviceMapping." + deviceIndex + ".VirtualName", checkNotNull(
+                  virtualName, "virtualName"));
+      formParameters.put("BlockDeviceMapping." + deviceIndex + ".Ebs.VolumeSize", volumeSize + "");
+      deviceIndex++;
+      return this;
+   }
+
+   /**
+    * 
+    * adds a block device to the image from an ebs snapshot. This device is retained on instance
+    * termination.
+    * 
+    * @param name
+    *           The device name (e.g., /dev/sdh).
+    * @param virtualName
+    *           The virtual device name. (nullable)
+    * @param snapshotId
+    *           The ID of the snapshot.
+    */
+   public RegisterImageBackedByEbsOptions addBlockDeviceFromSnapshot(String deviceName,
+            @Nullable String virtualName, String snapshotId) {
+      formParameters.put("BlockDeviceMapping." + deviceIndex + ".Ebs.DeleteOnTermination", "false");
+      addEphemeralBlockDeviceFromSnapshot(deviceName, virtualName, snapshotId);
+      return this;
+   }
+
+   /**
+    * 
+    * adds a new block device to the image. This device is retained on instance termination.
+    * 
+    * @param name
+    *           The device name (e.g., /dev/sdh).
+    * @param virtualName
+    *           The virtual device name.
+    * @param volumeSize
+    *           The size of the volume, in GiBs..
+    */
+   public RegisterImageBackedByEbsOptions addNewBlockDevice(String deviceName,
+            @Nullable String virtualName, int volumeSize) {
+      formParameters.put("BlockDeviceMapping." + deviceIndex + ".Ebs.DeleteOnTermination", "false");
+      addNewEphemeralBlockDevice(deviceName, virtualName, volumeSize);
+      return this;
+   }
+
+   public static class Builder {
+      /**
+       * @see RegisterImageBackedByEbsOptions#asArchitecture(Architecture)
+       */
+      public static RegisterImageBackedByEbsOptions asArchitecture(Architecture architecture) {
+         RegisterImageBackedByEbsOptions options = new RegisterImageBackedByEbsOptions();
+         return options.asArchitecture(architecture);
+      }
+
+      /**
+       * @see RegisterImageBackedByEbsOptions#withDescription(String)
+       */
+      public static RegisterImageBackedByEbsOptions withDescription(String additionalInfo) {
+         RegisterImageBackedByEbsOptions options = new RegisterImageBackedByEbsOptions();
+         return options.withDescription(additionalInfo);
+      }
+
+      /**
+       * @see RegisterImageBackedByEbsOptions#withKernelId(String)
+       */
+      public static RegisterImageBackedByEbsOptions withKernelId(String kernelId) {
+         RegisterImageBackedByEbsOptions options = new RegisterImageBackedByEbsOptions();
+         return options.withKernelId(kernelId);
+      }
+
+      /**
+       * @see RegisterImageBackedByEbsOptions#withRamdisk(String)
+       */
+      public static RegisterImageBackedByEbsOptions withRamdisk(String ramdiskId) {
+         RegisterImageBackedByEbsOptions options = new RegisterImageBackedByEbsOptions();
+         return options.withRamdisk(ramdiskId);
+      }
+
+      /**
+       * @see RegisterImageBackedByEbsOptions#addBlockDeviceFromSnapshot(String, String, String)
+       */
+      public static RegisterImageBackedByEbsOptions addBlockDeviceFromSnapshot(String deviceName,
+               @Nullable String virtualName, String snapshotId) {
+         RegisterImageBackedByEbsOptions options = new RegisterImageBackedByEbsOptions();
+         return options.addBlockDeviceFromSnapshot(deviceName, virtualName, snapshotId);
+      }
+
+      /**
+       * @see RegisterImageBackedByEbsOptions#addEphemeralBlockDeviceFromSnapshot(String, String,
+       *      String)
+       */
+      public static RegisterImageBackedByEbsOptions addEphemeralBlockDeviceFromSnapshot(
+               String deviceName, @Nullable String virtualName, String snapshotId) {
+         RegisterImageBackedByEbsOptions options = new RegisterImageBackedByEbsOptions();
+         return options.addEphemeralBlockDeviceFromSnapshot(deviceName, virtualName, snapshotId);
+      }
+
+      /**
+       * @see RegisterImageBackedByEbsOptions#addNewBlockDevice(String, String, int)
+       */
+      public static RegisterImageBackedByEbsOptions addNewBlockDevice(String deviceName,
+               @Nullable String virtualName, int volumeSize) {
+         RegisterImageBackedByEbsOptions options = new RegisterImageBackedByEbsOptions();
+         return options.addNewBlockDevice(deviceName, virtualName, volumeSize);
+      }
+
+      /**
+       * @see RegisterImageBackedByEbsOptions#addNewEphemeralBlockDevice(String, String, int)
+       */
+      public static RegisterImageBackedByEbsOptions addNewEphemeralBlockDevice(String deviceName,
+               @Nullable String virtualName, int volumeSize) {
+         RegisterImageBackedByEbsOptions options = new RegisterImageBackedByEbsOptions();
+         return options.addNewEphemeralBlockDevice(deviceName, virtualName, volumeSize);
+      }
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public RegisterImageBackedByEbsOptions asArchitecture(Architecture architecture) {
+      return (RegisterImageBackedByEbsOptions) super.asArchitecture(architecture);
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public RegisterImageBackedByEbsOptions withDescription(String info) {
+      return (RegisterImageBackedByEbsOptions) super.withDescription(info);
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public RegisterImageBackedByEbsOptions withKernelId(String kernelId) {
+      return (RegisterImageBackedByEbsOptions) super.withKernelId(kernelId);
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public RegisterImageBackedByEbsOptions withRamdisk(String ramDiskId) {
+      return (RegisterImageBackedByEbsOptions) super.withRamdisk(ramDiskId);
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/RegisterImageOptions.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/RegisterImageOptions.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/RegisterImageOptions.java
new file mode 100644
index 0000000..76c2a01
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/RegisterImageOptions.java
@@ -0,0 +1,128 @@
+/*
+ * 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.ec2.options;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.ec2.domain.Image.Architecture;
+import org.jclouds.ec2.options.internal.BaseEC2RequestOptions;
+
+/**
+ * Contains options supported in the Form API for the RegisterImage operation. <h2>
+ * Usage</h2> The recommended way to instantiate a RegisterImageOptions object is to statically
+ * import RegisterImageOptions.Builder.* and invoke a static creation method followed by an instance
+ * mutator (if needed):
+ * <p/>
+ * <code>
+ * import static org.jclouds.ec2.options.RegisterImageOptions.Builder.*
+ * <p/>
+ * EC2Api connection = // get connection
+ * String imageId = connection.getImageServices().registerImageFromManifest(...withArchitecture(Architecture.I386).withDescription("description"));
+ * <code>
+ * 
+ * @author Adrian Cole
+ * @see <a
+ *      href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-form-RegisterImage.html"
+ *      />
+ */
+public class RegisterImageOptions extends BaseEC2RequestOptions {
+
+   /**
+    * The architecture of the image.
+    */
+   public RegisterImageOptions asArchitecture(Architecture architecture) {
+      formParameters.put("Architecture", checkNotNull(architecture, "architecture").value());
+      return this;
+   }
+
+   String getArchitecture() {
+      return getFirstFormOrNull("Architecture");
+   }
+
+   /**
+    *The description of the AMI. "Up to 255 characters."
+    */
+   public RegisterImageOptions withDescription(String info) {
+      formParameters.put("Description", checkNotNull(info, "info"));
+      return this;
+   }
+
+   String getDescription() {
+      return getFirstFormOrNull("Description");
+   }
+
+   /**
+    * The ID of the kernel to select.
+    */
+   public RegisterImageOptions withKernelId(String kernelId) {
+      formParameters.put("KernelId", checkNotNull(kernelId, "kernelId"));
+      return this;
+   }
+
+   String getKernelId() {
+      return getFirstFormOrNull("KernelId");
+   }
+
+   /**
+    * The ID of the RAM disk to select. Some kernels require additional drivers at launch. Check the
+    * kernel requirements for information on whether you need to specify a RAM disk. To find kernel
+    * requirements, refer to the Resource Center and search for the kernel ID.
+    */
+   public RegisterImageOptions withRamdisk(String ramDiskId) {
+      formParameters.put("RamdiskId", checkNotNull(ramDiskId, "ramDiskId"));
+      return this;
+   }
+
+   String getRamdiskId() {
+      return getFirstFormOrNull("RamdiskId");
+   }
+
+   public static class Builder {
+      /**
+       * @see RegisterImageOptions#asArchitecture(Architecture)
+       */
+      public static RegisterImageOptions asArchitecture(Architecture architecture) {
+         RegisterImageOptions options = new RegisterImageOptions();
+         return options.asArchitecture(architecture);
+      }
+
+      /**
+       * @see RegisterImageOptions#withDescription(String)
+       */
+      public static RegisterImageOptions withDescription(String additionalInfo) {
+         RegisterImageOptions options = new RegisterImageOptions();
+         return options.withDescription(additionalInfo);
+      }
+
+      /**
+       * @see RegisterImageOptions#withKernelId(String)
+       */
+      public static RegisterImageOptions withKernelId(String kernelId) {
+         RegisterImageOptions options = new RegisterImageOptions();
+         return options.withKernelId(kernelId);
+      }
+
+      /**
+       * @see RegisterImageOptions#withRamdisk(String)
+       */
+      public static RegisterImageOptions withRamdisk(String ramdiskId) {
+         RegisterImageOptions options = new RegisterImageOptions();
+         return options.withRamdisk(ramdiskId);
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/RunInstancesOptions.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/RunInstancesOptions.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/RunInstancesOptions.java
new file mode 100644
index 0000000..7ccb209
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/RunInstancesOptions.java
@@ -0,0 +1,206 @@
+/*
+ * 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.ec2.options;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.io.BaseEncoding.base64;
+
+import java.util.Set;
+
+import org.jclouds.ec2.domain.BlockDeviceMapping;
+import org.jclouds.ec2.options.internal.BaseEC2RequestOptions;
+
+/**
+ * Contains options supported in the Form API for the RunInstances operation. <h2>
+ * Usage</h2> The recommended way to instantiate a RunInstancesOptions object is to statically
+ * import RunInstancesOptions.Builder.* and invoke a static creation method followed by an instance
+ * mutator (if needed):
+ * <p/>
+ * <code>
+ * import static org.jclouds.aws.ec2.options.RunInstancesOptions.Builder.*
+ * <p/>
+ * EC2Api connection = // get connection
+ * Future<ReservationInfo> instances = connection.runInstances(executableBy("123125").imageIds(1000, 1004));
+ * <code>
+ * 
+ * @author Adrian Cole
+ * @see <a href=
+ *      "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-form-RunInstances.html"
+ *      />
+ */
+public class RunInstancesOptions extends BaseEC2RequestOptions {
+   public static final RunInstancesOptions NONE = new RunInstancesOptions();
+
+   /**
+    * The name of the key pair.
+    */
+   public RunInstancesOptions withKeyName(String keyName) {
+      formParameters.put("KeyName", checkNotNull(keyName, "keyName"));
+      return this;
+   }
+
+   /**
+    * Attach multiple security groups
+    */
+   public RunInstancesOptions withSecurityGroups(String... securityGroups) {
+      indexFormValuesWithPrefix("SecurityGroup", securityGroups);
+      return this;
+   }
+
+   /**
+    * Attach multiple security groups
+    */
+   public RunInstancesOptions withSecurityGroups(Iterable<String> securityGroups) {
+      indexFormValuesWithPrefix("SecurityGroup", securityGroups);
+      return this;
+   }
+
+   /**
+    * Attaches a single security group. Multiple calls to this method won't add more groups.
+    * 
+    * @param securityGroup
+    *           name of an existing security group
+    */
+   public RunInstancesOptions withSecurityGroup(String securityGroup) {
+      return withSecurityGroups(securityGroup);
+   }
+
+   /**
+    * Unencoded data
+    */
+   public RunInstancesOptions withUserData(byte[] unencodedData) {
+      int length = checkNotNull(unencodedData, "unencodedData").length;
+      checkArgument(length > 0, "userData cannot be empty");
+      checkArgument(length <= 16 * 1024, "userData cannot be larger than 16kb");
+      formParameters.put("UserData", base64().encode(unencodedData));
+      return this;
+   }
+
+   /**
+    * Specifies the instance type. default small;
+    */
+   public RunInstancesOptions asType(String type) {
+      formParameters.put("InstanceType", checkNotNull(type, "type"));
+      return this;
+   }
+
+   /**
+    * The ID of the kernel with which to launch the instance.
+    */
+   public RunInstancesOptions withKernelId(String kernelId) {
+      formParameters.put("KernelId", checkNotNull(kernelId, "kernelId"));
+      return this;
+   }
+
+   /**
+    * The ID of the RAM disk with which to launch the instance. Some kernels require additional
+    * drivers at launch. Check the kernel requirements for information on whether you need to
+    * specify a RAM disk. To find kernel requirements, go to the Resource Center and search for the
+    * kernel ID.
+    */
+   public RunInstancesOptions withRamdisk(String ramDiskId) {
+      formParameters.put("RamdiskId", checkNotNull(ramDiskId, "ramDiskId"));
+      return this;
+   }
+
+   /**
+    * Specifies the Block Device Mapping for the instance
+    * 
+    */
+   public RunInstancesOptions withBlockDeviceMappings(Set<? extends BlockDeviceMapping> mappings) {
+      int i = 1;
+      for (BlockDeviceMapping mapping : checkNotNull(mappings, "mappings")) {
+         checkNotNull(mapping.getDeviceName(), "deviceName");
+         formParameters.put(String.format("BlockDeviceMapping.%d.DeviceName", i), mapping.getDeviceName());
+         if (mapping.getVirtualName() != null)
+            formParameters.put(String.format("BlockDeviceMapping.%d.VirtualName", i), mapping.getVirtualName());
+         if (mapping.getEbsSnapshotId() != null)
+            formParameters.put(String.format("BlockDeviceMapping.%d.Ebs.SnapshotId", i), mapping.getEbsSnapshotId());
+         if (mapping.getEbsVolumeSize() != null)
+            formParameters.put(String.format("BlockDeviceMapping.%d.Ebs.VolumeSize", i),
+                  String.valueOf(mapping.getEbsVolumeSize()));
+         if (mapping.getEbsNoDevice() != null)
+            formParameters.put(String.format("BlockDeviceMapping.%d.Ebs.NoDevice", i),
+                  String.valueOf(mapping.getEbsNoDevice()));
+         if (mapping.getEbsDeleteOnTermination() != null)
+            formParameters.put(String.format("BlockDeviceMapping.%d.Ebs.DeleteOnTermination", i),
+                  String.valueOf(mapping.getEbsDeleteOnTermination()));
+         i++;
+      }
+      return this;
+   }
+
+   public static class Builder {
+      /**
+       * @see RunInstancesOptions#withKeyName(String)
+       */
+      public static RunInstancesOptions withKeyName(String keyName) {
+         RunInstancesOptions options = new RunInstancesOptions();
+         return options.withKeyName(keyName);
+      }
+
+      /**
+       * @see RunInstancesOptions#withSecurityGroup(String)
+       */
+      public static RunInstancesOptions withSecurityGroup(String securityGroup) {
+         RunInstancesOptions options = new RunInstancesOptions();
+         return options.withSecurityGroup(securityGroup);
+      }
+
+      /**
+       * @see RunInstancesOptions#withUserData(byte [])
+       */
+      public static RunInstancesOptions withUserData(byte[] unencodedData) {
+         RunInstancesOptions options = new RunInstancesOptions();
+         return options.withUserData(unencodedData);
+      }
+
+      /**
+       * @see RunInstancesOptions#asType(InstanceType)
+       */
+      public static RunInstancesOptions asType(String instanceType) {
+         RunInstancesOptions options = new RunInstancesOptions();
+         return options.asType(instanceType);
+      }
+
+      /**
+       * @see RunInstancesOptions#withKernelId(String)
+       */
+      public static RunInstancesOptions withKernelId(String kernelId) {
+         RunInstancesOptions options = new RunInstancesOptions();
+         return options.withKernelId(kernelId);
+      }
+
+      /**
+       * @see RunInstancesOptions#withRamdisk(String)
+       */
+      public static RunInstancesOptions withRamdisk(String ramdiskId) {
+         RunInstancesOptions options = new RunInstancesOptions();
+         return options.withRamdisk(ramdiskId);
+      }
+
+      /**
+       * @see RunInstancesOptions#withBlockDeviceMappings(Set<BlockDeviceMapping> mappings)
+       */
+      public static RunInstancesOptions withBlockDeviceMappings(Set<? extends BlockDeviceMapping> mappings) {
+         RunInstancesOptions options = new RunInstancesOptions();
+         return options.withBlockDeviceMappings(mappings);
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/internal/BaseEC2RequestOptions.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/internal/BaseEC2RequestOptions.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/internal/BaseEC2RequestOptions.java
new file mode 100644
index 0000000..3ec5e8d
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/options/internal/BaseEC2RequestOptions.java
@@ -0,0 +1,59 @@
+/*
+ * 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.ec2.options.internal;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.Set;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+import org.jclouds.util.Predicates2;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableSet.Builder;
+import com.google.common.collect.Iterables;
+
+/**
+ * 
+ * @author Adrian Cole
+ */
+public class BaseEC2RequestOptions extends BaseHttpRequestOptions {
+
+   @Override
+   public String toString() {
+      return "[formParameters=" + formParameters + "]";
+   }
+
+   protected void indexFormValuesWithPrefix(String prefix, String... values) {
+      for (int i = 0; i < values.length; i++) {
+         formParameters.put(prefix + "." + (i + 1), checkNotNull(values[i], prefix.toLowerCase() + "s[" + i + "]"));
+      }
+   }
+
+   protected void indexFormValuesWithPrefix(String prefix, Iterable<String> values) {
+      indexFormValuesWithPrefix(prefix, Iterables.toArray(values, String.class));
+   }
+
+   protected Set<String> getFormValuesWithKeysPrefixedBy(final String prefix) {
+      Builder<String> values = ImmutableSet.builder();
+      for (String key : Iterables.filter(formParameters.keySet(), Predicates2.startsWith(prefix))) {
+         values.add(Iterables.get(formParameters.get(key), 0));
+      }
+      return values.build();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceHasIpAddress.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceHasIpAddress.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceHasIpAddress.java
new file mode 100644
index 0000000..57d576d
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceHasIpAddress.java
@@ -0,0 +1,66 @@
+/*
+ * 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.ec2.predicates;
+
+import javax.annotation.Resource;
+import javax.inject.Singleton;
+
+import org.jclouds.aws.AWSResponseException;
+import org.jclouds.ec2.EC2Api;
+import org.jclouds.ec2.domain.RunningInstance;
+import org.jclouds.logging.Logger;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.inject.Inject;
+
+/**
+ * 
+ * Tests to see if a task succeeds.
+ * 
+ * @author Adrian Cole
+ */
+@Singleton
+public class InstanceHasIpAddress implements Predicate<RunningInstance> {
+
+   private final EC2Api client;
+
+   @Resource
+   protected Logger logger = Logger.NULL;
+
+   @Inject
+   public InstanceHasIpAddress(EC2Api client) {
+      this.client = client;
+   }
+
+   public boolean apply(RunningInstance instance) {
+      logger.trace("looking for ipAddress on instance %s", instance);
+      try {
+         instance = refresh(instance);
+         return instance.getIpAddress() != null;
+      } catch (AWSResponseException e) {
+         if (e.getError().getCode().equals("InvalidInstanceID.NotFound"))
+            return false;
+         throw e;
+      }
+   }
+
+   private RunningInstance refresh(RunningInstance instance) {
+      return Iterables.getOnlyElement(Iterables.getOnlyElement(client.getInstanceApi().get()
+               .describeInstancesInRegion(instance.getRegion(), instance.getId())));
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceStateRunning.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceStateRunning.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceStateRunning.java
new file mode 100644
index 0000000..893e689
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceStateRunning.java
@@ -0,0 +1,69 @@
+/*
+ * 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.ec2.predicates;
+
+import javax.annotation.Resource;
+import javax.inject.Singleton;
+
+import org.jclouds.ec2.EC2Api;
+import org.jclouds.ec2.domain.InstanceState;
+import org.jclouds.ec2.domain.RunningInstance;
+import org.jclouds.logging.Logger;
+import org.jclouds.rest.ResourceNotFoundException;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.inject.Inject;
+
+/**
+ * 
+ * Tests to see if a task succeeds.
+ * 
+ * @author Adrian Cole
+ */
+@Singleton
+public class InstanceStateRunning implements Predicate<RunningInstance> {
+
+   private final EC2Api client;
+
+   @Resource
+   protected Logger logger = Logger.NULL;
+
+   @Inject
+   public InstanceStateRunning(EC2Api client) {
+      this.client = client;
+   }
+
+   public boolean apply(RunningInstance instance) {
+      logger.trace("looking for state on instance %s", instance);
+      try {
+         instance = refresh(instance);
+         logger.trace("%s: looking for instance state %s: currently: %s",
+               instance.getId(), InstanceState.RUNNING, instance
+                     .getInstanceState());
+         return instance.getInstanceState() == InstanceState.RUNNING;
+      } catch (ResourceNotFoundException e) {
+         return false;
+      }
+   }
+
+   private RunningInstance refresh(RunningInstance instance) {
+      return Iterables.getOnlyElement(Iterables.getOnlyElement(client
+            .getInstanceApi().get().describeInstancesInRegion(
+                  instance.getRegion(), instance.getId())));
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceStateStopped.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceStateStopped.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceStateStopped.java
new file mode 100644
index 0000000..644d858
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceStateStopped.java
@@ -0,0 +1,62 @@
+/*
+ * 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.ec2.predicates;
+
+import javax.annotation.Resource;
+import javax.inject.Singleton;
+
+import org.jclouds.ec2.domain.InstanceState;
+import org.jclouds.ec2.domain.RunningInstance;
+import org.jclouds.ec2.features.InstanceApi;
+import org.jclouds.logging.Logger;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.inject.Inject;
+
+/**
+ * 
+ * Tests to see if a task succeeds.
+ * 
+ * @author Adrian Cole
+ */
+@Singleton
+public class InstanceStateStopped implements Predicate<RunningInstance> {
+
+   private final InstanceApi client;
+
+   @Resource
+   protected Logger logger = Logger.NULL;
+
+   @Inject
+   public InstanceStateStopped(InstanceApi client) {
+      this.client = client;
+   }
+
+   public boolean apply(RunningInstance instance) {
+      logger.trace("looking for state on instance %s", instance);
+      instance = refresh(instance);
+      logger.trace("%s: looking for instance state %s: currently: %s", instance.getId(),
+               InstanceState.STOPPED, instance.getInstanceState());
+      return instance.getInstanceState() == InstanceState.STOPPED;
+   }
+
+   private RunningInstance refresh(RunningInstance instance) {
+      return Iterables.getOnlyElement(Iterables.getOnlyElement(client.describeInstancesInRegion(
+               instance.getRegion(), instance.getId())));
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceStateTerminated.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceStateTerminated.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceStateTerminated.java
new file mode 100644
index 0000000..8c9a3fd
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/InstanceStateTerminated.java
@@ -0,0 +1,68 @@
+/*
+ * 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.ec2.predicates;
+
+import java.util.NoSuchElementException;
+
+import javax.annotation.Resource;
+import javax.inject.Singleton;
+
+import org.jclouds.ec2.EC2Api;
+import org.jclouds.ec2.domain.InstanceState;
+import org.jclouds.ec2.domain.RunningInstance;
+import org.jclouds.logging.Logger;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.inject.Inject;
+
+/**
+ * 
+ * Tests to see if a task succeeds.
+ * 
+ * @author Adrian Cole
+ */
+@Singleton
+public class InstanceStateTerminated implements Predicate<RunningInstance> {
+
+   private final EC2Api client;
+
+   @Resource
+   protected Logger logger = Logger.NULL;
+
+   @Inject
+   public InstanceStateTerminated(EC2Api client) {
+      this.client = client;
+   }
+
+   public boolean apply(RunningInstance instance) {
+      logger.trace("looking for state on instance %s", instance);
+      try {
+         instance = refresh(instance);
+      } catch (NoSuchElementException e) {
+         return true;
+      }
+      logger.trace("%s: looking for instance state %s: currently: %s", instance.getId(),
+               InstanceState.TERMINATED, instance.getInstanceState());
+      return instance.getInstanceState() == InstanceState.TERMINATED;
+   }
+
+   private RunningInstance refresh(RunningInstance instance) {
+      return Iterables.getOnlyElement(Iterables.getOnlyElement(client.getInstanceApi().get()
+               .describeInstancesInRegion(instance.getRegion(), instance.getId())));
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/SnapshotCompleted.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/SnapshotCompleted.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/SnapshotCompleted.java
new file mode 100644
index 0000000..ef5281a
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/SnapshotCompleted.java
@@ -0,0 +1,60 @@
+/*
+ * 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.ec2.predicates;
+
+import static org.jclouds.ec2.options.DescribeSnapshotsOptions.Builder.snapshotIds;
+
+import javax.annotation.Resource;
+import javax.inject.Singleton;
+
+import org.jclouds.ec2.domain.Snapshot;
+import org.jclouds.ec2.features.ElasticBlockStoreApi;
+import org.jclouds.logging.Logger;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.inject.Inject;
+
+/**
+ * 
+ * Tests to see if a snapshot is completed.
+ * 
+ * @author Adrian Cole
+ */
+@Singleton
+public class SnapshotCompleted implements Predicate<Snapshot> {
+
+   private final ElasticBlockStoreApi client;
+   @Resource
+   protected Logger logger = Logger.NULL;
+
+   @Inject
+   public SnapshotCompleted(ElasticBlockStoreApi client) {
+      this.client = client;
+   }
+
+   public boolean apply(Snapshot snapshot) {
+      logger.trace("looking for status on snapshot %s", snapshot.getId());
+
+      snapshot = Iterables.getOnlyElement(client.describeSnapshotsInRegion(snapshot.getRegion(),
+               snapshotIds(snapshot.getId())));
+      logger.trace("%s: looking for status %s: currently: %s; progress %d/100", snapshot,
+               Snapshot.Status.COMPLETED, snapshot.getStatus(), snapshot.getProgress());
+      return snapshot.getStatus() == Snapshot.Status.COMPLETED;
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/VolumeAttached.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/VolumeAttached.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/VolumeAttached.java
new file mode 100644
index 0000000..f3ebfaf
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/VolumeAttached.java
@@ -0,0 +1,63 @@
+/*
+ * 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.ec2.predicates;
+
+import javax.annotation.Resource;
+import javax.inject.Singleton;
+
+import org.jclouds.ec2.domain.Attachment;
+import org.jclouds.ec2.domain.Volume;
+import org.jclouds.ec2.features.ElasticBlockStoreApi;
+import org.jclouds.logging.Logger;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
+import com.google.inject.Inject;
+
+/**
+ * 
+ * Tests to see if a volume is attached.
+ * 
+ * @author Adrian Cole
+ */
+@Singleton
+public class VolumeAttached implements Predicate<Attachment> {
+
+   private final ElasticBlockStoreApi client;
+   @Resource
+   protected Logger logger = Logger.NULL;
+
+   @Inject
+   public VolumeAttached(ElasticBlockStoreApi client) {
+      this.client = client;
+   }
+
+   public boolean apply(Attachment attachment) {
+      logger.trace("looking for volume %s", attachment.getVolumeId());
+      Volume volume = Iterables.getOnlyElement(client.describeVolumesInRegion(attachment
+               .getRegion(), attachment.getVolumeId()));
+      if (volume.getAttachments().size() == 0) {
+         return false;
+      }
+      Attachment lastAttachment = Sets.newTreeSet(volume.getAttachments()).last();
+      logger.trace("%s: looking for status %s: currently: %s", lastAttachment,
+               Attachment.Status.ATTACHED, lastAttachment.getStatus());
+      return lastAttachment.getStatus() == Attachment.Status.ATTACHED;
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/VolumeAvailable.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/VolumeAvailable.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/VolumeAvailable.java
new file mode 100644
index 0000000..9688add
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/VolumeAvailable.java
@@ -0,0 +1,57 @@
+/*
+ * 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.ec2.predicates;
+
+import javax.annotation.Resource;
+import javax.inject.Singleton;
+
+import org.jclouds.ec2.domain.Volume;
+import org.jclouds.ec2.features.ElasticBlockStoreApi;
+import org.jclouds.logging.Logger;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.inject.Inject;
+
+/**
+ * 
+ * Tests to see if a volume is completed.
+ * 
+ * @author Adrian Cole
+ */
+@Singleton
+public class VolumeAvailable implements Predicate<Volume> {
+
+   private final ElasticBlockStoreApi client;
+   @Resource
+   protected Logger logger = Logger.NULL;
+
+   @Inject
+   public VolumeAvailable(ElasticBlockStoreApi client) {
+      this.client = client;
+   }
+
+   public boolean apply(Volume volume) {
+      logger.trace("looking for status on volume %s", volume.getId());
+      volume = Iterables.getOnlyElement(client.describeVolumesInRegion(volume.getRegion(), volume
+               .getId()));
+      logger.trace("%s: looking for status %s: currently: %s", volume, Volume.Status.AVAILABLE,
+               volume.getStatus());
+      return volume.getStatus() == Volume.Status.AVAILABLE;
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/VolumeDetached.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/VolumeDetached.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/VolumeDetached.java
new file mode 100644
index 0000000..accabe8
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/predicates/VolumeDetached.java
@@ -0,0 +1,69 @@
+/*
+ * 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.ec2.predicates;
+
+import static com.google.common.collect.Iterables.getLast;
+
+import javax.annotation.Resource;
+
+import org.jclouds.ec2.domain.Attachment;
+import org.jclouds.ec2.domain.Volume;
+import org.jclouds.ec2.features.ElasticBlockStoreApi;
+import org.jclouds.logging.Logger;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+/**
+ * Tests to see if a volume is detached.
+ *
+ * @author Karthik Arunachalam
+ */
+@Singleton
+public class VolumeDetached implements Predicate<Attachment> {
+
+   private final ElasticBlockStoreApi client;
+   @Resource
+   protected Logger logger = Logger.NULL;
+
+   @Inject
+   public VolumeDetached(ElasticBlockStoreApi client) {
+      this.client = client;
+   }
+
+   public boolean apply(Attachment attachment) {
+      logger.trace("looking for volume %s", attachment.getVolumeId());
+      Volume volume = Iterables.getOnlyElement(client.describeVolumesInRegion(attachment
+              .getRegion(), attachment.getVolumeId()));
+
+      /*If attachment size is 0 volume is detached for sure.*/
+      if (volume.getAttachments().size() == 0) {
+         return true;
+      }
+
+      /* But if attachment size is > 0, then the attachment could be in any state.
+         * So we need to check if the status is DETACHED (return true) or not (return false).
+         */
+      Attachment lastAttachment = getLast(volume.getAttachments());
+      logger.trace("%s: looking for status %s: currently: %s", lastAttachment,
+              Attachment.Status.DETACHED, lastAttachment.getStatus());
+      return lastAttachment.getStatus() == Attachment.Status.DETACHED;
+   }
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/reference/EC2Constants.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/reference/EC2Constants.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/reference/EC2Constants.java
new file mode 100644
index 0000000..0d45789
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/reference/EC2Constants.java
@@ -0,0 +1,49 @@
+/*
+ * 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.ec2.reference;
+
+
+/**
+ * Configuration properties and constants used in EC2 connections.
+ * 
+ * @author Adrian Cole
+ */
+public interface EC2Constants {
+   /**
+    * Listing the universe of amis is extremely expensive. set this to a comma separated value of
+    * the ami owners you wish to use in {@link ComputeService}
+    */
+   public static final String PROPERTY_EC2_AMI_OWNERS = "jclouds.ec2.ami-owners";
+
+   /**
+    * Eventual consistency delay for retrieving a security group after it is created (in ms)
+    */
+   public static final String PROPERTY_EC2_TIMEOUT_SECURITYGROUP_PRESENT = "jclouds.ec2.timeout.securitygroup-present";
+
+   /**
+    * Whenever a node is created, automatically allocate and assign an elastic ip address, also
+    * deallocate when the node is destroyed.
+    */
+   public static final String PROPERTY_EC2_AUTO_ALLOCATE_ELASTIC_IPS = "jclouds.ec2.auto-allocate-elastic-ips";
+   
+   /**
+    * If this property is set to true(default), jclouds generate a name for each instance based on the group. ex.
+    * i-ef34ae2 becomes hadoop-ef34ae2. Note that this depends on {@link EC2Api#getTagApi} returning present.
+    */
+   public static final String PROPERTY_EC2_GENERATE_INSTANCE_NAMES = "jclouds.ec2.generate-instance-names";
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58fe66df/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/suppliers/DescribeAvailabilityZonesInRegion.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/suppliers/DescribeAvailabilityZonesInRegion.java b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/suppliers/DescribeAvailabilityZonesInRegion.java
new file mode 100644
index 0000000..f97e962
--- /dev/null
+++ b/dependencies/jclouds/apis/ec2/1.7.1-stratos/src/main/java/org/jclouds/ec2/suppliers/DescribeAvailabilityZonesInRegion.java
@@ -0,0 +1,92 @@
+/*
+ * 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.ec2.suppliers;
+
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.jclouds.ec2.EC2Api;
+import org.jclouds.ec2.domain.AvailabilityZoneInfo;
+import org.jclouds.ec2.features.AvailabilityZoneAndRegionApi;
+import org.jclouds.http.HttpResponseException;
+import org.jclouds.location.Region;
+import org.jclouds.location.suppliers.RegionIdToZoneIdsSupplier;
+import org.jclouds.logging.Logger;
+import org.jclouds.util.Suppliers2;
+
+import com.google.common.base.Function;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMap.Builder;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Maps;
+
+@Singleton
+public class DescribeAvailabilityZonesInRegion implements RegionIdToZoneIdsSupplier {
+   @Resource
+   protected Logger logger = Logger.NULL;
+
+   private final AvailabilityZoneAndRegionApi client;
+   private final Supplier<Set<String>> regions;
+
+   @Inject
+   public DescribeAvailabilityZonesInRegion(EC2Api client, @Region Supplier<Set<String>> regions) {
+      this.client = client.getAvailabilityZoneAndRegionApi().get();
+      this.regions = regions;
+   }
+
+   @Override
+   public Map<String, Supplier<Set<String>>> get() {
+      Builder<String, Set<String>> map = ImmutableMap.builder();
+      HttpResponseException exception = null;
+      // TODO: this should be parallel
+      for (String region : regions.get()) {
+         try {
+            ImmutableSet<String> zones = ImmutableSet.copyOf(Iterables.transform(client
+                     .describeAvailabilityZonesInRegion(region), new Function<AvailabilityZoneInfo, String>() {
+
+               @Override
+               public String apply(AvailabilityZoneInfo arg0) {
+                  return arg0.getZone();
+               }
+
+            }));
+            if (zones.size() > 0)
+               map.put(region, zones);
+         } catch (HttpResponseException e) {
+            // TODO: this should be in retry handler, not here.
+            if (e.getMessage().contains("Unable to tunnel through proxy")) {
+               exception = e;
+               logger.error(e, "Could not describe availability zones in Region: %s", region);
+            } else {
+               throw e;
+            }
+         }
+      }
+      ImmutableMap<String, Set<String>> result = map.build();
+      if (result.isEmpty() && exception != null) {
+         throw exception;
+      }
+      return Maps.transformValues(result, Suppliers2.<Set<String>> ofInstanceFunction());
+   }
+
+}