Fix the deploy cl payload issue
[clamp.git] / src / main / java / org / onap / clamp / loop / LoopOperation.java
index f38b591..518830a 100644 (file)
@@ -25,26 +25,20 @@ package org.onap.clamp.loop;
 
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
 import com.google.gson.JsonObject;
-import com.google.gson.JsonPrimitive;
 
 import java.io.IOException;
-import java.lang.reflect.Array;
-import java.util.Collection;
-import java.util.Map;
+import java.util.Iterator;
+import java.util.Set;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.json.simple.JSONObject;
 import org.json.simple.parser.JSONParser;
 import org.json.simple.parser.ParseException;
-import org.onap.clamp.clds.config.ClampProperties;
+import org.onap.clamp.policy.operational.OperationalPolicy;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
-import org.yaml.snakeyaml.Yaml;
 
 /**
  * Closed loop operations.
@@ -56,13 +50,12 @@ public class LoopOperation {
     protected static final EELFLogger auditLogger = EELFManager.getInstance().getMetricsLogger();
     private static final String DCAE_LINK_FIELD = "links";
     private static final String DCAE_STATUS_FIELD = "status";
-    private static final String DCAE_DEPLOYMENT_TEMPLATE = "dcae.deployment.template";
     private static final String DCAE_SERVICETYPE_ID = "serviceTypeId";
     private static final String DCAE_INPUTS = "inputs";
     private static final String DCAE_DEPLOYMENT_PREFIX = "closedLoop_";
     private static final String DCAE_DEPLOYMENT_SUFIX = "_deploymentId";
+    private static final String DEPLOYMENT_PARA = "dcaeDeployParameters";
     private final LoopService loopService;
-    private final ClampProperties refProp;
 
     public enum TempLoopState {
         NOT_SUBMITTED, SUBMITTED, DEPLOYED, NOT_DEPLOYED, PROCESSING, IN_ERROR;
@@ -74,9 +67,8 @@ public class LoopOperation {
      * @param refProp The clamp properties
      */
     @Autowired
-    public LoopOperation(LoopService loopService, ClampProperties refProp) {
+    public LoopOperation(LoopService loopService) {
         this.loopService = loopService;
-        this.refProp = refProp;
     }
 
     /**
@@ -87,16 +79,15 @@ public class LoopOperation {
      * @throws IOException IOException
      */
     public String getDeployPayload(Loop loop) throws IOException {
-        Yaml yaml = new Yaml();
-        Map<String, Object> yamlMap = yaml.load(loop.getBlueprint());
-        JsonObject bluePrint = wrapSnakeObject(yamlMap).getAsJsonObject();
+        JsonObject globalProp = loop.getGlobalPropertiesJson();
+        JsonObject deploymentProp = globalProp.getAsJsonObject(DEPLOYMENT_PARA);
 
         String serviceTypeId = loop.getDcaeBlueprintId();
 
-        JsonObject rootObject = refProp.getJsonTemplate(DCAE_DEPLOYMENT_TEMPLATE).getAsJsonObject();
+        JsonObject rootObject = new JsonObject();
         rootObject.addProperty(DCAE_SERVICETYPE_ID, serviceTypeId);
-        if (bluePrint != null) {
-            rootObject.add(DCAE_INPUTS, bluePrint);
+        if (deploymentProp != null) {
+            rootObject.add(DCAE_INPUTS, deploymentProp);
         }
         String apiBodyString = rootObject.toString();
         logger.info("Dcae api Body String - " + apiBodyString);
@@ -143,10 +134,10 @@ public class LoopOperation {
         String statusUrl = (String) linksObj.get(DCAE_STATUS_FIELD);
 
         // use http4 instead of http, because camel http4 component is used to do the http call
-        statusUrl.replace("http", "http4");
+        String newStatusUrl = statusUrl.replaceAll("http:", "http4:");
 
         loop.setDcaeDeploymentId(deploymentId);
-        loop.setDcaeDeploymentStatusUrl(statusUrl);
+        loop.setDcaeDeploymentStatusUrl(newStatusUrl);
         loopService.saveOrUpdateLoop(loop);
     }
 
@@ -157,7 +148,7 @@ public class LoopOperation {
      * @return The state based on policy response
      * @throws ParseException The parse exception
      */
-    public String analysePolicyResponse(int statusCode) throws ParseException {
+    public String analysePolicyResponse(int statusCode) {
         if (statusCode == 200) {
             return TempLoopState.SUBMITTED.toString();
         } else if (statusCode == 404) {
@@ -166,6 +157,22 @@ public class LoopOperation {
         return TempLoopState.IN_ERROR.toString();
     }
 
+    /**
+     * Get the name of the first Operational policy.
+     *
+     * @param loop The closed loop
+     * @return The name of the first operational policy
+     */
+    public String getOperationalPolicyName(Loop loop) {
+        Set<OperationalPolicy> opSet = (Set<OperationalPolicy>)loop.getOperationalPolicies();
+        Iterator<OperationalPolicy> iterator = opSet.iterator();
+        while (iterator.hasNext()) {
+            OperationalPolicy policy = iterator.next();
+            return policy.getName();
+        }
+        return null;
+    }
+
     /**
      * Get the Closed Loop status based on the reply from DCAE.
      *
@@ -189,13 +196,13 @@ public class LoopOperation {
             String status = (String) jsonObj.get("status");
 
             // status = processing/successded/failed
-            if (status == "successed") {
-                if (opType == "install") {
+            if (status.equals("succeeded")) {
+                if (opType.equals("install")) {
                     return TempLoopState.DEPLOYED.toString();
-                } else if (status == "successed") {
+                } else if (opType.equals("uninstall")) {
                     return TempLoopState.NOT_DEPLOYED.toString();
                 }
-            } else if (status == "processing") {
+            } else if (status.equals("processing")) {
                 return TempLoopState.PROCESSING.toString();
             }
         } else if (statusCode == 404) {
@@ -205,13 +212,14 @@ public class LoopOperation {
     }
 
     /**
-     * Get the status of the closed loop based on the response from Policy and DCAE.
+     * Update the status of the closed loop based on the response from Policy and DCAE.
      *
+     * @param loop The closed loop
      * @param policyState The state get from Policy
      * @param dcaeState The state get from DCAE
      * @throws ParseException The parse exception
      */
-    public LoopState updateLoopStatus(TempLoopState policyState, TempLoopState dcaeState) {
+    public LoopState updateLoopStatus(Loop loop, TempLoopState policyState, TempLoopState dcaeState) {
         LoopState clState = LoopState.IN_ERROR;
         if (policyState == TempLoopState.SUBMITTED) {
             if (dcaeState == TempLoopState.DEPLOYED) {
@@ -226,50 +234,9 @@ public class LoopOperation {
                 clState = LoopState.DESIGN;
             }
         }
+        loop.setLastComputedState(clState);
+        loopService.saveOrUpdateLoop(loop);
         return clState;
     }
 
-    private JsonElement wrapSnakeObject(Object obj) {
-        // NULL => JsonNull
-        if (obj == null) {
-            return JsonNull.INSTANCE;
-        }
-
-        // Collection => JsonArray
-        if (obj instanceof Collection) {
-            JsonArray array = new JsonArray();
-            for (Object childObj : (Collection<?>) obj) {
-                array.add(wrapSnakeObject(childObj));
-            }
-            return array;
-        }
-
-        // Array => JsonArray
-        if (obj.getClass().isArray()) {
-            JsonArray array = new JsonArray();
-
-            int length = Array.getLength(array);
-            for (int i = 0; i < length; i++) {
-                array.add(wrapSnakeObject(Array.get(array, i)));
-            }
-            return array;
-        }
-
-        // Map => JsonObject
-        if (obj instanceof Map) {
-            Map<?, ?> map = (Map<?, ?>) obj;
-
-            JsonObject jsonObject = new JsonObject();
-            for (final Map.Entry<?, ?> entry : map.entrySet()) {
-                final String name = String.valueOf(entry.getKey());
-                final Object value = entry.getValue();
-                jsonObject.add(name, wrapSnakeObject(value));
-            }
-            return jsonObject;
-        }
-
-        // otherwise take it as a string
-        return new JsonPrimitive(String.valueOf(obj));
-    }
-
 }