diff --git a/aws/core/src/main/java/org/jclouds/aws/ec2/options/CreateImageOptions.java b/aws/core/src/main/java/org/jclouds/aws/ec2/options/CreateImageOptions.java new file mode 100644 index 0000000000..ed2c8d593e --- /dev/null +++ b/aws/core/src/main/java/org/jclouds/aws/ec2/options/CreateImageOptions.java @@ -0,0 +1,101 @@ +/** + * + * Copyright (C) 2009 Cloud Conscious, LLC. + * + * ==================================================================== + * 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.aws.ec2.options; + +import static com.google.common.base.Preconditions.checkNotNull; + +import org.jclouds.aws.ec2.options.internal.BaseEC2RequestOptions; + +/** + * Contains options supported in the Form API for the CreateImage operation.

+ * Usage

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): + *

+ * + * import static org.jclouds.aws.ec2.options.CreateImageOptions.Builder.* + *

+ * EC2Client connection = // get connection + * Future> images = connection.getAMIServices().createImage(withDescription("123125").noReboot()); + * + * + * @author Adrian Cole + * @see + */ +public class CreateImageOptions extends BaseEC2RequestOptions { + public static final CreateImageOptions NONE = new CreateImageOptions(); + + /** + * The description of the AMI that was provided during image creation. + *

+ * + * 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 accountId) { + CreateImageOptions options = new CreateImageOptions(); + return options.withDescription(accountId); + } + + /** + * @see CreateImageOptions#noReboot() + */ + public static CreateImageOptions noReboot() { + CreateImageOptions options = new CreateImageOptions(); + return options.noReboot(); + } + + } +} diff --git a/aws/core/src/test/java/org/jclouds/aws/ec2/options/CreateImagesOptionsTest.java b/aws/core/src/test/java/org/jclouds/aws/ec2/options/CreateImagesOptionsTest.java new file mode 100644 index 0000000000..3647c85a20 --- /dev/null +++ b/aws/core/src/test/java/org/jclouds/aws/ec2/options/CreateImagesOptionsTest.java @@ -0,0 +1,87 @@ +/** + * + * Copyright (C) 2009 Cloud Conscious, LLC. + * + * ==================================================================== + * 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.aws.ec2.options; + +import static org.jclouds.aws.ec2.options.CreateImageOptions.Builder.noReboot; +import static org.jclouds.aws.ec2.options.CreateImageOptions.Builder.withDescription; +import static org.testng.Assert.assertEquals; + +import java.util.Collections; + +import org.jclouds.http.options.HttpRequestOptions; +import org.testng.annotations.Test; + +/** + * Tests possible uses of CreateImageOptions and CreateImageOptions.Builder.* + * + * @author Adrian Cole + */ +public class CreateImagesOptionsTest { + + @Test + public void testAssignability() { + assert HttpRequestOptions.class.isAssignableFrom(CreateImageOptions.class); + assert !String.class.isAssignableFrom(CreateImageOptions.class); + } + + @Test + public void testWithDescription() { + CreateImageOptions options = new CreateImageOptions(); + options.withDescription("test"); + assertEquals(options.buildFormParameters().get("Description"), Collections + .singletonList("test")); + } + + @Test + public void testNullWithDescription() { + CreateImageOptions options = new CreateImageOptions(); + assertEquals(options.buildFormParameters().get("Description"), Collections.EMPTY_LIST); + } + + @Test + public void testWithDescriptionStatic() { + CreateImageOptions options = withDescription("test"); + assertEquals(options.buildFormParameters().get("Description"), Collections + .singletonList("test")); + } + + @Test(expectedExceptions = NullPointerException.class) + public void testWithDescriptionNPE() { + withDescription(null); + } + + @Test + public void testNoReboot() { + CreateImageOptions options = new CreateImageOptions(); + options.noReboot(); + assertEquals(options.buildFormParameters().get("NoReboot"), Collections.singletonList("true")); + } + + @Test + public void testNoRebootStatic() { + CreateImageOptions options = noReboot(); + assertEquals(options.buildFormParameters().get("NoReboot"), Collections.singletonList("true")); + } + +}