JCLOUDS-702: JClouds ProfitBricks provider - Storage API
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/2a219a99 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/2a219a99 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/2a219a99 Branch: refs/heads/master Commit: 2a219a994869ebf6012371d4188f23bbdebd3bcf Parents: ee24ddb Author: Reijhanniel Jearl Campos <[email protected]> Authored: Thu Feb 5 21:45:03 2015 +0800 Committer: Ignasi Barrera <[email protected]> Committed: Thu Feb 5 14:53:10 2015 +0100 ---------------------------------------------------------------------- .../jclouds/profitbricks/ProfitBricksApi.java | 4 + .../profitbricks/ProfitBricksApiMetadata.java | 30 +- .../ProfitBricksProviderMetadata.java | 18 +- .../binder/BaseProfitBricksRequestBinder.java | 6 +- .../CreateDataCenterRequestBinder.java | 10 +- .../server/CreateServerRequestBinder.java | 46 +-- .../server/UpdateServerRequestBinder.java | 42 +-- .../ConnectStorageToServerRequestBinder.java | 45 +++ .../storage/CreateStorageRequestBinder.java | 46 +++ .../storage/UpdateStorageRequestBinder.java | 47 +++ .../internal/ProvisioningStatusAware.java | 2 +- .../ProvisioningStatusPollingPredicate.java | 9 +- .../config/ProfitBricksHttpApiModule.java | 8 +- .../profitbricks/domain/AvailabilityZone.java | 6 +- .../jclouds/profitbricks/domain/DataCenter.java | 94 +++-- .../jclouds/profitbricks/domain/Location.java | 8 +- .../profitbricks/domain/ProvisioningState.java | 4 +- .../org/jclouds/profitbricks/domain/Server.java | 160 +++++---- .../profitbricks/domain/ServiceFault.java | 28 +- .../jclouds/profitbricks/domain/Storage.java | 355 +++++++++++++++++++ .../profitbricks/features/DataCenterApi.java | 12 +- .../profitbricks/features/ServerApi.java | 74 ++-- .../profitbricks/features/StorageApi.java | 136 +++++++ .../handlers/ProfitBricksHttpErrorHandler.java | 53 +-- ...usFromPayloadHttpCommandExecutorService.java | 94 +++-- .../ProfitBricksSoapMessageEnvelope.java | 6 +- .../parser/BaseProfitBricksResponseHandler.java | 21 +- .../parser/RequestIdOnlyResponseHandler.java | 14 +- .../parser/ServiceFaultResponseHandler.java | 19 +- .../BaseDataCenterResponseHandler.java | 11 +- .../DataCenterInfoResponseHandler.java | 74 +++- .../DataCenterListResponseHandler.java | 16 +- .../parser/image/BaseImageResponseHandler.java | 7 +- .../parser/image/ImageInfoResponseHandler.java | 6 +- .../parser/image/ImageListResponseHandler.java | 8 +- .../server/BaseServerResponseHandler.java | 85 +++-- .../server/ServerIdOnlyResponseHandler.java | 14 +- .../server/ServerInfoResponseHandler.java | 12 +- .../server/ServerListResponseHandler.java | 12 +- .../GetProvisioningStateResponseHandler.java | 9 +- .../storage/BaseStorageResponseHandler.java | 83 +++++ .../storage/StorageIdOnlyResponseHandler.java | 46 +++ .../storage/StorageInfoResponseHandler.java | 50 +++ .../storage/StorageListResponseHandler.java | 54 +++ .../profitbricks/BaseProfitBricksLiveTest.java | 4 +- .../CreateDataCenterRequestBinderTest.java | 12 +- .../UpdateDataCenterRequestBinderTest.java | 12 +- .../server/CreateServerRequestBinderTest.java | 46 +-- .../server/UpdateServerRequestBinderTest.java | 40 +-- ...ConnectStorageToServerRequestBinderTest.java | 55 +++ .../storage/CreateStorageRequestBinderTest.java | 56 +++ .../storage/UpdateStorageRequestBinderTest.java | 53 +++ .../ProvisioningStatusPollingPredicateTest.java | 68 +++- .../profitbricks/domain/ServerBuilderTest.java | 190 +++++----- .../features/DataCenterApiMockTest.java | 19 +- .../profitbricks/features/ImageApiMockTest.java | 2 +- .../features/ServerApiLiveTest.java | 90 ++--- .../features/ServerApiMockTest.java | 209 ++++++----- .../features/StorageApiLiveTest.java | 167 +++++++++ .../features/StorageApiMockTest.java | 285 +++++++++++++++ ...omPayloadHttpCommandExecutorServiceTest.java | 45 +++ .../ProfitBricksSoapMessageEnvelopeTest.java | 6 +- .../http/parser/BaseResponseHandlerTest.java | 4 +- .../RequestIdOnlyResponseHandlerTest.java | 24 +- .../parser/ServiceFaultResponseHandlerTest.java | 10 +- .../DataCenterInfoResponseHandlerTest.java | 61 +++- .../DataCenterListResponseHandlerTest.java | 4 +- .../image/ImageInfoResponseHandlerTest.java | 44 +-- .../image/ImageListResponseHandlerTest.java | 248 ++++++------- .../server/ServerIdOnlyResponseHandlerTest.java | 8 +- .../server/ServerInfoResponseHandlerTest.java | 55 +-- .../server/ServerListResponseHandlerTest.java | 80 ++--- ...GetProvisioningStateResponseHandlerTest.java | 114 +++--- .../StorageIdOnlyResponseHandlerTest.java | 42 +++ .../storage/StorageInfoResponseHandlerTest.java | 66 ++++ .../storage/StorageListResponseHandlerTest.java | 80 +++++ .../internal/BaseProfitBricksMockTest.java | 24 +- .../test/resources/datacenter/datacenter.xml | 2 +- .../src/test/resources/fault-404.xml | 2 +- .../src/test/resources/fault-413.xml | 17 + .../src/test/resources/maintenance-503.html | 67 ++++ .../resources/server/server-state-inprocess.xml | 28 ++ .../test/resources/storage/storage-connect.xml | 13 + .../test/resources/storage/storage-create.xml | 14 + .../test/resources/storage/storage-delete.xml | 13 + .../resources/storage/storage-disconnect.xml | 13 + .../storage/storage-state-inprocess.xml | 23 ++ .../test/resources/storage/storage-update.xml | 13 + .../src/test/resources/storage/storage.xml | 23 ++ .../src/test/resources/storage/storages.xml | 37 ++ 90 files changed, 3279 insertions(+), 1093 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApi.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApi.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApi.java index 7ab121a..4cfe6e8 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApi.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApi.java @@ -21,6 +21,7 @@ import java.io.Closeable; import org.jclouds.profitbricks.features.DataCenterApi; import org.jclouds.profitbricks.features.ImageApi; import org.jclouds.profitbricks.features.ServerApi; +import org.jclouds.profitbricks.features.StorageApi; import org.jclouds.rest.annotations.Delegate; public interface ProfitBricksApi extends Closeable { @@ -33,4 +34,7 @@ public interface ProfitBricksApi extends Closeable { @Delegate ServerApi serverApi(); + + @Delegate + StorageApi storageApi(); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApiMetadata.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApiMetadata.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApiMetadata.java index f51dc5b..205b246 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApiMetadata.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksApiMetadata.java @@ -53,29 +53,29 @@ public class ProfitBricksApiMetadata extends BaseHttpApiMetadata<ProfitBricksApi public static class Builder extends BaseHttpApiMetadata.Builder<ProfitBricksApi, Builder> { protected Builder() { - id("profitbricks") - .name("ProfitBricks API") - .identityName("API Username") - .credentialName("API Password") - .documentation(URI.create("https://www.profitbricks.com/sites/default/files/profitbricks_api_1_3.pdf")) - .defaultEndpoint("https://api.profitbricks.com/1.3") - .version("1.3") - // .view(ComputeServiceContext.class) - .defaultProperties(ProfitBricksApiMetadata.defaultProperties()) - .defaultModules(ImmutableSet.<Class<? extends Module>>of( - ProfitBricksHttpApiModule.class, - ProfitBricksHttpCommandExecutorServiceModule.class - )); + id("profitbricks") + .name("ProfitBricks API") + .identityName("API Username") + .credentialName("API Password") + .documentation(URI.create("https://www.profitbricks.com/sites/default/files/profitbricks_api_1_3.pdf")) + .defaultEndpoint("https://api.profitbricks.com/1.3") + .version("1.3") + // .view(ComputeServiceContext.class) + .defaultProperties(ProfitBricksApiMetadata.defaultProperties()) + .defaultModules(ImmutableSet.<Class<? extends Module>>of( + ProfitBricksHttpApiModule.class, + ProfitBricksHttpCommandExecutorServiceModule.class + )); } @Override public ProfitBricksApiMetadata build() { - return new ProfitBricksApiMetadata(this); + return new ProfitBricksApiMetadata(this); } @Override protected Builder self() { - return this; + return this; } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksProviderMetadata.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksProviderMetadata.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksProviderMetadata.java index d66ed15..9ecfbc1 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksProviderMetadata.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/ProfitBricksProviderMetadata.java @@ -44,23 +44,23 @@ public class ProfitBricksProviderMetadata extends BaseProviderMetadata { public static class Builder extends BaseProviderMetadata.Builder { protected Builder() { - id("profitbricks") - .name("ProfitBricks Cloud Compute 2.0") - .homepage(URI.create("http://www.profitbricks.com")) - .console(URI.create("https://my.profitbricks.com/dashboard/dcdr2/")) - .linkedServices("profitbricks") - .apiMetadata(new ProfitBricksApiMetadata()); + id("profitbricks") + .name("ProfitBricks Cloud Compute 2.0") + .homepage(URI.create("http://www.profitbricks.com")) + .console(URI.create("https://my.profitbricks.com/dashboard/dcdr2/")) + .linkedServices("profitbricks") + .apiMetadata(new ProfitBricksApiMetadata()); } @Override public ProfitBricksProviderMetadata build() { - return new ProfitBricksProviderMetadata(this); + return new ProfitBricksProviderMetadata(this); } @Override public Builder fromProviderMetadata(ProviderMetadata in) { - super.fromProviderMetadata(in); - return this; + super.fromProviderMetadata(in); + return this; } } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/BaseProfitBricksRequestBinder.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/BaseProfitBricksRequestBinder.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/BaseProfitBricksRequestBinder.java index 8c2d36b..2b842ff 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/BaseProfitBricksRequestBinder.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/BaseProfitBricksRequestBinder.java @@ -55,11 +55,11 @@ public abstract class BaseProfitBricksRequestBinder<T> implements MapBinder { protected abstract String createPayload(T payload); - protected String formatIfNotEmpty(String pattern, Object param) { - return Strings.isNullOrEmpty(nullableToString( param )) ? "" : String.format(pattern, param); + protected static String formatIfNotEmpty(String pattern, Object param) { + return Strings.isNullOrEmpty(nullableToString(param)) ? "" : String.format(pattern, param); } - protected String nullableToString(Object object) { + protected static String nullableToString(Object object) { return object == null ? "" : object.toString(); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinder.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinder.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinder.java index 8696c0e..8a07b0a 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinder.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/datacenter/CreateDataCenterRequestBinder.java @@ -33,11 +33,11 @@ public class CreateDataCenterRequestBinder extends BaseProfitBricksRequestBinder @Override protected String createPayload(DataCenter.Request.CreatePayload payload) { requestBuilder.append("<ws:createDataCenter>") - .append("<request>") - .append(format("<dataCenterName>%s</dataCenterName>", payload.name())) - .append(format("<location>%s</location>", payload.location().value())) - .append("</request>") - .append("</ws:createDataCenter>"); + .append("<request>") + .append(format("<dataCenterName>%s</dataCenterName>", payload.name())) + .append(format("<location>%s</location>", payload.location().value())) + .append("</request>") + .append("</ws:createDataCenter>"); return requestBuilder.toString(); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/server/CreateServerRequestBinder.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/server/CreateServerRequestBinder.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/server/CreateServerRequestBinder.java index 4acf33b..b836ceb 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/server/CreateServerRequestBinder.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/server/CreateServerRequestBinder.java @@ -25,32 +25,32 @@ public class CreateServerRequestBinder extends BaseProfitBricksRequestBinder<Ser protected final StringBuilder requestBuilder; CreateServerRequestBinder() { - super( "server" ); - this.requestBuilder = new StringBuilder( 128 * 4 ); + super("server"); + this.requestBuilder = new StringBuilder(128 * 4); } @Override - protected String createPayload( Server.Request.CreatePayload payload ) { - requestBuilder.append( "<ws:createServer>" ) - .append( "<request>" ) - .append( format( "<dataCenterId>%s</dataCenterId>", payload.dataCenterId() ) ) - .append( format( "<cores>%s</cores>", payload.cores() ) ) - .append( format( "<ram>%s</ram>", payload.ram() ) ) - .append( formatIfNotEmpty( "<serverName>%s</serverName>", payload.name() ) ) - .append( formatIfNotEmpty( "<bootFromStorageId>%s</bootFromStorageId>", payload.bootFromStorageId() ) ) - .append( formatIfNotEmpty( "<bootFromImageId>%s</bootFromImageId>", payload.bootFromImageId() ) ) - .append( formatIfNotEmpty( "<internetAccess>%s</internetAccess>", payload.hasInternetAccess() ) ) - .append( formatIfNotEmpty( "<lanId>%s</lanId>", payload.lanId() ) ) - .append( formatIfNotEmpty( "<osType>%s</osType>", payload.osType() ) ) - .append( formatIfNotEmpty( "<availabilityZone>%s</availabilityZone>", payload.availabilityZone() ) ) - .append( formatIfNotEmpty( "<cpuHotPlug>%s</cpuHotPlug>", payload.isCpuHotPlug() ) ) - .append( formatIfNotEmpty( "<ramHotPlug>%s</ramHotPlug>", payload.isRamHotPlug() ) ) - .append( formatIfNotEmpty( "<nicHotPlug>%s</nicHotPlug>", payload.isNicHotPlug() ) ) - .append( formatIfNotEmpty( "<nicHotUnPlug>%s</nicHotUnPlug>", payload.isNicHotUnPlug() ) ) - .append( formatIfNotEmpty( "<discVirtioHotPlug>%s</discVirtioHotPlug>", payload.isDiscVirtioHotPlug() ) ) - .append( formatIfNotEmpty( "<discVirtioHotUnPlug>%s</discVirtioHotUnPlug>", payload.isDiscVirtioHotUnPlug() ) ) - .append( "</request>" ) - .append( "</ws:createServer>" ); + protected String createPayload(Server.Request.CreatePayload payload) { + requestBuilder.append("<ws:createServer>") + .append("<request>") + .append(format("<dataCenterId>%s</dataCenterId>", payload.dataCenterId())) + .append(format("<cores>%s</cores>", payload.cores())) + .append(format("<ram>%s</ram>", payload.ram())) + .append(formatIfNotEmpty("<serverName>%s</serverName>", payload.name())) + .append(formatIfNotEmpty("<bootFromStorageId>%s</bootFromStorageId>", payload.bootFromStorageId())) + .append(formatIfNotEmpty("<bootFromImageId>%s</bootFromImageId>", payload.bootFromImageId())) + .append(formatIfNotEmpty("<internetAccess>%s</internetAccess>", payload.hasInternetAccess())) + .append(formatIfNotEmpty("<lanId>%s</lanId>", payload.lanId())) + .append(formatIfNotEmpty("<osType>%s</osType>", payload.osType())) + .append(formatIfNotEmpty("<availabilityZone>%s</availabilityZone>", payload.availabilityZone())) + .append(formatIfNotEmpty("<cpuHotPlug>%s</cpuHotPlug>", payload.isCpuHotPlug())) + .append(formatIfNotEmpty("<ramHotPlug>%s</ramHotPlug>", payload.isRamHotPlug())) + .append(formatIfNotEmpty("<nicHotPlug>%s</nicHotPlug>", payload.isNicHotPlug())) + .append(formatIfNotEmpty("<nicHotUnPlug>%s</nicHotUnPlug>", payload.isNicHotUnPlug())) + .append(formatIfNotEmpty("<discVirtioHotPlug>%s</discVirtioHotPlug>", payload.isDiscVirtioHotPlug())) + .append(formatIfNotEmpty("<discVirtioHotUnPlug>%s</discVirtioHotUnPlug>", payload.isDiscVirtioHotUnPlug())) + .append("</request>") + .append("</ws:createServer>"); return requestBuilder.toString(); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/server/UpdateServerRequestBinder.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/server/UpdateServerRequestBinder.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/server/UpdateServerRequestBinder.java index d051b88..c12ae21 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/server/UpdateServerRequestBinder.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/server/UpdateServerRequestBinder.java @@ -25,31 +25,31 @@ public class UpdateServerRequestBinder extends BaseProfitBricksRequestBinder<Ser protected final StringBuilder requestBuilder; UpdateServerRequestBinder() { - super( "server" ); - this.requestBuilder = new StringBuilder( 128 * 4 ); + super("server"); + this.requestBuilder = new StringBuilder(128 * 4); } @Override - protected String createPayload( Server.Request.UpdatePayload payload ) { - requestBuilder.append( "<ws:updateServer>" ) - .append( "<request>" ) - .append( format( "<serverId>%s</serverId>", payload.id() ) ) - .append( format( "<cores>%s</cores>", payload.cores() ) ) - .append( format( "<ram>%s</ram>", payload.ram() ) ) - .append( formatIfNotEmpty( "<serverName>%s</serverName>", payload.name() ) ) - .append( formatIfNotEmpty( "<bootFromStorageId>%s</bootFromStorageId>", payload.bootFromStorageId() ) ) - .append( formatIfNotEmpty( "<bootFromImageId>%s</bootFromImageId>", payload.bootFromImageId() ) ) - .append( formatIfNotEmpty( "<osType>%s</osType>", payload.osType() ) ) - .append( formatIfNotEmpty( "<availabilityZone>%s</availabilityZone>", payload.availabilityZone() ) ) - .append( formatIfNotEmpty( "<cpuHotPlug>%s</cpuHotPlug>", payload.isCpuHotPlug() ) ) - .append( formatIfNotEmpty( "<ramHotPlug>%s</ramHotPlug>", payload.isRamHotPlug() ) ) - .append( formatIfNotEmpty( "<nicHotPlug>%s</nicHotPlug>", payload.isNicHotPlug() ) ) - .append( formatIfNotEmpty( "<nicHotUnPlug>%s</nicHotUnPlug>", payload.isNicHotUnPlug() ) ) - .append( formatIfNotEmpty( "<discVirtioHotPlug>%s</discVirtioHotPlug>", payload.isDiscVirtioHotPlug() ) ) - .append( formatIfNotEmpty( "<discVirtioHotUnPlug>%s</discVirtioHotUnPlug>", payload.isDiscVirtioHotUnPlug() ) ) - .append( "</request>" ) - .append( "</ws:updateServer>" ); + protected String createPayload(Server.Request.UpdatePayload payload) { + requestBuilder.append("<ws:updateServer>") + .append("<request>") + .append(format("<serverId>%s</serverId>", payload.id())) + .append(format("<cores>%s</cores>", payload.cores())) + .append(format("<ram>%s</ram>", payload.ram())) + .append(formatIfNotEmpty("<serverName>%s</serverName>", payload.name())) + .append(formatIfNotEmpty("<bootFromStorageId>%s</bootFromStorageId>", payload.bootFromStorageId())) + .append(formatIfNotEmpty("<bootFromImageId>%s</bootFromImageId>", payload.bootFromImageId())) + .append(formatIfNotEmpty("<osType>%s</osType>", payload.osType())) + .append(formatIfNotEmpty("<availabilityZone>%s</availabilityZone>", payload.availabilityZone())) + .append(formatIfNotEmpty("<cpuHotPlug>%s</cpuHotPlug>", payload.isCpuHotPlug())) + .append(formatIfNotEmpty("<ramHotPlug>%s</ramHotPlug>", payload.isRamHotPlug())) + .append(formatIfNotEmpty("<nicHotPlug>%s</nicHotPlug>", payload.isNicHotPlug())) + .append(formatIfNotEmpty("<nicHotUnPlug>%s</nicHotUnPlug>", payload.isNicHotUnPlug())) + .append(formatIfNotEmpty("<discVirtioHotPlug>%s</discVirtioHotPlug>", payload.isDiscVirtioHotPlug())) + .append(formatIfNotEmpty("<discVirtioHotUnPlug>%s</discVirtioHotUnPlug>", payload.isDiscVirtioHotUnPlug())) + .append("</request>") + .append("</ws:updateServer>"); return requestBuilder.toString(); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/ConnectStorageToServerRequestBinder.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/ConnectStorageToServerRequestBinder.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/ConnectStorageToServerRequestBinder.java new file mode 100644 index 0000000..2c2e08d --- /dev/null +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/ConnectStorageToServerRequestBinder.java @@ -0,0 +1,45 @@ +/* + * 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.profitbricks.binder.storage; + +import static java.lang.String.format; + +import org.jclouds.profitbricks.binder.BaseProfitBricksRequestBinder; +import org.jclouds.profitbricks.domain.Storage; + +public class ConnectStorageToServerRequestBinder extends BaseProfitBricksRequestBinder<Storage.Request.ConnectPayload> { + + protected final StringBuilder requestBuilder; + + ConnectStorageToServerRequestBinder() { + super("storage"); + this.requestBuilder = new StringBuilder(128 * 2); + } + + @Override + protected String createPayload(Storage.Request.ConnectPayload payload) { + requestBuilder.append("<ws:connectStorageToServer>") + .append("<request>") + .append(format("<storageId>%s</storageId>", payload.storageId())) + .append(format("<serverId>%s</serverId>", payload.serverId())) + .append(formatIfNotEmpty("<busType>%s</busType>", payload.busType())) + .append(formatIfNotEmpty("<deviceNumber>%s</deviceNumber>", payload.deviceNumber())) + .append("</request>") + .append("</ws:connectStorageToServer>"); + return requestBuilder.toString(); + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/CreateStorageRequestBinder.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/CreateStorageRequestBinder.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/CreateStorageRequestBinder.java new file mode 100644 index 0000000..acfb6f3 --- /dev/null +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/CreateStorageRequestBinder.java @@ -0,0 +1,46 @@ +/* + * 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.profitbricks.binder.storage; + +import static java.lang.String.format; +import org.jclouds.profitbricks.binder.BaseProfitBricksRequestBinder; +import org.jclouds.profitbricks.domain.Storage; + +public class CreateStorageRequestBinder extends BaseProfitBricksRequestBinder<Storage.Request.CreatePayload> { + + protected final StringBuilder requestBuilder; + + CreateStorageRequestBinder() { + super("storage"); + this.requestBuilder = new StringBuilder(128 * 2); + } + + @Override + protected String createPayload(Storage.Request.CreatePayload payload) { + requestBuilder.append("<ws:createStorage>") + .append("<request>") + .append(format("<dataCenterId>%s</dataCenterId>", payload.dataCenterId())) + .append(formatIfNotEmpty("<storageName>%s</storageName>", payload.name())) + .append(format("<size>%.0f</size>", payload.size())) + .append(formatIfNotEmpty("<mountImageId>%s</mountImageId>", payload.mountImageId())) + .append(formatIfNotEmpty("<profitBricksImagePassword>%s</profitBricksImagePassword>", payload.profitBricksImagePassword())) + .append("</request>") + .append("</ws:createStorage>"); + return requestBuilder.toString(); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/UpdateStorageRequestBinder.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/UpdateStorageRequestBinder.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/UpdateStorageRequestBinder.java new file mode 100644 index 0000000..9a80b83 --- /dev/null +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/UpdateStorageRequestBinder.java @@ -0,0 +1,47 @@ +/* + * 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.profitbricks.binder.storage; + +import static java.lang.String.format; +import org.jclouds.profitbricks.binder.BaseProfitBricksRequestBinder; +import org.jclouds.profitbricks.domain.Storage; + +public class UpdateStorageRequestBinder extends BaseProfitBricksRequestBinder<Storage.Request.UpdatePayload> { + + protected final StringBuilder requestBuilder; + + UpdateStorageRequestBinder() { + super("storage"); + this.requestBuilder = new StringBuilder(128 * 2); + } + + @Override + protected String createPayload(Storage.Request.UpdatePayload payload) { + requestBuilder + .append("<ws:updateStorage>") + .append("<request>") + .append(format("<storageId>%s</storageId>", payload.id())) + .append(formatIfNotEmpty("<size>%.0f</size>", payload.size())) + .append(formatIfNotEmpty("<storageName>%s</storageName>", payload.name())) + .append(formatIfNotEmpty("<mountImageId>%s</mountImageId>", payload.mountImageId())) + .append("</request>") + .append("</ws:updateStorage>"); + + return requestBuilder.toString(); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusAware.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusAware.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusAware.java index 5056243..f573eb0 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusAware.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusAware.java @@ -23,5 +23,5 @@ package org.jclouds.profitbricks.compute.internal; */ public enum ProvisioningStatusAware { - DATACENTER, SERVER; + DATACENTER, SERVER, STORAGE; } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java index 73db33f..8a8a787 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/compute/internal/ProvisioningStatusPollingPredicate.java @@ -26,9 +26,8 @@ import com.google.common.base.Predicate; /** * A custom predicate for waiting until a virtual resource satisfies the given expected status * <p> - * Performing api requests on a datacenter that is not {@link ProvisioningState#AVAILABLE} is not allowed. On some - * cases, the API user gets blocked from further requests, and will then need to contact tech support for api lock - * release. + * Performing api requests on a datacenter that is not {@link ProvisioningState#AVAILABLE} is not allowed. On some cases, the API user gets + * blocked from further requests, and will then need to contact tech support for api lock release. */ public class ProvisioningStatusPollingPredicate implements Predicate<String> { @@ -49,7 +48,9 @@ public class ProvisioningStatusPollingPredicate implements Predicate<String> { case DATACENTER: return expect == api.dataCenterApi().getDataCenterState(input); case SERVER: - return expect == api.serverApi().getServer( input ).state(); + return expect == api.serverApi().getServer(input).state(); + case STORAGE: + return expect == api.storageApi().getStorage(input).state(); default: throw new IllegalArgumentException("Unknown domain '" + domain + "'"); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksHttpApiModule.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksHttpApiModule.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksHttpApiModule.java index 57728be..f95b1b3 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksHttpApiModule.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksHttpApiModule.java @@ -55,14 +55,14 @@ public class ProfitBricksHttpApiModule extends HttpApiModule<ProfitBricksApi> { @Override protected void configure() { - install(new SSLModule()); - bind(HttpCommandExecutorService.class).to(ResponseStatusFromPayloadHttpCommandExecutorService.class) - .in(Scopes.SINGLETON); + install(new SSLModule()); + bind(HttpCommandExecutorService.class).to(ResponseStatusFromPayloadHttpCommandExecutorService.class) + .in(Scopes.SINGLETON); } @Provides public ParseSax<ServiceFault> serviceFaultParser(ParseSax.Factory factory, Injector injector) { - return factory.create(injector.getInstance(ServiceFaultResponseHandler.class)); + return factory.create(injector.getInstance(ServiceFaultResponseHandler.class)); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/AvailabilityZone.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/AvailabilityZone.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/AvailabilityZone.java index b582d69..97cac69 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/AvailabilityZone.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/AvailabilityZone.java @@ -24,10 +24,10 @@ public enum AvailabilityZone { return name(); } - public static AvailabilityZone fromValue( String v ) { + public static AvailabilityZone fromValue(String v) { try { - return valueOf( v ); - } catch ( Exception ex ) { + return valueOf(v); + } catch (Exception ex) { return UNRECOGNIZED; } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/DataCenter.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/DataCenter.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/DataCenter.java index d5f9893..a24d84b 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/DataCenter.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/DataCenter.java @@ -19,30 +19,43 @@ package org.jclouds.profitbricks.domain; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Strings.isNullOrEmpty; +import java.util.List; import java.util.regex.Pattern; import org.jclouds.javax.annotation.Nullable; import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; @AutoValue public abstract class DataCenter { public abstract String id(); - @Nullable public abstract String name(); + @Nullable + public abstract String name(); public abstract int version(); - @Nullable public abstract ProvisioningState state(); + @Nullable + public abstract ProvisioningState state(); - @Nullable public abstract Location location(); + @Nullable + public abstract Location location(); -// @Nullable public abstract List<Server> servers(); -// @Nullable public abstract List<Storage> storages(); + @Nullable + public abstract List<Server> servers(); + + @Nullable + public abstract List<Storage> storages(); // @Nullable public abstract List<LoadBalancer> loadBalancers(); - public static DataCenter create(String id, String name, int version, ProvisioningState state, Location location) { - return new AutoValue_DataCenter(id, name, version, state, location); + + public static DataCenter create(String id, String name, int version, ProvisioningState state, Location location, List<Server> servers, + List<Storage> storages) { + return new AutoValue_DataCenter(id, name, version, state, location, + servers != null ? ImmutableList.copyOf(servers) : Lists.<Server>newArrayList(), + storages != null ? ImmutableList.copyOf(storages) : Lists.<Storage>newArrayList()); } public static Builder builder() { @@ -60,76 +73,87 @@ public abstract class DataCenter { private ProvisioningState state; private Location location; private int version; -// private List<Server> servers; -// private List<Storage> storage; + private List<Server> servers; + private List<Storage> storages; // private List<LoadBalancer> loadBalancer; public Builder id(String id) { - this.id = id; - return this; + this.id = id; + return this; } public Builder name(String name) { - this.name = name; - return this; + this.name = name; + return this; } public Builder state(ProvisioningState state) { - this.state = state; - return this; + this.state = state; + return this; } public Builder location(Location location) { - this.location = location; - return this; + this.location = location; + return this; } public Builder version(int version) { - this.version = version; - return this; + this.version = version; + return this; + } + + public Builder servers(List<Server> servers) { + this.servers = servers; + return this; + } + + public Builder storages(List<Storage> storages) { + this.storages = storages; + return this; } public DataCenter build() { - return DataCenter.create(id, name, version, state, location); + return DataCenter.create(id, name, version, state, location, servers, storages); } public Builder fromDataCenter(DataCenter in) { - return this.id(in.id()).name(in.name()).version(in.version()).state(in.state()).location(in.location()); + return this.id(in.id()).name(in.name()).version(in.version()).state(in.state()).location(in.location()).servers(in.servers()) + .storages(in.storages()); } } public static final class Request { - + @AutoValue public abstract static class CreatePayload { - public abstract String name(); + public abstract String name(); - public abstract Location location(); + public abstract Location location(); - public static CreatePayload create(String name, Location location) { + public static CreatePayload create(String name, Location location) { checkInvalidChars(name); - return new AutoValue_DataCenter_Request_CreatePayload(name, location); - } + return new AutoValue_DataCenter_Request_CreatePayload(name, location); + } } @AutoValue public abstract static class UpdatePayload { - public abstract String id(); + public abstract String id(); - public abstract String name(); + public abstract String name(); - public static UpdatePayload create(String id, String name) { + public static UpdatePayload create(String id, String name) { checkInvalidChars(name); - return new AutoValue_DataCenter_Request_UpdatePayload(id, name); - } + return new AutoValue_DataCenter_Request_UpdatePayload(id, name); + } } - + private static final Pattern INVALID_CHARS = Pattern.compile("^.*[@/\\|'`â^].*$"); - - private static void checkInvalidChars(String name){ + + private static void checkInvalidChars(String name) { checkArgument(!isNullOrEmpty(name), "Name is required."); checkArgument(!INVALID_CHARS.matcher(name).matches(), "Name must not contain any of: @ / \\ | ' ` â ^"); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java index 969629a..0354bf4 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Location.java @@ -35,16 +35,16 @@ public enum Location { public static Location fromValue(String v) { try { - return valueOf(v); + return valueOf(v); } catch (IllegalArgumentException ex) { - return UNRECOGNIZED; + return UNRECOGNIZED; } } public static Location fromId(String id) { for (Location location : values()) - if (location.id.equals(id)) - return location; + if (location.id.equals(id)) + return location; return UNRECOGNIZED; } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ProvisioningState.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ProvisioningState.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ProvisioningState.java index 2a9e0b6..833e979 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ProvisioningState.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ProvisioningState.java @@ -22,9 +22,9 @@ public enum ProvisioningState { public static ProvisioningState fromValue(String value) { try { - return valueOf(value); + return valueOf(value); } catch (IllegalArgumentException e) { - return UNRECOGNIZED; + return UNRECOGNIZED; } } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java index 703eb59..6149cfd 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Server.java @@ -17,12 +17,20 @@ package org.jclouds.profitbricks.domain; import org.jclouds.profitbricks.domain.internal.ServerCommonProperties; + import com.google.auto.value.AutoValue; + import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; + import java.util.Date; +import java.util.List; + import org.jclouds.javax.annotation.Nullable; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; + @AutoValue public abstract class Server implements ServerCommonProperties { @@ -34,10 +42,10 @@ public abstract class Server implements ServerCommonProperties { return name(); } - public static Status fromValue( String v ) { + public static Status fromValue(String v) { try { - return valueOf( v ); - } catch ( IllegalArgumentException ex ) { + return valueOf(v); + } catch (IllegalArgumentException ex) { return UNRECOGNIZED; } } @@ -70,13 +78,17 @@ public abstract class Server implements ServerCommonProperties { @Nullable public abstract Date lastModificationTime(); -// public abstract List<Storage> storages(); -// public abstract List<Nic> storages(); - public static Server create( String id, String name, int cores, int ram, Boolean hasInternetAccess, ProvisioningState state, - Status status, OsType osType, AvailabilityZone availabilityZone, Date creationTime, Date lastModificationTime, Boolean isCpuHotPlug, - Boolean isRamHotPlug, Boolean isNicHotPlug, Boolean isNicHotUnPlug, Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug ) { - return new AutoValue_Server( isCpuHotPlug, isRamHotPlug, isNicHotPlug, isNicHotUnPlug, isDiscVirtioHotPlug, isDiscVirtioHotUnPlug, - cores, ram, id, name, hasInternetAccess, state, status, osType, availabilityZone, creationTime, lastModificationTime ); + @Nullable + public abstract List<Storage> storages(); + +// public abstract List<Nic> nics(); + public static Server create(String id, String name, int cores, int ram, Boolean hasInternetAccess, ProvisioningState state, + Status status, OsType osType, AvailabilityZone availabilityZone, Date creationTime, Date lastModificationTime, + List<Storage> storages, Boolean isCpuHotPlug, Boolean isRamHotPlug, Boolean isNicHotPlug, Boolean isNicHotUnPlug, + Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug) { + return new AutoValue_Server(isCpuHotPlug, isRamHotPlug, isNicHotPlug, isNicHotUnPlug, isDiscVirtioHotPlug, isDiscVirtioHotUnPlug, + cores, ram, id, name, hasInternetAccess, state, status, osType, availabilityZone, creationTime, lastModificationTime, + storages != null ? ImmutableList.copyOf(storages) : Lists.<Storage>newArrayList()); } @@ -85,7 +97,7 @@ public abstract class Server implements ServerCommonProperties { } public DescribingBuilder toBuilder() { - return builder().fromServer( this ); + return builder().fromServer(this); } public abstract static class Builder<B extends Builder, D extends ServerCommonProperties> { @@ -100,48 +112,48 @@ public abstract class Server implements ServerCommonProperties { protected Boolean discVirtioHotPlug; protected Boolean discVirtioHotUnPlug; - public B name( String name ) { + public B name(String name) { this.name = name; return self(); } - public B cores( int cores ) { + public B cores(int cores) { this.cores = cores; return self(); } - public B ram( int ram ) { + public B ram(int ram) { this.ram = ram; return self(); } - public B isCpuHotPlug( Boolean cpuHotPlug ) { + public B isCpuHotPlug(Boolean cpuHotPlug) { this.cpuHotPlug = cpuHotPlug; return self(); } - public B isRamHotPlug( Boolean ramHotPlug ) { + public B isRamHotPlug(Boolean ramHotPlug) { this.ramHotPlug = ramHotPlug; return self(); } - public B isNicHotPlug( Boolean nicHotPlug ) { + public B isNicHotPlug(Boolean nicHotPlug) { this.nicHotPlug = nicHotPlug; return self(); } - public B isNicHotUnPlug( Boolean nicHotUnPlug ) { + public B isNicHotUnPlug(Boolean nicHotUnPlug) { this.nicHotUnPlug = nicHotUnPlug; return self(); } - public B isDiscVirtioHotPlug( Boolean discVirtioHotPlug ) { + public B isDiscVirtioHotPlug(Boolean discVirtioHotPlug) { this.discVirtioHotPlug = discVirtioHotPlug; return self(); } - public B isDiscVirtioHotUnPlug( Boolean discVirtioHotUnPlug ) { + public B isDiscVirtioHotUnPlug(Boolean discVirtioHotUnPlug) { this.discVirtioHotUnPlug = discVirtioHotUnPlug; return self(); } @@ -161,59 +173,65 @@ public abstract class Server implements ServerCommonProperties { private Date creationTime; private Date lastModificationTime; private Boolean hasInternetAccess; + private List<Storage> storages; - public DescribingBuilder id( String id ) { + public DescribingBuilder id(String id) { this.id = id; return this; } - public DescribingBuilder state( ProvisioningState state ) { + public DescribingBuilder state(ProvisioningState state) { this.state = state; return this; } - public DescribingBuilder status( Status status ) { + public DescribingBuilder status(Status status) { this.status = status; return this; } - public DescribingBuilder osType( OsType osType ) { + public DescribingBuilder osType(OsType osType) { this.osType = osType; return this; } - public DescribingBuilder availabilityZone( AvailabilityZone zone ) { + public DescribingBuilder availabilityZone(AvailabilityZone zone) { this.zone = zone; return this; } - public DescribingBuilder creationTime( Date creationTime ) { + public DescribingBuilder creationTime(Date creationTime) { this.creationTime = creationTime; return this; } - public DescribingBuilder lastModificationTime( Date lastModificationTime ) { + public DescribingBuilder lastModificationTime(Date lastModificationTime) { this.lastModificationTime = lastModificationTime; return this; } - public DescribingBuilder hasInternetAccess( Boolean hasInternetAccess ) { + public DescribingBuilder hasInternetAccess(Boolean hasInternetAccess) { this.hasInternetAccess = hasInternetAccess; return this; } + public DescribingBuilder storages(List<Storage> storages) { + this.storages = storages; + return this; + } + @Override public Server build() { - return Server.create( id, name, cores, ram, hasInternetAccess, state, status, osType, zone, creationTime, - lastModificationTime, cpuHotPlug, ramHotPlug, nicHotPlug, nicHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug ); + return Server.create(id, name, cores, ram, hasInternetAccess, state, status, osType, zone, creationTime, + lastModificationTime, storages, cpuHotPlug, ramHotPlug, nicHotPlug, nicHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug); } - private DescribingBuilder fromServer( Server in ) { - return this.id( in.id() ).cores( in.cores() ).creationTime( in.creationTime() ).hasInternetAccess( in.hasInternetAccess() ) - .isCpuHotPlug( in.isCpuHotPlug() ).isDiscVirtioHotPlug( in.isDiscVirtioHotPlug() ).isDiscVirtioHotUnPlug( in.isDiscVirtioHotUnPlug() ) - .isNicHotPlug( in.isNicHotPlug() ).isNicHotUnPlug( in.isNicHotUnPlug() ).isRamHotPlug( in.isRamHotPlug() ) - .lastModificationTime( in.lastModificationTime() ).name( in.name() ).osType( in.osType() ).ram( in.ram() ).state( in.state() ) - .status( in.status() ); + private DescribingBuilder fromServer(Server in) { + return this.id(in.id()).cores(in.cores()).creationTime(in.creationTime()).hasInternetAccess(in.hasInternetAccess()) + .isCpuHotPlug(in.isCpuHotPlug()).isDiscVirtioHotPlug(in.isDiscVirtioHotPlug()).isDiscVirtioHotUnPlug(in.isDiscVirtioHotUnPlug()) + .isNicHotPlug(in.isNicHotPlug()).isNicHotUnPlug(in.isNicHotUnPlug()).isRamHotPlug(in.isRamHotPlug()) + .lastModificationTime(in.lastModificationTime()).name(in.name()).osType(in.osType()).ram(in.ram()).state(in.state()) + .status(in.status()).storages(in.storages()); } @Override @@ -256,18 +274,18 @@ public abstract class Server implements ServerCommonProperties { @Nullable public abstract OsType osType(); - public static CreatePayload create( String dataCenterId, String name, int core, int ram ) { - return create( dataCenterId, name, core, ram, "", "", null, false, null, null, null, null, null, null, null, null ); + public static CreatePayload create(String dataCenterId, String name, int core, int ram) { + return create(dataCenterId, name, core, ram, "", "", null, false, null, null, null, null, null, null, null, null); } - public static CreatePayload create( String dataCenterId, String name, int cores, int ram, String bootFromStorageId, String bootFromImageId, + public static CreatePayload create(String dataCenterId, String name, int cores, int ram, String bootFromStorageId, String bootFromImageId, Integer lanId, Boolean hasInternetAccess, AvailabilityZone availabilityZone, OsType osType, Boolean isCpuHotPlug, Boolean isRamHotPlug, - Boolean isNicHotPlug, Boolean isNicHotUnPlug, Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug ) { - validateCores( cores ); - validateRam( ram, isRamHotPlug ); - return new AutoValue_Server_Request_CreatePayload( isCpuHotPlug, isRamHotPlug, isNicHotPlug, isNicHotUnPlug, isDiscVirtioHotPlug, + Boolean isNicHotPlug, Boolean isNicHotUnPlug, Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug) { + validateCores(cores); + validateRam(ram, isRamHotPlug); + return new AutoValue_Server_Request_CreatePayload(isCpuHotPlug, isRamHotPlug, isNicHotPlug, isNicHotUnPlug, isDiscVirtioHotPlug, isDiscVirtioHotUnPlug, name, cores, ram, dataCenterId, bootFromStorageId, bootFromImageId, lanId, hasInternetAccess, - availabilityZone, osType ); + availabilityZone, osType); } public static class Builder extends Server.Builder<Builder, CreatePayload> { @@ -280,42 +298,42 @@ public abstract class Server implements ServerCommonProperties { private AvailabilityZone availabilityZone; private OsType osType; - public Builder dataCenterId( String dataCenterId ) { + public Builder dataCenterId(String dataCenterId) { this.dataCenterId = dataCenterId; return this; } - public Builder dataCenterId( DataCenter dataCenter ) { - this.dataCenterId = checkNotNull( dataCenter, "Cannot pass null datacenter" ).id(); + public Builder dataCenterId(DataCenter dataCenter) { + this.dataCenterId = checkNotNull(dataCenter, "Cannot pass null datacenter").id(); return this; } - public Builder bootFromStorageId( String storageId ) { + public Builder bootFromStorageId(String storageId) { this.bootFromStorageId = storageId; return this; } - public Builder bootFromImageId( String image ) { + public Builder bootFromImageId(String image) { this.bootFromImageId = image; return this; } - public Builder lanId( Integer lanId ) { + public Builder lanId(Integer lanId) { this.lanId = lanId; return this; } - public Builder availabilityZone( AvailabilityZone zone ) { + public Builder availabilityZone(AvailabilityZone zone) { this.availabilityZone = zone; return this; } - public Builder osType( OsType osType ) { + public Builder osType(OsType osType) { this.osType = osType; return this; } - public Builder hasInternetAccess( Boolean hasInternetAccess ) { + public Builder hasInternetAccess(Boolean hasInternetAccess) { this.hasInternetAccess = hasInternetAccess; return this; } @@ -327,8 +345,8 @@ public abstract class Server implements ServerCommonProperties { @Override public CreatePayload build() { - return CreatePayload.create( dataCenterId, name, cores, ram, bootFromStorageId, bootFromImageId, lanId, hasInternetAccess, - availabilityZone, osType, cpuHotPlug, ramHotPlug, nicHotPlug, nicHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug ); + return CreatePayload.create(dataCenterId, name, cores, ram, bootFromStorageId, bootFromImageId, lanId, hasInternetAccess, + availabilityZone, osType, cpuHotPlug, ramHotPlug, nicHotPlug, nicHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug); } } @@ -355,11 +373,11 @@ public abstract class Server implements ServerCommonProperties { @Nullable public abstract OsType osType(); - public static UpdatePayload create( String id, String name, int cores, int ram, String bootFromStorageId, String bootFromImageId, + public static UpdatePayload create(String id, String name, int cores, int ram, String bootFromStorageId, String bootFromImageId, AvailabilityZone availabilityZone, OsType osType, Boolean isCpuHotPlug, Boolean isRamHotPlug, Boolean isNicHotPlug, - Boolean isNicHotUnPlug, Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug ) { - return new AutoValue_Server_Request_UpdatePayload( isCpuHotPlug, isRamHotPlug, isNicHotPlug, isNicHotUnPlug, isDiscVirtioHotPlug, - isDiscVirtioHotUnPlug, cores, ram, name, id, bootFromStorageId, bootFromImageId, availabilityZone, osType ); + Boolean isNicHotUnPlug, Boolean isDiscVirtioHotPlug, Boolean isDiscVirtioHotUnPlug) { + return new AutoValue_Server_Request_UpdatePayload(isCpuHotPlug, isRamHotPlug, isNicHotPlug, isNicHotUnPlug, isDiscVirtioHotPlug, + isDiscVirtioHotUnPlug, cores, ram, name, id, bootFromStorageId, bootFromImageId, availabilityZone, osType); } public static class Builder extends Server.Builder<Builder, UpdatePayload> { @@ -370,27 +388,27 @@ public abstract class Server implements ServerCommonProperties { private AvailabilityZone availabilityZone; private OsType osType; - public Builder id( String id ) { + public Builder id(String id) { this.id = id; return this; } - public Builder bootFromStorageId( String storageId ) { + public Builder bootFromStorageId(String storageId) { this.bootFromStorageId = storageId; return this; } - public Builder bootFromImageId( String image ) { + public Builder bootFromImageId(String image) { this.bootFromImageId = image; return this; } - public Builder availabilityZone( AvailabilityZone zone ) { + public Builder availabilityZone(AvailabilityZone zone) { this.availabilityZone = zone; return this; } - public Builder osType( OsType osType ) { + public Builder osType(OsType osType) { this.osType = osType; return this; } @@ -402,8 +420,8 @@ public abstract class Server implements ServerCommonProperties { @Override public UpdatePayload build() { - return UpdatePayload.create( id, name, cores, ram, bootFromStorageId, bootFromImageId, availabilityZone, osType, - cpuHotPlug, ramHotPlug, nicHotPlug, nicHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug ); + return UpdatePayload.create(id, name, cores, ram, bootFromStorageId, bootFromImageId, availabilityZone, osType, + cpuHotPlug, ramHotPlug, nicHotPlug, nicHotUnPlug, discVirtioHotPlug, discVirtioHotUnPlug); } @@ -412,13 +430,13 @@ public abstract class Server implements ServerCommonProperties { } - private static void validateCores( int cores ) { - checkArgument( cores > 0, "Core must be atleast 1." ); + private static void validateCores(int cores) { + checkArgument(cores > 0, "Core must be atleast 1."); } - private static void validateRam( int ram, Boolean isRamHotPlug ) { - int minRam = ( isRamHotPlug == null || !isRamHotPlug ) ? 256 : 1024; - checkArgument( ram >= minRam && ram % 256 == 0, "RAM must be multiples of 256 with minimum of 256 MB (1024 MB if ramHotPlug is enabled)" ); + private static void validateRam(int ram, Boolean isRamHotPlug) { + int minRam = (isRamHotPlug == null || !isRamHotPlug) ? 256 : 1024; + checkArgument(ram >= minRam && ram % 256 == 0, "RAM must be multiples of 256 with minimum of 256 MB (1024 MB if ramHotPlug is enabled)"); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ServiceFault.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ServiceFault.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ServiceFault.java index 0e1303e..dac8f0b 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ServiceFault.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/ServiceFault.java @@ -36,11 +36,11 @@ public abstract class ServiceFault { UNRECOGNIZED; public static FaultCode fromValue(String v) { - try { - return valueOf(v); - } catch (IllegalArgumentException ex) { - return UNRECOGNIZED; - } + try { + return valueOf(v); + } catch (IllegalArgumentException ex) { + return UNRECOGNIZED; + } } } @@ -68,27 +68,27 @@ public abstract class ServiceFault { private int requestId; public Builder faultCode(FaultCode code) { - this.faultCode = code; - return this; + this.faultCode = code; + return this; } public Builder httpCode(int httpCode) { - this.httpCode = httpCode; - return this; + this.httpCode = httpCode; + return this; } public Builder message(String message) { - this.message = message; - return this; + this.message = message; + return this; } public Builder requestId(int requestId) { - this.requestId = requestId; - return this; + this.requestId = requestId; + return this; } public ServiceFault build() { - return create(faultCode, httpCode, message, requestId); + return create(faultCode, httpCode, message, requestId); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java new file mode 100644 index 0000000..6dcaf25 --- /dev/null +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/domain/Storage.java @@ -0,0 +1,355 @@ +/* + * 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.profitbricks.domain; + +import com.google.auto.value.AutoValue; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; + +import java.util.Date; +import java.util.List; + +import org.jclouds.javax.annotation.Nullable; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; + +@AutoValue +public abstract class Storage { + + public enum BusType { + + IDE, SCSI, VIRTIO, UNRECOGNIZED; + + public static BusType fromValue(String value) { + try { + return valueOf(value); + } catch (IllegalArgumentException ex) { + return UNRECOGNIZED; + } + } + } + + public abstract String id(); + + @Nullable + public abstract String name(); + + public abstract float size(); // GB + + @Nullable + public abstract Date creationTime(); + + @Nullable + public abstract Date lastModificationTime(); + + public abstract ProvisioningState state(); + + @Nullable + public abstract List<String> serverIds(); + + @Nullable + public abstract Boolean bootDevice(); + + @Nullable + public abstract BusType busType(); + + @Nullable + public abstract Integer deviceNumber(); + + public static Storage create(String id, String name, float size, Date creationTime, Date lastModificationTime, + ProvisioningState state, List<String> serverIds, Boolean bootDevice, BusType busType, Integer deviceNumber) { + return new AutoValue_Storage(id, name, size, creationTime, lastModificationTime, state, + serverIds != null ? ImmutableList.copyOf(serverIds) : Lists.<String>newArrayList(), + bootDevice, busType, deviceNumber); + } + + public static Builder builder() { + return new Builder(); + } + + public Builder toBuilder() { + return builder().fromStorage(this); + } + + public static class Builder { + + private String id; + private String name; + private float size; + private Date creationTime; + private Date lastModificationTime; + private ProvisioningState state; + private List<String> serverIds; + private Boolean bootDevice; + private BusType busType; + private Integer deviceNumber; + + public Builder id(String id) { + this.id = id; + return this; + } + + public Builder name(String name) { + this.name = name; + return this; + } + + public Builder size(float size) { + this.size = size; + return this; + } + + public Builder creationTime(Date creationTime) { + this.creationTime = creationTime; + return this; + } + + public Builder lastModificationTime(Date lastModificationTime) { + this.lastModificationTime = lastModificationTime; + return this; + } + + public Builder state(ProvisioningState state) { + this.state = state; + return this; + } + + public Builder serverIds(List<String> serverIds) { + this.serverIds = serverIds; + return this; + } + + public Builder bootDevice(Boolean bootDevice) { + this.bootDevice = bootDevice; + return this; + } + + public Builder busType(BusType busType) { + this.busType = busType; + return this; + } + + public Builder deviceNumber(Integer deviceNumber) { + this.deviceNumber = deviceNumber; + return this; + } + + private Builder fromStorage(Storage in) { + return this.id(in.id()).name(in.name()).size(in.size()).creationTime(in.creationTime()) + .lastModificationTime(in.lastModificationTime()).state(in.state()).serverIds(in.serverIds()) + .bootDevice(in.bootDevice()).busType(in.busType()).deviceNumber(in.deviceNumber()); + } + + public Storage build() { + return Storage.create(id, name, size, creationTime, lastModificationTime, state, serverIds, bootDevice, busType, deviceNumber); + } + + } + + public static final class Request { + + public static CreatePayload.Builder creatingBuilder() { + return new CreatePayload.Builder(); + } + + public static UpdatePayload.Builder updatingBuilder() { + return new UpdatePayload.Builder(); + } + + public static ConnectPayload.Builder connectingBuilder() { + return new ConnectPayload.Builder(); + } + + @AutoValue + public abstract static class CreatePayload { + + public abstract String dataCenterId(); + + public abstract float size(); + + @Nullable + public abstract String name(); + + @Nullable + public abstract String mountImageId(); + + @Nullable + public abstract String profitBricksImagePassword(); + + public static CreatePayload create(String dataCenterId, float size, String name, String mountImageId, String imagePassword) { + validateSize(size); + return new AutoValue_Storage_Request_CreatePayload(dataCenterId, size, name, mountImageId, imagePassword); + } + + public static class Builder { + + private String dataCenterId; + private float size; + private String name; + private String mountImageId; + private String profitBricksImagePassword; + + public Builder dataCenterId(String dataCenterId) { + this.dataCenterId = dataCenterId; + return this; + } + + public Builder dataCenterId(DataCenter dataCenter) { + this.dataCenterId = checkNotNull(dataCenter, "Cannot pass null datacenter").id(); + return this; + } + + public Builder size(float size) { + this.size = size; + return this; + } + + public Builder mountImageId(String mountImageId) { + this.mountImageId = mountImageId; + return this; + } + + public Builder name(String name) { + this.name = name; + return this; + } + + public Builder imagePassword(String password) { + this.profitBricksImagePassword = password; + return this; + } + + public CreatePayload build() { + return CreatePayload.create(dataCenterId, size, name, mountImageId, profitBricksImagePassword); + } + } + + } + + @AutoValue + public abstract static class UpdatePayload { + + public abstract String id(); + + @Nullable + public abstract Float size(); + + @Nullable + public abstract String name(); + + @Nullable + public abstract String mountImageId(); + + public static UpdatePayload create(String id, Float size, String name, String mountImageId) { + validateSize(size); + return new AutoValue_Storage_Request_UpdatePayload(id, size, name, mountImageId); + } + + public static class Builder { + + private String id; + private Float size; + private String name; + private String mountImageId; + + public Builder id(String id) { + this.id = id; + return this; + } + + public Builder size(float size) { + this.size = size; + return this; + } + + public Builder name(String name) { + this.name = name; + return this; + } + + public Builder mountImageId(String mountImageId) { + this.mountImageId = mountImageId; + return this; + } + + public UpdatePayload build() { + return UpdatePayload.create(id, size, name, mountImageId); + } + } + } + + @AutoValue + public abstract static class ConnectPayload { + + public abstract String storageId(); + + public abstract String serverId(); + + @Nullable + public abstract BusType busType(); + + @Nullable + public abstract Integer deviceNumber(); + + public static ConnectPayload create(String storageId, String serverId, BusType busType, Integer deviceNumber) { + return new AutoValue_Storage_Request_ConnectPayload(storageId, serverId, busType, deviceNumber); + } + + public static class Builder { + + private String storageId; + private String serverId; + private BusType busType; + private Integer deviceNumber; + + public Builder storageId(String storageId) { + this.storageId = storageId; + return this; + } + + public Builder serverId(String serverId) { + this.serverId = serverId; + return this; + } + + public Builder busType(BusType busType) { + this.busType = busType; + return this; + } + + public Builder deviceNumber(Integer deviceNumber) { + this.deviceNumber = deviceNumber; + return this; + } + + public ConnectPayload build() { + return ConnectPayload.create(storageId, serverId, busType, deviceNumber); + } + + } + } + + private static void validateSize(Float size) { + if (size != null) + checkArgument(size > 1, "Storage size must be > 1GB"); + + } + } + +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/DataCenterApi.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/DataCenterApi.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/DataCenterApi.java index f660730..a9c6143 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/DataCenterApi.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/DataCenterApi.java @@ -58,8 +58,7 @@ public interface DataCenterApi { /** * @param identifier Data Center identifier - * @return Returns information about an existing virtual data center's state and configuration or <code>null</code> - * if it doesn't exist. + * @return Returns information about an existing virtual data center's state and configuration or <code>null</code> if it doesn't exist. */ @POST @Named("datacenter:get") @@ -69,8 +68,8 @@ public interface DataCenterApi { DataCenter getDataCenter(@PayloadParam("id") String identifier); /** - * This is a lightweight function for polling the current provisioning state of the Virtual Data Center. It is - * recommended to use this function for large Virtual Data Centers to query request results. + * This is a lightweight function for polling the current provisioning state of the Virtual Data Center. It is recommended to use this + * function for large Virtual Data Centers to query request results. * <p> * @param identifier Data Center identifier */ @@ -119,9 +118,8 @@ public interface DataCenterApi { DataCenter clearDataCenter(@PayloadParam("id") String identifier); /** - * Deletes an Virtual Data Center. If a previous request on the target data center is still in progress, the data - * center is going to be deleted after this request has been completed. Once a Data Center has been deleted, no - * further request can be performed on it. + * Deletes an Virtual Data Center. If a previous request on the target data center is still in progress, the data center is going to be + * deleted after this request has been completed. Once a Data Center has been deleted, no further request can be performed on it. * <p> * @param identifier Identifier of the virtual data center * @return Returns a boolean indicating whether delete operation was made http://git-wip-us.apache.org/repos/asf/jclouds/blob/2a219a99/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/ServerApi.java ---------------------------------------------------------------------- diff --git a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/ServerApi.java b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/ServerApi.java index 1fa89b3..34445da 100644 --- a/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/ServerApi.java +++ b/providers/profitbricks/src/main/java/org/jclouds/profitbricks/features/ServerApi.java @@ -39,19 +39,19 @@ import org.jclouds.rest.annotations.PayloadParam; import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.XMLResponseParser; -@RequestFilters( { BasicAuthentication.class, ProfitBricksSoapMessageEnvelope.class } ) -@Consumes( MediaType.TEXT_XML ) -@Produces( MediaType.TEXT_XML ) +@RequestFilters({BasicAuthentication.class, ProfitBricksSoapMessageEnvelope.class}) +@Consumes(MediaType.TEXT_XML) +@Produces(MediaType.TEXT_XML) public interface ServerApi { /** * @return Returns information about all virtual server, such as configuration, provisioning status, power status, etc. */ @POST - @Named( "server:getall" ) - @Payload( "<ws:getAllServers/>" ) - @XMLResponseParser( ServerListResponseHandler.class ) - @Fallback( Fallbacks.EmptyListOnNotFoundOr404.class ) + @Named("server:getall") + @Payload("<ws:getAllServers/>") + @XMLResponseParser(ServerListResponseHandler.class) + @Fallback(Fallbacks.EmptyListOnNotFoundOr404.class) List<Server> getAllServers(); /** @@ -59,11 +59,11 @@ public interface ServerApi { * @return Returns information about a virtual server, such as configuration, provisioning status, power status, etc. */ @POST - @Named( "server:get" ) - @Payload( "<ws:getServer><serverId>{id}</serverId></ws:getServer>" ) - @XMLResponseParser( ServerInfoResponseHandler.class ) - @Fallback( Fallbacks.NullOnNotFoundOr404.class ) - Server getServer( @PayloadParam( "id" ) String identifier ); + @Named("server:get") + @Payload("<ws:getServer><serverId>{id}</serverId></ws:getServer>") + @XMLResponseParser(ServerInfoResponseHandler.class) + @Fallback(Fallbacks.NullOnNotFoundOr404.class) + Server getServer(@PayloadParam("id") String identifier); /** * Starts an existing virtual server @@ -77,10 +77,10 @@ public interface ServerApi { * @return Identifier of current request */ @POST - @Named( "server:start" ) - @Payload( "<ws:startServer><serverId>{id}</serverId></ws:startServer>" ) - @XMLResponseParser( RequestIdOnlyResponseHandler.class ) - String startServer( @PayloadParam( "id" ) String id ); + @Named("server:start") + @Payload("<ws:startServer><serverId>{id}</serverId></ws:startServer>") + @XMLResponseParser(RequestIdOnlyResponseHandler.class) + String startServer(@PayloadParam("id") String id); /** * @@ -99,10 +99,10 @@ public interface ServerApi { * @return Identifier of current request */ @POST - @Named( "server:stop" ) - @Payload( "<ws:stopServer><serverId>{id}</serverId></ws:stopServer>" ) - @XMLResponseParser( RequestIdOnlyResponseHandler.class ) - String stopServer( @PayloadParam( "id" ) String id ); + @Named("server:stop") + @Payload("<ws:stopServer><serverId>{id}</serverId></ws:stopServer>") + @XMLResponseParser(RequestIdOnlyResponseHandler.class) + String stopServer(@PayloadParam("id") String id); /** * Resets an existing virtual server (POWER CYCLE). @@ -119,10 +119,10 @@ public interface ServerApi { * @return Identifier of current request */ @POST - @Named( "server:reset" ) - @Payload( "<ws:resetServer><serverId>{id}</serverId></ws:resetServer>" ) - @XMLResponseParser( RequestIdOnlyResponseHandler.class ) - String resetServer( @PayloadParam( "id" ) String id ); + @Named("server:reset") + @Payload("<ws:resetServer><serverId>{id}</serverId></ws:resetServer>") + @XMLResponseParser(RequestIdOnlyResponseHandler.class) + String resetServer(@PayloadParam("id") String id); /** * Creates a Virtual Server within an existing data center. Parameters can be specified to set up a boot device and connect the server to @@ -132,22 +132,22 @@ public interface ServerApi { * @return serverId of the created server */ @POST - @Named( "server:create" ) - @MapBinder( CreateServerRequestBinder.class ) - @XMLResponseParser( ServerIdOnlyResponseHandler.class ) - String createServer( @PayloadParam( "server" ) Server.Request.CreatePayload payload ); + @Named("server:create") + @MapBinder(CreateServerRequestBinder.class) + @XMLResponseParser(ServerIdOnlyResponseHandler.class) + String createServer(@PayloadParam("server") Server.Request.CreatePayload payload); /** * Updates parameters of an existing virtual server device. * - * @param payload Paylaod + * @param payload Payload * @return Identifier of current request */ @POST - @Named( "server:update" ) - @MapBinder( UpdateServerRequestBinder.class ) - @XMLResponseParser( RequestIdOnlyResponseHandler.class ) - String updateServer( @PayloadParam( "server" ) Server.Request.UpdatePayload payload ); + @Named("server:update") + @MapBinder(UpdateServerRequestBinder.class) + @XMLResponseParser(RequestIdOnlyResponseHandler.class) + String updateServer(@PayloadParam("server") Server.Request.UpdatePayload payload); /** * Deletes an existing Virtual Server. @@ -156,9 +156,9 @@ public interface ServerApi { * @return Identifier of current request */ @POST - @Named( "server:delete" ) - @Payload( "<ws:deleteServer><serverId>{id}</serverId></ws:deleteServer>" ) - @Fallback( Fallbacks.FalseOnNotFoundOr404.class ) - boolean deleteServer( @PayloadParam( "id" ) String id ); + @Named("server:delete") + @Payload("<ws:deleteServer><serverId>{id}</serverId></ws:deleteServer>") + @Fallback(Fallbacks.FalseOnNotFoundOr404.class) + boolean deleteServer(@PayloadParam("id") String id); }
