You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2017/03/22 15:03:09 UTC

[1/2] jclouds-labs git commit: JCLOUDS-1255 - initial commit of Dimension Data CloudControl Apache jclouds implementation.

Repository: jclouds-labs
Updated Branches:
  refs/heads/master 2fe3e0c17 -> 8054a5949


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/PaginatedCollection.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/PaginatedCollection.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/PaginatedCollection.java
new file mode 100644
index 0000000..f8876cc
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/PaginatedCollection.java
@@ -0,0 +1,103 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableSet;
+import org.jclouds.collect.IterableWithMarker;
+import org.jclouds.dimensiondata.cloudcontrol.options.PaginationOptions;
+import org.jclouds.javax.annotation.Nullable;
+
+import java.util.Iterator;
+
+/**
+ * Base class for a paginated collection in DimensionData CloudController.
+ */
+public class PaginatedCollection<T> extends IterableWithMarker<T> {
+
+   private final Iterable<T> resources;
+
+   /**
+    * The page number requested by the user or the default page (1) if none supplied.
+    */
+   private final int pageNumber;
+
+   /**
+    * The number of result records in this page.
+    */
+   private final int pageCount;
+
+   /**
+    * The total number of result records matching request criteria.
+    */
+   private final int totalCount;
+
+   /**
+    * The page size used; either specified in the request or the default for the API function being requested.
+    */
+   private final int pageSize;
+
+   protected PaginatedCollection(@Nullable Iterable<T> resources, int pageNumber, int pageCount, int totalCount,
+         int pageSize) {
+      this.resources = resources != null ? resources : ImmutableSet.<T>of();
+      this.pageNumber = pageNumber;
+      this.pageCount = pageCount;
+      this.totalCount = totalCount;
+      this.pageSize = pageSize;
+   }
+
+   public Iterable<T> getResources() {
+      return resources;
+   }
+
+   public int getPageNumber() {
+      return pageNumber;
+   }
+
+   public int getPageCount() {
+      return pageCount;
+   }
+
+   public int getTotalCount() {
+      return totalCount;
+   }
+
+   public int getPageSize() {
+      return pageSize;
+   }
+
+   @Override
+   public Iterator<T> iterator() {
+      return resources.iterator();
+   }
+
+   @Override
+   public Optional<Object> nextMarker() {
+      if (totalCount < pageSize)
+         return Optional.absent();
+
+      if ((float) pageNumber < ((float) totalCount / (float) pageSize)) {
+         return Optional.of(toPaginationOptions(pageNumber + 1));
+      }
+      return Optional.absent();
+   }
+
+   private Object toPaginationOptions(Integer pageNumber) {
+      return PaginationOptions.Builder.pageNumber(pageNumber);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Placement.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Placement.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Placement.java
new file mode 100644
index 0000000..78f471a
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Placement.java
@@ -0,0 +1,48 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class Placement {
+
+   public static Builder builder() {
+      return new AutoValue_Placement.Builder();
+   }
+
+   Placement() {
+   } // For AutoValue only!
+
+   public abstract String position();
+
+   @SerializedNames({ "position" })
+   public static Placement create(String position) {
+      return builder().position(position).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder position(String position);
+
+      public abstract Placement build();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Progress.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Progress.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Progress.java
new file mode 100644
index 0000000..7385926
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Progress.java
@@ -0,0 +1,91 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.Date;
+
+@AutoValue
+public abstract class Progress {
+
+   @AutoValue
+   public abstract static class Step {
+
+      Step() {
+      } // For AutoValue only!
+
+      public abstract String name();
+
+      public abstract int number();
+
+      @SerializedNames({ "name", "number" })
+      public static Step create(String name, int number) {
+         return new AutoValue_Progress_Step(name, number);
+      }
+   }
+
+   Progress() {
+   }
+
+   public abstract String action();
+
+   public abstract String requestTime();
+
+   public abstract String userName();
+
+   @Nullable
+   public abstract Integer numberOfSteps();
+
+   @Nullable
+   public abstract Date updateTime();
+
+   @Nullable
+   public abstract Step step();
+
+   @SerializedNames({ "action", "requestTime", "userName", "numberOfSteps", "updateTime", "step" })
+   public static Progress create(String action, String requestTime, String userName, Integer numberOfSteps,
+         Date updateTime, Step step) {
+      return builder().action(action).requestTime(requestTime).userName(userName).numberOfSteps(numberOfSteps)
+            .updateTime(updateTime).step(step).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder action(String action);
+
+      public abstract Builder requestTime(String requestTime);
+
+      public abstract Builder userName(String userName);
+
+      public abstract Builder numberOfSteps(Integer numberOfSteps);
+
+      public abstract Builder updateTime(Date updateTime);
+
+      public abstract Builder step(Step step);
+
+      public abstract Progress build();
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Progress.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Property.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Property.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Property.java
new file mode 100644
index 0000000..2bfc10b
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Property.java
@@ -0,0 +1,38 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class Property {
+
+   Property() {
+   } // For AutoValue only!
+
+   public abstract String name();
+
+   @Nullable
+   public abstract String value();
+
+   @SerializedNames({ "name", "value" })
+   public static Property create(String name, String value) {
+      return new AutoValue_Property(name, value);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/PublicIpBlock.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/PublicIpBlock.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/PublicIpBlock.java
new file mode 100644
index 0000000..2ee9c78
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/PublicIpBlock.java
@@ -0,0 +1,76 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+import java.util.Date;
+
+@AutoValue
+public abstract class PublicIpBlock {
+
+   PublicIpBlock() {
+   }
+
+   public static Builder builder() {
+      return new AutoValue_PublicIpBlock.Builder();
+   }
+
+   public abstract String id();
+
+   public abstract String datacenterId();
+
+   public abstract String state();
+
+   public abstract Date createTime();
+
+   public abstract String baseIp();
+
+   public abstract int size();
+
+   public abstract String networkDomainId();
+
+   @SerializedNames({ "id", "datacenterId", "state", "createTime", "baseIp", "size", "networkDomainId" })
+   public static PublicIpBlock create(String id, String datacenterId, String state, Date createTime, String baseIp,
+         int size, String networkDomainId) {
+      return builder().id(id).datacenterId(datacenterId).state(state).createTime(createTime).baseIp(baseIp).size(size)
+            .networkDomainId(networkDomainId).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+
+      public abstract Builder datacenterId(String datacenterId);
+
+      public abstract Builder state(String state);
+
+      public abstract Builder createTime(Date createTime);
+
+      public abstract Builder baseIp(String ipv4GatewayAddress);
+
+      public abstract Builder size(int size);
+
+      public abstract Builder networkDomainId(String networkDomainId);
+
+      public abstract PublicIpBlock build();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/PublicIpBlocks.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/PublicIpBlocks.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/PublicIpBlocks.java
new file mode 100644
index 0000000..9ecd00e
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/PublicIpBlocks.java
@@ -0,0 +1,32 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+
+/**
+ * A collection of publicIpBlock
+ */
+public class PublicIpBlocks extends PaginatedCollection<PublicIpBlock> {
+
+   @ConstructorProperties({ "publicIpBlock", "pageNumber", "pageCount", "totalCount", "pageSize" })
+   public PublicIpBlocks(List<PublicIpBlock> content, Integer pageNumber, Integer pageCount, Integer totalCount,
+         Integer pageSize) {
+      super(content, pageNumber, pageCount, totalCount, pageSize);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Response.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Response.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Response.java
new file mode 100644
index 0000000..d3cea10
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Response.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class Response {
+
+   Response() {
+   }
+
+   public abstract String operation();
+
+   public abstract String responseCode();
+
+   public abstract String message();
+
+   @Nullable
+   public abstract List<Property> info();
+
+   @Nullable
+   public abstract List<String> warning();
+
+   @Nullable
+   public abstract List<String> error();
+
+   public abstract String requestId();
+
+   @SerializedNames({ "operation", "responseCode", "message", "info", "warning", "error", "requestId" })
+   public static Response create(String operation, String responseCode, String message, List<Property> info,
+         List<String> warning, List<String> error, String requestId) {
+      return builder().operation(operation).responseCode(responseCode).message(message).info(info).warning(warning)
+            .error(error).requestId(requestId).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+
+      public abstract Builder operation(String operation);
+
+      public abstract Builder responseCode(String responseCode);
+
+      public abstract Builder message(String message);
+
+      public abstract Builder info(List<Property> info);
+
+      public abstract Builder warning(List<String> warning);
+
+      public abstract Builder error(List<String> error);
+
+      public abstract Builder requestId(String requestId);
+
+      abstract Response autoBuild();
+
+      abstract List<String> warning();
+
+      abstract List<String> error();
+
+      abstract List<Property> info();
+
+      public Response build() {
+         warning(warning() != null ? ImmutableList.copyOf(warning()) : null);
+         error(error() != null ? ImmutableList.copyOf(error()) : null);
+         info(info() != null ? ImmutableList.copyOf(info()) : null);
+         return autoBuild();
+      }
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Response.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/RoleType.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/RoleType.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/RoleType.java
new file mode 100644
index 0000000..cad05ad
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/RoleType.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class RoleType {
+   public abstract String name();
+
+   RoleType() {
+   }
+
+   public static Builder builder() {
+      return new AutoValue_RoleType.Builder();
+   }
+
+   @SerializedNames({ "role" })
+   public static RoleType create(String name) {
+      return builder().name(name).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+
+      public abstract Builder name(String name);
+
+      public abstract RoleType build();
+   }
+
+}
+

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Roles.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Roles.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Roles.java
new file mode 100644
index 0000000..0471922
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Roles.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class Roles {
+   public abstract List<RoleType> role();
+
+   Roles() {
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Roles.Builder();
+   }
+
+   @SerializedNames({ "role" })
+   public static Roles create(List<RoleType> role) {
+      return builder().role(role).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+
+      public abstract Builder role(List<RoleType> role);
+
+      abstract Roles autoBuild();
+
+      abstract List<RoleType> role();
+
+      public Roles build() {
+         role(role() != null ? ImmutableList.copyOf(role()) : ImmutableList.<RoleType>of());
+         return autoBuild();
+      }
+   }
+
+}
+

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Server.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Server.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Server.java
new file mode 100644
index 0000000..96760d9
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Server.java
@@ -0,0 +1,166 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.base.CaseFormat;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.Date;
+import java.util.List;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+@AutoValue
+public abstract class Server {
+
+   public enum State {
+      NORMAL, PENDING_DELETE, DELETED, UNRECOGNIZED;
+
+      @Override
+      public String toString() {
+         return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, name());
+      }
+
+      public static State fromValue(String state) {
+         try {
+            return valueOf(CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, checkNotNull(state, "state")));
+         } catch (IllegalArgumentException e) {
+            return UNRECOGNIZED;
+         }
+      }
+   }
+
+   Server() {
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Server.Builder();
+   }
+
+   public abstract String id();
+
+   public abstract String name();
+
+   @Nullable
+   public abstract String description();
+
+   public abstract String datacenterId();
+
+   public abstract State state();
+
+   public abstract String sourceImageId();
+
+   public abstract Date createTime();
+
+   public abstract Boolean started();
+
+   public abstract Boolean deployed();
+
+   public abstract OperatingSystem operatingSystem();
+
+   public abstract CPU cpu();
+
+   public abstract int memoryGb();
+
+   @Nullable
+   public abstract List<Disk> disks();
+
+   @Nullable
+   public abstract NetworkInfo networkInfo();
+
+   @Nullable
+   public abstract List<Object> softwareLabels();
+
+   @Nullable
+   public abstract VMwareTools vmwareTools();
+
+   @Nullable
+   public abstract Progress progress();
+
+   @Nullable
+   public abstract VirtualHardware virtualHardware();
+
+   @SerializedNames({ "id", "name", "description", "datacenterId", "state", "sourceImageId", "createTime", "started",
+         "deployed", "operatingSystem", "cpu", "memoryGb", "disk", "networkInfo", "softwareLabel", "vmwareTools",
+         "progress", "virtualHardware" })
+   public static Server create(String id, String name, String description, String datacenterId, State state,
+         String sourceImageId, Date createTime, Boolean started, Boolean deployed, OperatingSystem operatingSystem,
+         CPU cpu, int memoryGb, List<Disk> disks, NetworkInfo networkInfo, List<Object> softwareLabels,
+         VMwareTools vmwareTools, Progress progress, VirtualHardware virtualHardware) {
+      return builder().id(id).name(name).datacenterId(datacenterId).description(description).state(state)
+            .sourceImageId(sourceImageId).createTime(createTime).started(started).deployed(deployed)
+            .operatingSystem(operatingSystem).cpu(cpu).memoryGb(memoryGb).disks(disks).networkInfo(networkInfo)
+            .softwareLabels(softwareLabels).vmwareTools(vmwareTools).progress(progress).virtualHardware(virtualHardware)
+            .build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+
+      public abstract Builder name(String name);
+
+      public abstract Builder description(String description);
+
+      public abstract Builder datacenterId(String datacenterId);
+
+      public abstract Builder state(State state);
+
+      public abstract Builder sourceImageId(String sourceImageId);
+
+      public abstract Builder createTime(Date createTime);
+
+      public abstract Builder started(Boolean started);
+
+      public abstract Builder deployed(Boolean deployed);
+
+      public abstract Builder operatingSystem(OperatingSystem operatingSystem);
+
+      public abstract Builder cpu(CPU cpu);
+
+      public abstract Builder memoryGb(int memoryGb);
+
+      public abstract Builder disks(List<Disk> disks);
+
+      public abstract Builder networkInfo(NetworkInfo networkInfo);
+
+      public abstract Builder softwareLabels(List<Object> softwareLabels);
+
+      public abstract Builder vmwareTools(VMwareTools vmwareTools);
+
+      public abstract Builder progress(Progress progress);
+
+      public abstract Builder virtualHardware(VirtualHardware virtualHardware);
+
+      abstract Server autoBuild();
+
+      abstract List<Disk> disks();
+
+      abstract List<Object> softwareLabels();
+
+      public Server build() {
+         disks(disks() != null ? ImmutableList.copyOf(disks()) : null);
+         softwareLabels(softwareLabels() != null ? ImmutableList.copyOf(softwareLabels()) : null);
+         return autoBuild();
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Servers.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Servers.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Servers.java
new file mode 100644
index 0000000..23cf792
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Servers.java
@@ -0,0 +1,31 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+
+/**
+ * A collection of Server
+ */
+public class Servers extends PaginatedCollection<Server> {
+
+   @ConstructorProperties({ "server", "pageNumber", "pageCount", "totalCount", "pageSize" })
+   public Servers(List<Server> content, Integer pageNumber, Integer pageCount, Integer totalCount, Integer pageSize) {
+      super(content, pageNumber, pageCount, totalCount, pageSize);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Status.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Status.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Status.java
new file mode 100644
index 0000000..4027943
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Status.java
@@ -0,0 +1,84 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+/**
+ *
+ */
+@AutoValue
+public abstract class Status {
+
+   public enum ResultType {
+      ERROR, SUCCESS, WARNING
+   }
+
+   Status() {
+   }
+
+   public abstract ResultType result();
+
+   public abstract String resultDetail();
+
+   public abstract String resultCode();
+
+   public abstract String operation();
+
+   @Nullable
+   public abstract List<AdditionalInformationType> additionalInformation();
+
+   @SerializedNames({ "result", "resultDetail", "resultCode", "additionalInformation" })
+   public static Status create(ResultType result, String resultDetail, String resultCode,
+         List<AdditionalInformationType> additionalInformation, String operation) {
+      return builder().result(result).resultDetail(resultDetail).resultCode(resultCode)
+            .additionalInformation(additionalInformation).operation(operation).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder result(ResultType result);
+
+      public abstract Builder resultDetail(String result);
+
+      public abstract Builder resultCode(String resultCode);
+
+      public abstract Builder additionalInformation(List<AdditionalInformationType> additionalInformation);
+
+      public abstract Builder operation(String operation);
+
+      abstract Status autoBuild();
+
+      abstract List<AdditionalInformationType> additionalInformation();
+
+      public Status build() {
+         additionalInformation(additionalInformation() != null ? ImmutableList.copyOf(additionalInformation()) : null);
+         return autoBuild();
+      }
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Status.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Tag.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Tag.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Tag.java
new file mode 100644
index 0000000..741db87
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Tag.java
@@ -0,0 +1,82 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class Tag {
+
+   Tag() {
+   }
+
+   public abstract String assetType();
+
+   public abstract String assetId();
+
+   public abstract String datacenterId();
+
+   public abstract String tagKeyId();
+
+   public abstract String tagKeyName();
+
+   @Nullable
+   public abstract String value();
+
+   public abstract boolean valueRequired();
+
+   public abstract boolean displayOnReport();
+
+   @SerializedNames({ "assetType", "assetId", "datacenterId", "tagKeyId", "tagKeyName", "value", "valueRequired",
+         "displayOnReport" })
+   public static Tag create(String assetType, String assetId, String datacenterId, String tagKeyId, String tagKeyName,
+         String value, Boolean valueRequired, Boolean displayOnReport) {
+      return builder().assetType(assetType).assetId(assetId).datacenterId(datacenterId).tagKeyId(tagKeyId)
+            .tagKeyName(tagKeyName).value(value).valueRequired(valueRequired).displayOnReport(displayOnReport).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder assetType(String assetType);
+
+      public abstract Builder assetId(String assetId);
+
+      public abstract Builder datacenterId(String datacenterId);
+
+      public abstract Builder tagKeyId(String tagKeyId);
+
+      public abstract Builder tagKeyName(String tagKeyName);
+
+      public abstract Builder value(String value);
+
+      public abstract Builder valueRequired(boolean valueRequired);
+
+      public abstract Builder displayOnReport(boolean displayOnReport);
+
+      public abstract Tag build();
+
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Tag.Builder();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/TagInfo.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/TagInfo.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/TagInfo.java
new file mode 100644
index 0000000..db89c75
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/TagInfo.java
@@ -0,0 +1,53 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class TagInfo {
+
+   TagInfo() {
+   }
+
+   public abstract String tagKeyId();
+
+   @Nullable
+   public abstract String value();
+
+   @SerializedNames({ "tagKeyId", "value" })
+   public static TagInfo create(String tagKeyId, String value) {
+      return builder().tagKeyId(tagKeyId).value(value).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder tagKeyId(String tagKeyId);
+
+      public abstract Builder value(String value);
+
+      public abstract TagInfo build();
+   }
+
+   public static Builder builder() {
+      return new AutoValue_TagInfo.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/TagKey.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/TagKey.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/TagKey.java
new file mode 100644
index 0000000..afc1a3f
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/TagKey.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class TagKey {
+
+   TagKey() {
+   }
+
+   public abstract String id();
+
+   public abstract String name();
+
+   @Nullable
+   public abstract String description();
+
+   public abstract boolean valueRequired();
+
+   public abstract boolean displayOnReport();
+
+   @SerializedNames({ "id", "name", "description", "valueRequired", "displayOnReport" })
+   public static TagKey create(String id, String name, String description, boolean valueRequired,
+         boolean displayOnReport) {
+      return builder().id(id).name(name).description(description).valueRequired(valueRequired)
+            .displayOnReport(displayOnReport).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+
+      public abstract Builder name(String tagKeyName);
+
+      public abstract Builder description(String description);
+
+      public abstract Builder valueRequired(boolean valueRequired);
+
+      public abstract Builder displayOnReport(boolean displayOnReport);
+
+      public abstract TagKey build();
+
+   }
+
+   public static Builder builder() {
+      return new AutoValue_TagKey.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/TagKeys.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/TagKeys.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/TagKeys.java
new file mode 100644
index 0000000..d125396
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/TagKeys.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.dimensiondata.cloudcontrol.domain;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+
+public class TagKeys extends PaginatedCollection<TagKey> {
+
+   @ConstructorProperties({ "tagKey", "pageNumber", "pageCount", "totalCount", "pageSize" })
+   public TagKeys(List<TagKey> content, Integer pageNumber, Integer pageCount, Integer totalCount, Integer pageSize) {
+      super(content, pageNumber, pageCount, totalCount, pageSize);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Tags.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Tags.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Tags.java
new file mode 100644
index 0000000..140080d
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Tags.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.dimensiondata.cloudcontrol.domain;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+
+public class Tags extends PaginatedCollection<Tag> {
+
+   @ConstructorProperties({ "tag", "pageNumber", "pageCount", "totalCount", "pageSize" })
+   public Tags(List<Tag> content, Integer pageNumber, Integer pageCount, Integer totalCount, Integer pageSize) {
+      super(content, pageNumber, pageCount, totalCount, pageSize);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/VMwareTools.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/VMwareTools.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/VMwareTools.java
new file mode 100644
index 0000000..99306c1
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/VMwareTools.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class VMwareTools {
+
+   VMwareTools() {
+   }
+
+   @Nullable
+   public abstract String versionStatus();
+
+   @Nullable
+   public abstract String runningStatus();
+
+   @Nullable
+   public abstract Integer apiVersion();
+
+   @SerializedNames({ "versionStatus", "runningStatus", "apiVersion" })
+   public static VMwareTools create(String versionStatus, String runningStatus, Integer apiVersion) {
+      return builder().versionStatus(versionStatus).runningStatus(runningStatus).apiVersion(apiVersion).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder versionStatus(String versionStatus);
+
+      public abstract Builder runningStatus(String runningStatus);
+
+      public abstract Builder apiVersion(Integer apiVersion);
+
+      public abstract VMwareTools build();
+   }
+
+   public static Builder builder() {
+      return new AutoValue_VMwareTools.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/VirtualHardware.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/VirtualHardware.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/VirtualHardware.java
new file mode 100644
index 0000000..a6bfd34
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/VirtualHardware.java
@@ -0,0 +1,51 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class VirtualHardware {
+
+   VirtualHardware() {
+   }
+
+   public abstract String version();
+
+   public abstract boolean upToDate();
+
+   @SerializedNames({ "version", "upToDate" })
+   public static VirtualHardware create(String version, boolean upToDate) {
+      return builder().version(version).upToDate(upToDate).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder version(String version);
+
+      public abstract Builder upToDate(boolean upToDate);
+
+      public abstract VirtualHardware build();
+   }
+
+   public static Builder builder() {
+      return new AutoValue_VirtualHardware.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Vlan.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Vlan.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Vlan.java
new file mode 100644
index 0000000..7a62543
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Vlan.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+import java.util.Date;
+
+@AutoValue
+public abstract class Vlan {
+
+   Vlan() {
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Vlan.Builder();
+   }
+
+   public abstract String id();
+
+   public abstract String name();
+
+   public abstract String description();
+
+   public abstract String datacenterId();
+
+   public abstract String state();
+
+   public abstract Date createTime();
+
+   public abstract String ipv4GatewayAddress();
+
+   public abstract String ipv6GatewayAddress();
+
+   public abstract NetworkDomain networkDomain();
+
+   public abstract IpRange privateIpv4Range();
+
+   public abstract IpRange ipv6Range();
+
+   @SerializedNames({ "id", "name", "description", "datacenterId", "state", "createTime", "ipv4GatewayAddress",
+         "ipv6GatewayAddress", "networkDomain", "privateIpv4Range", "ipv6Range" })
+   public static Vlan create(String id, String name, String description, String datacenterId, String state,
+         Date createTime, String ipv4GatewayAddress, String ipv6GatewayAddress, NetworkDomain networkDomain,
+         IpRange privateIpv4Range, IpRange ipv6Range) {
+      return builder().id(id).name(name).description(description).datacenterId(datacenterId).state(state)
+            .createTime(createTime).ipv4GatewayAddress(ipv4GatewayAddress).ipv6GatewayAddress(ipv6GatewayAddress)
+            .networkDomain(networkDomain).privateIpv4Range(privateIpv4Range).ipv6Range(ipv6Range).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+
+      public abstract Builder name(String name);
+
+      public abstract Builder description(String description);
+
+      public abstract Builder datacenterId(String datacenterId);
+
+      public abstract Builder state(String state);
+
+      public abstract Builder createTime(Date createTime);
+
+      public abstract Builder ipv4GatewayAddress(String ipv4GatewayAddress);
+
+      public abstract Builder ipv6GatewayAddress(String ipv6GatewayAddress);
+
+      public abstract Builder networkDomain(NetworkDomain networkDomain);
+
+      public abstract Builder privateIpv4Range(IpRange privateIpv4Range);
+
+      public abstract Builder ipv6Range(IpRange ipv6Range);
+
+      public abstract Vlan build();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Vlans.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Vlans.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Vlans.java
new file mode 100644
index 0000000..3300207
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Vlans.java
@@ -0,0 +1,31 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+
+/**
+ * A collection of Vlans
+ */
+public class Vlans extends PaginatedCollection<Vlan> {
+
+   @ConstructorProperties({ "vlan", "pageNumber", "pageCount", "totalCount", "pageSize" })
+   public Vlans(List<Vlan> content, Integer pageNumber, Integer pageCount, Integer totalCount, Integer pageSize) {
+      super(content, pageNumber, pageCount, totalCount, pageSize);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/options/PaginationOptions.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/options/PaginationOptions.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/options/PaginationOptions.java
new file mode 100644
index 0000000..06bd478
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/options/PaginationOptions.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+public class PaginationOptions extends BaseHttpRequestOptions {
+
+   public PaginationOptions pageNumber(int pageNumber) {
+      this.queryParameters.put("pageNumber", Integer.toString(pageNumber));
+      return this;
+   }
+
+   public PaginationOptions orderBy(String orderBy) {
+      this.queryParameters.put("orderBy", checkNotNull(orderBy, "orderBy"));
+      return this;
+   }
+
+   public PaginationOptions pageSize(int pageSize) {
+      checkState(pageSize >= 0, "pageSize must be >= 0");
+      checkState(pageSize <= 10000, "limit must be <= 10000");
+      queryParameters.put("pageSize", Integer.toString(pageSize));
+      return this;
+   }
+
+   public static class Builder {
+
+      /**
+       * @see PaginationOptions#pageNumber(int)
+       */
+      public static PaginationOptions pageNumber(Integer pageNumber) {
+         PaginationOptions options = new PaginationOptions();
+         return options.pageNumber(pageNumber);
+      }
+
+      /**
+       * @see PaginationOptions#pageSize(int)
+       */
+      public static PaginationOptions pageSize(int pageSize) {
+         PaginationOptions options = new PaginationOptions();
+         return options.pageSize(pageSize);
+      }
+
+      /**
+       * @see PaginationOptions#orderBy(String)
+       */
+      public static PaginationOptions orderBy(String orderBy) {
+         PaginationOptions options = new PaginationOptions();
+         return options.orderBy(orderBy);
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/domain/PaginatedCollectionTest.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/domain/PaginatedCollectionTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/domain/PaginatedCollectionTest.java
new file mode 100644
index 0000000..e2a2c85
--- /dev/null
+++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/domain/PaginatedCollectionTest.java
@@ -0,0 +1,50 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.common.collect.Multimap;
+import org.assertj.core.api.Assertions;
+import org.jclouds.dimensiondata.cloudcontrol.options.PaginationOptions;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+@Test(groups = "unit", testName = "PaginatedCollectionTest")
+public class PaginatedCollectionTest {
+
+   public void testHasNextPage() {
+      int pageNumber = 1;
+      int pageCount = 0;
+      int totalCount = 7;
+      int pageSize = 5;
+      final PaginatedCollection<Tags> collection = new PaginatedCollection<Tags>(null, pageNumber, pageCount,
+            totalCount, pageSize);
+      final Multimap<String, String> queryParameters = ((PaginationOptions) collection.nextMarker().get())
+            .buildQueryParameters();
+      final String nextPageNumber = queryParameters.get("pageNumber").iterator().next();
+      Assertions.assertThat(nextPageNumber).isEqualTo("2");
+   }
+
+   public void testAllResultsViewed() {
+      int pageNumber = 2;
+      int pageCount = 0;
+      int totalCount = 10;
+      int pageSize = 5;
+      final PaginatedCollection<Tags> collection = new PaginatedCollection<Tags>(null, pageNumber, pageCount,
+            totalCount, pageSize);
+      Assert.assertFalse(collection.nextMarker().isPresent());
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 535a6a0..b873a76 100644
--- a/pom.xml
+++ b/pom.xml
@@ -65,6 +65,7 @@
     <module>cloudsigma2-sjc</module>
     <module>cloudsigma2-wdc</module>
     <module>cloudsigma2-zrh</module>
+    <module>dimensiondata</module>
     <module>jdbc</module>
     <module>h2-jdbc</module>
     <module>joyent-cloudapi</module>


[2/2] jclouds-labs git commit: JCLOUDS-1255 - initial commit of Dimension Data CloudControl Apache jclouds implementation.

Posted by na...@apache.org.
JCLOUDS-1255 - initial commit of Dimension Data CloudControl Apache jclouds implementation.


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/8054a594
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/8054a594
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/8054a594

Branch: refs/heads/master
Commit: 8054a5949b7eccccdd95d089b3b0d489e5866a2c
Parents: 2fe3e0c
Author: Trevor Flanagan <tr...@itaas.dimensiondata.com>
Authored: Thu Mar 16 15:27:28 2017 +0000
Committer: Ignasi Barrera <na...@apache.org>
Committed: Wed Mar 22 16:00:40 2017 +0100

----------------------------------------------------------------------
 dimensiondata/README.md                         |  11 ++
 dimensiondata/pom.xml                           | 155 +++++++++++++++++
 .../cloudcontrol/domain/Account.java            |  99 +++++++++++
 .../domain/AdditionalInformationType.java       |  51 ++++++
 .../cloudcontrol/domain/Backup.java             |  68 ++++++++
 .../dimensiondata/cloudcontrol/domain/CPU.java  |  55 ++++++
 .../cloudcontrol/domain/ConsoleAccess.java      |  64 +++++++
 .../cloudcontrol/domain/CpuSpeed.java           | 117 +++++++++++++
 .../cloudcontrol/domain/Datacenter.java         | 105 ++++++++++++
 .../cloudcontrol/domain/Datacenters.java        |  32 ++++
 .../dimensiondata/cloudcontrol/domain/Disk.java |  66 ++++++++
 .../cloudcontrol/domain/FirewallRule.java       | 103 ++++++++++++
 .../cloudcontrol/domain/FirewallRuleTarget.java | 111 +++++++++++++
 .../cloudcontrol/domain/FirewallRules.java      |  32 ++++
 .../cloudcontrol/domain/Hypervisor.java         | 130 +++++++++++++++
 .../cloudcontrol/domain/IpRange.java            |  38 +++++
 .../cloudcontrol/domain/Monitoring.java         |  64 +++++++
 .../dimensiondata/cloudcontrol/domain/NIC.java  |  74 +++++++++
 .../cloudcontrol/domain/NatRule.java            |  76 +++++++++
 .../cloudcontrol/domain/NatRules.java           |  31 ++++
 .../cloudcontrol/domain/NetworkDomain.java      |  91 ++++++++++
 .../cloudcontrol/domain/NetworkDomains.java     |  32 ++++
 .../cloudcontrol/domain/NetworkInfo.java        |  65 ++++++++
 .../cloudcontrol/domain/Networking.java         |  67 ++++++++
 .../cloudcontrol/domain/OperatingSystem.java    |  56 +++++++
 .../cloudcontrol/domain/OperatingSystems.java   |  32 ++++
 .../cloudcontrol/domain/OsImage.java            | 106 ++++++++++++
 .../cloudcontrol/domain/OsImages.java           |  31 ++++
 .../domain/PaginatedCollection.java             | 103 ++++++++++++
 .../cloudcontrol/domain/Placement.java          |  48 ++++++
 .../cloudcontrol/domain/Progress.java           |  91 ++++++++++
 .../cloudcontrol/domain/Property.java           |  38 +++++
 .../cloudcontrol/domain/PublicIpBlock.java      |  76 +++++++++
 .../cloudcontrol/domain/PublicIpBlocks.java     |  32 ++++
 .../cloudcontrol/domain/Response.java           |  94 +++++++++++
 .../cloudcontrol/domain/RoleType.java           |  49 ++++++
 .../cloudcontrol/domain/Roles.java              |  59 +++++++
 .../cloudcontrol/domain/Server.java             | 166 +++++++++++++++++++
 .../cloudcontrol/domain/Servers.java            |  31 ++++
 .../cloudcontrol/domain/Status.java             |  84 ++++++++++
 .../dimensiondata/cloudcontrol/domain/Tag.java  |  82 +++++++++
 .../cloudcontrol/domain/TagInfo.java            |  53 ++++++
 .../cloudcontrol/domain/TagKey.java             |  68 ++++++++
 .../cloudcontrol/domain/TagKeys.java            |  28 ++++
 .../dimensiondata/cloudcontrol/domain/Tags.java |  28 ++++
 .../cloudcontrol/domain/VMwareTools.java        |  59 +++++++
 .../cloudcontrol/domain/VirtualHardware.java    |  51 ++++++
 .../dimensiondata/cloudcontrol/domain/Vlan.java |  95 +++++++++++
 .../cloudcontrol/domain/Vlans.java              |  31 ++++
 .../cloudcontrol/options/PaginationOptions.java |  69 ++++++++
 .../domain/PaginatedCollectionTest.java         |  50 ++++++
 pom.xml                                         |   1 +
 52 files changed, 3448 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/README.md
----------------------------------------------------------------------
diff --git a/dimensiondata/README.md b/dimensiondata/README.md
new file mode 100644
index 0000000..3f9bbfc
--- /dev/null
+++ b/dimensiondata/README.md
@@ -0,0 +1,11 @@
+dimensiondata is a jclouds api modelled on DimensionData CloudControl API.
+
+
+# How to use it
+
+- use a MCP2.0 datacenter (NA9, NA12, etc)
+
+# Known Limitations
+
+- it supports only MCP2.0 datacenters
+- it currently supports only public images.

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/pom.xml
----------------------------------------------------------------------
diff --git a/dimensiondata/pom.xml b/dimensiondata/pom.xml
new file mode 100644
index 0000000..964f52a
--- /dev/null
+++ b/dimensiondata/pom.xml
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.jclouds.labs</groupId>
+        <artifactId>jclouds-labs</artifactId>
+        <version>2.1.0-SNAPSHOT</version>
+    </parent>
+
+    <!-- TODO: when out of labs, switch to org.jclouds.provider -->
+    <artifactId>dimensiondata-cloudcontrol</artifactId>
+    <description>jclouds components to access an implementation of Dimension Data CloudControl</description>
+    <packaging>bundle</packaging>
+
+    <properties>
+        <test.dimensiondata-cloudcontrol.api-version>2.1</test.dimensiondata-cloudcontrol.api-version>
+        <test.dimensiondata-cloudcontrol.endpoint>FIXME</test.dimensiondata-cloudcontrol.endpoint>
+        <test.dimensiondata-cloudcontrol.identity>FIXME</test.dimensiondata-cloudcontrol.identity>
+        <test.dimensiondata-cloudcontrol.credential>FIXME</test.dimensiondata-cloudcontrol.credential>
+        <jclouds.osgi.export>org.jclouds.dimensiondata*;version="${project.version}"</jclouds.osgi.export>
+        <jclouds.osgi.import>
+            org.jclouds.compute.internal;version="${project.version}",
+            org.jclouds.rest.internal;version="${project.version}",
+            org.jclouds*;version="${project.version}",
+            *
+        </jclouds.osgi.import>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.jclouds</groupId>
+            <artifactId>jclouds-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jclouds</groupId>
+            <artifactId>jclouds-compute</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jclouds</groupId>
+            <artifactId>jclouds-compute</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jclouds</groupId>
+            <artifactId>jclouds-core</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jclouds.driver</groupId>
+            <artifactId>jclouds-slf4j</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.jclouds.driver</groupId>
+            <artifactId>jclouds-sshj</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.squareup.okhttp</groupId>
+            <artifactId>mockwebserver</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <!-- Already provided by jclouds-sshj -->
+                <exclusion>
+                    <groupId>org.bouncycastle</groupId>
+                    <artifactId>bcprov-jdk15on</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.value</groupId>
+            <artifactId>auto-value</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.google.auto.service</groupId>
+            <artifactId>auto-service</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <profiles>
+        <profile>
+            <id>live</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>integration</id>
+                                <phase>integration-test</phase>
+                                <goals>
+                                    <goal>test</goal>
+                                </goals>
+                                <configuration>
+                                    <threadCount>1</threadCount>
+                                    <systemPropertyVariables>
+                                        <test.dimensiondata-cloudcontrol.api-version>
+                                            ${test.dimensiondata-cloudcontrol.api-version}
+                                        </test.dimensiondata-cloudcontrol.api-version>
+                                        <test.dimensiondata-cloudcontrol.endpoint>
+                                            ${test.dimensiondata-cloudcontrol.endpoint}
+                                        </test.dimensiondata-cloudcontrol.endpoint>
+                                        <test.dimensiondata-cloudcontrol.identity>
+                                            ${test.dimensiondata-cloudcontrol.identity}
+                                        </test.dimensiondata-cloudcontrol.identity>
+                                        <test.dimensiondata-cloudcontrol.credential>
+                                            ${test.dimensiondata-cloudcontrol.credential}
+                                        </test.dimensiondata-cloudcontrol.credential>
+                                    </systemPropertyVariables>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Account.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Account.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Account.java
new file mode 100644
index 0000000..1149a07
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Account.java
@@ -0,0 +1,99 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class Account {
+   public abstract String userName();
+
+   @Nullable
+   public abstract String password();
+
+   public abstract String fullName();
+
+   public abstract String firstName();
+
+   public abstract String lastName();
+
+   public abstract String emailAddress();
+
+   @Nullable
+   public abstract String department();
+
+   @Nullable
+   public abstract String customDefined1();
+
+   @Nullable
+   public abstract String customDefined2();
+
+   public abstract String orgId();
+
+   @Nullable
+   public abstract Roles roles();
+
+   Account() {
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Account.Builder();
+   }
+
+   @SerializedNames({ "userName", "password", "fullName", "firstName", "lastName", "emailAddress", "department",
+         "customDefined1", "customDefined2", "orgId", "roles" })
+   public static Account create(String userName, String password, String fullName, String firstName, String lastName,
+         String emailAddress, String department, String customDefined1, String customDefined2, String orgId,
+         Roles roles) {
+      return builder().userName(userName).password(password).fullName(fullName).firstName(firstName).lastName(lastName)
+            .emailAddress(emailAddress).department(department).customDefined1(customDefined1)
+            .customDefined2(customDefined2).orgId(orgId).roles(roles).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+
+      public abstract Builder userName(String userName);
+
+      public abstract Builder password(String password);
+
+      public abstract Builder fullName(String fullName);
+
+      public abstract Builder firstName(String firstName);
+
+      public abstract Builder lastName(String lastName);
+
+      public abstract Builder emailAddress(String emailAddress);
+
+      public abstract Builder department(String department);
+
+      public abstract Builder customDefined1(String customDefined1);
+
+      public abstract Builder customDefined2(String customDefined2);
+
+      public abstract Builder orgId(String orgId);
+
+      public abstract Builder roles(Roles roles);
+
+      public abstract Account build();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/AdditionalInformationType.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/AdditionalInformationType.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/AdditionalInformationType.java
new file mode 100644
index 0000000..a0dd952
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/AdditionalInformationType.java
@@ -0,0 +1,51 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class AdditionalInformationType {
+
+   public abstract String value();
+
+   public abstract String name();
+
+   AdditionalInformationType() {
+   }
+
+   @SerializedNames({ "value", "name" })
+   public static AdditionalInformationType create(String value, String name) {
+      return builder().value(value).name(name).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder value(String value);
+
+      public abstract Builder name(String name);
+
+      public abstract AdditionalInformationType build();
+   }
+
+   public static Builder builder() {
+      return new AutoValue_AdditionalInformationType.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Backup.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Backup.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Backup.java
new file mode 100644
index 0000000..b7a5f4d
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Backup.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class Backup {
+
+   Backup() {
+   }
+
+   public abstract String type();
+
+   public abstract String maintenanceStatus();
+
+   @Nullable
+   public abstract List<Property> properties();
+
+   @SerializedNames({ "type", "maintenanceStatus", "property" })
+   public static Backup create(String type, String maintenanceStatus, List<Property> properties) {
+      return builder().type(type).maintenanceStatus(maintenanceStatus).properties(properties).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+
+      public abstract Builder type(String type);
+
+      public abstract Builder maintenanceStatus(String maintenanceStatus);
+
+      public abstract Builder properties(List<Property> properties);
+
+      abstract Backup autoBuild();
+
+      abstract List<Property> properties();
+
+      public Backup build() {
+         properties(properties() != null ? ImmutableList.copyOf(properties()) : null);
+         return autoBuild();
+      }
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Backup.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/CPU.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/CPU.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/CPU.java
new file mode 100644
index 0000000..e9754c2
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/CPU.java
@@ -0,0 +1,55 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class CPU {
+
+   CPU() {
+   }
+
+   public abstract int count();
+
+   public abstract String speed();
+
+   public abstract int coresPerSocket();
+
+   @SerializedNames({ "count", "speed", "coresPerSocket" })
+   public static CPU create(int count, String speed, int coresPerSocket) {
+      return builder().count(count).speed(speed).coresPerSocket(coresPerSocket).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder count(int count);
+
+      public abstract Builder speed(String speed);
+
+      public abstract Builder coresPerSocket(int coresPerSocket);
+
+      public abstract CPU build();
+   }
+
+   public static Builder builder() {
+      return new AutoValue_CPU.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/ConsoleAccess.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/ConsoleAccess.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/ConsoleAccess.java
new file mode 100644
index 0000000..ccc74eb
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/ConsoleAccess.java
@@ -0,0 +1,64 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class ConsoleAccess {
+
+   ConsoleAccess() {
+   }
+
+   @Nullable
+   public abstract List<Property> properties();
+
+   public abstract String maintenanceStatus();
+
+   @SerializedNames({ "property", "maintenanceStatus" })
+   public static ConsoleAccess create(List<Property> properties, String maintenanceStatus) {
+      return builder().properties(properties).maintenanceStatus(maintenanceStatus).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+
+      public abstract Builder properties(List<Property> properties);
+
+      public abstract Builder maintenanceStatus(String maintenanceStatus);
+
+      abstract ConsoleAccess autoBuild();
+
+      abstract List<Property> properties();
+
+      public ConsoleAccess build() {
+         properties(properties() != null ? ImmutableList.copyOf(properties()) : null);
+         return autoBuild();
+      }
+   }
+
+   public static Builder builder() {
+      return new AutoValue_ConsoleAccess.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/CpuSpeed.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/CpuSpeed.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/CpuSpeed.java
new file mode 100644
index 0000000..439294e
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/CpuSpeed.java
@@ -0,0 +1,117 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+/**
+ * Defines the CPU speeds available in the Dimension Data Cloud.
+ */
+public enum CpuSpeed {
+
+   /**
+    * Dimension Data Economy speed CPU.
+    * <p/>
+    * May not be available in all datacenters.
+    */
+   ECONOMY(10),
+
+   /**
+    * Dimension Data Standard speed CPU.
+    * <p/>
+    * The default CPU speed if not otherwise specified.
+    */
+   STANDARD(20),
+
+   /**
+    * Dimension Data High-Performance speed CPU.
+    * <p/>
+    * May not be available in all datacenters.
+    */
+   HIGHPERFORMANCE(30);
+
+   /**
+    * The value used to represent this CPU speed in JClouds.
+    * <p/>
+    * There is no significance to the numerical value other than ordering of the supported speeds. Values are not
+    * proportional to each other in any way.
+    */
+   private final double speed;
+
+   CpuSpeed(double speed) {
+      this.speed = speed;
+   }
+
+   /**
+    * Gets the default CPU speed used in the Dimension Data cloud.
+    *
+    * @return the default speed.
+    */
+   public static CpuSpeed getDefaultCpuSpeed() {
+      return STANDARD;
+   }
+
+   /**
+    * Gets the CPU speed that corresponds to the supplied required speed.
+    * <p/>
+    * If there is no matching speed for the supplied value then the {@link #getDefaultCpuSpeed()} speed is returned.
+    *
+    * @param requiredSpeed the CPU speed that is required.
+    * @return the corresponding CPU speed.
+    */
+   public static CpuSpeed fromSpeed(final double requiredSpeed) {
+      for (CpuSpeed cpuSpeed : CpuSpeed.values()) {
+         if (cpuSpeed.speed == requiredSpeed) {
+            return cpuSpeed;
+         }
+      }
+      return getDefaultCpuSpeed();
+   }
+
+   /**
+    * Gets the CPU speed that corresponds to the supplied required speed.
+    * <p/>
+    * If there is no matching speed for the supplied value then the {@link #getDefaultCpuSpeed()} speed is returned.
+    *
+    * @param requiredSpeed the CPU speed that is required.
+    * @return the corresponding CPU speed.
+    */
+   public static CpuSpeed fromDimensionDataSpeed(final String requiredSpeed) {
+      for (CpuSpeed cpuSpeed : CpuSpeed.values()) {
+         if (cpuSpeed.getDimensionDataSpeed().equals(requiredSpeed)) {
+            return cpuSpeed;
+         }
+      }
+      return getDefaultCpuSpeed();
+   }
+
+   /**
+    * Gets the CPU speed as represented in JClouds.
+    *
+    * @return the CPU speed.
+    */
+   public double getSpeed() {
+      return speed;
+   }
+
+   /**
+    * Gets the CPU speed as represented in the Dimension Data cloud.
+    *
+    * @return the CPU speed.
+    */
+   public String getDimensionDataSpeed() {
+      return name();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Datacenter.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Datacenter.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Datacenter.java
new file mode 100644
index 0000000..c331fda
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Datacenter.java
@@ -0,0 +1,105 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class Datacenter {
+
+   public static Builder builder() {
+      return new AutoValue_Datacenter.Builder();
+   }
+
+   Datacenter() {
+   } // For AutoValue only!
+
+   public abstract String id();
+
+   public abstract String displayName();
+
+   public abstract String type();
+
+   public abstract String city();
+
+   public abstract String state();
+
+   public abstract String country();
+
+   public abstract String vpnUrl();
+
+   public abstract String ftpsHost();
+
+   public abstract Networking networking();
+
+   public abstract Hypervisor hypervisor();
+
+   @Nullable
+   public abstract Backup backup();
+
+   @Nullable
+   public abstract ConsoleAccess consoleAccess();
+
+   @Nullable
+   public abstract Monitoring monitoring();
+
+   @SerializedNames({ "id", "displayName", "type", "city", "state", "country", "vpnUrl", "ftpsHost", "networking",
+         "hypervisor", "backup", "consoleAccess", "monitoring" })
+   public static Datacenter create(String id, String displayName, String type, String city, String state,
+         String country, String vpnUrl, String ftpsHost, Networking networking, Hypervisor hypervisor, Backup backup,
+         ConsoleAccess consoleAccess, Monitoring monitoring) {
+      return builder().id(id).displayName(displayName).type(type).city(city).state(state).country(country)
+            .vpnUrl(vpnUrl).ftpsHost(ftpsHost).networking(networking).hypervisor(hypervisor).backup(backup)
+            .consoleAccess(consoleAccess).monitoring(monitoring).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+
+      public abstract Builder displayName(String displayName);
+
+      public abstract Builder type(String type);
+
+      public abstract Builder city(String city);
+
+      public abstract Builder state(String state);
+
+      public abstract Builder country(String country);
+
+      public abstract Builder vpnUrl(String vpnUrl);
+
+      public abstract Builder ftpsHost(String ftpsHost);
+
+      public abstract Builder networking(Networking networking);
+
+      public abstract Builder hypervisor(Hypervisor hypervisor);
+
+      public abstract Builder backup(Backup backup);
+
+      public abstract Builder consoleAccess(ConsoleAccess consoleAccess);
+
+      public abstract Builder monitoring(Monitoring monitoring);
+
+      public abstract Datacenter build();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Datacenters.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Datacenters.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Datacenters.java
new file mode 100644
index 0000000..53ecc86
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Datacenters.java
@@ -0,0 +1,32 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+
+/**
+ * A collection of Datacenter
+ */
+public class Datacenters extends PaginatedCollection<Datacenter> {
+
+   @ConstructorProperties({ "datacenter", "pageNumber", "pageCount", "totalCount", "pageSize" })
+   public Datacenters(List<Datacenter> content, Integer pageNumber, Integer pageCount, Integer totalCount,
+         Integer pageSize) {
+      super(content, pageNumber, pageCount, totalCount, pageSize);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Disk.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Disk.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Disk.java
new file mode 100644
index 0000000..a851fd2
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Disk.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class Disk {
+
+   Disk() {
+   }
+
+   @Nullable
+   public abstract String id();
+
+   public abstract int scsiId();
+
+   public abstract int sizeGb();
+
+   public abstract String speed();
+
+   @Nullable
+   public abstract String state();
+
+   @SerializedNames({ "id", "scsiId", "sizeGb", "speed", "state" })
+   public static Disk create(String id, int scsiId, int sizeGb, String speed, String state) {
+      return builder().id(id).scsiId(scsiId).sizeGb(sizeGb).speed(speed).state(state).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+
+      public abstract Builder scsiId(int scsiId);
+
+      public abstract Builder sizeGb(int sizeGb);
+
+      public abstract Builder speed(String speed);
+
+      public abstract Builder state(String state);
+
+      public abstract Disk build();
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Disk.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/FirewallRule.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/FirewallRule.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/FirewallRule.java
new file mode 100644
index 0000000..70dc884
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/FirewallRule.java
@@ -0,0 +1,103 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class FirewallRule {
+
+   public static Builder builder() {
+      return new AutoValue_FirewallRule.Builder();
+   }
+
+   FirewallRule() {
+   } // For AutoValue only!
+
+   public abstract String id();
+
+   public abstract String name();
+
+   public abstract String ruleType();
+
+   public abstract String networkDomainId();
+
+   public abstract String state();
+
+   public abstract String action();
+
+   public abstract String ipVersion();
+
+   public abstract String protocol();
+
+   public abstract String datacenterId();
+
+   public abstract FirewallRuleTarget source();
+
+   public abstract FirewallRuleTarget destination();
+
+   public abstract Boolean enabled();
+
+   @Nullable
+   public abstract Placement placement();
+
+   @SerializedNames({ "id", "name", "ruleType", "networkDomainId", "state", "action", "ipVersion", "protocol",
+         "datacenterId", "source", "destination", "enabled", "placement" })
+   public static FirewallRule create(String id, String name, String ruleType, String networkDomainId, String state,
+         String action, String ipVersion, String protocol, String datacenterId, FirewallRuleTarget source,
+         FirewallRuleTarget destination, Boolean enabled, Placement placement) {
+      return builder().id(id).name(name).ruleType(ruleType).networkDomainId(networkDomainId).state(state).action(action)
+            .ipVersion(ipVersion).protocol(protocol).datacenterId(datacenterId).source(source).destination(destination)
+            .enabled(enabled).placement(placement).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+
+      public abstract Builder name(String name);
+
+      public abstract Builder ruleType(String ruleType);
+
+      public abstract Builder networkDomainId(String networkDomainId);
+
+      public abstract Builder state(String state);
+
+      public abstract Builder action(String action);
+
+      public abstract Builder ipVersion(String ipVersion);
+
+      public abstract Builder protocol(String protocol);
+
+      public abstract Builder datacenterId(String datacenterId);
+
+      public abstract Builder source(FirewallRuleTarget source);
+
+      public abstract Builder destination(FirewallRuleTarget destination);
+
+      public abstract Builder enabled(Boolean enabled);
+
+      public abstract Builder placement(Placement placement);
+
+      public abstract FirewallRule build();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/FirewallRuleTarget.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/FirewallRuleTarget.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/FirewallRuleTarget.java
new file mode 100644
index 0000000..edd3efa
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/FirewallRuleTarget.java
@@ -0,0 +1,111 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class FirewallRuleTarget {
+
+   @AutoValue
+   public abstract static class Port {
+
+      Port() {
+      } // For AutoValue only!
+
+      public abstract int begin();
+
+      @Nullable
+      public abstract Integer end();
+
+      @SerializedNames({ "begin", "end" })
+      public static Port create(int begin, Integer end) {
+         return new AutoValue_FirewallRuleTarget_Port(begin, end);
+      }
+   }
+
+   @AutoValue
+   public abstract static class PortList {
+
+      PortList() {
+      } // For AutoValue only!
+
+      public abstract String id();
+
+      @Nullable
+      public abstract String name();
+
+      @Nullable
+      public abstract String description();
+
+      @Nullable
+      public abstract List<Port> port();
+
+      @Nullable
+      public abstract List<String> childPortList();
+
+      @SerializedNames({ "id", "name", "description", "port", "childPortList" })
+      public static PortList create(String id, String name, String description, List<Port> port,
+            List<String> childPortList) {
+         return new AutoValue_FirewallRuleTarget_PortList(id, name, description, port, childPortList);
+      }
+   }
+
+   public static Builder builder() {
+      return new AutoValue_FirewallRuleTarget.Builder();
+   }
+
+   FirewallRuleTarget() {
+   } // For AutoValue only!
+
+   @Nullable
+   public abstract IpRange ip();
+
+   @Nullable
+   public abstract Port port();
+
+   @Nullable
+   public abstract String portListId();
+
+   @Nullable
+   public abstract PortList portList();
+
+   @SerializedNames({ "ip", "port", "portListId", "portList" })
+   public static FirewallRuleTarget create(IpRange ip, Port port, String portListId, PortList portList) {
+      return builder().ip(ip).port(port).portListId(portListId).portList(portList).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder ip(IpRange ip);
+
+      public abstract Builder port(Port port);
+
+      public abstract Builder portListId(String portListId);
+
+      public abstract Builder portList(PortList portList);
+
+      public abstract FirewallRuleTarget build();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/FirewallRules.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/FirewallRules.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/FirewallRules.java
new file mode 100644
index 0000000..5772749
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/FirewallRules.java
@@ -0,0 +1,32 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+
+/**
+ * A collection of FirewallRule
+ */
+public class FirewallRules extends PaginatedCollection<FirewallRule> {
+
+   @ConstructorProperties({ "firewallRule", "pageNumber", "pageCount", "totalCount", "pageSize" })
+   public FirewallRules(List<FirewallRule> content, Integer pageNumber, Integer pageCount, Integer totalCount,
+         Integer pageSize) {
+      super(content, pageNumber, pageCount, totalCount, pageSize);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Hypervisor.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Hypervisor.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Hypervisor.java
new file mode 100644
index 0000000..0e8d448
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Hypervisor.java
@@ -0,0 +1,130 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class Hypervisor {
+
+   @AutoValue
+   public abstract static class DiskSpeed {
+
+      DiskSpeed() {
+      } // For AutoValue only!
+
+      public abstract String id();
+
+      public abstract String displayName();
+
+      public abstract String abbreviation();
+
+      public abstract String description();
+
+      public abstract boolean available();
+
+      public abstract boolean _default();
+
+      @SerializedNames({ "id", "displayName", "abbreviation", "description", "available", "default" })
+      public static DiskSpeed create(String id, String displayName, String abbreviation, String description,
+            boolean available, boolean _default) {
+         return new AutoValue_Hypervisor_DiskSpeed(id, displayName, abbreviation, description, available, _default);
+      }
+   }
+
+   @AutoValue
+   public abstract static class CpuSpeed {
+
+      CpuSpeed() {
+      } // For AutoValue only!
+
+      public abstract String id();
+
+      public abstract String displayName();
+
+      public abstract String description();
+
+      public abstract boolean available();
+
+      public abstract boolean _default();
+
+      @SerializedNames({ "id", "displayName", "description", "available", "default" })
+      public static CpuSpeed create(String id, String displayName, String description, boolean available,
+            boolean _default) {
+         return new AutoValue_Hypervisor_CpuSpeed(id, displayName, description, available, _default);
+      }
+   }
+
+   Hypervisor() {
+   }
+
+   public abstract String type();
+
+   public abstract String maintenanceStatus();
+
+   public abstract List<Property> properties();
+
+   public abstract List<DiskSpeed> diskSpeeds();
+
+   public abstract List<CpuSpeed> cpuSpeeds();
+
+   @SerializedNames({ "type", "maintenanceStatus", "property", "diskSpeed", "cpuSpeed" })
+   public static Hypervisor create(String type, String maintenanceStatus, List<Property> properties,
+         List<DiskSpeed> diskSpeeds, List<CpuSpeed> cpuSpeeds) {
+      return builder().type(type).maintenanceStatus(maintenanceStatus).properties(properties).diskSpeeds(diskSpeeds)
+            .cpuSpeeds(cpuSpeeds).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder maintenanceStatus(String maintenanceStatus);
+
+      public abstract Builder type(String type);
+
+      public abstract Builder properties(List<Property> properties);
+
+      public abstract Builder diskSpeeds(List<DiskSpeed> diskSpeeds);
+
+      public abstract Builder cpuSpeeds(List<CpuSpeed> cpuSpeeds);
+
+      abstract Hypervisor autoBuild();
+
+      abstract List<Property> properties();
+
+      abstract List<DiskSpeed> diskSpeeds();
+
+      abstract List<CpuSpeed> cpuSpeeds();
+
+      public Hypervisor build() {
+         properties(properties() != null ? ImmutableList.copyOf(properties()) : ImmutableList.<Property>of());
+         diskSpeeds(diskSpeeds() != null ? ImmutableList.copyOf(diskSpeeds()) : ImmutableList.<DiskSpeed>of());
+         cpuSpeeds(cpuSpeeds() != null ? ImmutableList.copyOf(cpuSpeeds()) : ImmutableList.<CpuSpeed>of());
+         return autoBuild();
+      }
+
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Hypervisor.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/IpRange.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/IpRange.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/IpRange.java
new file mode 100644
index 0000000..78cd047
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/IpRange.java
@@ -0,0 +1,38 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class IpRange {
+
+   IpRange() {
+   } // For AutoValue only!
+
+   public abstract String address();
+
+   @Nullable
+   public abstract Integer prefixSize();
+
+   @SerializedNames({ "address", "prefixSize" })
+   public static IpRange create(String address, Integer prefixSize) {
+      return new AutoValue_IpRange(address, prefixSize);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Monitoring.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Monitoring.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Monitoring.java
new file mode 100644
index 0000000..be43783
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Monitoring.java
@@ -0,0 +1,64 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class Monitoring {
+
+   Monitoring() {
+   }
+
+   @Nullable
+   public abstract List<Property> properties();
+
+   public abstract String maintenanceStatus();
+
+   @SerializedNames({ "property", "maintenanceStatus" })
+   public static Monitoring create(List<Property> properties, String maintenanceStatus) {
+      return builder().properties(properties).maintenanceStatus(maintenanceStatus).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+
+      public abstract Builder properties(List<Property> properties);
+
+      public abstract Builder maintenanceStatus(String maintenanceStatus);
+
+      abstract Monitoring autoBuild();
+
+      abstract List<Property> properties();
+
+      public Monitoring build() {
+         properties(properties() != null ? ImmutableList.copyOf(properties()) : null);
+         return autoBuild();
+      }
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Monitoring.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NIC.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NIC.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NIC.java
new file mode 100644
index 0000000..33f468f
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NIC.java
@@ -0,0 +1,74 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class NIC {
+
+   NIC() {
+   }
+
+   @Nullable
+   public abstract String id();
+
+   @Nullable
+   public abstract String privateIpv4();
+
+   @Nullable
+   public abstract String ipv6();
+
+   public abstract String vlanId();
+
+   @Nullable
+   public abstract String vlanName();
+
+   @Nullable
+   public abstract String state();
+
+   @SerializedNames({ "id", "privateIpv4", "ipv6", "vlanId", "vlanName", "state" })
+   public static NIC create(String id, String privateIpv4, String ipv6, String vlanId, String vlanName, String state) {
+      return builder().id(id).privateIpv4(privateIpv4).ipv6(ipv6).vlanId(vlanId).vlanName(vlanName).state(state)
+            .build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+
+      public abstract Builder privateIpv4(String privateIpv4);
+
+      public abstract Builder ipv6(String ipv6);
+
+      public abstract Builder vlanId(String vlanId);
+
+      public abstract Builder vlanName(String vlanName);
+
+      public abstract Builder state(String state);
+
+      public abstract NIC build();
+   }
+
+   public static Builder builder() {
+      return new AutoValue_NIC.Builder();
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NatRule.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NatRule.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NatRule.java
new file mode 100644
index 0000000..b1cafb1
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NatRule.java
@@ -0,0 +1,76 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+import java.util.Date;
+
+@AutoValue
+public abstract class NatRule {
+
+   NatRule() {
+   }
+
+   public static Builder builder() {
+      return new AutoValue_NatRule.Builder();
+   }
+
+   public abstract String id();
+
+   public abstract String datacenterId();
+
+   public abstract String state();
+
+   public abstract Date createTime();
+
+   public abstract String externalIp();
+
+   public abstract String internalIp();
+
+   public abstract String networkDomainId();
+
+   @SerializedNames({ "id", "datacenterId", "state", "createTime", "externalIp", "internalIp", "networkDomainId" })
+   public static NatRule create(String id, String datacenterId, String state, Date createTime, String externalIp,
+         String internalIp, String networkDomainId) {
+      return builder().id(id).datacenterId(datacenterId).datacenterId(datacenterId).state(state).createTime(createTime)
+            .externalIp(externalIp).internalIp(internalIp).networkDomainId(networkDomainId).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+
+      public abstract Builder datacenterId(String datacenterId);
+
+      public abstract Builder state(String state);
+
+      public abstract Builder createTime(Date createTime);
+
+      public abstract Builder externalIp(String externalIp);
+
+      public abstract Builder internalIp(String internalIp);
+
+      public abstract Builder networkDomainId(String networkDomainId);
+
+      public abstract NatRule build();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NatRules.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NatRules.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NatRules.java
new file mode 100644
index 0000000..1acb768
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NatRules.java
@@ -0,0 +1,31 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+
+/**
+ * A collection of NAT rule
+ */
+public class NatRules extends PaginatedCollection<NatRule> {
+
+   @ConstructorProperties({ "natRule", "pageNumber", "pageCount", "totalCount", "pageSize" })
+   public NatRules(List<NatRule> content, Integer pageNumber, Integer pageCount, Integer totalCount, Integer pageSize) {
+      super(content, pageNumber, pageCount, totalCount, pageSize);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NetworkDomain.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NetworkDomain.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NetworkDomain.java
new file mode 100644
index 0000000..eb6c291
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NetworkDomain.java
@@ -0,0 +1,91 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.Date;
+
+@AutoValue
+public abstract class NetworkDomain {
+
+   public enum Type {
+      ESSENTIALS, ADVANCED
+   }
+
+   NetworkDomain() {
+   }
+
+   public static Builder builder() {
+      return new AutoValue_NetworkDomain.Builder();
+   }
+
+   public abstract String id();
+
+   @Nullable
+   public abstract String datacenterId();
+
+   public abstract String name();
+
+   @Nullable
+   public abstract String description();
+
+   @Nullable
+   public abstract String state();
+
+   @Nullable
+   public abstract Type type();
+
+   @Nullable
+   public abstract String snatIpv4Address();
+
+   @Nullable
+   public abstract Date createTime();
+
+   @SerializedNames({ "id", "datacenterId", "name", "description", "state", "type", "snatIpv4Address", "createTime" })
+   public static NetworkDomain create(String id, String datacenterId, String name, String description, String state,
+         Type type, String snatIpv4Address, Date createTime) {
+      return builder().id(id).datacenterId(datacenterId).name(name).description(description).state(state).type(type)
+            .snatIpv4Address(snatIpv4Address).createTime(createTime).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+
+      public abstract Builder datacenterId(String datacenterId);
+
+      public abstract Builder name(String name);
+
+      public abstract Builder description(String description);
+
+      public abstract Builder state(String state);
+
+      public abstract Builder type(Type type);
+
+      public abstract Builder snatIpv4Address(String snatIpv4Address);
+
+      public abstract Builder createTime(Date createTime);
+
+      public abstract NetworkDomain build();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NetworkDomains.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NetworkDomains.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NetworkDomains.java
new file mode 100644
index 0000000..4844581
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NetworkDomains.java
@@ -0,0 +1,32 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+
+/**
+ * A collection of NetworkDomain
+ */
+public class NetworkDomains extends PaginatedCollection<NetworkDomain> {
+
+   @ConstructorProperties({ "networkDomain", "pageNumber", "pageCount", "totalCount", "pageSize" })
+   public NetworkDomains(List<NetworkDomain> content, Integer pageNumber, Integer pageCount, Integer totalCount,
+         Integer pageSize) {
+      super(content, pageNumber, pageCount, totalCount, pageSize);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NetworkInfo.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NetworkInfo.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NetworkInfo.java
new file mode 100644
index 0000000..faaa9c8
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/NetworkInfo.java
@@ -0,0 +1,65 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class NetworkInfo {
+
+   public static Builder builder() {
+      return new AutoValue_NetworkInfo.Builder();
+   }
+
+   NetworkInfo() {
+   } // For AutoValue only!
+
+   public abstract String networkDomainId();
+
+   public abstract NIC primaryNic();
+
+   public abstract List<NIC> additionalNic();
+
+   @SerializedNames({ "networkDomainId", "primaryNic", "additionalNic" })
+   public static NetworkInfo create(String networkDomainId, NIC primaryNic, List<NIC> additionalNic) {
+      return builder().networkDomainId(networkDomainId).primaryNic(primaryNic).additionalNic(additionalNic).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder networkDomainId(String networkDomainId);
+
+      public abstract Builder primaryNic(NIC primaryNic);
+
+      public abstract Builder additionalNic(List<NIC> additionalNic);
+
+      abstract NetworkInfo autoBuild();
+
+      abstract List<NIC> additionalNic();
+
+      public NetworkInfo build() {
+         additionalNic(additionalNic() != null ? ImmutableList.copyOf(additionalNic()) : ImmutableList.<NIC>of());
+         return autoBuild();
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Networking.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Networking.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Networking.java
new file mode 100644
index 0000000..2f9c343
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Networking.java
@@ -0,0 +1,67 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.json.SerializedNames;
+
+import java.util.List;
+
+@AutoValue
+public abstract class Networking {
+
+   Networking() {
+   }
+
+   public abstract String type();
+
+   public abstract String maintenanceStatus();
+
+   public abstract List<Property> properties();
+
+   @SerializedNames({ "type", "maintenanceStatus", "property" })
+   public static Networking create(String type, String maintenanceStatus, List<Property> properties) {
+      return builder().type(type).maintenanceStatus(maintenanceStatus).properties(properties).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+
+      public abstract Builder maintenanceStatus(String maintenanceStatus);
+
+      public abstract Builder type(String type);
+
+      public abstract Builder properties(List<Property> properties);
+
+      abstract Networking autoBuild();
+
+      abstract List<Property> properties();
+
+      public Networking build() {
+         properties(properties() != null ? ImmutableList.copyOf(properties()) : ImmutableList.<Property>of());
+         return autoBuild();
+      }
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Networking.Builder();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OperatingSystem.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OperatingSystem.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OperatingSystem.java
new file mode 100644
index 0000000..73035ca
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OperatingSystem.java
@@ -0,0 +1,56 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import org.jclouds.json.SerializedNames;
+
+@AutoValue
+public abstract class OperatingSystem {
+
+   OperatingSystem() {
+   }
+
+   public static Builder builder() {
+      return new AutoValue_OperatingSystem.Builder();
+   }
+
+   public abstract String id();
+
+   public abstract String displayName();
+
+   public abstract String family();
+
+   @SerializedNames({ "id", "displayName", "family" })
+   public static OperatingSystem create(String id, String displayName, String family) {
+      return builder().id(id).displayName(displayName).family(family).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+
+      public abstract Builder displayName(String displayName);
+
+      public abstract Builder family(String family);
+
+      public abstract OperatingSystem build();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OperatingSystems.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OperatingSystems.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OperatingSystems.java
new file mode 100644
index 0000000..692fa2b
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OperatingSystems.java
@@ -0,0 +1,32 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+
+/**
+ * A collection of OperatingSystem
+ */
+public class OperatingSystems extends PaginatedCollection<OperatingSystem> {
+
+   @ConstructorProperties({ "operatingSystem", "pageNumber", "pageCount", "totalCount", "pageSize" })
+   public OperatingSystems(List<OperatingSystem> content, Integer pageNumber, Integer pageCount, Integer totalCount,
+         Integer pageSize) {
+      super(content, pageNumber, pageCount, totalCount, pageSize);
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OsImage.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OsImage.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OsImage.java
new file mode 100644
index 0000000..3d8cdae
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OsImage.java
@@ -0,0 +1,106 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+import org.jclouds.json.SerializedNames;
+
+import java.util.Date;
+import java.util.List;
+
+@AutoValue
+public abstract class OsImage {
+
+   OsImage() {
+   }
+
+   public static Builder builder() {
+      return new AutoValue_OsImage.Builder();
+   }
+
+   public abstract String id();
+
+   public abstract String name();
+
+   public abstract String description();
+
+   public abstract String datacenterId();
+
+   public abstract String osImageKey();
+
+   public abstract Date createTime();
+
+   public abstract OperatingSystem operatingSystem();
+
+   public abstract CPU cpu();
+
+   public abstract int memoryGb();
+
+   public abstract List<Disk> disks();
+
+   public abstract List<Object> softwareLabels();
+
+   @SerializedNames({ "id", "name", "description", "datacenterId", "osImageKey", "createTime", "operatingSystem", "cpu",
+         "memoryGb", "disk", "softwareLabel" })
+   public static OsImage create(String id, String name, String description, String datacenterId, String osImageKey,
+         Date createTime, OperatingSystem operatingSystem, CPU cpu, int memoryGb, List<Disk> disks,
+         List<Object> softwareLabels) {
+      return builder().id(id).name(name).datacenterId(datacenterId).description(description).osImageKey(osImageKey)
+            .createTime(createTime).operatingSystem(operatingSystem).cpu(cpu).memoryGb(memoryGb).disks(disks)
+            .softwareLabels(softwareLabels).build();
+   }
+
+   public abstract Builder toBuilder();
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+
+      public abstract Builder name(String name);
+
+      public abstract Builder description(String description);
+
+      public abstract Builder datacenterId(String datacenterId);
+
+      public abstract Builder osImageKey(String osImageKey);
+
+      public abstract Builder createTime(Date createTime);
+
+      public abstract Builder operatingSystem(OperatingSystem operatingSystem);
+
+      public abstract Builder cpu(CPU cpu);
+
+      public abstract Builder memoryGb(int memoryGb);
+
+      public abstract Builder disks(List<Disk> disks);
+
+      public abstract Builder softwareLabels(List<Object> softwareLabels);
+
+      abstract OsImage autoBuild();
+
+      abstract List<Disk> disks();
+
+      abstract List<Object> softwareLabels();
+
+      public OsImage build() {
+         disks(disks() != null ? ImmutableList.copyOf(disks()) : ImmutableList.<Disk>of());
+         softwareLabels(softwareLabels() != null ? ImmutableList.copyOf(softwareLabels()) : ImmutableList.of());
+         return autoBuild();
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/8054a594/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OsImages.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OsImages.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OsImages.java
new file mode 100644
index 0000000..69ffb0a
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/OsImages.java
@@ -0,0 +1,31 @@
+/*
+ * 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.dimensiondata.cloudcontrol.domain;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+
+/**
+ * A collection of OsImage
+ */
+public class OsImages extends PaginatedCollection<OsImage> {
+
+   @ConstructorProperties({ "osImage", "pageNumber", "pageCount", "totalCount", "pageSize" })
+   public OsImages(List<OsImage> content, Integer pageNumber, Integer pageCount, Integer totalCount, Integer pageSize) {
+      super(content, pageNumber, pageCount, totalCount, pageSize);
+   }
+}