JCLOUDS-1457 - Add Clean Server operation to ServerApi.
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/State.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/State.java
index cece134..9e7255c 100644
--- a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/State.java
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/State.java
@@ -22,7 +22,7 @@
 
 public enum State {
 
-   NORMAL, FAILED_ADD, FAILED_CHANGE, FAILED_DELETE, PENDING_DELETE, DELETED, UNRECOGNIZED, PENDING_CHANGE;
+   NORMAL, FAILED_ADD, FAILED_CHANGE, FAILED_DELETE, PENDING_DELETE, DELETED, UNRECOGNIZED, PENDING_CHANGE, PENDING_CLEAN, REQUIRES_SUPPORT;
 
    @Override
    public String toString() {
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
index 4e40beb..867a528 100644
--- a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Vlan.java
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/domain/Vlan.java
@@ -17,6 +17,7 @@
 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;
@@ -35,6 +36,7 @@
 
    public abstract String name();
 
+   @Nullable
    public abstract String description();
 
    public abstract String datacenterId();
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerApi.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerApi.java
index f6ba5c5..1e05293 100644
--- a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerApi.java
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerApi.java
@@ -150,6 +150,18 @@
    @MapBinder(BindToJsonPayload.class)
    void startServer(@PayloadParam("id") String id);
 
+   /**
+    * Operation for cleaning servers with FAILED_ADD state
+    *
+    * @see org.jclouds.dimensiondata.cloudcontrol.domain.State.FAILED_ADD
+    */
+   @Named("server:cleanServer")
+   @POST
+   @Path("/cleanServer")
+   @Produces(MediaType.APPLICATION_JSON)
+   @MapBinder(BindToJsonPayload.class)
+   void cleanServer(@PayloadParam("id") String id);
+
    @Named("server:shutdown")
    @POST
    @Path("/shutdownServer")
diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerApiMockTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerApiMockTest.java
index c8cd46d..553be1d 100644
--- a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerApiMockTest.java
+++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/features/ServerApiMockTest.java
@@ -194,6 +194,14 @@
       assertBodyContains(recordedRequest, "{\"id\":\"12345\"}");
    }
 
+   public void testCleanServer() throws Exception {
+      server.enqueue(jsonResponse("/cleanServer.json"));
+      serverApi().cleanServer("12345");
+      final RecordedRequest recordedRequest = assertSent(POST,
+            "/caas/2.4/6ac1e746-b1ea-4da5-a24e-caf1a978789d/server/cleanServer");
+      assertBodyContains(recordedRequest, "{\"id\":\"12345\"}");
+   }
+
    private ServerApi serverApi() {
       return api.getServerApi();
    }
diff --git a/dimensiondata/src/test/resources/cleanServer.json b/dimensiondata/src/test/resources/cleanServer.json
new file mode 100644
index 0000000..bcfae07
--- /dev/null
+++ b/dimensiondata/src/test/resources/cleanServer.json
@@ -0,0 +1,9 @@
+{
+  "operation": "CLEAN_SERVER",
+  "responseCode": "IN_PROGRESS",
+  "message": "Request to Clean Server has been accepted. Please use appropriate Get or List API for status.",
+  "info": [],
+  "warning": [],
+  "error": [],
+  "requestId": "na9_20160321T074626030-0400_7e9fffe7-190b-46f2-9107-9d52fe57d0ad"
+}
\ No newline at end of file