Change the model to fix TCA

Fix TCA model and JSON model for TCA + rework the JUNIT

Change-Id: I35099633e89f9f95f1957afeffa915feda4045f3
Issue-ID: CLAMP-59
Signed-off-by: Determe, Sebastien (sd378r) <sd378r@intl.att.com>
diff --git a/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java b/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java
index 9debcc2..7de1268 100644
--- a/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java
+++ b/src/main/java/org/onap/clamp/clds/client/TcaPolicyDelegate.java
@@ -23,19 +23,19 @@
 
 package org.onap.clamp.clds.client;
 
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+
 import java.util.UUID;
 
 import org.camunda.bpm.engine.delegate.DelegateExecution;
 import org.camunda.bpm.engine.delegate.JavaDelegate;
-import org.onap.clamp.clds.client.req.TcaMPolicyReq;
+import org.onap.clamp.clds.client.req.TcaRequestFormatter;
 import org.onap.clamp.clds.model.prop.ModelProperties;
 import org.onap.clamp.clds.model.prop.Tca;
 import org.onap.clamp.clds.model.refprop.RefProp;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-
 /**
  * Send Tca info to policy api.
  *
@@ -46,10 +46,10 @@
     protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
 
     @Autowired
-    private RefProp                 refProp;
+    private RefProp                   refProp;
 
     @Autowired
-    PolicyClient                    policyClient;
+    PolicyClient                      policyClient;
 
     /**
      * Perform activity. Send Tca info to policy api.
@@ -64,8 +64,8 @@
         ModelProperties prop = ModelProperties.create(execution);
         Tca tca = prop.getType(Tca.class);
         if (tca.isFound()) {
-            String policyJson = TcaMPolicyReq.formatTca(refProp, prop);
-            String responseMessage = policyClient.sendMicroServiceInJson(policyJson, prop, tcaPolicyRequestUuid);
+            String policyJson = TcaRequestFormatter.createPolicyJson(refProp, prop);
+            String responseMessage = policyClient.sendMicroServiceInOther(policyJson, prop, tcaPolicyRequestUuid);
             if (responseMessage != null) {
                 execution.setVariable("tcaPolicyResponseMessage", responseMessage.getBytes());
             }
diff --git a/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java b/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java
index c5e26f3..32846ed 100644
--- a/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java
+++ b/src/main/java/org/onap/clamp/clds/client/req/SdcReq.java
@@ -26,7 +26,6 @@
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -89,25 +88,14 @@
         String updatedBlueprint = "";
         Tca tca = prop.getType(Tca.class);
         if (tca.isFound()) {
-            prop.setCurrentModelElementId(tca.getId());
-            ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("tca.template", service);
-            ObjectNode content = rootNode.with("content");
-            TcaMPolicyReq.appendSignatures(refProp, service, content, tca, prop);
-            logger.info("Value of content:" + content);
-            // ObjectNode servConfNode =
-            // (ObjectNode)signatures.get("signatures");
-
-            // get updated blueprint by attaching service Conf from
-            // globalProperties
-            updatedBlueprint = getUpdatedBlueprintWithConfiguration(refProp, prop, yamlvalue, content);
-        }
-
+		updatedBlueprint = TcaRequestFormatter.updatedBlueprintWithConfiguration(refProp, prop, yamlvalue);
+        } 
         logger.info("value of blueprint:" + updatedBlueprint);
         return updatedBlueprint;
     }
 
     private static String getUpdatedBlueprintWithConfiguration(RefProp refProp, ModelProperties prop, String yamlValue,
-            ObjectNode serviceConf) throws JsonProcessingException, IOException {
+            ObjectNode serviceConf) throws IOException {
         String blueprint = "";
         Yaml yaml = new Yaml();
         // Serialiaze Yaml file
diff --git a/src/main/java/org/onap/clamp/clds/client/req/TcaMPolicyReq.java b/src/main/java/org/onap/clamp/clds/client/req/TcaMPolicyReq.java
deleted file mode 100644
index f310628..0000000
--- a/src/main/java/org/onap/clamp/clds/client/req/TcaMPolicyReq.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights
- *                             reserved.
- * ================================================================================
- * Licensed 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.
- * ============LICENSE_END============================================
- * ===================================================================
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-
-package org.onap.clamp.clds.client.req;
-
-import java.io.IOException;
-import java.util.Iterator;
-
-import org.onap.clamp.clds.model.prop.Global;
-import org.onap.clamp.clds.model.prop.ModelProperties;
-import org.onap.clamp.clds.model.prop.Tca;
-import org.onap.clamp.clds.model.prop.TcaItem;
-import org.onap.clamp.clds.model.prop.TcaThreshhold;
-import org.onap.clamp.clds.model.refprop.RefProp;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-/**
- * Construct a Policy for Tca/MTca Service request given CLDS objects.
- *
- *
- */
-public class TcaMPolicyReq {
-    protected static final EELFLogger logger        = EELFManager.getInstance().getLogger(TcaMPolicyReq.class);
-    protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
-
-    /**
-     * Format Tca Policy request
-     *
-     * @param refProp
-     * @param prop
-     * @return
-     * @throws JsonParseException
-     * @throws JsonMappingException
-     * @throws IOException
-     */
-    public static String formatTca(RefProp refProp, ModelProperties prop)
-            throws JsonParseException, JsonMappingException, IOException {
-        Global global = prop.getGlobal();
-        String service = global.getService();
-
-        Tca tca = prop.getType(Tca.class);
-        prop.setCurrentModelElementId(tca.getId());
-        ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("tca.template", service);
-        rootNode.put("policyName", prop.getCurrentPolicyScopeAndPolicyName());
-        ObjectNode content = rootNode.with("content");
-        appendSignatures(refProp, service, content, tca, prop);
-
-        String tcaPolicyReq = rootNode.toString();
-        logger.info("tcaPolicyReq=" + tcaPolicyReq);
-        return tcaPolicyReq;
-    }
-
-    /**
-     * Add appendSignatures to json
-     *
-     * @param refProp
-     * @param service
-     * @param appendToNode
-     * @param tca
-     * @param prop
-     * @throws JsonParseException
-     * @throws JsonMappingException
-     * @throws IOException
-     */
-    public static void appendSignatures(RefProp refProp, String service, ObjectNode appendToNode, Tca tca,
-            ModelProperties prop) throws JsonParseException, JsonMappingException, IOException {
-        // "signatures":{
-        ArrayNode tcaNodes = appendToNode.withArray("signatures");
-        for (TcaItem tcaItem : tca.getTcaItems()) {
-            ObjectNode tcaNode = (ObjectNode) refProp.getJsonTemplate("tca.signature.template", service);
-            tcaNode.put("useCaseName", tcaItem.getTcaName());
-            tcaNode.put("signatureName", tcaItem.getTcaName() + "_" + tcaItem.getTcaUuId());
-            tcaNode.put("signatureUuid", tcaItem.getTcaUuId());
-            prop.setPolicyUniqueId(tcaItem.getPolicyId());
-            tcaNode.put("closedLoopControlName", prop.getControlNameAndPolicyUniqueId());
-            tcaNode.put("severity", tcaItem.getSeverity());
-            tcaNode.put("maxInterval", tcaItem.getInterval());
-            tcaNode.put("minMessageViolations", tcaItem.getViolations());
-
-            tcaNodes.add(tcaNode);
-            Iterator<TcaThreshhold> scItr = tcaItem.getTcaThreshholds().iterator();
-            while (scItr.hasNext()) {
-                TcaThreshhold tcaThreshhold = scItr.next();
-                // "thresholds": [
-                ArrayNode thNodes = tcaNode.withArray("thresholds");
-                ObjectNode thNode = thNodes.addObject();
-                thNode.put("fieldPath", tcaThreshhold.getFieldPath());
-                thNode.put("thresholdName", tcaThreshhold.getMetric());
-                thNode.put("thresholdValue", tcaThreshhold.getThreshhold());
-                thNode.put("direction", tcaThreshhold.getOperator());
-            }
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/src/main/java/org/onap/clamp/clds/client/req/TcaRequestFormatter.java b/src/main/java/org/onap/clamp/clds/client/req/TcaRequestFormatter.java
new file mode 100644
index 0000000..3fbf873
--- /dev/null
+++ b/src/main/java/org/onap/clamp/clds/client/req/TcaRequestFormatter.java
@@ -0,0 +1,166 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.clamp.clds.client.req;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.dataformat.yaml.snakeyaml.Yaml;
+
+import java.util.Map;
+
+import org.onap.clamp.clds.exception.TcaRequestFormatterException;
+import org.onap.clamp.clds.model.prop.ModelProperties;
+import org.onap.clamp.clds.model.prop.Tca;
+import org.onap.clamp.clds.model.prop.TcaItem;
+import org.onap.clamp.clds.model.prop.TcaThreshold;
+import org.onap.clamp.clds.model.refprop.RefProp;
+
+/**
+ * Construct the requests for TCA policy and SDC.
+ *
+ */
+public class TcaRequestFormatter {
+    protected static final EELFLogger logger        = EELFManager.getInstance().getLogger(TcaRequestFormatter.class);
+    protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
+
+    /**
+     * Hide the default constructor.
+     */
+    private TcaRequestFormatter() {
+
+    }
+
+    /**
+     * Format Tca Policy JSON request.
+     *
+     * @param refProp
+     *            The refProp generally created by Spring, it's an access on the
+     *            clds-references.properties file
+     * @param modelProperties
+     *            The Model Prop created from BPMN JSON and BPMN properties JSON
+     * @return The Json string containing that should be sent to policy
+     */
+    public static String createPolicyJson(RefProp refProp, ModelProperties modelProperties) {
+        try {
+            String service = modelProperties.getGlobal().getService();
+
+            Tca tca = modelProperties.getType(Tca.class);
+            modelProperties.setCurrentModelElementId(tca.getId());
+            ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("tca.template", service);
+            ((ObjectNode) rootNode.get("cdap-tca-hi-lo_policy").get("metricsPerEventName").get(0)).put("policyName",
+                    modelProperties.getCurrentPolicyScopeAndPolicyName());
+            ((ObjectNode) rootNode.get("cdap-tca-hi-lo_policy").get("metricsPerEventName").get(0)).put("eventName",
+                    tca.getTcaItem().getEventName());
+
+            ObjectNode thresholdsParent = ((ObjectNode) rootNode.get("cdap-tca-hi-lo_policy").get("metricsPerEventName")
+                    .get(0));
+
+            addThresholds(refProp, service, thresholdsParent, tca.getTcaItem(), modelProperties);
+
+            String tcaPolicyReq = rootNode.toString();
+            logger.info("tcaPolicyReq=" + tcaPolicyReq);
+            return tcaPolicyReq;
+        } catch (Exception e) {
+            throw new TcaRequestFormatterException("Exception caught when attempting to create the policy JSON", e);
+        }
+    }
+
+    /**
+     * Add threshold values to the existing policy JSON.
+     *
+     * @param refProp
+     *            The refProp generally created by Spring, it's an access on the
+     *            clds-references.properties file
+     * @param service
+     *            The Service value extracted from Global section of the Bpmn
+     *            Properties JSON
+     * @param appendToNode
+     *            The JSON structure from where the thresholds section must be
+     *            added
+     * @param tcaItem
+     *            The TCA item contained in the Tca object
+     * @param modelProperties
+     *            The Model Properties created from BPMN JSON and BPMN
+     *            properties JSON
+     */
+    private static void addThresholds(RefProp refProp, String service, ObjectNode appendToNode, TcaItem tcaItem,
+            ModelProperties modelProperties) {
+        try {
+            ArrayNode tcaNodes = appendToNode.withArray("thresholds");
+            ObjectNode tcaNode = (ObjectNode) refProp.getJsonTemplate("tca.thresholds.template", service);
+
+            for (TcaThreshold tcaThreshold : tcaItem.getTcaThresholds()) {
+                tcaNode.put("controlLoopSchema", tcaThreshold.getControlLoopSchema());
+                tcaNode.put("closedLoopControlName", modelProperties.getControlNameAndPolicyUniqueId());
+                tcaNode.put("fieldPath", tcaThreshold.getFieldPath());
+                tcaNode.put("thresholdValue", tcaThreshold.getThreshold());
+                tcaNode.put("direction", tcaThreshold.getOperator());
+                tcaNode.put("closedLoopEventStatus", tcaThreshold.getClosedLoopEventStatus());
+                tcaNodes.add(tcaNode);
+            }
+        } catch (Exception e) {
+            throw new TcaRequestFormatterException("Exception caught when attempting to create the thresholds JSON", e);
+        }
+    }
+
+    /**
+     * This method updates the blueprint that is received in the UI with the TCA
+     * Json.
+     * 
+     * @param refProp
+     *            * The refProp generally created by Spring, it's an access on
+     *            the clds-references.properties file
+     * @param modelProperties
+     *            The Model Prop created from BPMN JSON and BPMN properties JSON
+     * @param yamlValue
+     *            The yaml string received from the UI
+     * @return The updated YAML as a string
+     */
+    public static String updatedBlueprintWithConfiguration(RefProp refProp, ModelProperties modelProperties,
+            String yamlValue) {
+        try {
+            String jsonPolicy = createPolicyJson(refProp, modelProperties);
+
+            logger.info("Yaml that will be updated:" + yamlValue);
+            Yaml yaml = new Yaml();
+
+            Map<String, Object> loadedYaml = (Map<String, Object>) yaml.load(yamlValue);
+
+            Map<String, Object> nodeTemplates = (Map<String, Object>) loadedYaml.get("node_templates");
+            Map<String, Object> tcaObject = (Map<String, Object>) nodeTemplates.get("tca_tca");
+            Map<String, Object> propsObject = (Map<String, Object>) tcaObject.get("properties");
+            Map<String, Object> appPreferences = (Map<String, Object>) propsObject.get("app_preferences");
+            appPreferences.put("tca_policy", jsonPolicy);
+
+            String blueprint = yaml.dump(loadedYaml);
+            logger.info("Yaml updated:" + blueprint);
+
+            return blueprint;
+        } catch (Exception e) {
+            throw new TcaRequestFormatterException("Exception caught when attempting to update the blueprint", e);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/org/onap/clamp/clds/model/prop/Tca.java b/src/main/java/org/onap/clamp/clds/model/prop/Tca.java
index f7bbac0..4fd6b59 100644
--- a/src/main/java/org/onap/clamp/clds/model/prop/Tca.java
+++ b/src/main/java/org/onap/clamp/clds/model/prop/Tca.java
@@ -27,25 +27,8 @@
 import com.att.eelf.configuration.EELFManager;
 import com.fasterxml.jackson.databind.JsonNode;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
 /**
- * Parse Tca json properties.
- *
- * Example json:
- * {"TCA_0lm6cix":{"Narra":[{"name":"tname","value":"Narra"},{"name":"tcaEnab",
- * "value":"on"},{"name":"tcaPol","value":"Polcicy1"},{"name":"tcaPolId","value"
- * :"1"},{"name":"tcaInt","value":"1"},{"name":"tcaSev","value":"Critical"},{
- * "name":"tcaVio","value":"1"},{"serviceConfigurations":[["FIELDPATH_test_1",
- * ">","4"],["FIELDPATH_test_1","=","5"]]}],"Srini":[{"name":"tname","value":
- * "Srini"},{"name":"tcaEnab","value":"on"},{"name":"tcaPol","value":"Policy1"},
- * {"name":"tcaPolId","value":"1"},{"name":"tcaInt","value":"1"},{"name":
- * "tcaSev","value":"Major"},{"name":"tcaVio","value":"1"},{
- * "serviceConfigurations":[["FIELDPATH_test_2","=","3"],["FIELDPATH_test_1",">"
- * ,"2"]]}]}}
- *
+ * Parse ONAP Tca json properties.
  *
  */
 public class Tca extends AbstractModelElement {
@@ -53,7 +36,7 @@
     protected static final EELFLogger logger      = EELFManager.getInstance().getLogger(Tca.class);
     protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
 
-    private List<TcaItem>             tcaItems;
+    private TcaItem                   tcaItem;
 
     private static final String       TYPE_TCA    = "tca";
 
@@ -69,16 +52,12 @@
 
         // process Server_Configurations
         if (modelElementJsonNode != null) {
-            Iterator<JsonNode> itr = modelElementJsonNode.elements();
-            tcaItems = new ArrayList<>();
-            while (itr.hasNext()) {
-                tcaItems.add(new TcaItem(itr.next()));
-            }
+            tcaItem = new TcaItem(modelElementJsonNode.elements().next());
         }
     }
 
-    public List<TcaItem> getTcaItems() {
-        return tcaItems;
+    public TcaItem getTcaItem() {
+        return tcaItem;
     }
 
     public static final String getType() {
diff --git a/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java b/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java
index f104b09..79da2db 100644
--- a/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java
+++ b/src/main/java/org/onap/clamp/clds/model/prop/TcaItem.java
@@ -23,45 +23,28 @@
 
 package org.onap.clamp.clds.model.prop;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import com.fasterxml.jackson.databind.JsonNode;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 /**
- * Parse Tca Item json properties.
- *
- * Example json:
- * {"TCA_0lm6cix":{"Narra":[{"name":"tname","value":"Narra"},{"name":"tcaEnab",
- * "value":"on"},{"name":"tcaPol","value":"Polcicy1"},{"name":"tcaPolId","value"
- * :"1"},{"name":"tcaInt","value":"1"},{"name":"tcaSev","value":"Critical"},{
- * "name":"tcaVio","value":"1"},{"serviceConfigurations":[["FIELDPATH_test_1",
- * ">","4"],["FIELDPATH_test_1","=","5"]]}],"Srini":[{"name":"tname","value":
- * "Srini"},{"name":"tcaEnab","value":"on"},{"name":"tcaPol","value":"Policy1"},
- * {"name":"tcaPolId","value":"1"},{"name":"tcaInt","value":"1"},{"name":
- * "tcaSev","value":"Major"},{"name":"tcaVio","value":"1"},{
- * "serviceConfigurations":[["FIELDPATH_test_2","=","3"],["FIELDPATH_test_1",">"
- * ,"2"]]}]}}
- *
+ * Parse ONAP Tca Item json properties.
  *
  */
 public class TcaItem {
 
-    protected static final EELFLogger       logger      = EELFManager.getInstance().getLogger(TcaItem.class);
+    protected static final EELFLogger logger      = EELFManager.getInstance().getLogger(TcaItem.class);
     protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
 
-    private String                  tcaName;
-    private String                  tcaUuId;
-    private String                  nfNamingCode;
-    private String                  tcaEnable;
-    private String                  policyId;
-    private Integer                 interval;
-    private String                  severity;
-    private Integer                 violations;
-    private List<TcaThreshhold>     tcaThreshholds;
+    private String                    tcaName;
+    private String                    tcaUuId;
+    private String                    policyId;
+    private String                    eventName;
+    private List<TcaThreshold>        tcaThresholds;
 
     /**
      * Parse Tca Item given json node
@@ -72,23 +55,14 @@
 
         tcaName = AbstractModelElement.getValueByName(node, "tname");
         tcaUuId = AbstractModelElement.getValueByName(node, "tuuid");
-        nfNamingCode = AbstractModelElement.getValueByName(node, "tnfc");
-        tcaEnable = AbstractModelElement.getValueByName(node, "tcaEnab");
         policyId = AbstractModelElement.getValueByName(node, "tcaPolId");
-        if (AbstractModelElement.getValueByName(node, "tcaInt") != null) {
-            interval = Integer.valueOf(AbstractModelElement.getValueByName(node, "tcaInt"));
-        }
-        severity = AbstractModelElement.getValueByName(node, "tcaSev");
-        if (AbstractModelElement.getValueByName(node, "tcaVio") != null) {
-            violations = Integer.valueOf(AbstractModelElement.getValueByName(node, "tcaVio"));
-        }
-
+        eventName = AbstractModelElement.getValueByName(node, "eventName");
         // process service Configurations
         JsonNode serviceConfigurationsNode = node.get(node.size() - 1).get("serviceConfigurations");
         Iterator<JsonNode> itr = serviceConfigurationsNode.elements();
-        tcaThreshholds = new ArrayList<TcaThreshhold>();
+        tcaThresholds = new ArrayList<>();
         while (itr.hasNext()) {
-            tcaThreshholds.add(new TcaThreshhold(itr.next()));
+            tcaThresholds.add(new TcaThreshold(itr.next()));
         }
     }
 
@@ -108,22 +82,6 @@
         this.tcaUuId = tcaUuId;
     }
 
-    public String getNfNamingCode() {
-        return nfNamingCode;
-    }
-
-    public void setNfNamingCode(String nfNamingCode) {
-        this.nfNamingCode = nfNamingCode;
-    }
-
-    public String getTcaEnable() {
-        return tcaEnable;
-    }
-
-    public void setTcaEnable(String tcaEnable) {
-        this.tcaEnable = tcaEnable;
-    }
-
     public String getPolicyId() {
         return policyId;
     }
@@ -132,32 +90,16 @@
         this.policyId = policyId;
     }
 
-    public Integer getInterval() {
-        return interval;
+    public List<TcaThreshold> getTcaThresholds() {
+        return tcaThresholds;
     }
 
-    public void setInterval(Integer interval) {
-        this.interval = interval;
+    public String getEventName() {
+        return eventName;
     }
 
-    public String getSeverity() {
-        return severity;
-    }
-
-    public void setSeverity(String severity) {
-        this.severity = severity;
-    }
-
-    public Integer getViolations() {
-        return violations;
-    }
-
-    public void setViolations(Integer violations) {
-        this.violations = violations;
-    }
-
-    public List<TcaThreshhold> getTcaThreshholds() {
-        return tcaThreshholds;
+    public void setEventName(String eventName) {
+        this.eventName = eventName;
     }
 
 }
diff --git a/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshhold.java b/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshhold.java
deleted file mode 100644
index 39369f1..0000000
--- a/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshhold.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights
- *                             reserved.
- * ================================================================================
- * Licensed 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.
- * ============LICENSE_END============================================
- * ===================================================================
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
- */
-
-package org.onap.clamp.clds.model.prop;
-
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.fasterxml.jackson.databind.JsonNode;
-
-/**
- * Parse Tca Threshhold json properties.
- *
- * Example json:
- * {"TCA_0lm6cix":{"Narra":[{"name":"tname","value":"Narra"},{"name":"tcaEnab",
- * "value":"on"},{"name":"tcaPol","value":"Polcicy1"},{"name":"tcaPolId","value"
- * :"1"},{"name":"tcaInt","value":"1"},{"name":"tcaSev","value":"Critical"},{
- * "name":"tcaVio","value":"1"},{"serviceConfigurations":[["FIELDPATH_test_1",
- * ">","4"],["FIELDPATH_test_1","=","5"]]}],"Srini":[{"name":"tname","value":
- * "Srini"},{"name":"tcaEnab","value":"on"},{"name":"tcaPol","value":"Policy1"},
- * {"name":"tcaPolId","value":"1"},{"name":"tcaInt","value":"1"},{"name":
- * "tcaSev","value":"Major"},{"name":"tcaVio","value":"1"},{
- * "serviceConfigurations":[["FIELDPATH_test_2","=","3"],["FIELDPATH_test_1",">"
- * ,"2"]]}]}}
- *
- *
- */
-public class TcaThreshhold {
-
-    protected static final EELFLogger       logger      = EELFManager.getInstance().getLogger(TcaThreshhold.class);
-    protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
-
-    private String                  metric;
-    private String                  fieldPath;
-    private String                  operator;
-    private Integer                 threshhold;
-
-    /**
-     * Parse Tca Threshhold given json node
-     *
-     * @param node
-     */
-    public TcaThreshhold(JsonNode node) {
-
-        if (node.get(0) != null) {
-            metric = node.get(0).asText();
-        }
-        if (node.get(1) != null) {
-            operator = node.get(1).asText();
-        }
-        if (node.get(2) != null) {
-            threshhold = Integer.valueOf(node.get(2).asText());
-        }
-        if (node.get(3) != null) {
-            fieldPath = node.get(3).asText();
-        }
-    }
-
-    public String getMetric() {
-        return metric;
-    }
-
-    public void setMetric(String metric) {
-        this.metric = metric;
-    }
-
-    public String getFieldPath() {
-        return fieldPath;
-    }
-
-    public void setFieldPath(String fieldPath) {
-        this.fieldPath = fieldPath;
-    }
-
-    public String getOperator() {
-        return operator;
-    }
-
-    public void setOperator(String operator) {
-        this.operator = operator;
-    }
-
-    public Integer getThreshhold() {
-        return threshhold;
-    }
-
-    public void setThreshhold(Integer threshhold) {
-        this.threshhold = threshhold;
-    }
-
-}
diff --git a/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshold.java b/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshold.java
new file mode 100644
index 0000000..43bdb5c
--- /dev/null
+++ b/src/main/java/org/onap/clamp/clds/model/prop/TcaThreshold.java
@@ -0,0 +1,108 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.clamp.clds.model.prop;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.fasterxml.jackson.databind.JsonNode;
+
+/**
+ * Parse ONAP Tca Threshold json properties.
+ *
+ */
+public class TcaThreshold {
+
+    protected static final EELFLogger logger      = EELFManager.getInstance().getLogger(TcaThreshold.class);
+    protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
+
+    private String                    fieldPath;
+    private String                    operator;
+    private Integer                   threshold;
+    private String                    closedLoopEventStatus;
+    private String                    controlLoopSchema;
+
+    /**
+     * Parse Tca Threshhold given json node
+     *
+     * @param node
+     */
+    public TcaThreshold(JsonNode node) {
+
+        if (node.get(0) != null) {
+            fieldPath = node.get(0).asText();
+        }
+        if (node.get(1) != null) {
+            operator = node.get(1).asText();
+        }
+        if (node.get(2) != null) {
+            threshold = Integer.valueOf(node.get(2).asText());
+        }
+        if (node.get(3) != null) {
+            controlLoopSchema = node.get(3).asText();
+        }
+        if (node.get(4) != null) {
+            closedLoopEventStatus = node.get(4).asText();
+        }
+    }
+
+    public String getFieldPath() {
+        return fieldPath;
+    }
+
+    public void setFieldPath(String fieldPath) {
+        this.fieldPath = fieldPath;
+    }
+
+    public String getOperator() {
+        return operator;
+    }
+
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    public Integer getThreshold() {
+        return threshold;
+    }
+
+    public void setThreshold(Integer threshold) {
+        this.threshold = threshold;
+    }
+
+    public String getClosedLoopEventStatus() {
+        return closedLoopEventStatus;
+    }
+
+    public void setClosedLoopEventStatus(String closedLoopEventStatus) {
+        this.closedLoopEventStatus = closedLoopEventStatus;
+    }
+
+    public String getControlLoopSchema() {
+        return controlLoopSchema;
+    }
+
+    public void setControlLoopSchema(String controlLoopSchema) {
+        this.controlLoopSchema = controlLoopSchema;
+    }
+}
diff --git a/src/main/resources/clds/clds-reference.properties b/src/main/resources/clds/clds-reference.properties
index d404e4e..9a56295 100644
--- a/src/main/resources/clds/clds-reference.properties
+++ b/src/main/resources/clds/clds-reference.properties
@@ -38,17 +38,18 @@
 #

 # General Policy request properties

 #

-policy.ecomp.name=DCAE

+policy.onap.name=DCAE

 policy.pdp.group=default

 policy.ms.type=MicroService

 policy.ms.policyNamePrefix=Config_MS_

 policy.op.type=BRMS_Param

 policy.op.policyNamePrefix=Config_BRMS_Param_

-#

+

 # TCA MicroService Policy request build properties

 #

-tca.template={"service":"MThresholdCrossingConfiguration","location":"Edge","uuid":"TestUUID","policyName":"???","description":"from clds","configName":"MThresholdCrossingConfiguration","templateVersion":"5.2.0.1","priority":"4","version":"5.2.0.1","policyScope":"resource=F5,service=vSCP,type=configuration,closedLoopControlName=vSCP_F5_Firewall_d925ed73-8231-4d02-9545-db4e101f88f8","content":{"$class": "com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration","domain":"measurementsForVfScaling","policyScope":"pnf=eNodeB;type=configuration","policyName":"policy.dcae.configuration","policyVersion":"1.0.0","subscriberContentType": "application/json","subscriberConsumerId": "c13","subscriberConsumerGroup": "OpenDCAE-c13","subscriberTimeoutMS": "-1","subscriberMessageLimit": "-1","subscriberPollingInterval": "20000","publisherContentType": "application/json","publisherMaxBatchSize": "10","publisherMaxRecoveryQueueSize": "100000","publisherPollingInterval": "20000","publisherAlertWindowingTime": "86400","signatures":[]}}

-tca.signature.template={"nfNamingCode":"ENBE","target":"common_id","targetType":"eNodeB","useCaseName":"???","signatureName":"???","signatureUuid":"???","closedLoopControlName":"???","severity":"???","version":"1.0.2","maxInterval":1200,"minMessageViolations":4,"thresholds":[]}

+tca.template={"cdap-tca-hi-lo_policy": {"domain": "measurementsForVfScaling","metricsPerEventName": [{"eventName": "???","policyScope": "DCAE","policyName": "???","policyVersion": "v0.0.1","thresholds": []}]}}

+tca.thresholds.template={"closedLoopControlName": "???", "controlLoopSchema": "VM","version": "1.0.2","fieldPath": "?????", "thresholdValue": 0,"direction": "???","severity": "MAJOR", "closedLoopEventStatus": "???"}

+

 #

 #

 # Operational Policy request build properties

@@ -73,9 +74,9 @@
 op.eNodeB.period=10s

 #

 # Sdc service properties

-sdc.catalog.url=http://sdc.api.simpledemo.openecomp.org:8080/sdc/v1/catalog/
-sdc.hostUrl=http://sdc.api.simpledemo.openecomp.org:8080
-sdc.serviceUrl=http://sdc.api.simpledemo.openecomp.org:8080/sdc/v1/catalog/services
+sdc.catalog.url=http://sdcb-conexus.e73c65.rdm2.tci.att.com:8080/sdc/v1/catalog/

+sdc.hostUrl=http://sdcb-conexus.e73c65.rdm2.tci.att.com:8080

+sdc.serviceUrl=http://sdcb-conexus.e73c65.rdm2.tci.att.com:8080/sdc/v1/catalog/services

 sdc.serviceUsername=test

 sdc.servicePassword=123456

 sdc.artifactLabel=blueprintclampcockpit

@@ -84,6 +85,17 @@
 sdc.locationArtifactLabel=locationclampcockpit

 sdc.locationArtifactType=DCAE_INVENTORY_JSON

 sdc.InstanceID=X-ECOMP-InstanceID

+#sdc.catalog.url=http://135.205.226.136:8080/sdc/v1/catalog/

+#sdc.hostUrl=http://135.205.226.136:8080

+#sdc.serviceUrl=http://135.205.226.136:8080/sdc/v1/catalog/services

+#sdc.serviceUsername=clamp

+#sdc.servicePassword=clampdown

+##sdc.artifactLabel=blueprintclampcockpit

+#sdc.sdcX-InstanceID=CLAMP

+#sdc.artifactType=DCAE_INVENTORY_BLUEPRINT

+#sdc.locationArtifactLabel=locationclampcockpit

+#sdc.locationArtifactType=DCAE_INVENTORY_JSON

+#sdc.InstanceID=X-ECOMP-InstanceID

 #

 #

 #

@@ -94,7 +106,7 @@
 action.test.override=false

 # if action.insert.test.event is true, then insert event even if the action is set to test

 action.insert.test.event=false

-CLDS_SERVICE_CACHE_MAX_SECONDS=5

+CLDS_SERVICE_CACHE_MAX_SECONDS=300

 

 #DCAE Inventory Url Properties

 DCAE_INVENTORY_URL = https://dcae.api.simpledemo.openecomp.org:8080
diff --git a/src/test/java/org/onap/clamp/clds/it/TcaRequestFormatterIT.java b/src/test/java/org/onap/clamp/clds/it/TcaRequestFormatterIT.java
new file mode 100644
index 0000000..89ff579
--- /dev/null
+++ b/src/test/java/org/onap/clamp/clds/it/TcaRequestFormatterIT.java
@@ -0,0 +1,89 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * Licensed 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.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.clamp.clds.it;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.IOException;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.clamp.clds.AbstractIT;
+import org.onap.clamp.clds.client.req.TcaRequestFormatter;
+import org.onap.clamp.clds.model.CldsEvent;
+import org.onap.clamp.clds.model.prop.ModelProperties;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+import org.skyscreamer.jsonassert.JSONAssert;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * Test Onap TcaPolicyReq features
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@TestPropertySource(locations = "classpath:application-no-camunda.properties")
+public class TcaRequestFormatterIT extends AbstractIT {
+
+    String modelProp;
+    String modelBpmn;
+    String modelName;
+    String controlName;
+    String yamlInput;
+
+    /**
+     * Initialize Test.
+     */
+    @Before
+    public void setUp() throws IOException {
+        modelProp = ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmnProperties.json");
+        modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmn.json");
+        yamlInput = ResourceFileUtil.getResourceAsString("example/tca-policy-req/blueprint-input.yaml");
+        modelName = "example-model01";
+        controlName = "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf";
+    }
+
+    @Test
+    public void testCreatePolicyJson() throws IOException {
+        ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT, false, modelBpmn,
+                modelProp);
+        String result = TcaRequestFormatter.createPolicyJson(refProp, prop);
+        assertNotNull(result);
+        JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("example/tca-policy-req/tca-policy-expected.json"),
+                result, true);
+    }
+
+    @Test
+    public void testUpdatedBlueprintWithConfiguration() throws IOException {
+        ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT, false, modelBpmn,
+                modelProp);
+        String result = TcaRequestFormatter.updatedBlueprintWithConfiguration(refProp, prop, yamlInput);
+
+        assertNotNull(result);
+        assertEquals(ResourceFileUtil.getResourceAsString("example/tca-policy-req/blueprint-expected.yaml"), result);
+    }
+}
diff --git a/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java b/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java
index 60056d4..45f39a4 100644
--- a/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java
+++ b/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java
@@ -24,11 +24,10 @@
 package org.onap.clamp.clds.model.prop;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -46,10 +45,11 @@
     }
 
     @Test
-    public void testHolmes() throws IOException {
+    public void testTcaModelDecoding() throws IOException {
 
-        String modelBpmnProp = ResourceFileUtil.getResourceAsString("example/model-properties/modelBpmnProp.json");
-        String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/modelBpmn.json");
+        String modelBpmnProp = ResourceFileUtil
+                .getResourceAsString("example/model-properties/tca/modelBpmnProperties.json");
+        String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmn.json");
 
         ModelProperties prop = new ModelProperties("example-model-name", "example-control-name", null, true, modelBpmn,
                 modelBpmnProp);
@@ -66,11 +66,52 @@
         assertEquals(null, policy.getPolicyChains().get(0).getPolicyItems().get(0).getParentPolicyConditions());
 
         Tca tca = prop.getType(Tca.class);
+        assertNotNull(tca);
         assertTrue(tca.isFound());
-        assertEquals(1, tca.getTcaItems().size());
-        assertEquals(0, tca.getTcaItems().get(0).getTcaThreshholds().size());
+        assertEquals("vFirewallBroadcastPackets", tca.getTcaItem().getEventName());
+        assertEquals("policy1", tca.getTcaItem().getPolicyId());
+        assertEquals("f734f031-10aa-t8fb-330f-04dde2886325", tca.getTcaItem().getTcaUuId());
+        assertEquals(2, tca.getTcaItem().getTcaThresholds().size());
+
+        assertEquals("ABATED", tca.getTcaItem().getTcaThresholds().get(0).getClosedLoopEventStatus());
+        assertEquals("VM", tca.getTcaItem().getTcaThresholds().get(0).getControlLoopSchema());
+        assertEquals(
+                "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
+                tca.getTcaItem().getTcaThresholds().get(0).getFieldPath());
+        assertEquals("LESS_OR_EQUAL", tca.getTcaItem().getTcaThresholds().get(0).getOperator());
+        assertEquals(Integer.valueOf(123), tca.getTcaItem().getTcaThresholds().get(0).getThreshold());
+
+        assertEquals("ONSET", tca.getTcaItem().getTcaThresholds().get(1).getClosedLoopEventStatus());
+        assertEquals("VNF", tca.getTcaItem().getTcaThresholds().get(1).getControlLoopSchema());
+        assertEquals("$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta",
+                tca.getTcaItem().getTcaThresholds().get(1).getFieldPath());
+        assertEquals("GREATER_OR_EQUAL", tca.getTcaItem().getTcaThresholds().get(1).getOperator());
+        assertEquals(Integer.valueOf(123), tca.getTcaItem().getTcaThresholds().get(1).getThreshold());
+    }
+
+    @Test
+    public void testHolmesModelDecoding() throws IOException {
+
+        String modelBpmnProp = ResourceFileUtil
+                .getResourceAsString("example/model-properties/holmes/modelBpmnProperties.json");
+        String modelBpmn = ResourceFileUtil.getResourceAsString("example/model-properties/holmes/modelBpmn.json");
+
+        ModelProperties prop = new ModelProperties("example-model-name", "example-control-name", null, true, modelBpmn,
+                modelBpmnProp);
+
+        Policy policy = prop.getType(Policy.class);
+        assertTrue(policy.isFound());
+        assertEquals(1, policy.getPolicyChains().size());
+        assertEquals("0", policy.getPolicyChains().get(0).getPolicyId());
+        assertEquals(1, policy.getPolicyChains().get(0).getPolicyItems().size());
+        assertEquals("resourceid", policy.getPolicyChains().get(0).getPolicyItems().get(0).getTargetResourceId());
+        assertEquals(180, policy.getPolicyChains().get(0).getPolicyItems().get(0).getRetryTimeLimit());
+        assertEquals(3, policy.getPolicyChains().get(0).getPolicyItems().get(0).getMaxRetries());
+        assertEquals("", policy.getPolicyChains().get(0).getPolicyItems().get(0).getParentPolicy());
+        assertEquals(null, policy.getPolicyChains().get(0).getPolicyItems().get(0).getParentPolicyConditions());
 
         Holmes holmes = prop.getType(Holmes.class);
+        assertNotNull(holmes);
         assertTrue(holmes.isFound());
         assertEquals("policy1", holmes.getOperationalPolicy());
         assertEquals("blabla", holmes.getCorrelationLogic());
@@ -80,7 +121,7 @@
     public void testGetVf() throws IOException {
         CldsModel cldsModel = new CldsModel();
         cldsModel.setPropText(
-                ResourceFileUtil.getResourceAsString("example/model-properties/modelBpmnPropWithGlobal.json"));
+                ResourceFileUtil.getResourceAsString("example/model-properties/tca/modelBpmnProperties.json"));
         assertEquals("f5213e3a-9191-4362-93b5-b67f8d770e44", ModelProperties.getVf(cldsModel));
     }
 }
\ No newline at end of file
diff --git a/src/test/resources/clds/clds-reference.properties b/src/test/resources/clds/clds-reference.properties
index f2ec43b..405b3ed 100644
--- a/src/test/resources/clds/clds-reference.properties
+++ b/src/test/resources/clds/clds-reference.properties
@@ -28,9 +28,9 @@
 #

 # TCA MicroService Policy request build properties

 #

-tca.template={"service":"MThresholdCrossingConfiguration","location":"Edge","uuid":"TestUUID","policyName":"???","description":"from clds","configName":"MThresholdCrossingConfiguration","templateVersion":"5.2.0.1","priority":"4","version":"5.2.0.1","policyScope":"resource=F5,service=vSCP,type=configuration,closedLoopControlName=vSCP_F5_Firewall_d925ed73-8231-4d02-9545-db4e101f88f8","content":{"$class": "com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration","domain":"measurementsForVfScaling","policyScope":"pnf=eNodeB;type=configuration","policyName":"policy.dcae.configuration","policyVersion":"1.0.0","subscriberContentType": "application/json","subscriberConsumerId": "c13","subscriberConsumerGroup": "OpenDCAE-c13","subscriberTimeoutMS": "-1","subscriberMessageLimit": "-1","subscriberPollingInterval": "20000","publisherContentType": "application/json","publisherMaxBatchSize": "10","publisherMaxRecoveryQueueSize": "100000","publisherPollingInterval": "20000","publisherAlertWindowingTime": "86400","signatures":[]}}

-tca.signature.template={"nfNamingCode":"ENBE","target":"common_id","targetType":"eNodeB","useCaseName":"???","signatureName":"???","signatureUuid":"???","closedLoopControlName":"???","severity":"???","version":"1.0.2","maxInterval":1200,"minMessageViolations":4,"thresholds":[]}

-

+tca.template={"cdap-tca-hi-lo_policy": {"domain": "measurementsForVfScaling","metricsPerEventName": [{"eventName": "???","policyScope": "DCAE","policyName": "???","policyVersion": "v0.0.1","thresholds": []}]}}

+tca.thresholds.template={"closedLoopControlName": "???", "controlLoopSchema": "VM","version": "1.0.2","fieldPath": "?????", "thresholdValue": 0,"direction": "???","severity": "MAJOR", "closedLoopEventStatus": "???"}

+#

 #

 # DCAE request build properties

 #

@@ -45,7 +45,7 @@
 #

 # General Policy request properties

 #

-policy.ecomp.name=DCAE

+policy.onap.name=DCAE

 policy.pdp.group=default

 policy.ms.type=MicroService

 policy.ms.policyNamePrefix=Config_MS_

diff --git a/src/test/resources/example/model-properties/holmes/modelBpmn.json b/src/test/resources/example/model-properties/holmes/modelBpmn.json
new file mode 100644
index 0000000..db8e54d
--- /dev/null
+++ b/src/test/resources/example/model-properties/holmes/modelBpmn.json
@@ -0,0 +1,20 @@
+{
+  "vesCollector": [
+    {
+      "id": "VesCollector_0orydnh",
+      "from": "StartEvent_1"
+    }
+  ],
+   "holmes": [
+    {
+      "id": "Holmes_0i4n2mm",
+      "from": "VesCollector_0orydnh"
+    }
+  ],
+  "policy": [
+    {
+      "id": "Policy_0honxgv",
+      "from": "Holmes_0i4n2mm"
+    }
+  ]
+}
diff --git a/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json b/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json
new file mode 100644
index 0000000..14b3a8c
--- /dev/null
+++ b/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json
@@ -0,0 +1,116 @@
+{
+  "Holmes_0i4n2mm": [
+    {
+      "name": "correlationalLogic",
+      "value": "blabla"
+    },
+    {
+      "name": "operationalPolicy",
+      "value": "policy1"
+    }
+  ],
+  "Policy_0honxgv": {
+    "policy1": [
+      {
+        "name": "pname",
+        "value": "policy1"
+      },
+      {
+        "name": "pid",
+        "value": "0"
+      },
+      {
+        "name": "timeout",
+        "value": "345"
+      },
+      {
+        "policyConfigurations": [
+          [
+            {
+              "name": "maxRetries",
+              "value": [
+                "3"
+              ]
+            },
+            {
+              "name": "retryTimeLimit",
+              "value": [
+                "180"
+              ]
+            },
+            {
+              "name": "_id",
+              "value": [
+                "dGLuNqg"
+              ]
+            },
+            {
+              "name": "parentPolicy",
+              "value": [
+                ""
+              ]
+            },
+            {
+              "name": "targetResourceId",
+              "value": [
+                "resourceid"
+              ]
+            }
+          ]
+        ]
+      }
+    ]
+  },
+  "global": [
+    {
+      "name": "actionSet",
+      "value": [
+        "vnfRecipe"
+      ]
+    },
+    {
+      "name": "location",
+      "value": [
+        "SNDGCA64",
+        "ALPRGAED"
+      ]
+    },
+    {
+      "name": "vf",
+      "value": [
+        "f5213e3a-9191-4362-93b5-b67f8d770e44"
+      ]
+    },
+    {
+      "name": "location",
+      "value": [
+        "SNDGCA64",
+        "ALPRGAED",
+        "LSLEILAA",
+        "MDTWNJC1"
+      ]
+    }
+  ],
+  "shared": {
+    "byService": {
+      "": {
+        "vf": {
+          "": ""
+        },
+        "location": {
+          "": ""
+        },
+        "alarmCondition": {
+          "": ""
+        }
+      }
+    },
+    "byVf": {
+      "": {
+        "vfc": {
+          "": ""
+        }
+      }
+    }
+  }
+}
diff --git a/src/test/resources/example/model-properties/tca/modelBpmn.json b/src/test/resources/example/model-properties/tca/modelBpmn.json
new file mode 100644
index 0000000..7358f9a
--- /dev/null
+++ b/src/test/resources/example/model-properties/tca/modelBpmn.json
@@ -0,0 +1,20 @@
+{
+  "vesCollector": [
+    {
+      "id": "VesCollector_0orydnh",
+      "from": "StartEvent_1"
+    }
+  ],
+   "tca": [
+    {
+      "id": "TCA_1jy9to4",
+      "from": "VesCollector_0orydnh"
+    }
+  ],
+  "policy": [
+    {
+      "id": "Policy_0honxgv",
+      "from": "TCA_1jy9to4"
+    }
+  ]
+}
diff --git a/src/test/resources/example/model-properties/tca/modelBpmnProperties.json b/src/test/resources/example/model-properties/tca/modelBpmnProperties.json
new file mode 100644
index 0000000..0bfa78c
--- /dev/null
+++ b/src/test/resources/example/model-properties/tca/modelBpmnProperties.json
@@ -0,0 +1,150 @@
+{
+  "TCA_1jy9to4": {
+    "group1": [
+      {
+        "name": "tname",
+        "value": "group1"
+      },
+      {
+        "name": "tuuid",
+        "value": "f734f031-10aa-t8fb-330f-04dde2886325"
+      },
+      {
+        "name": "tcaPolId",
+        "value": "policy1"
+      },
+      {
+        "name": "eventName",
+        "value": "vFirewallBroadcastPackets"
+      },
+      {
+        "serviceConfigurations": [
+          [
+            "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
+            "LESS_OR_EQUAL",
+            "123",
+            "VM",
+            "ABATED"
+          ],
+          [
+            "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta",
+            "GREATER_OR_EQUAL",
+            "123",
+            "VNF",
+            "ONSET"
+          ]
+        ]
+      }
+    ]
+  },
+  "Policy_0honxgv": {
+    "policy1": [
+      {
+        "name": "pname",
+        "value": "policy1"
+      },
+      {
+        "name": "pid",
+        "value": "0"
+      },
+      {
+        "name": "timeout",
+        "value": "345"
+      },
+      {
+        "policyConfigurations": [
+          [
+            {
+              "name": "maxRetries",
+              "value": [
+                "3"
+              ]
+            },
+            {
+              "name": "retryTimeLimit",
+              "value": [
+                "180"
+              ]
+            },
+            {
+              "name": "_id",
+              "value": [
+                "dGLuNqg"
+              ]
+            },
+            {
+              "name": "parentPolicy",
+              "value": [
+                ""
+              ]
+            },
+            {
+              "name": "targetResourceId",
+              "value": [
+                "resourceid"
+              ]
+            }
+          ]
+        ]
+      }
+    ]
+  },
+  "global": [
+    {
+      "name": "actionSet",
+      "value": [
+        "vnfRecipe"
+      ]
+    },
+    {
+      "name": "service",
+      "value": [
+        "serviceUUID"
+      ]
+    },
+    {
+      "name": "location",
+      "value": [
+        "SNDGCA64",
+        "ALPRGAED"
+      ]
+    },
+    {
+      "name": "vf",
+      "value": [
+        "f5213e3a-9191-4362-93b5-b67f8d770e44"
+      ]
+    },
+    {
+      "name": "location",
+      "value": [
+        "SNDGCA64",
+        "ALPRGAED",
+        "LSLEILAA",
+        "MDTWNJC1"
+      ]
+    }
+  ],
+  "shared": {
+    "byService": {
+      "": {
+        "vf": {
+          "": ""
+        },
+        "location": {
+          "": ""
+        },
+        "alarmCondition": {
+          "": ""
+        }
+      }
+    },
+    "byVf": {
+      "": {
+        "vfc": {
+          "": ""
+        }
+      }
+    }
+  }
+}
diff --git a/src/test/resources/example/templatePropForTca.json b/src/test/resources/example/templatePropForTca.json
deleted file mode 100644
index 9f1ce1d..0000000
--- a/src/test/resources/example/templatePropForTca.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "global": [
-    {
-      "name": "service",
-      "value": [
-        "tosca_definitions_version: cloudify_dsl_1_2\r\n\r\nimports:\r\n- http://www.getcloudify.org/spec/cloudify/3.3.1/types.yaml\r\n- http://135.207.127.211/1607_prod/type_files/cdap_app.yaml\r\n\r\nnode_templates:\r\n  MTCA:\r\n    type: dcae.nodes.cdap_app\r\n    properties:\r\n      service_name: \"cdap-mtca-central\"\r\n      deployment_JSON: |-\r\n          {\r\n            \"clusterService\": {\"$ref\": \"/services/vm-cdap-cluster-central/instances/rdm2c\"},\r\n            \"namespace\": \"MTCA\",\r\n            \"appNames\": [ \"cdap-mtca\" ],\r\n            \"flowNames\": [ \"cdap-mtca.TCAVESCollectorFlow\" ],\r\n            \"workerNames\": [\"cdap-mtca.TCADMaaPMRSubscriberWorker\", \"cdap-mtca.TCADMaaPMRPublisherWorker\"],\r\n            \"serviceNames\" : [],\r\n            \"apps\": {\r\n              \"cdap-mtca\": {\r\n                \"jarFile\": \"/opt/app/cdap-apps/dcae-analytics-mtca-1.0.0.jar\",\r\n                \"artifactName\": \"dcae-analytics-mtca\",\r\n                \"version\": \"1.0.0\",\r\n                \"appConfigFileContent\": \"{config:{ \\\"appName\\\":\\\"cdap-mtca\\\", \\\"appDescription\\\":\\\"DCAE Analytics Threshold Crossing Alert Application\\\", \\\"tcaSubscriberOutputStreamName\\\":\\\"TCASubscriberOutputStream\\\", \\\"thresholdCalculatorFlowletInstances\\\":2, \\\"tcaVESMessageStatusTableName\\\":\\\"TCAVESMessageStatusTable\\\", \\\"tcaVESMessageStatusTableTTLSeconds\\\":864000, \\\"tcaVESAlertsTableName\\\":\\\"TCAVESAlertsTable\\\", \\\"tcaVESAlertsTableTTLSeconds\\\":1728000 }}\"\r\n              }\r\n            },\r\n          \r\n            \"configuration\": {\r\n                \"$class\": \"com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration\",\r\n                \"subscriberContentType\": \"\",\r\n                \"subscriberConsumerId\": \"c12\",\r\n                \"subscriberConsumerGroup\": \"OpenDCAE-c12\",\r\n                \"subscriberTimeoutMS\": \"-1\",\r\n                \"subscriberMessageLimit\": \"-1\",\r\n                \"subscriberPollingInterval\": \"20000\",\r\n                \"publisherContentType\": \"application/json\",\r\n                \"publisherMaxBatchSize\": \"10\",\r\n                \"publisherMaxRecoveryQueueSize\": \"100000\",\r\n                \"publisherPollingInterval\": \"20000\",\r\n                \"publisherAlertWindowingTime\": \"86400\",\r\n                \"policyName\": \"policy.dcae.configuration\",\r\n                \"policyScope\": \"pnf=eNodeB;type=configuration\",\r\n                \"policyVersion\": \"1.0.0\",\r\n                \"domain\" : \"measurementsForVfScaling\",\r\n                \r\n                \"signatures\" : {\r\n             \t }\r\n\r\n             }\r\n          }\r\n"
-      ]
-    }
-  ]
-}
\ No newline at end of file
diff --git a/src/test/resources/expected/tca.json b/src/test/resources/expected/tca.json
deleted file mode 100644
index 2fd16bd..0000000
--- a/src/test/resources/expected/tca.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-    "service": "MThresholdCrossingConfiguration",
-    "location": "Edge",
-    "uuid": "TestUUID",
-    "policyName": "example_model06.ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_TCA_",
-    "description": "from clds",
-    "configName": "MThresholdCrossingConfiguration",
-    "templateVersion": "5.2.0.1",
-    "priority": "4",
-    "version": "5.2.0.1",
-    "policyScope": "resource=F5,service=vSCP,type=configuration,closedLoopControlName=vSCP_F5_Firewall_d925ed73-8231-4d02-9545-db4e101f88f8",
-    "content": 
-    {
-        "$class": "com.att.ecomp.dcae.clamp.common.MThresholdCrossingConfiguration",
-        "domain": "measurementsForVfScaling",
-        "policyScope": "pnf=eNodeB;type=configuration",
-        "policyName": "policy.dcae.configuration",
-        "policyVersion": "1.0.0",
-        "subscriberContentType": "application/json",
-        "subscriberConsumerId": "c13",
-        "subscriberConsumerGroup": "OpenDCAE-c13",
-        "subscriberTimeoutMS": "-1",
-        "subscriberMessageLimit": "-1",
-        "subscriberPollingInterval": "20000",
-        "publisherContentType": "application/json",
-        "publisherMaxBatchSize": "10",
-        "publisherMaxRecoveryQueueSize": "100000",
-        "publisherPollingInterval": "20000",
-        "publisherAlertWindowingTime": "86400",
-        "signatures": 
-        [
-            {
-                "nfNamingCode": "ENBE",
-                "target": "common_id",
-                "targetType": "eNodeB",
-                "useCaseName": "Narra",
-                "signatureName": "Narra_886be8da-14fe-tca1-d04b-d13b55d58df9",
-                "signatureUuid": "886be8da-14fe-tca1-d04b-d13b55d58df9",
-                "closedLoopControlName": "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_1",
-                "severity": "Warning",
-                "version": "1.0.2",
-                "maxInterval": 2,
-                "minMessageViolations": 3,
-                "thresholds": 
-                [
-                    {
-                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRRCCONNESTABFAILCELLLATENCY')].Value",
-                        "thresholdName": "PMRRCCONNESTABFAILCELLLATENCY",
-                        "thresholdValue": 4,
-                        "direction": "LESS"
-                    },
-
-                    {
-                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRAATTCBRA')].Value",
-                        "thresholdName": "PMRAATTCBRA",
-                        "thresholdValue": 30,
-                        "direction": "GREATER"
-                    }
-                ]
-            },
-
-            {
-                "nfNamingCode": "ENBE",
-                "target": "common_id",
-                "targetType": "eNodeB",
-                "useCaseName": "Srini",
-                "signatureName": "Srini_8b5ba88d-f4b4-tf0e-50b1-78a5a7dd412d",
-                "signatureUuid": "8b5ba88d-f4b4-tf0e-50b1-78a5a7dd412d",
-                "closedLoopControlName": "ClosedLoop_FRWL_SIG_fad4dcae_e498_11e6_852e_0050568c4ccf_2",
-                "severity": "Critical",
-                "version": "1.0.2",
-                "maxInterval": 10,
-                "minMessageViolations": 5,
-                "thresholds": 
-                [
-                    {
-                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRRCCONNESTABFAILCELLLATENCY')].Value",
-                        "thresholdName": "PMRRCCONNESTABFAILCELLLATENCY",
-                        "thresholdValue": 3,
-                        "direction": "EQUAL"
-                    },
-
-                    {
-                        "fieldPath": "$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[?(@.Name == 'PMRAATTCBRA')].Value",
-                        "thresholdName": "PMRAATTCBRA",
-                        "thresholdValue": 30,
-                        "direction": "GREATER"
-                    }
-                ]
-            }
-        ]
-    }
-}
\ No newline at end of file