CLAMP should not display all CDS workflow properties

CLAMP should not display all CDS workflow properties

Issue-ID: CLAMP-856
Signed-off-by: root1 <vidyashree.rama@huawei.com>
Change-Id: I98fc46c9c9ba574a3606740921d74743cb6f38ea
diff --git a/src/main/java/org/onap/clamp/clds/client/CdsServices.java b/src/main/java/org/onap/clamp/clds/client/CdsServices.java
index fa15e27..fd3b353 100644
--- a/src/main/java/org/onap/clamp/clds/client/CdsServices.java
+++ b/src/main/java/org/onap/clamp/clds/client/CdsServices.java
@@ -22,6 +22,8 @@
 

 package org.onap.clamp.clds.client;

 

+import static java.lang.Boolean.parseBoolean;

+

 import com.att.eelf.configuration.EELFLogger;

 import com.att.eelf.configuration.EELFManager;

 import com.google.gson.JsonElement;

@@ -52,6 +54,10 @@
 

     protected static final EELFLogger logger = EELFManager.getInstance().getLogger(CdsServices.class);

 

+    private static final String TYPE = "type";

+    private static final String PROPERTIES = "properties";

+    private static final String LIST = "list";

+

     /**

      * Constructor.

      */

@@ -129,55 +135,80 @@
         JsonObject dataTypes = root.getAsJsonObject("dataTypes");

 

         JsonObject workFlowProperties = new JsonObject();

-        workFlowProperties.add("inputs", getInputProperties(inputs, dataTypes));

+        workFlowProperties.add("inputs", getInputProperties(inputs, dataTypes, new JsonObject()));

         return workFlowProperties;

     }

 

-    private JsonObject getInputProperties(JsonObject inputs, JsonObject dataTypes) {

-        JsonObject inputObject = new JsonObject();

+    private JsonObject getInputProperties(JsonObject inputs, JsonObject dataTypes,

+                                          JsonObject inputObject) {

+        if (inputs == null) {

+            return inputObject;

+        }

+

         for (Map.Entry<String, JsonElement> entry : inputs.entrySet()) {

             String key = entry.getKey();

             JsonObject inputProperty = inputs.getAsJsonObject(key);

-            String type = inputProperty.get("type").getAsString();

+            String type = inputProperty.get(TYPE).getAsString();

             if (isComplexType(type, dataTypes)) {

                 inputObject.add(key, handleComplexType(type, dataTypes));

-            } else if (type.equalsIgnoreCase("list")) {

-                inputObject.add(key, handleListType(key, inputProperty,

-                                                    dataTypes));

-            } else {

+            } else if (LIST.equalsIgnoreCase(type)) {

+                handleListType(key, inputProperty, dataTypes, inputObject);

+            } else if (isInputParam(inputProperty)) {

                 inputObject.add(key, entry.getValue());

             }

         }

         return inputObject;

     }

 

-    private JsonObject handleListType(String propertyName,

+    private void handleListType(String propertyName,

                                       JsonObject inputProperty,

-                                      JsonObject dataTypes) {

-        if (inputProperty.get("entry_schema") != null) {

-            String type = inputProperty.get("entry_schema").getAsJsonObject().get(

-                            "type").getAsString();

-            if (dataTypes.get(type) != null) {

-                JsonObject jsonObject = new JsonObject();

-                jsonObject.addProperty("type", "list");

-                jsonObject.add("properties", handleComplexType(type, dataTypes));

-                return jsonObject;

-            } else {

-                return inputProperty;

-            }

+                                      JsonObject dataTypes,

+                                      JsonObject inputObject) {

+        if (inputProperty.get("entry_schema") == null) {

+            throw new CdsParametersException("Entry schema is null for " + propertyName);

         }

-        throw new CdsParametersException("Entry schema is null for " + propertyName);

+

+        String type = inputProperty.get("entry_schema").getAsJsonObject().get(

+                TYPE).getAsString();

+        if (dataTypes.get(type) != null) {

+            JsonObject jsonObject = new JsonObject();

+            jsonObject.addProperty(TYPE, LIST);

+            jsonObject.add(PROPERTIES, getPropertiesObject(type, dataTypes));

+            inputObject.add(propertyName, jsonObject);

+        } else if (isInputParam(inputProperty)) {

+            inputObject.add(propertyName, inputProperty);

+        }

     }

 

     private JsonObject handleComplexType(String key, JsonObject dataTypes) {

-        JsonObject properties = dataTypes.get(key).getAsJsonObject().get("properties").getAsJsonObject();

-        return getInputProperties(properties, dataTypes);

+        JsonObject jsonObject = new JsonObject();

+        jsonObject.addProperty(TYPE, "object");

+        jsonObject.add(PROPERTIES, getPropertiesObject(key, dataTypes));

+        return jsonObject;

+    }

+

+    private JsonObject getPropertiesObject(String key, JsonObject dataTypes) {

+        JsonObject properties = dataTypes.get(key).getAsJsonObject().get(PROPERTIES).getAsJsonObject();

+        JsonObject object = new JsonObject();

+        getInputProperties(properties, dataTypes, object);

+        return object;

     }

 

     private boolean isComplexType(String type, JsonObject dataTypes) {

+        if (dataTypes == null) {

+            return false;

+        }

         return dataTypes.get(type) != null;

     }

 

+    private boolean isInputParam(JsonObject inputProperty) {

+        JsonElement inputParam = inputProperty.get("input-param");

+        if (inputParam == null) {

+            return false;

+        }

+        return parseBoolean(inputParam.getAsString());

+    }

+

     /**

      * Creates payload to query CDS to get workflow input properties.

      *

diff --git a/src/main/java/org/onap/clamp/clds/tosca/update/execution/cds/ToscaMetadataCdsProcess.java b/src/main/java/org/onap/clamp/clds/tosca/update/execution/cds/ToscaMetadataCdsProcess.java
index 94a477f..39fa25a 100644
--- a/src/main/java/org/onap/clamp/clds/tosca/update/execution/cds/ToscaMetadataCdsProcess.java
+++ b/src/main/java/org/onap/clamp/clds/tosca/update/execution/cds/ToscaMetadataCdsProcess.java
@@ -24,6 +24,7 @@
 package org.onap.clamp.clds.tosca.update.execution.cds;
 
 import static org.onap.clamp.clds.tosca.ToscaSchemaConstants.TYPE;
+import static org.onap.clamp.clds.tosca.ToscaSchemaConstants.TYPE_LIST;
 
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
@@ -108,7 +109,8 @@
                     obj.addProperty("title", workflowsEntry.getKey());
                     obj.add("properties",
                             createInputPropertiesForPayload(workflowsEntry.getValue().getAsJsonObject(),
-                                                            controllerProperties));
+                                                            controllerProperties,
+                                                            workflowsEntry.getKey()));
                     schemaAnyOf.add(obj);
                 }
             }
@@ -150,10 +152,12 @@
      * @param workFlow cds work flows to update payload
      * @param controllerProperties cds properties to get blueprint name and
      *                            version
+     * @param workFlowName work flow name
      * @return returns the properties of payload
      */
     public static JsonObject createInputPropertiesForPayload(JsonObject workFlow,
-                                                             JsonObject controllerProperties) {
+                                                             JsonObject controllerProperties,
+                                                             String workFlowName) {
         String artifactName = controllerProperties.get("sdnc_model_name").getAsString();
         String artifactVersion = controllerProperties.get("sdnc_model_version").getAsString();
         JsonObject inputs = workFlow.getAsJsonObject("inputs");
@@ -164,32 +168,53 @@
                 "artifact version", artifactVersion, true));
         jsonObject.add("mode", createAnyOfJsonProperty(
                 "mode", "async", false));
-        jsonObject.add("data", createDataProperty(inputs));
+        jsonObject.add("data", createDataProperty(inputs, workFlowName));
         return jsonObject;
     }
 
-    private static JsonObject createDataProperty(JsonObject inputs) {
+    private static JsonObject createDataProperty(JsonObject inputs, String workFlowName) {
         JsonObject data = new JsonObject();
         data.addProperty("title", "data");
         data.addProperty("type", "string");
         data.addProperty("format", "textarea");
         JsonObject defaultValue = new JsonObject();
-        addDefaultValueForData(inputs, defaultValue);
+        addDefaultValueForData(inputs, defaultValue, workFlowName);
         data.addProperty("default", defaultValue.toString());
         return data;
     }
 
     private static void addDefaultValueForData(JsonObject inputs,
-                                               JsonObject defaultValue) {
+                                               JsonObject defaultValue,
+                                               String workFlowName) {
         Set<Map.Entry<String, JsonElement>> entrySet = inputs.entrySet();
         for (Map.Entry<String, JsonElement> entry : entrySet) {
             String key = entry.getKey();
             JsonObject inputProperty = inputs.getAsJsonObject(key);
-            if (inputProperty.get(TYPE) == null) {
-                addDefaultValueForData(entry.getValue().getAsJsonObject(), defaultValue);
+            if (key.equalsIgnoreCase(workFlowName + "-properties")) {
+                addDefaultValueForData(entry.getValue().getAsJsonObject().get("properties")
+                        .getAsJsonObject(), defaultValue, workFlowName);
+            } else if ("object".equalsIgnoreCase(inputProperty.get(TYPE).getAsString())) {
+                JsonObject object = new JsonObject();
+                addDefaultValueForData(entry.getValue().getAsJsonObject().get("properties")
+                        .getAsJsonObject(), object, workFlowName);
+                defaultValue.add(entry.getKey(), object);
+            } else if (TYPE_LIST.equalsIgnoreCase(inputProperty.get(TYPE).getAsString())) {
+                defaultValue.add(entry.getKey(), handleListType(entry.getValue().getAsJsonObject(), workFlowName));
             } else {
                 defaultValue.addProperty(entry.getKey(), "");
             }
         }
     }
+
+    private static JsonArray handleListType(JsonObject inputs,
+                                            String workFlowName) {
+
+        JsonObject object = new JsonObject();
+        if (inputs.get("properties") != null) {
+            addDefaultValueForData(inputs.get("properties").getAsJsonObject(), object, workFlowName);
+        }
+        JsonArray arr = new JsonArray();
+        arr.add(object);
+        return arr;
+    }
 }
diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java
index ee40306..c0e1c01 100644
--- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java
+++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java
@@ -53,6 +53,8 @@
     public static final String STRING = "string";
     public static final String TYPE = "type";
     public static final String TYPE_LIST = "list";
+    public static final String TYPE_OBJECT = "object";
+    public static final String TYPE_ARRAY = "array";
 
     private OperationalPolicyRepresentationBuilder() {
     	throw new IllegalStateException("This is Utility class, not supposed to be initiated.");
@@ -240,8 +242,8 @@
         JsonObject payload = new JsonObject();
         payload.addProperty(TITLE, "Payload");
         payload.addProperty(TYPE, "object");
-        payload.add(PROPERTIES, createInputPropertiesForPayload(workFlow,
-                                                                  controllerProperties));
+        payload.add(PROPERTIES, createInputPropertiesForPayload(workFlow, controllerProperties,
+                                                                workFlowName));
         JsonObject properties = new JsonObject();
         properties.add(RECIPE, createRecipeForCdsWorkflow(workFlowName));
         properties.add("payload", payload);
@@ -265,10 +267,12 @@
      * @param workFlow             cds work flows to update payload
      * @param controllerProperties cds properties to get blueprint name and
      *                             version
+     * @param workFlowName         work flow name
      * @return returns the properties of payload
      */
     public static JsonObject createInputPropertiesForPayload(JsonObject workFlow,
-                                                             JsonObject controllerProperties) {
+                                                             JsonObject controllerProperties,
+                                                             String workFlowName) {
         String artifactName = controllerProperties.get("sdnc_model_name").getAsString();
         String artifactVersion = controllerProperties.get("sdnc_model_version").getAsString();
         JsonObject inputs = workFlow.getAsJsonObject("inputs");
@@ -279,33 +283,33 @@
                 "artifact version", STRING, artifactVersion, "True", null));
         jsonObject.add("mode", createCdsInputProperty(
                 "mode", STRING, "async" ,null));
-        jsonObject.add("data", createDataProperty(inputs));
+        jsonObject.add("data", createDataProperty(inputs, workFlowName));
         return jsonObject;
     }
 
-    private static JsonObject createDataProperty(JsonObject inputs) {
+    private static JsonObject createDataProperty(JsonObject inputs, String workflowName) {
         JsonObject data = new JsonObject();
         data.addProperty(TITLE, "data");
         JsonObject dataObj = new JsonObject();
-        addDataFields(inputs, dataObj);
+        addDataFields(inputs, dataObj, workflowName);
         data.add(PROPERTIES, dataObj);
         return data;
     }
 
     private static void addDataFields(JsonObject inputs,
-                                      JsonObject dataObj) {
+                                      JsonObject dataObj,
+                                      String workFlowName) {
         Set<Map.Entry<String, JsonElement>> entrySet = inputs.entrySet();
         for (Map.Entry<String, JsonElement> entry : entrySet) {
             String key = entry.getKey();
             JsonObject inputProperty = inputs.getAsJsonObject(key);
-            if (inputProperty.get(TYPE) == null) {
-                addDataFields(entry.getValue().getAsJsonObject(), dataObj);
+            if (key.equalsIgnoreCase(workFlowName + "-properties")) {
+                addDataFields(entry.getValue().getAsJsonObject().get("properties").getAsJsonObject(),
+                        dataObj, workFlowName);
             } else {
                 dataObj.add(entry.getKey(),
-                            createCdsInputProperty(key,
-                                                   inputProperty.get(TYPE).getAsString(),
-                                                   null,
-                                                   entry.getValue().getAsJsonObject()));
+                        createCdsInputProperty(key, inputProperty.get(TYPE).getAsString(),null,
+                                entry.getValue().getAsJsonObject()));
             }
         }
     }
@@ -318,15 +322,15 @@
         property.addProperty(TITLE, title);
 
         if (TYPE_LIST.equalsIgnoreCase(type)) {
-            property.addProperty(TYPE, "array");
+            property.addProperty(TYPE, TYPE_ARRAY);
             if (cdsProperty != null && cdsProperty.get(PROPERTIES) != null) {
-                JsonObject dataObject = new JsonObject();
-                addDataFields(cdsProperty.get(PROPERTIES).getAsJsonObject(),
-                              dataObject);
                 JsonObject listProperties = new JsonObject();
-                listProperties.add(PROPERTIES, dataObject);
+                listProperties.add(PROPERTIES, getProperties(cdsProperty.get(PROPERTIES).getAsJsonObject()));
                 property.add(ITEMS, listProperties);
             }
+        } else if (TYPE_OBJECT.equalsIgnoreCase(type)) {
+            property.addProperty(TYPE, TYPE_OBJECT);
+            property.add(PROPERTIES, getProperties(cdsProperty.get(PROPERTIES).getAsJsonObject()));
         } else {
             property.addProperty(TYPE, type);
         }
@@ -336,4 +340,13 @@
         }
         return property;
     }
+
+    private static JsonObject getProperties(JsonObject inputProperties) {
+        if (inputProperties == null) {
+            return null;
+        }
+        JsonObject dataObject = new JsonObject();
+        addDataFields(inputProperties, dataObject, null);
+        return dataObject;
+    }
 }
diff --git a/src/test/java/org/onap/clamp/clds/tosca/update/ToscaConverterWithDictionarySupportItCase.java b/src/test/java/org/onap/clamp/clds/tosca/update/ToscaConverterWithDictionarySupportItCase.java
index 7f0e576..f777421 100644
--- a/src/test/java/org/onap/clamp/clds/tosca/update/ToscaConverterWithDictionarySupportItCase.java
+++ b/src/test/java/org/onap/clamp/clds/tosca/update/ToscaConverterWithDictionarySupportItCase.java
@@ -128,7 +128,7 @@
     @Transactional
     public final void testMetadataClampPossibleValueWithExecutor() throws IOException, UnknownComponentException {
         Service service = new Service(ResourceFileUtil.getResourceAsString("tosca/service-details.json"),
-                ResourceFileUtil.getResourceAsString("tosca/resource-details.json"));
+                ResourceFileUtil.getResourceAsString("tosca/resource-details-cds.json"));
         JsonTemplateManager jsonTemplateManager =
                 new JsonTemplateManager(
                         ResourceFileUtil.getResourceAsString("http-cache/example/policy/api/v1/policytypes/onap"
diff --git a/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java b/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java
index b90a286..4f728b4 100644
--- a/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java
+++ b/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java
@@ -37,8 +37,8 @@
 
     @Test
     public void testOperationalPolicyPayloadConstruction() throws IOException {
-        JsonObject jsonModel = new GsonBuilder().create()
-                .fromJson(ResourceFileUtil.getResourceAsString("tosca/model-properties.json"), JsonObject.class);
+        JsonObject jsonModel = new GsonBuilder().create().fromJson(ResourceFileUtil
+                .getResourceAsString("tosca/model-properties-operational-policy.json"), JsonObject.class);
         Service service = new Service(jsonModel.get("serviceDetails").getAsJsonObject(),
                 jsonModel.get("resourceDetails").getAsJsonObject(), "1.0");
 
diff --git a/src/test/resources/example/cds-response/vFW-CDS-modify-config-wf-expected-result.json b/src/test/resources/example/cds-response/vFW-CDS-modify-config-wf-expected-result.json
index 7e78bb0..2b64931 100644
--- a/src/test/resources/example/cds-response/vFW-CDS-modify-config-wf-expected-result.json
+++ b/src/test/resources/example/cds-response/vFW-CDS-modify-config-wf-expected-result.json
@@ -1,57 +1,29 @@
 {
   "inputs": {
-    "resolution-key": {
-      "required": true,
-      "type": "string"
-    },
     "modify-config-properties": {
-      "vpg_onap_private_ip_0": {
-        "description": "",
-        "required": false,
-        "type": "string",
-        "status": "",
-        "constraints": [
-          {}
-        ],
-        "entry_schema": {
-          "type": ""
+      "type": "object",
+      "properties": {
+        "service-instance-id": {
+          "type": "string",
+          "input-param": true
+        },
+        "update-active-streams": {
+          "description": "",
+          "required": false,
+          "type": "string",
+          "input-param": true,
+          "status": "",
+          "constraints": [
+            {}
+          ],
+          "entry_schema": {
+            "type": "dt-data"
+          }
+        },
+        "generic-vnf.vnf-id": {
+          "type": "string",
+          "input-param": true
         }
-      },
-      "service-instance.service-instance-id": {
-        "type": "string"
-      },
-      "vnf-id": {
-        "type": "string"
-      },
-      "data": {
-        "description": "",
-        "required": false,
-        "type": "string",
-        "status": "",
-        "constraints": [
-          {}
-        ],
-        "entry_schema": {
-          "type": "dt-data"
-        }
-      },
-      "service-instance-id": {
-        "type": "string"
-      },
-      "update-active-streams": {
-        "description": "",
-        "required": false,
-        "type": "string",
-        "status": "",
-        "constraints": [
-          {}
-        ],
-        "entry_schema": {
-          "type": "dt-data"
-        }
-      },
-      "generic-vnf.vnf-id": {
-        "type": "string"
       }
     }
   }
diff --git a/src/test/resources/example/cds-response/vFW-CDS-modify-config-workflow.json b/src/test/resources/example/cds-response/vFW-CDS-modify-config-workflow.json
index e46da67..115d79b 100644
--- a/src/test/resources/example/cds-response/vFW-CDS-modify-config-workflow.json
+++ b/src/test/resources/example/cds-response/vFW-CDS-modify-config-workflow.json
@@ -51,12 +51,14 @@
           }
         },
         "service-instance-id": {
-          "type": "string"
+          "type": "string",
+          "input-param": true
         },
         "update-active-streams": {
           "description": "",
           "required": false,
           "type": "string",
+          "input-param": true,
           "status": "",
           "constraints": [
             {}
@@ -66,7 +68,8 @@
           }
         },
         "generic-vnf.vnf-id": {
-          "type": "string"
+          "type": "string",
+          "input-param": true
         }
       },
       "derived_from": "tosca.datatypes.Dynamic"
diff --git a/src/test/resources/example/cds-response/vFW-CDS-resource-assignment-wf-expected-result.json b/src/test/resources/example/cds-response/vFW-CDS-resource-assignment-wf-expected-result.json
index 5b373a4..07d851f 100644
--- a/src/test/resources/example/cds-response/vFW-CDS-resource-assignment-wf-expected-result.json
+++ b/src/test/resources/example/cds-response/vFW-CDS-resource-assignment-wf-expected-result.json
@@ -1,12 +1,5 @@
 {
   "inputs": {
-    "template-prefix": {
-      "required": true,
-      "type": "list",
-      "entry_schema": {
-        "type": "string"
-      }
-    },
     "template-prefix-with-complex-type": {
       "type": "list",
       "properties": {
@@ -14,6 +7,7 @@
           "description": "",
           "required": false,
           "type": "string",
+          "input-param": true,
           "status": "",
           "constraints": [
             {}
@@ -25,16 +19,20 @@
       }
     },
     "resource-assignment-properties": {
-      "private1-prefix-id": {
-        "description": "",
-        "required": false,
-        "type": "string",
-        "status": "",
-        "constraints": [
-          {}
-        ],
-        "entry_schema": {
-          "type": ""
+      "type": "object",
+      "properties": {
+        "private1-prefix-id": {
+          "description": "",
+          "required": false,
+          "type": "string",
+          "input-param": true,
+          "status": "",
+          "constraints": [
+            {}
+          ],
+          "entry_schema": {
+            "type": ""
+          }
         }
       }
     }
diff --git a/src/test/resources/example/cds-response/vFW-CDS-resource-assignment-workflow.json b/src/test/resources/example/cds-response/vFW-CDS-resource-assignment-workflow.json
index d0f78cf..7f76c6c 100644
--- a/src/test/resources/example/cds-response/vFW-CDS-resource-assignment-workflow.json
+++ b/src/test/resources/example/cds-response/vFW-CDS-resource-assignment-workflow.json
@@ -45,6 +45,7 @@
           "description": "",
           "required": false,
           "type": "string",
+          "input-param": true,
           "status": "",
           "constraints": [
             {}
@@ -64,6 +65,7 @@
           "description": "",
           "required": false,
           "type": "string",
+          "input-param": true,
           "status": "",
           "constraints": [
             {}
diff --git "a/src/test/resources/http-cache/example/api/v1/blueprint-model/workflow-spec&\04363;connectionTimeToLive=5000/.file" "b/src/test/resources/http-cache/example/api/v1/blueprint-model/workflow-spec&\04363;connectionTimeToLive=5000/.file"
index 13d3fea..9e616df 100644
--- "a/src/test/resources/http-cache/example/api/v1/blueprint-model/workflow-spec&\04363;connectionTimeToLive=5000/.file"
+++ "b/src/test/resources/http-cache/example/api/v1/blueprint-model/workflow-spec&\04363;connectionTimeToLive=5000/.file"
@@ -34,11 +34,13 @@
             "properties": {
                 "request-id": {
                     "required": true,
-                    "type": "string"
+                    "type": "string",
+                    "input-param": true
                 },
                 "service-instance-id": {
                     "required": true,
-                    "type": "string"
+                    "type": "string",
+                    "input-param": true
                 },
                 "vnf-id": {
                     "required": true,
@@ -54,7 +56,13 @@
                 },
                 "hostname": {
                     "required": true,
-                    "type": "string"
+                    "type": "string",
+                    "input-param": true
+                },
+                "request-info": {
+                    "required": true,
+                    "type": "dt-request-info-properties",
+                    "input-param": true
                 },
                 "vnf_name": {
                     "required": true,
@@ -63,6 +71,26 @@
             },
             "constraints": null,
             "derived_from": "tosca.datatypes.Dynamic"
+        },
+        "dt-request-info-properties": {
+            "description": "This is Dynamically generated data type for workflow activate",
+            "version": "1.0.0",
+            "metadata": null,
+            "attributes": null,
+            "properties": {
+                "prop1": {
+                    "required": true,
+                    "type": "string",
+                    "input-param": true
+                },
+                "prop2": {
+                    "required": true,
+                    "type": "string",
+                    "input-param": true
+                }
+            },
+            "constraints": null,
+            "derived_from": "tosca.datatypes.Dynamic"
         }
     }
 }
\ No newline at end of file
diff --git a/src/test/resources/tosca/model-properties-cds.json b/src/test/resources/tosca/model-properties-cds.json
index 591840b..fea6584 100644
--- a/src/test/resources/tosca/model-properties-cds.json
+++ b/src/test/resources/tosca/model-properties-cds.json
@@ -62,16 +62,19 @@
 									}
 								},
 								"resource-assignment-properties": {
-									"private1-prefix-id": {
-										"description": "",
-										"required": false,
-										"type": "string",
-										"status": "",
-										"constraints": [
-											{}
-										],
-										"entry_schema": {
-											"type": ""
+									"type": "object",
+									"properties": {
+										"private1-prefix-id": {
+											"description": "",
+											"required": false,
+											"type": "string",
+											"status": "",
+											"constraints": [
+												{}
+											],
+											"entry_schema": {
+												"type": ""
+											}
 										}
 									}
 								}
diff --git a/src/test/resources/tosca/model-properties-operational-policy.json b/src/test/resources/tosca/model-properties-operational-policy.json
new file mode 100644
index 0000000..2a65685
--- /dev/null
+++ b/src/test/resources/tosca/model-properties-operational-policy.json
@@ -0,0 +1,353 @@
+{
+	"serviceDetails": {
+		"serviceType": "",
+		"namingPolicy": "",
+		"environmentContext": "General_Revenue-Bearing",
+		"serviceEcompNaming": "true",
+		"serviceRole": "",
+		"name": "vLoadBalancerMS",
+		"description": "vLBMS",
+		"invariantUUID": "30ec5b59-4799-48d8-ac5f-1058a6b0e48f",
+		"ecompGeneratedNaming": "true",
+		"category": "Network L4+",
+		"type": "Service",
+		"UUID": "63cac700-ab9a-4115-a74f-7eac85e3fce0",
+		"instantiationType": "A-la-carte"
+	},
+	"resourceDetails": {
+		"CP": {
+		},
+		"VL": {
+		},
+		"VF": {
+			"vLoadBalancerMS 0": {
+				"resourceVendor": "Test",
+				"resourceVendorModelNumber": "",
+				"name": "vLoadBalancerMS",
+				"description": "vLBMS",
+				"invariantUUID": "1a31b9f2-e50d-43b7-89b3-a040250cf506",
+				"subcategory": "Load Balancer",
+				"category": "Application L4+",
+				"type": "VF",
+				"UUID": "b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6",
+				"version": "1.0",
+				"resourceVendorRelease": "1.0",
+				"customizationUUID": "465246dc-7748-45f4-a013-308d92922552",
+				"controllerProperties": {
+					"sdnc_model_name": "baseconfiguration",
+					"sdnc_model_version": "1.0.0",
+					"workflows": {
+						"resource-assignment": {
+							"inputs": {
+								"resource-assignment-properties": {
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
+									}
+								}
+							}
+						},
+						"activate": {
+							"inputs": {
+								"activate-properties": {
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
+									}
+								}
+							}
+						},
+						"activate-restconf": {
+							"inputs": {
+								"activate-restconf-properties": {
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
+									}
+								}
+							}
+						},
+						"activate-cli": {
+							"inputs": {
+								"activate-cli-properties": {
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
+									}
+								}
+							}
+						},
+						"assign-activate": {
+							"inputs": {
+								"assign-activate-properties": {
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
+									}
+								}
+							}
+						},
+						"imperative-test-wf": {
+							"inputs": {
+								"imperative-test-wf-properties": {
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+		},
+		"CR": {
+		},
+		"VFC": {
+		},
+		"PNF": {
+		},
+		"Service": {
+		},
+		"CVFC": {
+		},
+		"Service Proxy": {
+		},
+		"Configuration": {
+		},
+		"AllottedResource": {
+		},
+		"VFModule": {
+			"Vloadbalancerms..vpkg..module-1": {
+				"vfModuleModelInvariantUUID": "ca052563-eb92-4b5b-ad41-9111768ce043",
+				"vfModuleModelVersion": "1",
+				"vfModuleModelName": "Vloadbalancerms..vpkg..module-1",
+				"vfModuleModelUUID": "1e725ccc-b823-4f67-82b9-4f4367070dbc",
+				"vfModuleModelCustomizationUUID": "1bffdc31-a37d-4dee-b65c-dde623a76e52",
+				"min_vf_module_instances": 0,
+				"vf_module_label": "vpkg",
+				"max_vf_module_instances": 1,
+				"vf_module_type": "Expansion",
+				"isBase": false,
+				"initial_count": 0,
+				"volume_group": false
+			},
+			"Vloadbalancerms..vdns..module-3": {
+				"vfModuleModelInvariantUUID": "4c10ba9b-f88f-415e-9de3-5d33336047fa",
+				"vfModuleModelVersion": "1",
+				"vfModuleModelName": "Vloadbalancerms..vdns..module-3",
+				"vfModuleModelUUID": "4fa73b49-8a6c-493e-816b-eb401567b720",
+				"vfModuleModelCustomizationUUID": "bafcdab0-801d-4d81-9ead-f464640a38b1",
+				"min_vf_module_instances": 0,
+				"vf_module_label": "vdns",
+				"max_vf_module_instances": 50,
+				"vf_module_type": "Expansion",
+				"isBase": false,
+				"initial_count": 0,
+				"volume_group": false
+			},
+			"Vloadbalancerms..base_template..module-0": {
+				"vfModuleModelInvariantUUID": "921f7c96-ebdd-42e6-81b9-1cfc0c9796f3",
+				"vfModuleModelVersion": "1",
+				"vfModuleModelName": "Vloadbalancerms..base_template..module-0",
+				"vfModuleModelUUID": "63734409-f745-4e4d-a38b-131638a0edce",
+				"vfModuleModelCustomizationUUID": "86baddea-c730-4fb8-9410-cd2e17fd7f27",
+				"min_vf_module_instances": 1,
+				"vf_module_label": "base_template",
+				"max_vf_module_instances": 1,
+				"vf_module_type": "Base",
+				"isBase": true,
+				"initial_count": 1,
+				"volume_group": false
+			},
+			"Vloadbalancerms..vlb..module-2": {
+				"vfModuleModelInvariantUUID": "a772a1f4-0064-412c-833d-4749b15828dd",
+				"vfModuleModelVersion": "1",
+				"vfModuleModelName": "Vloadbalancerms..vlb..module-2",
+				"vfModuleModelUUID": "0f5c3f6a-650a-4303-abb6-fff3e573a07a",
+				"vfModuleModelCustomizationUUID": "96a78aad-4ffb-4ef0-9c4f-deb03bf1d806",
+				"min_vf_module_instances": 0,
+				"vf_module_label": "vlb",
+				"max_vf_module_instances": 1,
+				"vf_module_type": "Expansion",
+				"isBase": false,
+				"initial_count": 0,
+				"volume_group": false
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/test/resources/tosca/model-properties.json b/src/test/resources/tosca/model-properties.json
index 688a09a..1c0fe24 100644
--- a/src/test/resources/tosca/model-properties.json
+++ b/src/test/resources/tosca/model-properties.json
@@ -40,33 +40,38 @@
 						"resource-assignment": {
 							"inputs": {
 								"resource-assignment-properties": {
-									"request-id": {
-										"type": "string",
-										"required": true
-									},
-									"service-instance-id": {
-										"type": "string",
-										"required": true
-									},
-									"vnf-id": {
-										"type": "string",
-										"required": true
-									},
-									"action-name": {
-										"type": "string",
-										"required": true
-									},
-									"scope-type": {
-										"type": "string",
-										"required": true
-									},
-									"hostname": {
-										"type": "string",
-										"required": true
-									},
-									"vnf_name": {
-										"type": "string",
-										"required": true
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
 									}
 								}
 							}
@@ -74,33 +79,38 @@
 						"activate": {
 							"inputs": {
 								"resource-assignment-properties": {
-									"request-id": {
-										"type": "string",
-										"required": true
-									},
-									"service-instance-id": {
-										"type": "string",
-										"required": true
-									},
-									"vnf-id": {
-										"type": "string",
-										"required": true
-									},
-									"action-name": {
-										"type": "string",
-										"required": true
-									},
-									"scope-type": {
-										"type": "string",
-										"required": true
-									},
-									"hostname": {
-										"type": "string",
-										"required": true
-									},
-									"vnf_name": {
-										"type": "string",
-										"required": true
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
 									}
 								}
 							}
@@ -108,33 +118,38 @@
 						"activate-restconf": {
 							"inputs": {
 								"resource-assignment-properties": {
-									"request-id": {
-										"type": "string",
-										"required": true
-									},
-									"service-instance-id": {
-										"type": "string",
-										"required": true
-									},
-									"vnf-id": {
-										"type": "string",
-										"required": true
-									},
-									"action-name": {
-										"type": "string",
-										"required": true
-									},
-									"scope-type": {
-										"type": "string",
-										"required": true
-									},
-									"hostname": {
-										"type": "string",
-										"required": true
-									},
-									"vnf_name": {
-										"type": "string",
-										"required": true
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
 									}
 								}
 							}
@@ -142,33 +157,38 @@
 						"activate-cli": {
 							"inputs": {
 								"resource-assignment-properties": {
-									"request-id": {
-										"type": "string",
-										"required": true
-									},
-									"service-instance-id": {
-										"type": "string",
-										"required": true
-									},
-									"vnf-id": {
-										"type": "string",
-										"required": true
-									},
-									"action-name": {
-										"type": "string",
-										"required": true
-									},
-									"scope-type": {
-										"type": "string",
-										"required": true
-									},
-									"hostname": {
-										"type": "string",
-										"required": true
-									},
-									"vnf_name": {
-										"type": "string",
-										"required": true
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
 									}
 								}
 							}
@@ -176,33 +196,38 @@
 						"assign-activate": {
 							"inputs": {
 								"resource-assignment-properties": {
-									"request-id": {
-										"type": "string",
-										"required": true
-									},
-									"service-instance-id": {
-										"type": "string",
-										"required": true
-									},
-									"vnf-id": {
-										"type": "string",
-										"required": true
-									},
-									"action-name": {
-										"type": "string",
-										"required": true
-									},
-									"scope-type": {
-										"type": "string",
-										"required": true
-									},
-									"hostname": {
-										"type": "string",
-										"required": true
-									},
-									"vnf_name": {
-										"type": "string",
-										"required": true
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
 									}
 								}
 							}
@@ -210,38 +235,43 @@
 						"imperative-test-wf": {
 							"inputs": {
 								"resource-assignment-properties": {
-									"request-id": {
-										"type": "string",
-										"required": true
-									},
-									"service-instance-id": {
-										"type": "string",
-										"required": true
-									},
-									"vnf-id": {
-										"type": "string",
-										"required": true
-									},
-									"action-name": {
-										"type": "string",
-										"required": true
-									},
-									"scope-type": {
-										"type": "string",
-										"required": true
-									},
-									"hostname": {
-										"type": "string",
-										"required": true
-									},
-									"vnf_name": {
-										"type": "string",
-										"required": true
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
 									}
 								}
 							}
-						} 
-				 	}
+						}
+					}
 				}
 			}
 		},
diff --git a/src/test/resources/tosca/new-converter/tosca_apex_with_metadata.json b/src/test/resources/tosca/new-converter/tosca_apex_with_metadata.json
index f6713af..4519d5c 100644
--- a/src/test/resources/tosca/new-converter/tosca_apex_with_metadata.json
+++ b/src/test/resources/tosca/new-converter/tosca_apex_with_metadata.json
@@ -94,7 +94,7 @@
                         "title": "data",
                         "type": "string",
                         "format": "textarea",
-                        "default": "{\"request-id\":\"\",\"service-instance-id\":\"\",\"vnf-id\":\"\",\"action-name\":\"\",\"scope-type\":\"\",\"hostname\":\"\",\"vnf_name\":\"\"}"
+                        "default": "{\"request-id\":\"\",\"service-instance-id\":\"\",\"hostname\":\"\",\"request-info\":{\"prop1\":\"\",\"prop2\":\"\"}}"
                       }
                     }
                   },
@@ -123,7 +123,7 @@
                         "title": "data",
                         "type": "string",
                         "format": "textarea",
-                        "default": "{\"request-id\":\"\",\"service-instance-id\":\"\",\"vnf-id\":\"\",\"action-name\":\"\",\"scope-type\":\"\",\"hostname\":\"\",\"vnf_name\":\"\"}"
+                        "default": "{\"request-id\":\"\",\"service-instance-id\":\"\",\"hostname\":\"\",\"request-info\":{\"prop1\":\"\",\"prop2\":\"\"}}"
                       }
                     }
                   },
@@ -152,7 +152,7 @@
                         "title": "data",
                         "type": "string",
                         "format": "textarea",
-                        "default": "{\"request-id\":\"\",\"service-instance-id\":\"\",\"vnf-id\":\"\",\"action-name\":\"\",\"scope-type\":\"\",\"hostname\":\"\",\"vnf_name\":\"\"}"
+                        "default": "{\"request-id\":\"\",\"service-instance-id\":\"\",\"hostname\":\"\",\"request-info\":{\"prop1\":\"\",\"prop2\":\"\"}}"
                       }
                     }
                   },
@@ -181,7 +181,7 @@
                         "title": "data",
                         "type": "string",
                         "format": "textarea",
-                        "default": "{\"request-id\":\"\",\"service-instance-id\":\"\",\"vnf-id\":\"\",\"action-name\":\"\",\"scope-type\":\"\",\"hostname\":\"\",\"vnf_name\":\"\"}"
+                        "default": "{\"request-id\":\"\",\"service-instance-id\":\"\",\"hostname\":\"\",\"request-info\":{\"prop1\":\"\",\"prop2\":\"\"}}"
                       }
                     }
                   },
@@ -210,7 +210,7 @@
                         "title": "data",
                         "type": "string",
                         "format": "textarea",
-                        "default": "{\"request-id\":\"\",\"service-instance-id\":\"\",\"vnf-id\":\"\",\"action-name\":\"\",\"scope-type\":\"\",\"hostname\":\"\",\"vnf_name\":\"\"}"
+                        "default": "{\"request-id\":\"\",\"service-instance-id\":\"\",\"hostname\":\"\",\"request-info\":{\"prop1\":\"\",\"prop2\":\"\"}}"
                       }
                     }
                   },
@@ -239,7 +239,7 @@
                         "title": "data",
                         "type": "string",
                         "format": "textarea",
-                        "default": "{\"request-id\":\"\",\"service-instance-id\":\"\",\"vnf-id\":\"\",\"action-name\":\"\",\"scope-type\":\"\",\"hostname\":\"\",\"vnf_name\":\"\"}"
+                        "default": "{\"request-id\":\"\",\"service-instance-id\":\"\",\"hostname\":\"\",\"request-info\":{\"prop1\":\"\",\"prop2\":\"\"}}"
                       }
                     }
                   }
diff --git a/src/test/resources/tosca/operational-policy-json-schema.json b/src/test/resources/tosca/operational-policy-json-schema.json
index e8363b4..dc6c32f 100644
--- a/src/test/resources/tosca/operational-policy-json-schema.json
+++ b/src/test/resources/tosca/operational-policy-json-schema.json
@@ -288,25 +288,23 @@
                                         "title": "service-instance-id",
                                         "type": "string"
                                       },
-                                      "vnf-id": {
-                                        "title": "vnf-id",
-                                        "type": "string"
-                                      },
-                                      "action-name": {
-                                        "title": "action-name",
-                                        "type": "string"
-                                      },
-                                      "scope-type": {
-                                        "title": "scope-type",
-                                        "type": "string"
-                                      },
                                       "hostname": {
                                         "title": "hostname",
                                         "type": "string"
                                       },
-                                      "vnf_name": {
-                                        "title": "vnf_name",
-                                        "type": "string"
+                                      "request-info": {
+                                        "title": "request-info",
+                                        "type": "object",
+                                        "properties": {
+                                          "prop1": {
+                                            "title": "prop1",
+                                            "type": "string"
+                                          },
+                                          "prop2": {
+                                            "title": "prop2",
+                                            "type": "string"
+                                          }
+                                        }
                                       }
                                     }
                                   }
@@ -358,25 +356,23 @@
                                         "title": "service-instance-id",
                                         "type": "string"
                                       },
-                                      "vnf-id": {
-                                        "title": "vnf-id",
-                                        "type": "string"
-                                      },
-                                      "action-name": {
-                                        "title": "action-name",
-                                        "type": "string"
-                                      },
-                                      "scope-type": {
-                                        "title": "scope-type",
-                                        "type": "string"
-                                      },
                                       "hostname": {
                                         "title": "hostname",
                                         "type": "string"
                                       },
-                                      "vnf_name": {
-                                        "title": "vnf_name",
-                                        "type": "string"
+                                      "request-info": {
+                                        "title": "request-info",
+                                        "type": "object",
+                                        "properties": {
+                                          "prop1": {
+                                            "title": "prop1",
+                                            "type": "string"
+                                          },
+                                          "prop2": {
+                                            "title": "prop2",
+                                            "type": "string"
+                                          }
+                                        }
                                       }
                                     }
                                   }
@@ -428,25 +424,23 @@
                                         "title": "service-instance-id",
                                         "type": "string"
                                       },
-                                      "vnf-id": {
-                                        "title": "vnf-id",
-                                        "type": "string"
-                                      },
-                                      "action-name": {
-                                        "title": "action-name",
-                                        "type": "string"
-                                      },
-                                      "scope-type": {
-                                        "title": "scope-type",
-                                        "type": "string"
-                                      },
                                       "hostname": {
                                         "title": "hostname",
                                         "type": "string"
                                       },
-                                      "vnf_name": {
-                                        "title": "vnf_name",
-                                        "type": "string"
+                                      "request-info": {
+                                        "title": "request-info",
+                                        "type": "object",
+                                        "properties": {
+                                          "prop1": {
+                                            "title": "prop1",
+                                            "type": "string"
+                                          },
+                                          "prop2": {
+                                            "title": "prop2",
+                                            "type": "string"
+                                          }
+                                        }
                                       }
                                     }
                                   }
@@ -498,25 +492,23 @@
                                         "title": "service-instance-id",
                                         "type": "string"
                                       },
-                                      "vnf-id": {
-                                        "title": "vnf-id",
-                                        "type": "string"
-                                      },
-                                      "action-name": {
-                                        "title": "action-name",
-                                        "type": "string"
-                                      },
-                                      "scope-type": {
-                                        "title": "scope-type",
-                                        "type": "string"
-                                      },
                                       "hostname": {
                                         "title": "hostname",
                                         "type": "string"
                                       },
-                                      "vnf_name": {
-                                        "title": "vnf_name",
-                                        "type": "string"
+                                      "request-info": {
+                                        "title": "request-info",
+                                        "type": "object",
+                                        "properties": {
+                                          "prop1": {
+                                            "title": "prop1",
+                                            "type": "string"
+                                          },
+                                          "prop2": {
+                                            "title": "prop2",
+                                            "type": "string"
+                                          }
+                                        }
                                       }
                                     }
                                   }
@@ -568,25 +560,23 @@
                                         "title": "service-instance-id",
                                         "type": "string"
                                       },
-                                      "vnf-id": {
-                                        "title": "vnf-id",
-                                        "type": "string"
-                                      },
-                                      "action-name": {
-                                        "title": "action-name",
-                                        "type": "string"
-                                      },
-                                      "scope-type": {
-                                        "title": "scope-type",
-                                        "type": "string"
-                                      },
                                       "hostname": {
                                         "title": "hostname",
                                         "type": "string"
                                       },
-                                      "vnf_name": {
-                                        "title": "vnf_name",
-                                        "type": "string"
+                                      "request-info": {
+                                        "title": "request-info",
+                                        "type": "object",
+                                        "properties": {
+                                          "prop1": {
+                                            "title": "prop1",
+                                            "type": "string"
+                                          },
+                                          "prop2": {
+                                            "title": "prop2",
+                                            "type": "string"
+                                          }
+                                        }
                                       }
                                     }
                                   }
@@ -638,25 +628,23 @@
                                         "title": "service-instance-id",
                                         "type": "string"
                                       },
-                                      "vnf-id": {
-                                        "title": "vnf-id",
-                                        "type": "string"
-                                      },
-                                      "action-name": {
-                                        "title": "action-name",
-                                        "type": "string"
-                                      },
-                                      "scope-type": {
-                                        "title": "scope-type",
-                                        "type": "string"
-                                      },
                                       "hostname": {
                                         "title": "hostname",
                                         "type": "string"
                                       },
-                                      "vnf_name": {
-                                        "title": "vnf_name",
-                                        "type": "string"
+                                      "request-info": {
+                                        "title": "request-info",
+                                        "type": "object",
+                                        "properties": {
+                                          "prop1": {
+                                            "title": "prop1",
+                                            "type": "string"
+                                          },
+                                          "prop2": {
+                                            "title": "prop2",
+                                            "type": "string"
+                                          }
+                                        }
                                       }
                                     }
                                   }
diff --git a/src/test/resources/tosca/resource-details-cds.json b/src/test/resources/tosca/resource-details-cds.json
new file mode 100644
index 0000000..d972d0c
--- /dev/null
+++ b/src/test/resources/tosca/resource-details-cds.json
@@ -0,0 +1,336 @@
+{
+	"CP": {
+	},
+	"VL": {
+	},
+	"VF": {
+		"vLoadBalancerMS 0": {
+			"resourceVendor": "Test",
+			"resourceVendorModelNumber": "",
+			"name": "vLoadBalancerMS",
+			"description": "vLBMS",
+			"invariantUUID": "1a31b9f2-e50d-43b7-89b3-a040250cf506",
+			"subcategory": "Load Balancer",
+			"category": "Application L4+",
+			"type": "VF",
+			"UUID": "b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6",
+			"version": "1.0",
+			"resourceVendorRelease": "1.0",
+			"customizationUUID": "465246dc-7748-45f4-a013-308d92922552",
+				"controllerProperties": {
+					"sdnc_model_name": "baseconfiguration",
+					"sdnc_model_version": "1.0.0",
+					"workflows": {
+						"resource-assignment": {
+							"inputs": {
+								"resource-assignment-properties": {
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
+									}
+								}
+							}
+						},
+						"activate": {
+							"inputs": {
+								"activate-properties": {
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
+									}
+								}
+							}
+						},
+						"activate-restconf": {
+							"inputs": {
+								"activate-restconf-properties": {
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
+									}
+								}
+							}
+						},
+						"activate-cli": {
+							"inputs": {
+								"activate-cli-properties": {
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
+									}
+								}
+							}
+						},
+						"assign-activate": {
+							"inputs": {
+								"assign-activate-properties": {
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
+									}
+								}
+							}
+						},
+						"imperative-test-wf": {
+							"inputs": {
+								"imperative-test-wf-properties": {
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
+									}
+								}
+							}
+						} 
+				 }
+		}
+		}
+	},
+	"CR": {
+	},
+	"VFC": {
+	},
+	"PNF": {
+	},
+	"Service": {
+	},
+	"CVFC": {
+	},
+	"Service Proxy": {
+	},
+	"Configuration": {
+	},
+	"AllottedResource": {
+	},
+	"VFModule": {
+		"Vloadbalancerms..vpkg..module-1": {
+			"vfModuleModelInvariantUUID": "ca052563-eb92-4b5b-ad41-9111768ce043",
+			"vfModuleModelVersion": "1",
+			"vfModuleModelName": "Vloadbalancerms..vpkg..module-1",
+			"vfModuleModelUUID": "1e725ccc-b823-4f67-82b9-4f4367070dbc",
+			"vfModuleModelCustomizationUUID": "1bffdc31-a37d-4dee-b65c-dde623a76e52",
+			"min_vf_module_instances": 0,
+			"vf_module_label": "vpkg",
+			"max_vf_module_instances": 1,
+			"vf_module_type": "Expansion",
+			"isBase": false,
+			"initial_count": 0,
+			"volume_group": false
+		},
+		"Vloadbalancerms..vdns..module-3": {
+			"vfModuleModelInvariantUUID": "4c10ba9b-f88f-415e-9de3-5d33336047fa",
+			"vfModuleModelVersion": "1",
+			"vfModuleModelName": "Vloadbalancerms..vdns..module-3",
+			"vfModuleModelUUID": "4fa73b49-8a6c-493e-816b-eb401567b720",
+			"vfModuleModelCustomizationUUID": "bafcdab0-801d-4d81-9ead-f464640a38b1",
+			"min_vf_module_instances": 0,
+			"vf_module_label": "vdns",
+			"max_vf_module_instances": 50,
+			"vf_module_type": "Expansion",
+			"isBase": false,
+			"initial_count": 0,
+			"volume_group": false
+		},
+		"Vloadbalancerms..base_template..module-0": {
+			"vfModuleModelInvariantUUID": "921f7c96-ebdd-42e6-81b9-1cfc0c9796f3",
+			"vfModuleModelVersion": "1",
+			"vfModuleModelName": "Vloadbalancerms..base_template..module-0",
+			"vfModuleModelUUID": "63734409-f745-4e4d-a38b-131638a0edce",
+			"vfModuleModelCustomizationUUID": "86baddea-c730-4fb8-9410-cd2e17fd7f27",
+			"min_vf_module_instances": 1,
+			"vf_module_label": "base_template",
+			"max_vf_module_instances": 1,
+			"vf_module_type": "Base",
+			"isBase": true,
+			"initial_count": 1,
+			"volume_group": false
+		},
+		"Vloadbalancerms..vlb..module-2": {
+			"vfModuleModelInvariantUUID": "a772a1f4-0064-412c-833d-4749b15828dd",
+			"vfModuleModelVersion": "1",
+			"vfModuleModelName": "Vloadbalancerms..vlb..module-2",
+			"vfModuleModelUUID": "0f5c3f6a-650a-4303-abb6-fff3e573a07a",
+			"vfModuleModelCustomizationUUID": "96a78aad-4ffb-4ef0-9c4f-deb03bf1d806",
+			"min_vf_module_instances": 0,
+			"vf_module_label": "vlb",
+			"max_vf_module_instances": 1,
+			"vf_module_type": "Expansion",
+			"isBase": false,
+			"initial_count": 0,
+			"volume_group": false
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/test/resources/tosca/resource-details.json b/src/test/resources/tosca/resource-details.json
index dc47b44..b55adbf 100644
--- a/src/test/resources/tosca/resource-details.json
+++ b/src/test/resources/tosca/resource-details.json
@@ -24,33 +24,38 @@
 						"resource-assignment": {
 							"inputs": {
 								"resource-assignment-properties": {
-									"request-id": {
-										"type": "string",
-										"required": true
-									},
-									"service-instance-id": {
-										"type": "string",
-										"required": true
-									},
-									"vnf-id": {
-										"type": "string",
-										"required": true
-									},
-									"action-name": {
-										"type": "string",
-										"required": true
-									},
-									"scope-type": {
-										"type": "string",
-										"required": true
-									},
-									"hostname": {
-										"type": "string",
-										"required": true
-									},
-									"vnf_name": {
-										"type": "string",
-										"required": true
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
 									}
 								}
 							}
@@ -58,33 +63,38 @@
 						"activate": {
 							"inputs": {
 								"resource-assignment-properties": {
-									"request-id": {
-										"type": "string",
-										"required": true
-									},
-									"service-instance-id": {
-										"type": "string",
-										"required": true
-									},
-									"vnf-id": {
-										"type": "string",
-										"required": true
-									},
-									"action-name": {
-										"type": "string",
-										"required": true
-									},
-									"scope-type": {
-										"type": "string",
-										"required": true
-									},
-									"hostname": {
-										"type": "string",
-										"required": true
-									},
-									"vnf_name": {
-										"type": "string",
-										"required": true
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
 									}
 								}
 							}
@@ -92,33 +102,38 @@
 						"activate-restconf": {
 							"inputs": {
 								"resource-assignment-properties": {
-									"request-id": {
-										"type": "string",
-										"required": true
-									},
-									"service-instance-id": {
-										"type": "string",
-										"required": true
-									},
-									"vnf-id": {
-										"type": "string",
-										"required": true
-									},
-									"action-name": {
-										"type": "string",
-										"required": true
-									},
-									"scope-type": {
-										"type": "string",
-										"required": true
-									},
-									"hostname": {
-										"type": "string",
-										"required": true
-									},
-									"vnf_name": {
-										"type": "string",
-										"required": true
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
 									}
 								}
 							}
@@ -126,33 +141,38 @@
 						"activate-cli": {
 							"inputs": {
 								"resource-assignment-properties": {
-									"request-id": {
-										"type": "string",
-										"required": true
-									},
-									"service-instance-id": {
-										"type": "string",
-										"required": true
-									},
-									"vnf-id": {
-										"type": "string",
-										"required": true
-									},
-									"action-name": {
-										"type": "string",
-										"required": true
-									},
-									"scope-type": {
-										"type": "string",
-										"required": true
-									},
-									"hostname": {
-										"type": "string",
-										"required": true
-									},
-									"vnf_name": {
-										"type": "string",
-										"required": true
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
 									}
 								}
 							}
@@ -160,33 +180,38 @@
 						"assign-activate": {
 							"inputs": {
 								"resource-assignment-properties": {
-									"request-id": {
-										"type": "string",
-										"required": true
-									},
-									"service-instance-id": {
-										"type": "string",
-										"required": true
-									},
-									"vnf-id": {
-										"type": "string",
-										"required": true
-									},
-									"action-name": {
-										"type": "string",
-										"required": true
-									},
-									"scope-type": {
-										"type": "string",
-										"required": true
-									},
-									"hostname": {
-										"type": "string",
-										"required": true
-									},
-									"vnf_name": {
-										"type": "string",
-										"required": true
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
 									}
 								}
 							}
@@ -194,33 +219,38 @@
 						"imperative-test-wf": {
 							"inputs": {
 								"resource-assignment-properties": {
-									"request-id": {
-										"type": "string",
-										"required": true
-									},
-									"service-instance-id": {
-										"type": "string",
-										"required": true
-									},
-									"vnf-id": {
-										"type": "string",
-										"required": true
-									},
-									"action-name": {
-										"type": "string",
-										"required": true
-									},
-									"scope-type": {
-										"type": "string",
-										"required": true
-									},
-									"hostname": {
-										"type": "string",
-										"required": true
-									},
-									"vnf_name": {
-										"type": "string",
-										"required": true
+									"type": "object",
+									"properties": {
+										"request-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"service-instance-id": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"hostname": {
+											"type": "string",
+											"required": true,
+											"input-param": true
+										},
+										"request-info": {
+											"type": "object",
+											"properties": {
+												"prop1": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												},
+												"prop2": {
+													"required": true,
+													"type": "string",
+													"input-param": true
+												}
+											}
+										}
 									}
 								}
 							}