Fix the policy_id not set

Fix the policy_id not set by default when it's a unique blueprint, and when it contains only one microservice

Issue-ID: CLAMP-802
Signed-off-by: sebdet <sebastien.determe@intl.att.com>
Change-Id: Iffe35e461395940567588228ec68ea4b7ff9a409
diff --git a/src/main/java/org/onap/clamp/clds/tosca/update/execution/ToscaMetadataExecutor.java b/src/main/java/org/onap/clamp/clds/tosca/update/execution/ToscaMetadataExecutor.java
index 3d32ff6..885e755 100644
--- a/src/main/java/org/onap/clamp/clds/tosca/update/execution/ToscaMetadataExecutor.java
+++ b/src/main/java/org/onap/clamp/clds/tosca/update/execution/ToscaMetadataExecutor.java
@@ -51,7 +51,7 @@
     private Map<String, ToscaMetadataProcess> mapOfProcesses = new HashMap<>();
 
     /**
-     * This method executes the required process specified in processInfo
+     * This method executes the required process specified in processInfo.
      *
      * @param processInfo  A String containing the process to execute, like "cds/param1:value1/param2:value2"
      * @param childObject  The jsonObject
@@ -61,7 +61,8 @@
         String[] processParameters = (processInfo + "/ ").split("/");
         logger.info("Executing the Tosca clamp process " + processParameters[0] + " with parameters "
                 + processParameters[1].trim());
-        mapOfProcesses.get(processParameters[0].trim()).executeProcess(processParameters[1].trim(), childObject, serviceModel);
+        mapOfProcesses.get(processParameters[0].trim())
+                .executeProcess(processParameters[1].trim(), childObject, serviceModel);
     }
 
     /**
diff --git a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java
index 8fce5ca..3e8cfaf 100644
--- a/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java
+++ b/src/main/java/org/onap/clamp/loop/components/external/DcaeComponent.java
@@ -47,7 +47,7 @@
     private static final String DEPLOYMENT_PARAMETER = "dcaeDeployParameters";
     private static final String DCAE_SERVICETYPE_ID = "serviceTypeId";
     private static final String DCAE_INPUTS = "inputs";
-    private static final String SINGLE_BLUEPRINT_POLICYID = "loop template blueprint";
+    public static final String UNIQUE_BLUEPRINT_PARAMETERS = "uniqueBlueprintParameters";
 
     private String name;
 
@@ -132,7 +132,8 @@
      */
     public static String getDeployPayload(Loop loop) {
         JsonObject globalProp = loop.getGlobalPropertiesJson();
-        JsonObject deploymentProp = globalProp.getAsJsonObject(DEPLOYMENT_PARAMETER).getAsJsonObject(SINGLE_BLUEPRINT_POLICYID);
+        JsonObject deploymentProp = globalProp.getAsJsonObject(DEPLOYMENT_PARAMETER).getAsJsonObject(
+                UNIQUE_BLUEPRINT_PARAMETERS);
 
         String serviceTypeId = loop.getLoopTemplate().getDcaeBlueprintId();
 
diff --git a/src/main/java/org/onap/clamp/loop/deploy/DcaeDeployParameters.java b/src/main/java/org/onap/clamp/loop/deploy/DcaeDeployParameters.java
index e2b16e6..65506a4 100644
--- a/src/main/java/org/onap/clamp/loop/deploy/DcaeDeployParameters.java
+++ b/src/main/java/org/onap/clamp/loop/deploy/DcaeDeployParameters.java
@@ -24,13 +24,12 @@
 package org.onap.clamp.loop.deploy;
 
 import com.google.gson.JsonObject;
-
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
-
 import org.onap.clamp.clds.util.JsonUtils;
 import org.onap.clamp.loop.Loop;
+import org.onap.clamp.loop.components.external.DcaeComponent;
 import org.onap.clamp.policy.microservice.MicroServicePolicy;
 import org.yaml.snakeyaml.Yaml;
 
@@ -44,8 +43,8 @@
         Set<MicroServicePolicy> microServiceList = loop.getMicroServicePolicies();
 
         for (MicroServicePolicy microService : microServiceList) {
-                deploymentParamMap.put(microService.getName(),
-                        generateDcaeDeployParameter(microService));
+            deploymentParamMap.put(microService.getName(),
+                    generateDcaeDeployParameter(microService));
         }
         return deploymentParamMap;
     }
@@ -55,7 +54,7 @@
                 microService.getName());
     }
 
-    private static JsonObject generateDcaeDeployParameter(String blueprint, String tabName) {
+    private static JsonObject generateDcaeDeployParameter(String blueprint, String policyId) {
         JsonObject deployJsonBody = new JsonObject();
         Yaml yaml = new Yaml();
         Map<String, Object> inputsNodes = ((Map<String, Object>) ((Map<String, Object>) yaml
@@ -64,25 +63,29 @@
             Object defaultValue = ((Map<String, Object>) elem.getValue()).get("default");
             if (defaultValue != null) {
                 addPropertyToNode(deployJsonBody, elem.getKey(), defaultValue);
-            } else {
+            }
+            else {
                 deployJsonBody.addProperty(elem.getKey(), "");
             }
         });
-        // For Dublin only one micro service is expected
-        deployJsonBody.addProperty("policy_id", tabName);
+        deployJsonBody.addProperty("policy_id", policyId);
         return deployJsonBody;
     }
 
     private static void addPropertyToNode(JsonObject node, String key, Object value) {
         if (value instanceof String) {
             node.addProperty(key, (String) value);
-        } else if (value instanceof Number) {
+        }
+        else if (value instanceof Number) {
             node.addProperty(key, (Number) value);
-        } else if (value instanceof Boolean) {
+        }
+        else if (value instanceof Boolean) {
             node.addProperty(key, (Boolean) value);
-        } else if (value instanceof Character) {
+        }
+        else if (value instanceof Character) {
             node.addProperty(key, (Character) value);
-        } else {
+        }
+        else {
             node.addProperty(key, JsonUtils.GSON.toJson(value));
         }
     }
@@ -96,9 +99,14 @@
         JsonObject globalProperties = new JsonObject();
         JsonObject deployParamJson = new JsonObject();
         if (loop.getLoopTemplate().getUniqueBlueprint()) {
-            String tabName = "loop template blueprint";
-            deployParamJson.add(tabName, generateDcaeDeployParameter(loop.getLoopTemplate().getBlueprint(), tabName));
-        } else {
+            // Normally the unique blueprint could contain multiple microservices but then we can't guess
+            // the policy id params that will be used, so here we expect only one by default.
+            deployParamJson.add(DcaeComponent.UNIQUE_BLUEPRINT_PARAMETERS,
+                    generateDcaeDeployParameter(loop.getLoopTemplate().getBlueprint(),
+                            ((MicroServicePolicy) loop.getMicroServicePolicies().toArray()[0]).getName()));
+
+        }
+        else {
             LinkedHashMap<String, JsonObject> deploymentParamMap = init(loop);
             for (Map.Entry<String, JsonObject> mapElement : deploymentParamMap.entrySet()) {
                 deployParamJson.add(mapElement.getKey(), mapElement.getValue());
diff --git a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java
index b42ba98..7f3b570 100644
--- a/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java
+++ b/src/test/java/org/onap/clamp/loop/DcaeComponentTest.java
@@ -47,13 +47,15 @@
     private Loop createTestLoop() {
         Loop loopTest = new Loop("ControlLoopTest", "<xml></xml>");
         loopTest.setGlobalPropertiesJson(
-                new Gson().fromJson("{\"dcaeDeployParameters\":{\"loop template blueprint\": {\"policy_id\": \"name\"}}}", JsonObject.class));
+                new Gson().fromJson(
+                        "{\"dcaeDeployParameters\":{\"uniqueBlueprintParameters\": {\"policy_id\": \"name\"}}}",
+                        JsonObject.class));
         loopTest.setLastComputedState(LoopState.DESIGN);
         loopTest.setDcaeDeploymentId("123456789");
         loopTest.setDcaeDeploymentStatusUrl("http4://localhost:8085");
 
         MicroServicePolicy microServicePolicy = new MicroServicePolicy("configPolicyTest", new PolicyModel("policy1",
-                "tosca_definitions_version: tosca_simple_yaml_1_0_0","1.0.0"), true,
+                "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0"), true,
                 new Gson().fromJson("{\"configtype\":\"json\"}", JsonObject.class), null, null, null);
         microServicePolicy.setConfigurationsJson(new Gson().fromJson("{\"param1\":\"value1\"}", JsonObject.class));
 
@@ -67,6 +69,7 @@
 
     /**
      * Test the DcaeReponse roughly.
+     *
      * @throws IOException In case of issues
      */
     @Test
@@ -166,7 +169,8 @@
 
     /**
      * Test the Converter to DcaeInventoryResponse method.
-     * @throws IOException In case of failure
+     *
+     * @throws IOException    In case of failure
      * @throws ParseException In case of failure
      */
     @Test
diff --git a/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java b/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java
index 98134e8..97fe337 100644
--- a/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java
+++ b/src/test/java/org/onap/clamp/loop/DeployFlowTestItCase.java
@@ -72,7 +72,7 @@
     @Transactional
     public void deployWithSingleBlueprintTest() throws JsonSyntaxException, IOException {
         Loop loopTest = createLoop("ControlLoopTest", "<xml></xml>", "yamlcontent",
-                "{\"dcaeDeployParameters\":{\"loop template blueprint\": {\"policy_id\": \"name\"}}}",
+                "{\"dcaeDeployParameters\":{\"uniqueBlueprintParameters\": {\"policy_id\": \"name\"}}}",
                 "UUID-blueprint");
         LoopTemplate template = new LoopTemplate();
         template.setName("templateName");
diff --git a/src/test/resources/example/sdc/expected-result/deployment-parameters-single-blueprint.json b/src/test/resources/example/sdc/expected-result/deployment-parameters-single-blueprint.json
index 494c2e4..7140a47 100644
--- a/src/test/resources/example/sdc/expected-result/deployment-parameters-single-blueprint.json
+++ b/src/test/resources/example/sdc/expected-result/deployment-parameters-single-blueprint.json
@@ -1,9 +1,9 @@
 {
   "dcaeDeployParameters": {
-    "loop template blueprint": {
+    "uniqueBlueprintParameters": {
       "location_id": "",
       "service_id": "",
-      "policy_id": "loop template blueprint"
+      "policy_id": "testName1"
     }
   }
 }
\ No newline at end of file