You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2014/10/24 18:08:48 UTC
[14/21] git commit: Minimalize code around hosted service creation.
Minimalize code around hosted service creation.
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/79f6529f
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/79f6529f
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/79f6529f
Branch: refs/heads/1.8.x
Commit: 79f6529fcdaabbbf772d2d0d8faaee716543b7c8
Parents: 2cd19ba
Author: Adrian Cole <ac...@twitter.com>
Authored: Tue Oct 21 21:40:44 2014 -0700
Committer: Adrian Cole <ad...@apache.org>
Committed: Fri Oct 24 09:04:17 2014 -0700
----------------------------------------------------------------------
.../BindCreateHostedServiceToXmlPayload.java | 79 -------------
.../azurecompute/features/HostedServiceApi.java | 29 ++---
.../functions/Base64EncodeLabel.java | 28 +++++
.../options/CreateHostedServiceOptions.java | 115 -------------------
.../features/HostedServiceApiLiveTest.java | 2 +-
.../features/HostedServiceApiMockTest.java | 22 +---
.../create_hostedservice_location_options.xml | 1 -
7 files changed, 38 insertions(+), 238 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/79f6529f/azurecompute/src/main/java/org/jclouds/azurecompute/binders/BindCreateHostedServiceToXmlPayload.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/binders/BindCreateHostedServiceToXmlPayload.java b/azurecompute/src/main/java/org/jclouds/azurecompute/binders/BindCreateHostedServiceToXmlPayload.java
deleted file mode 100644
index 900c9a7..0000000
--- a/azurecompute/src/main/java/org/jclouds/azurecompute/binders/BindCreateHostedServiceToXmlPayload.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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.azurecompute.binders;
-
-import com.google.common.base.Optional;
-import com.google.common.base.Throwables;
-import com.jamesmurty.utils.XMLBuilder;
-import java.util.Map;
-import java.util.Map.Entry;
-import javax.inject.Singleton;
-import org.jclouds.azurecompute.options.CreateHostedServiceOptions;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.rest.MapBinder;
-
-import static com.google.common.base.Charsets.UTF_8;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.io.BaseEncoding.base64;
-
-@Singleton
-public class BindCreateHostedServiceToXmlPayload implements MapBinder {
-
- private static final CreateHostedServiceOptions NO_OPTIONS = new CreateHostedServiceOptions();
-
- @Override
- public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
- String serviceName = checkNotNull(postParams.get("name"), "name").toString();
- String label = base64().encode(checkNotNull(postParams.get("label"), "label").toString().getBytes(UTF_8));
-
- Optional<String> location = Optional.fromNullable((String) postParams.get("location"));
- Optional<String> affinityGroup = Optional.fromNullable((String) postParams.get("affinityGroup"));
- CreateHostedServiceOptions options = Optional
- .fromNullable((CreateHostedServiceOptions) postParams.get("options")).or(NO_OPTIONS);
- try {
- XMLBuilder createHostedService = XMLBuilder.create("CreateHostedService")
- .a("xmlns", "http://schemas.microsoft.com/windowsazure").e("ServiceName").t(serviceName).up()
- .e("Label").t(label).up();
-
- if (options.getDescription().isPresent())
- createHostedService.e("Description").t(options.getDescription().get()).up();
-
- if (location.isPresent())
- createHostedService.e("Location").t(location.get()).up();
- else if (affinityGroup.isPresent())
- createHostedService.e("AffinityGroup").t(affinityGroup.get()).up();
- else
- throw new IllegalArgumentException("you must specify either Location or AffinityGroup!");
-
- if (options.getExtendedProperties().isPresent() && options.getExtendedProperties().get().size() > 0) {
- XMLBuilder extendedProperties = createHostedService.e("ExtendedProperties");
- for (Entry<String, String> entry : options.getExtendedProperties().get().entrySet())
- extendedProperties.e("ExtendedProperty").e("Name").t(entry.getKey()).up().e("Value").t(entry.getValue());
- }
- return (R) request.toBuilder().payload(createHostedService.asString()).build();
- } catch (Exception e) {
- throw Throwables.propagate(e);
- }
-
- }
-
- @Override
- public <R extends HttpRequest> R bindToRequest(R request, Object input) {
- throw new IllegalStateException("BindCreateHostedServiceToXmlPayload is needs parameters");
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/79f6529f/azurecompute/src/main/java/org/jclouds/azurecompute/features/HostedServiceApi.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/features/HostedServiceApi.java b/azurecompute/src/main/java/org/jclouds/azurecompute/features/HostedServiceApi.java
index bdfeda6..f8d1502 100644
--- a/azurecompute/src/main/java/org/jclouds/azurecompute/features/HostedServiceApi.java
+++ b/azurecompute/src/main/java/org/jclouds/azurecompute/features/HostedServiceApi.java
@@ -31,16 +31,16 @@ import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
-import org.jclouds.azurecompute.binders.BindCreateHostedServiceToXmlPayload;
import org.jclouds.azurecompute.domain.HostedService;
+import org.jclouds.azurecompute.functions.Base64EncodeLabel;
import org.jclouds.azurecompute.functions.ParseRequestIdHeader;
-import org.jclouds.azurecompute.options.CreateHostedServiceOptions;
import org.jclouds.azurecompute.xml.HostedServiceHandler;
import org.jclouds.azurecompute.xml.ListHostedServicesHandler;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.rest.annotations.Fallback;
import org.jclouds.rest.annotations.Headers;
-import org.jclouds.rest.annotations.MapBinder;
+import org.jclouds.rest.annotations.ParamParser;
+import org.jclouds.rest.annotations.Payload;
import org.jclouds.rest.annotations.PayloadParam;
import org.jclouds.rest.annotations.QueryParams;
import org.jclouds.rest.annotations.ResponseParser;
@@ -89,27 +89,12 @@ public interface HostedServiceApi {
*/
@Named("CreateHostedService")
@POST
- @MapBinder(BindCreateHostedServiceToXmlPayload.class)
@Produces(APPLICATION_XML)
@ResponseParser(ParseRequestIdHeader.class)
- String createServiceWithLabelInLocation(@PayloadParam("name") String name,
- @PayloadParam("label") String label, @PayloadParam("location") String location);
-
- /**
- * same as {@link #createServiceWithLabelInLocation(String, String, String)} , except you can
- * specify optional parameters such as extended properties or a description.
- *
- * @param options
- * parameters such as extended properties or a description.
- */
- @Named("CreateHostedService")
- @POST
- @MapBinder(BindCreateHostedServiceToXmlPayload.class)
- @Produces(APPLICATION_XML)
- @ResponseParser(ParseRequestIdHeader.class)
- String createServiceWithLabelInLocation(@PayloadParam("name") String name,
- @PayloadParam("label") String label, @PayloadParam("location") String location,
- @PayloadParam("options") CreateHostedServiceOptions options);
+ @Payload("<CreateHostedService xmlns=\"http://schemas.microsoft.com/windowsazure\"><ServiceName>{name}</ServiceName><Label>{label}</Label><Location>{location}</Location></CreateHostedService>")
+ String createWithLabelInLocation(@PayloadParam("name") String name,
+ @PayloadParam("label") @ParamParser(Base64EncodeLabel.class) String label,
+ @PayloadParam("location") String location);
/**
* The Get Hosted Service Properties operation retrieves system properties for the specified
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/79f6529f/azurecompute/src/main/java/org/jclouds/azurecompute/functions/Base64EncodeLabel.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/functions/Base64EncodeLabel.java b/azurecompute/src/main/java/org/jclouds/azurecompute/functions/Base64EncodeLabel.java
new file mode 100644
index 0000000..a8d0513
--- /dev/null
+++ b/azurecompute/src/main/java/org/jclouds/azurecompute/functions/Base64EncodeLabel.java
@@ -0,0 +1,28 @@
+/*
+ * 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.azurecompute.functions;
+
+import static com.google.common.base.Charsets.UTF_8;
+import static com.google.common.io.BaseEncoding.base64;
+
+import com.google.common.base.Function;
+
+public final class Base64EncodeLabel implements Function<Object, String> {
+ @Override public String apply(Object label) {
+ return base64().encode(label.toString().getBytes(UTF_8));
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/79f6529f/azurecompute/src/main/java/org/jclouds/azurecompute/options/CreateHostedServiceOptions.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/main/java/org/jclouds/azurecompute/options/CreateHostedServiceOptions.java b/azurecompute/src/main/java/org/jclouds/azurecompute/options/CreateHostedServiceOptions.java
deleted file mode 100644
index 18ab095..0000000
--- a/azurecompute/src/main/java/org/jclouds/azurecompute/options/CreateHostedServiceOptions.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * 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.azurecompute.options;
-
-import com.google.common.base.Objects;
-import com.google.common.base.Optional;
-import java.util.Map;
-
-/**
- * Optional parameters for creating a hosted service
- *
- * @see <a href="http://msdn.microsoft.com/en-us/library/gg441304" >docs</a>
- */
-public class CreateHostedServiceOptions implements Cloneable {
-
- private Optional<String> description = Optional.absent();
- private Optional<Map<String, String>> extendedProperties = Optional.absent();
-
- /**
- * @see CreateHostedServiceOptions#getDescription()
- */
- public CreateHostedServiceOptions description(String description) {
- this.description = Optional.fromNullable(description);
- return this;
- }
-
- /**
- * @see CreateHostedServiceOptions#getExtendedProperties()
- */
- public CreateHostedServiceOptions extendedProperties(Map<String, String> extendedProperties) {
- this.extendedProperties = Optional.fromNullable(extendedProperties);
- return this;
- }
-
- /**
- * A description for the hosted service. The description can be up to 1024 characters in length.
- */
- public Optional<String> getDescription() {
- return description;
- }
-
- /**
- * Represents the name of an extended hosted service property. Each extended property must have
- * both a defined name and value. You can have a maximum of 50 extended property name/value
- * pairs.
- *
- * The maximum length of the Name element is 64 characters, only alphanumeric characters and
- * underscores are valid in the Name, and the name must start with a letter. Each extended
- * property value has a maximum length of 255 characters.
- */
- public Optional<Map<String, String>> getExtendedProperties() {
- return extendedProperties;
- }
-
- public static class Builder {
-
- /**
- * @see CreateHostedServiceOptions#getDescription()
- */
- public static CreateHostedServiceOptions description(String description) {
- return new CreateHostedServiceOptions().description(description);
- }
-
- /**
- * @see CreateHostedServiceOptions#getExtendedProperties()
- */
- public static CreateHostedServiceOptions extendedProperties(Map<String, String> extendedProperties) {
- return new CreateHostedServiceOptions().extendedProperties(extendedProperties);
- }
- }
-
- @Override
- public CreateHostedServiceOptions clone() {
- return new CreateHostedServiceOptions().description(description.orNull()).extendedProperties(
- extendedProperties.orNull());
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- CreateHostedServiceOptions other = CreateHostedServiceOptions.class.cast(obj);
- return Objects.equal(this.description, other.description)
- && Objects.equal(this.extendedProperties, other.extendedProperties);
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(description, extendedProperties);
- }
-
- @Override
- public String toString() {
- return Objects.toStringHelper("").omitNullValues().add("description", description.orNull())
- .add("extendedProperties", extendedProperties.orNull()).toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/79f6529f/azurecompute/src/test/java/org/jclouds/azurecompute/features/HostedServiceApiLiveTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/HostedServiceApiLiveTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/HostedServiceApiLiveTest.java
index 894c0de..08f53b4 100644
--- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/HostedServiceApiLiveTest.java
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/HostedServiceApiLiveTest.java
@@ -76,7 +76,7 @@ public class HostedServiceApiLiveTest extends BaseAzureComputeApiLiveTest {
public void testCreateHostedService() {
- String requestId = api().createServiceWithLabelInLocation(HOSTED_SERVICE, HOSTED_SERVICE, location);
+ String requestId = api().createWithLabelInLocation(HOSTED_SERVICE, HOSTED_SERVICE, location);
assertTrue(operationSucceeded.apply(requestId), requestId);
Logger.getAnonymousLogger().info("operation succeeded: " + requestId);
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/79f6529f/azurecompute/src/test/java/org/jclouds/azurecompute/features/HostedServiceApiMockTest.java
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/java/org/jclouds/azurecompute/features/HostedServiceApiMockTest.java b/azurecompute/src/test/java/org/jclouds/azurecompute/features/HostedServiceApiMockTest.java
index 1ac320d..9d0cf80 100644
--- a/azurecompute/src/test/java/org/jclouds/azurecompute/features/HostedServiceApiMockTest.java
+++ b/azurecompute/src/test/java/org/jclouds/azurecompute/features/HostedServiceApiMockTest.java
@@ -16,7 +16,6 @@
*/
package org.jclouds.azurecompute.features;
-import static org.jclouds.azurecompute.options.CreateHostedServiceOptions.Builder.description;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
@@ -26,7 +25,6 @@ import org.jclouds.azurecompute.xml.HostedServiceHandlerTest;
import org.jclouds.azurecompute.xml.ListHostedServicesHandlerTest;
import org.testng.annotations.Test;
-import com.google.common.collect.ImmutableMap;
import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
@@ -93,14 +91,14 @@ public class HostedServiceApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void createServiceWithLabelInLocation() throws Exception {
+ public void createWithLabelInLocation() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
try {
HostedServiceApi api = api(server.getUrl("/")).getHostedServiceApi();
- assertEquals(api.createServiceWithLabelInLocation("myservice", "service mine", "West US"), "request-1");
+ assertEquals(api.createWithLabelInLocation("myservice", "service mine", "West US"), "request-1");
assertSent(server, "POST", "/services/hostedservices", "/create_hostedservice_location.xml");
} finally {
@@ -108,22 +106,6 @@ public class HostedServiceApiMockTest extends BaseAzureComputeApiMockTest {
}
}
- public void createServiceWithLabelInLocationOptions() throws Exception {
- MockWebServer server = mockAzureManagementServer();
- server.enqueue(requestIdResponse("request-1"));
-
- try {
- HostedServiceApi api = api(server.getUrl("/")).getHostedServiceApi();
-
- assertEquals(api.createServiceWithLabelInLocation("myservice", "service mine", "West US",
- description("my description").extendedProperties(ImmutableMap.of("Role", "Production"))), "request-1");
-
- assertSent(server, "POST", "/services/hostedservices", "/create_hostedservice_location_options.xml");
- } finally {
- server.shutdown();
- }
- }
-
public void deleteWhenFound() throws Exception {
MockWebServer server = mockAzureManagementServer();
server.enqueue(requestIdResponse("request-1"));
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/79f6529f/azurecompute/src/test/resources/create_hostedservice_location_options.xml
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/resources/create_hostedservice_location_options.xml b/azurecompute/src/test/resources/create_hostedservice_location_options.xml
deleted file mode 100644
index 9f7f8f0..0000000
--- a/azurecompute/src/test/resources/create_hostedservice_location_options.xml
+++ /dev/null
@@ -1 +0,0 @@
-<CreateHostedService xmlns="http://schemas.microsoft.com/windowsazure"><ServiceName>myservice</ServiceName><Label>c2VydmljZSBtaW5l</Label><Description>my description</Description><Location>West US</Location><ExtendedProperties><ExtendedProperty><Name>Role</Name><Value>Production</Value></ExtendedProperty></ExtendedProperties></CreateHostedService>
\ No newline at end of file