Rework tosca converter

New code to convert the Policy Tosca Yaml to Json Schema for the Clamp
UI

Issue-ID: CLAMP-253
Change-Id: I10c1d3d81c5feae402773de94bd88c190ec68645
Signed-off-by: WeberLaurent <weberlaurent23@gmail.com>
diff --git a/src/test/java/org/onap/clamp/clds/tosca/update/ArrayFieldTest.java b/src/test/java/org/onap/clamp/clds/tosca/update/ArrayFieldTest.java
new file mode 100644
index 0000000..abf65c3
--- /dev/null
+++ b/src/test/java/org/onap/clamp/clds/tosca/update/ArrayFieldTest.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2020 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.tosca.update;
+
+import com.google.gson.JsonArray;
+import java.io.IOException;
+import java.util.ArrayList;
+import junit.framework.TestCase;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+
+public class ArrayFieldTest extends TestCase {
+
+    /**
+     * Test the deploy method.
+     *
+     * @throws IOException in case of failure
+     */
+    public void testDeploy() throws IOException {
+        TemplateManagement templateManagement = new TemplateManagement(ResourceFileUtil.getResourceAsString(
+                "tosca/new-converter/sampleOperationalPoliciesEXTENTED.yaml"),
+                ResourceFileUtil.getResourceAsString("clds/tosca_update/templates.properties"));
+        Component component = templateManagement.getComponents().get("onap.datatype.controlloop.Actor");
+        Property property = component.getProperties().get("actor");
+        ArrayField arrayParser = new ArrayField((ArrayList<Object>) property.getItems().get("default"));
+        JsonArray toTest = arrayParser.deploy();
+        String reference = "[1,\"String\",5.5,true]";
+        assertEquals(reference, String.valueOf(toTest));
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/org/onap/clamp/clds/tosca/update/ComponentTest.java b/src/test/java/org/onap/clamp/clds/tosca/update/ComponentTest.java
new file mode 100644
index 0000000..0494ee1
--- /dev/null
+++ b/src/test/java/org/onap/clamp/clds/tosca/update/ComponentTest.java
@@ -0,0 +1,49 @@
+/*-

+ * ============LICENSE_START=======================================================

+ * ONAP CLAMP

+ * ================================================================================

+ * Copyright (C) 2020 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============================================

+ * ===================================================================

+ *

+ */

+

+package org.onap.clamp.clds.tosca.update;

+

+import java.io.IOException;

+import java.util.ArrayList;

+import java.util.Arrays;

+import junit.framework.TestCase;

+import org.onap.clamp.clds.util.ResourceFileUtil;

+

+public class ComponentTest extends TestCase {

+

+    /**

+     * Test propertiesName.

+     *

+     * @throws IOException In case of failure

+     */

+    public void testPropertiesNames() throws IOException {

+        ArrayList<String> reference = new ArrayList<>(Arrays.asList("actor", "operation", "target", "payload"));

+        TemplateManagement templateManagement =

+                new TemplateManagement(

+                        ResourceFileUtil.getResourceAsString("tosca/new-converter/sampleOperationalPolicies.yaml"),

+                        ResourceFileUtil.getResourceAsString("clds/tosca_update/templates.properties"));

+        Component component = templateManagement.getComponents().get("onap.datatype.controlloop.Actor");

+        assertEquals(reference, component.propertiesNames());

+    }

+

+}

diff --git a/src/test/java/org/onap/clamp/clds/tosca/update/ConstraintTest.java b/src/test/java/org/onap/clamp/clds/tosca/update/ConstraintTest.java
new file mode 100644
index 0000000..a71ea8a
--- /dev/null
+++ b/src/test/java/org/onap/clamp/clds/tosca/update/ConstraintTest.java
@@ -0,0 +1,97 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2020 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.tosca.update;
+
+import com.google.gson.JsonObject;
+import java.io.IOException;
+import java.util.ArrayList;
+import junit.framework.TestCase;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+
+public class ConstraintTest extends TestCase {
+
+    TemplateManagement templateManagement = new TemplateManagement(
+            ResourceFileUtil.getResourceAsString("tosca/new-converter/constraints.yaml"),
+            ResourceFileUtil.getResourceAsString("clds/tosca_update/templates.properties"));
+
+    Component component = templateManagement.getComponents().get("onap.datatype.controlloop.Operation");
+
+    public ConstraintTest() throws IOException {
+    }
+
+    /**
+     *  Test get value array.
+     */
+    public void testGetValuesArray() {
+        Property property = component.getProperties().get("timeout");
+        Template template = templateManagement.getTemplates().get("integer");
+        JsonObject resultProcess = new JsonObject();
+        property.addConstraintsAsJson(resultProcess, (ArrayList<Object>) property.getItems().get("constraints"),
+                template);
+        String reference = "{\"enum\":[3,4,5.5,6,10]}";
+        assertEquals(reference, String.valueOf(resultProcess));
+        property = component.getProperties().get("success");
+        template = templateManagement.getTemplates().get("string");
+        resultProcess = new JsonObject();
+        property.addConstraintsAsJson(resultProcess, (ArrayList<Object>) property.getItems().get("constraints"),
+                template);
+        reference = "{\"enum\":[\"VALID\",\"TERMINATED\"]}";
+        assertEquals(reference, String.valueOf(resultProcess));
+    }
+
+    /**
+     * Test get Specific length.
+     */
+    public void testGetSpecificLength() {
+        //Test for string type, same process for array
+        Property property = component.getProperties().get("id");
+        Template template = templateManagement.getTemplates().get("string");
+        JsonObject resultProcess = new JsonObject();
+        property.addConstraintsAsJson(resultProcess, (ArrayList<Object>) property.getItems().get("constraints"),
+                template);
+        int specificLength = 8;
+        int toTest = resultProcess.get("minLength").getAsInt();
+        assertEquals(specificLength, toTest);
+        toTest = resultProcess.get("maxLength").getAsInt();
+        assertEquals(specificLength, toTest);
+    }
+
+    /**
+     * Test get limit value.
+     */
+    public void testGetLimitValue() {
+        //Test for array type, same process for string
+        Property property = component.getProperties().get("description");
+        Template template = templateManagement.getTemplates().get("array");
+        JsonObject resultProcess = new JsonObject();
+        property.addConstraintsAsJson(resultProcess, (ArrayList<Object>) property.getItems().get("constraints"),
+                template);
+
+        int toTest = resultProcess.get("minItems").getAsInt();
+        assertEquals(5, toTest);
+        toTest = resultProcess.get("maxItems").getAsInt();
+        assertEquals(7, toTest);
+    }
+
+}
\ No newline at end of file
diff --git a/src/test/java/org/onap/clamp/clds/tosca/update/PropertyTest.java b/src/test/java/org/onap/clamp/clds/tosca/update/PropertyTest.java
new file mode 100644
index 0000000..cf183af
--- /dev/null
+++ b/src/test/java/org/onap/clamp/clds/tosca/update/PropertyTest.java
@@ -0,0 +1,69 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2020 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.tosca.update;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import java.io.IOException;
+import java.util.ArrayList;
+import junit.framework.TestCase;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+
+public class PropertyTest extends TestCase {
+    public PropertyTest() throws IOException {
+    }
+
+    /**
+     * Test Parse array.
+     *
+     * @throws IOException In case of failure
+     */
+    public void testParseArray() throws IOException {
+        TemplateManagement templateManagement = new TemplateManagement(
+                ResourceFileUtil.getResourceAsString("tosca/new-converter/sampleOperationalPoliciesEXTENTED.yaml"),
+                ResourceFileUtil.getResourceAsString("clds/tosca_update/templates.properties"));
+        Component component = templateManagement.getComponents().get("onap.datatype.controlloop.Actor");
+        Property property = component.getProperties().get("actor");
+        JsonArray toTest = property.parseArray((ArrayList<Object>) property.getItems().get("default"));
+        assertNotNull(toTest);
+    }
+
+    /**
+     * Test add constraint as json.
+     *
+     * @throws IOException In case of failure
+     */
+    public void testAddConstraintsAsJson() throws IOException {
+        TemplateManagement templateManagement = new TemplateManagement(
+                ResourceFileUtil.getResourceAsString("tosca/new-converter/sampleOperationalPolicies.yaml"),
+                ResourceFileUtil.getResourceAsString("clds/tosca_update/templates.properties"));
+        Component component = templateManagement.getComponents().get("onap.datatype.controlloop.operation.Failure");
+        Property property = component.getProperties().get("category");
+        Template template = templateManagement.getTemplates().get("string");
+        JsonObject toTest = new JsonObject();
+        property.addConstraintsAsJson(toTest, (ArrayList<Object>) property.getItems().get("constraints"), template);
+        String test = "{\"enum\":[\"error\",\"timeout\",\"retries\",\"guard\",\"exception\"]}";
+        assertEquals(test, String.valueOf(toTest));
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/org/onap/clamp/clds/tosca/update/TemplateManagementTest.java b/src/test/java/org/onap/clamp/clds/tosca/update/TemplateManagementTest.java
new file mode 100644
index 0000000..8e41106
--- /dev/null
+++ b/src/test/java/org/onap/clamp/clds/tosca/update/TemplateManagementTest.java
@@ -0,0 +1,116 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2020 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.tosca.update;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import junit.framework.TestCase;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+
+public class TemplateManagementTest extends TestCase {
+
+    /**
+     * Test the launch translation.
+     *
+     * @throws IOException               In case of failure
+     * @throws UnknownComponentException In case of failure
+     */
+    public void testLaunchTranslation() throws IOException, UnknownComponentException {
+        TemplateManagement templateManagement =
+                new TemplateManagement(
+                        ResourceFileUtil.getResourceAsString("tosca/new-converter/sampleOperationalPolicies.yaml"),
+                        ResourceFileUtil.getResourceAsString("clds/tosca_update/templates.properties"));
+        assertNull(templateManagement.getParseToJson());
+        String componentName = "onap.policies.controlloop.operational.common.Drools";
+        templateManagement.launchTranslation(componentName);
+        assertNotNull(templateManagement.getParseToJson());
+    }
+
+    /**
+     * Test addTemplate.
+     *
+     * @throws IOException In case of failure
+     */
+    public void testAddTemplate() throws IOException {
+        TemplateManagement templateManagement =
+                new TemplateManagement(
+                        ResourceFileUtil.getResourceAsString("tosca/new-converter/sampleOperationalPolicies.yaml"),
+                        ResourceFileUtil.getResourceAsString("clds/tosca_update/templates.properties"));
+        int count = templateManagement.getTemplates().size();
+        ArrayList<String> templateFields =
+                new ArrayList<>(Arrays.asList("type", "description", "required", "metadata", "constraints"));
+        templateManagement.addTemplate("test", templateFields);
+        assertNotSame(count, templateManagement.getTemplates().size());
+    }
+
+    /**
+     * test Remove template.
+     *
+     * @throws IOException In case of failure
+     */
+    public void testRemoveTemplate() throws IOException {
+        TemplateManagement templateManagement =
+                new TemplateManagement(
+                        ResourceFileUtil.getResourceAsString("tosca/new-converter/sampleOperationalPolicies.yaml"),
+                        ResourceFileUtil.getResourceAsString("clds/tosca_update/templates.properties"));
+        int count = templateManagement.getTemplates().size();
+        templateManagement.removeTemplate("string");
+        assertNotSame(count, templateManagement.getTemplates().size());
+    }
+
+    /**
+     * Test update template.
+     *
+     * @throws IOException In case of failure
+     */
+    public void testUpdateTemplate() throws IOException {
+        TemplateManagement templateManagement =
+                new TemplateManagement(
+                        ResourceFileUtil.getResourceAsString("tosca/new-converter/sampleOperationalPolicies.yaml"),
+                        ResourceFileUtil.getResourceAsString("clds/tosca_update/templates.properties"));
+        int count = templateManagement.getTemplates().get("integer").getFields().size();
+        templateManagement.updateTemplate("integer", "type", false);
+        assertNotSame(count, templateManagement.getTemplates().get("integer").getFields().size());
+    }
+
+    /**
+     * Test has template.
+     *
+     * @throws IOException In case of failure
+     */
+    public void testHasTemplate() throws IOException {
+        TemplateManagement templateManagement =
+                new TemplateManagement(
+                        ResourceFileUtil.getResourceAsString("tosca/new-converter/sampleOperationalPolicies.yaml"),
+                        ResourceFileUtil.getResourceAsString("clds/tosca_update/templates.properties"));
+        boolean has = true;
+        ArrayList<String> templateFieldsString =
+                new ArrayList<>(Arrays.asList("type", "description", "required", "metadata", "constraints"));
+        Template templateTest = new Template("String", templateFieldsString);
+        has = templateManagement.hasTemplate(templateTest);
+        assertEquals(false, has);
+    }
+
+}
diff --git a/src/test/java/org/onap/clamp/clds/tosca/update/TemplateTest.java b/src/test/java/org/onap/clamp/clds/tosca/update/TemplateTest.java
new file mode 100644
index 0000000..ebc119f
--- /dev/null
+++ b/src/test/java/org/onap/clamp/clds/tosca/update/TemplateTest.java
@@ -0,0 +1,44 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2020 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============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.clds.tosca.update;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import junit.framework.TestCase;
+
+public class TemplateTest extends TestCase {
+
+    /**
+     * Test check failed.
+     */
+    public void testCheckFields() {
+        Template toTest = new Template("toTest");
+        ArrayList<String> fields = new ArrayList<>(Arrays.asList("type", "description", "enum"));
+        toTest.setFields(fields);
+        Template reference = new Template("toTest");
+        reference.setFields(fields);
+        assertTrue(toTest.checkFields(reference));
+    }
+
+}
\ No newline at end of file
diff --git a/src/test/resources/tosca/base.yaml b/src/test/resources/tosca/base.yaml
new file mode 100644
index 0000000..3d31cd2
--- /dev/null
+++ b/src/test/resources/tosca/base.yaml
@@ -0,0 +1,171 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+topology_template:
+  policy_types:
+      onap.policies.controlloop.operational.Common:
+          derived_from: tosca.policies.Root
+          version: 1.0.0
+          description: Operational Policy for Control Loop execution
+          properties:
+              id:
+                  type: String
+                  description: The unique control loop id.
+                  required: true
+              timeout:
+                  type: Integer
+                  description: |
+                    Overall timeout for executing all the operations. This timeout should equal or exceed the total
+                    timeout for each operation listed.
+                  required: true
+              abatement:
+                  type: Boolean
+                  description: Whether an abatement event message will be expected for the control loop from DCAE.
+                  required: true
+                  default: false
+              trigger:
+                  type: String
+                  description: Initial operation to execute upon receiving an Onset event message for the Control Loop.
+                  required: true
+              operations:
+                  type: List
+                  description: List of operations to be performed when Control Loop is triggered.
+                  required: true
+                  entry_schema:
+                      type: onap.datatype.controlloop.operation.Failure
+
+      onap.policies.controlloop.operational.common.Apex:
+          derived_from: onap.policies.controlloop.operational.Common
+          type_version: 1.0.0
+          version: 1.0.0
+          description: Operational policies for Apex PDP
+          properties:
+
+      onap.policies.controlloop.operational.common.Drools:
+          derived_from: onap.policies.controlloop.operational.Common
+          type_version: 1.0.0
+          version: 1.0.0
+          description: Operational policies for Drools PDP
+          properties:
+              controllerName:
+                  type: String
+                  description: Drools controller properties
+                  required: false
+                  
+data_types:
+    # TBD if this is needed
+    onap.datatype.controlloop.operation.Failure:
+        derived_from: tosca.datatypes.Root
+        description: Captures information of an operational failure performed for control loop
+        properties:
+            messages:
+                type: String
+                description: error message
+                required: true
+            category:
+                type: String
+                description: |
+                    The category the error occurred in. Whether this is a general error from the actor, or the operation
+                    timed out, retries were exhausted in trying to execute the operation, a guard policy prevented the
+                    operation from occuring, or an exception in the system caused the failure.
+                constraints:
+                - valid_values: [error, timeout, retries, guard, exception]
+                - values: [4.5, false]
+
+    onap.datatype.controlloop.Target:
+        derived_from: tosca.datatypes.Root
+        description: Definition for a entity in A&AI to perform a control loop operation on
+        properties:
+            targetType:
+                type: String
+                description: Category for the target type
+                required: true
+                constraints:
+                - valid_values: [VNF, VM, VFMODULE, PNF]
+            entityIds:
+                type: Map
+                description: |
+                    Map of values that identify the resource. If none are provided, it is assumed that the
+                    entity that generated the ONSET event will be the target.
+                required: false
+
+    onap.datatype.controlloop.Actor:
+        derived_from: tosca.datatypes.Root
+        description: An actor/operation/target definition
+        properties:
+            actor:
+                type: String
+                description: The actor performing the operation.
+                required: true
+            operation:
+                type: String
+                description: The operation the actor is performing.
+                required: true
+            target:
+                type: String
+                description: The resource the operation should be performed on.
+                required: true
+                metadata:
+                    clamp_possible_values: <string:see clamp project for syntax>
+            payload:
+                type: Map
+                description: Name/value pairs of payload information passed by Policy to the actor
+                required: false
+                entry_schema:
+                    type: String
+
+    onap.datatype.controlloop.Operation:
+        derived_from: tosca.datatypes.Root
+        description: An operation supported by an actor
+        properties:
+            id:
+                type: String
+                description: Unique identifier for the operation
+                required: true
+            description:
+                type: String
+                description: A user-friendly description of the intent for the operation
+                required: false
+            operation:
+                type: onap.datatype.controlloop.Actor
+                description: The definition of the operation to be performed.
+                required: true
+                metadata:
+                    clamp_possible_values: <string:see clamp project for syntax>
+            timeout:
+                type: Integer
+                description: The amount of time for the actor to perform the operation.
+                required: true
+            retries:
+                type: Integer
+                description: The number of retries the actor should attempt to perform the operation.
+                required: true
+                default: 0
+            success:
+                type: String
+                description: Points to the operation to invoke on success. A value of "final_success" indicates and end to the operation.
+                required: false
+                default: final_success
+            failure:
+                type: String
+                description: Points to the operation to invoke on Actor operation failure.
+                required: false
+                default: final_failure
+            failure_timeout:
+                type: String
+                description: Points to the operation to invoke when the time out for the operation occurs.
+                required: false
+                default: final_failure_timeout
+            failure_retries:
+                type: String
+                description: Points to the operation to invoke when the current operation has exceeded its max retries.
+                required: false
+                default: final_failure_retries
+            failure_exception:
+                type: String
+                description: Points to the operation to invoke when the current operation causes an exception.
+                required: false
+                default: final_failure_exception
+            failure_guard:
+                type: String
+                description: Points to the operation to invoke when the current operation is blocked due to guard policy enforcement.
+                required: false
+                default: final_failure_guard     
diff --git a/src/test/resources/tosca/new-converter/constraints.yaml b/src/test/resources/tosca/new-converter/constraints.yaml
new file mode 100644
index 0000000..7a94ca9
--- /dev/null
+++ b/src/test/resources/tosca/new-converter/constraints.yaml
@@ -0,0 +1,60 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0

+policy_types:

+    onap.policies.controlloop.operational.common.Drools:

+        derived_from: onap.policies.controlloop.operational.Common

+        type_version: 1.0.0

+        version: 1.0.0

+        description: Operational policies for Drools PDP

+        properties:

+            controllerName:

+                type: String

+                description: Drools controller properties

+                required: true

+data_types:

+    onap.datatype.controlloop.Operation:

+        derived_from: tosca.datatypes.Root

+        description: An operation supported by an actor

+        properties:

+            id:

+                type: String

+                description: Unique identifier for the operation

+                required: true

+                constraints:

+                - length: 8

+            description:

+                type: Array

+                description: A user-friendly description of the intent for the operation

+                required: false

+                constraints:

+                - min_length: 5

+                - max_length: 7

+            test:

+                type: Integer

+                description: |

+                    Overall timeout for executing all the operations. This timeout should equal or exceed the total

+                    timeout for each operation listed.

+                required: true

+                constraints:

+                    - greater_than: 7

+                    - greater_or_equal: 1

+                    - less_than: 7

+                    - less_or_equal: 1

+            timeout:

+                type: Integer

+                description: The amount of time for the actor to perform the operation.

+                required: true

+                constraints:

+                - valid_values: [3,4,5.5,6,10]

+            retries:

+                type: Integer

+                description: The number of retries the actor should attempt to perform the operation.

+                required: true

+                default: 0

+                constraints:

+                - equal: 5

+            success:

+                type: String

+                description: Points to the operation to invoke on success. A value of "final_success" indicates and end to the operation.

+                required: false

+                constraints:

+                - valid_values: [VALID,TERMINATED]

diff --git a/src/test/resources/tosca/new-converter/origin.json b/src/test/resources/tosca/new-converter/origin.json
new file mode 100644
index 0000000..da0529d
--- /dev/null
+++ b/src/test/resources/tosca/new-converter/origin.json
@@ -0,0 +1 @@
+{"onap.policies.controlloop.operational.common.Drools":{"derived_from":{"onap.policies.controlloop.operational.Common":{"derived_from":"tosca.policies.Root","required":["id","timeout","abatement","trigger","operations"],"properties":{"id":{"type":"String","description":"The unique control loop id.","required":true},"timeout":{"type":"Integer","description":"Overall timeout for executing all the operations. This timeout should equal or exceed the total\ntimeout for each operation listed.\n","required":true},"abatement":{"description":"Whether an abatement event message will be expected for the control loop from DCAE.","required":true},"trigger":{"type":"String","description":"Initial operation to execute upon receiving an Onset event message for the Control Loop.","required":true},"operations":{"type":"List","description":"List of operations to be performed when Control Loop is triggered.","required":true,"entry_schema":{"type":{"onap.datatype.controlloop.Operation":{"derived_from":"tosca.datatypes.Root","required":["id","operation","timeout","retries"],"properties":{"id":{"type":"String","description":"Unique identifier for the operation","required":true},"description":{"type":"String","description":"A user-friendly description of the intent for the operation","required":false},"operation":{"type":{"onap.datatype.controlloop.Actor":{"derived_from":"tosca.datatypes.Root","required":["actor","operation","target"],"properties":{"actor":{"type":"String","description":"The actor performing the operation.","required":true},"operation":{"type":"String","description":"The operation the actor is performing.","required":true},"target":{"type":"String","description":"The resource the operation should be performed on.","required":true,"metadata":{"clamp_possible_values":"some special treatment"}},"payload":{"type":"Map","description":"Name/value pairs of payload information passed by Policy to the actor","required":false,"entry_schema":{"type":"String"}}}}},"description":"The definition of the operation to be performed.","required":true},"timeout":{"type":"Integer","description":"The amount of time for the actor to perform the operation.","required":true},"retries":{"type":"Integer","description":"The number of retries the actor should attempt to perform the operation.","required":true},"success":{"type":"String","description":"Points to the operation to invoke on success. A value of \"final_success\" indicates and end to the operation.","required":false},"failure":{"type":"String","description":"Points to the operation to invoke on Actor operation failure.","required":false},"failure_timeout":{"type":"String","description":"Points to the operation to invoke when the time out for the operation occurs.","required":false},"failure_retries":{"type":"String","description":"Points to the operation to invoke when the current operation has exceeded its max retries.","required":false},"failure_exception":{"type":"String","description":"Points to the operation to invoke when the current operation causes an exception.","required":false},"failure_guard":{"type":"String","description":"Points to the operation to invoke when the current operation is blocked due to guard policy enforcement.","required":false}}}}}}}}},"required":[],"properties":{"controllerName":{"type":"String","description":"Drools controller properties","required":false}}}}
\ No newline at end of file
diff --git a/src/test/resources/tosca/new-converter/rendu.json b/src/test/resources/tosca/new-converter/rendu.json
new file mode 100644
index 0000000..da0529d
--- /dev/null
+++ b/src/test/resources/tosca/new-converter/rendu.json
@@ -0,0 +1 @@
+{"onap.policies.controlloop.operational.common.Drools":{"derived_from":{"onap.policies.controlloop.operational.Common":{"derived_from":"tosca.policies.Root","required":["id","timeout","abatement","trigger","operations"],"properties":{"id":{"type":"String","description":"The unique control loop id.","required":true},"timeout":{"type":"Integer","description":"Overall timeout for executing all the operations. This timeout should equal or exceed the total\ntimeout for each operation listed.\n","required":true},"abatement":{"description":"Whether an abatement event message will be expected for the control loop from DCAE.","required":true},"trigger":{"type":"String","description":"Initial operation to execute upon receiving an Onset event message for the Control Loop.","required":true},"operations":{"type":"List","description":"List of operations to be performed when Control Loop is triggered.","required":true,"entry_schema":{"type":{"onap.datatype.controlloop.Operation":{"derived_from":"tosca.datatypes.Root","required":["id","operation","timeout","retries"],"properties":{"id":{"type":"String","description":"Unique identifier for the operation","required":true},"description":{"type":"String","description":"A user-friendly description of the intent for the operation","required":false},"operation":{"type":{"onap.datatype.controlloop.Actor":{"derived_from":"tosca.datatypes.Root","required":["actor","operation","target"],"properties":{"actor":{"type":"String","description":"The actor performing the operation.","required":true},"operation":{"type":"String","description":"The operation the actor is performing.","required":true},"target":{"type":"String","description":"The resource the operation should be performed on.","required":true,"metadata":{"clamp_possible_values":"some special treatment"}},"payload":{"type":"Map","description":"Name/value pairs of payload information passed by Policy to the actor","required":false,"entry_schema":{"type":"String"}}}}},"description":"The definition of the operation to be performed.","required":true},"timeout":{"type":"Integer","description":"The amount of time for the actor to perform the operation.","required":true},"retries":{"type":"Integer","description":"The number of retries the actor should attempt to perform the operation.","required":true},"success":{"type":"String","description":"Points to the operation to invoke on success. A value of \"final_success\" indicates and end to the operation.","required":false},"failure":{"type":"String","description":"Points to the operation to invoke on Actor operation failure.","required":false},"failure_timeout":{"type":"String","description":"Points to the operation to invoke when the time out for the operation occurs.","required":false},"failure_retries":{"type":"String","description":"Points to the operation to invoke when the current operation has exceeded its max retries.","required":false},"failure_exception":{"type":"String","description":"Points to the operation to invoke when the current operation causes an exception.","required":false},"failure_guard":{"type":"String","description":"Points to the operation to invoke when the current operation is blocked due to guard policy enforcement.","required":false}}}}}}}}},"required":[],"properties":{"controllerName":{"type":"String","description":"Drools controller properties","required":false}}}}
\ No newline at end of file
diff --git a/src/test/resources/tosca/new-converter/sampleOperationalPolicies.yaml b/src/test/resources/tosca/new-converter/sampleOperationalPolicies.yaml
new file mode 100644
index 0000000..c2afecc
--- /dev/null
+++ b/src/test/resources/tosca/new-converter/sampleOperationalPolicies.yaml
@@ -0,0 +1,160 @@
+

+tosca_definitions_version: tosca_simple_yaml_1_0_0

+policy_types:

+    onap.policies.controlloop.operational.Common:

+        derived_from: tosca.policies.Root

+        version: 1.0.0

+        description: Operational Policy for Control Loop execution

+        properties:

+            id:

+                type: String

+                description: The unique control loop id.

+                required: true

+            timeout:

+                type: Integer

+                description: |

+                    Overall timeout for executing all the operations. This timeout should equal or exceed the total

+                    timeout for each operation listed.

+                required: true

+            abatement:

+                type: Boolean

+                description: Whether an abatement event message will be expected for the control loop from DCAE.

+                required: true

+                default: false

+            trigger:

+                type: String

+                description: Initial operation to execute upon receiving an Onset event message for the Control Loop.

+                required: true

+            operations:

+                type: List

+                description: List of operations to be performed when Control Loop is triggered.

+                required: true

+                entry_schema:

+                    type: onap.datatype.controlloop.Operation

+    onap.policies.controlloop.operational.common.Drools:

+        derived_from: onap.policies.controlloop.operational.Common

+        type_version: 1.0.0

+        version: 1.0.0

+        description: Operational policies for Drools PDP

+        properties:

+            controllerName:

+                type: String

+                description: Drools controller properties

+                required: false

+data_types:

+    # TBD if this is needed

+    onap.datatype.controlloop.operation.Failure:

+        derived_from: tosca.datatypes.Root

+        description: Captures information of an operational failure performed for control loop

+        properties:

+            messages:

+                type: String

+                description: error message

+                required: true

+            category:

+                type: String

+                description: |

+                    The category the error occurred in. Whether this is a general error from the actor, or the operation

+                    timed out, retries were exhausted in trying to execute the operation, a guard policy prevented the

+                    operation from occuring, or an exception in the system caused the failure.

+                constraints:

+                - valid_values: [error, timeout, retries, guard, exception]

+    onap.datatype.controlloop.Target:

+        derived_from: tosca.datatypes.Root

+        description: Definition for a entity in A&AI to perform a control loop operation on

+        properties:

+            targetType:

+                type: String

+                description: Category for the target type

+                required: true

+                constraints:

+                - valid_values: [VNF, VM, VFMODULE, PNF]

+            entityIds:

+                type: Map

+                description: |

+                    Map of values that identify the resource. If none are provided, it is assumed that the

+                    entity that generated the ONSET event will be the target.

+                required: false

+                entry_schema:

+                    type: String

+    onap.datatype.controlloop.Actor:

+        derived_from: tosca.datatypes.Root

+        description: An actor/operation/target definition

+        properties:

+            actor:

+                type: String

+                description: The actor performing the operation.

+                required: true

+            operation:

+                type: String

+                description: The operation the actor is performing.

+                required: true

+            target:

+                type: String

+                description: The resource the operation should be performed on.

+                required: true

+                metadata:

+                    clamp_possible_values: <string:see clamp project for syntax>

+            payload:

+                type: Map

+                description: Name/value pairs of payload information passed by Policy to the actor

+                required: false

+                entry_schema:

+                    type: String

+    onap.datatype.controlloop.Operation:

+        derived_from: tosca.datatypes.Root

+        description: An operation supported by an actor

+        properties:

+            id:

+                type: String

+                description: Unique identifier for the operation

+                required: true

+            description:

+                type: String

+                description: A user-friendly description of the intent for the operation

+                required: false

+            operation:

+                type: onap.datatype.controlloop.Actor

+                description: The definition of the operation to be performed.

+                required: true

+                metadata:

+                    clamp_possible_values: <string:see clamp project for syntax>

+            timeout:

+                type: Integer

+                description: The amount of time for the actor to perform the operation.

+                required: true

+            retries:

+                type: Integer

+                description: The number of retries the actor should attempt to perform the operation.

+                required: true

+                default: 0

+            success:

+                type: String

+                description: Points to the operation to invoke on success. A value of "final_success" indicates and end to the operation.

+                required: false

+                default: final_success

+            failure:

+                type: String

+                description: Points to the operation to invoke on Actor operation failure.

+                required: false

+                default: final_failure

+            failure_timeout:

+                type: String

+                description: Points to the operation to invoke when the time out for the operation occurs.

+                required: false

+                default: final_failure_timeout

+            failure_retries:

+                type: String

+                description: Points to the operation to invoke when the current operation has exceeded its max retries.

+                required: false

+                default: final_failure_retries

+            failure_exception:

+                type: String

+                description: Points to the operation to invoke when the current operation causes an exception.

+                required: false

+                default: final_failure_exception

+            failure_guard:

+                type: String

+                description: Points to the operation to invoke when the current operation is blocked due to guard policy enforcement.

+                required: false

+                default: final_failure_guard

diff --git a/src/test/resources/tosca/new-converter/sampleOperationalPoliciesEXTENTED.yaml b/src/test/resources/tosca/new-converter/sampleOperationalPoliciesEXTENTED.yaml
new file mode 100644
index 0000000..9d45c64
--- /dev/null
+++ b/src/test/resources/tosca/new-converter/sampleOperationalPoliciesEXTENTED.yaml
@@ -0,0 +1,174 @@
+

+tosca_definitions_version: tosca_simple_yaml_1_0_0

+policy_types:

+    onap.policies.controlloop.operational.Common:

+        derived_from: onap.datatype.controlloop.operation.Failure

+        version: 1.0.0

+        description: Operational Policy for Control Loop execution

+        properties:

+            id:

+                type: String

+                description: The unique control loop id.

+                required: true

+            timeout:

+                type: Integer

+                description: |

+                    Overall timeout for executing all the operations. This timeout should equal or exceed the total

+                    timeout for each operation listed.

+                required: true

+                constraints:

+                - valid_values: [1, 2, 5]

+                - equal: 5

+                - greater_than: 7

+                - greater_or_equal: 1

+                - less_than: 7

+                - less_or_equal: 1

+            abatement:

+                type: Boolean

+                description: Whether an abatement event message will be expected for the control loop from DCAE.

+                required: true

+                default: false

+            trigger:

+                type: String

+                description: Initial operation to execute upon receiving an Onset event message for the Control Loop.

+                required: true

+            operations:

+                type: List

+                description: List of operations to be performed when Control Loop is triggered.

+                required: true

+                entry_schema:

+                    type: onap.datatype.controlloop.Operation

+    onap.policies.controlloop.operational.common.Drools:

+        derived_from: onap.policies.controlloop.operational.Common

+        type_version: 1.0.0

+        version: 1.0.0

+        description: Operational policies for Drools PDP

+        properties:

+            controllerName:

+                type: String

+                description: Drools controller properties

+                required: true

+data_types:

+    # TBD if this is needed

+    onap.datatype.controlloop.operation.Failure:

+        derived_from: onap.datatype.controlloop.Target

+        description: Captures information of an operational failure performed for control loop

+        properties:

+            messages:

+                type: String

+                description: error message

+                required: true

+            category:

+                type: String

+                description: |

+                    The category the error occurred in. Whether this is a general error from the actor, or the operation

+                    timed out, retries were exhausted in trying to execute the operation, a guard policy prevented the

+                    operation from occuring, or an exception in the system caused the failure.

+                constraints:

+                - valid_values: [error, timeout, retries, guard, exception]

+    onap.datatype.controlloop.Target:

+        derived_from: tosca.datatypes.Root

+        description: Definition for a entity in A&AI to perform a control loop operation on

+        properties:

+            targetType:

+                type: String

+                description: Category for the target type

+                required: true

+                constraints:

+                - valid_values: [VNF, VM, VFMODULE, PNF]

+            entityIds:

+                type: Map

+                description: |

+                    Map of values that identify the resource. If none are provided, it is assumed that the

+                    entity that generated the ONSET event will be the target.

+                required: false

+                entry_schema:

+                    type: String

+    onap.datatype.controlloop.Actor:

+        derived_from: tosca.datatypes.Root

+        description: An actor/operation/target definition

+        properties:

+            actor:

+                type: String

+                description: The actor performing the operation.

+                required: true

+                default: [1,"String",5.5,true]

+            operation:

+                type: String

+                description: The operation the actor is performing.

+                required: true

+            target:

+                type: String

+                description: The resource the operation should be performed on.

+                required: true

+                metadata:

+                    clamp_possible_values: <string:see clamp project for syntax>

+            payload:

+                type: Map

+                description: Name/value pairs of payload information passed by Policy to the actor

+                required: false

+                entry_schema:

+                    type: String

+    onap.datatype.controlloop.Operation:

+        derived_from: tosca.datatypes.Root

+        description: An operation supported by an actor

+        properties:

+            id:

+                type: String

+                description: Unique identifier for the operation

+                required: true

+            description:

+                type: Array

+                description: A user-friendly description of the intent for the operation

+                required: false

+                constraints:

+                - min_length: 5

+                - max_length: 7

+                - length: 1

+            operation:

+                type: onap.datatype.controlloop.Actor

+                description: The definition of the operation to be performed.

+                required: true

+                metadata:

+                    clamp_possible_values: <string:see clamp project for syntax>

+            timeout:

+                type: Integer

+                description: The amount of time for the actor to perform the operation.

+                required: true

+                constraints:

+                - valid_values: [3, 4, 5.5, 6, 10]

+            retries:

+                type: Integer

+                description: The number of retries the actor should attempt to perform the operation.

+                required: true

+                default: 0

+            success:

+                type: String

+                description: Points to the operation to invoke on success. A value of "final_success" indicates and end to the operation.

+                required: false

+                default: final_success

+            failure:

+                type: String

+                description: Points to the operation to invoke on Actor operation failure.

+                required: false

+                default: final_failure

+            failure_timeout:

+                type: String

+                description: Points to the operation to invoke when the time out for the operation occurs.

+                required: false

+                default: final_failure_timeout

+            failure_retries:

+                type: String

+                description: Points to the operation to invoke when the current operation has exceeded its max retries.

+                required: false

+                default: final_failure_retries

+            failure_exception:

+                type: String

+                description: Points to the operation to invoke when the current operation causes an exception.

+                required: false

+                default: final_failure_exception

+            failure_guard:

+                type: String

+                description: Points to the operation to invoke when the current operation is blocked due to guard policy enforcement.

+                required: false

+                default: final_failure_guard

diff --git a/src/test/resources/tosca/templates.properties b/src/test/resources/tosca/templates.properties
new file mode 100644
index 0000000..792238b
--- /dev/null
+++ b/src/test/resources/tosca/templates.properties
@@ -0,0 +1,7 @@
+Integer=type,description,required
+Boolean=description,required
+String=type,description,required,metadata,constraints
+Number=description,required
+Map=type,description,required,entry_schema
+List=type,required,entry_schema
+onap.datatype.controlloop.Actor=type,description,required,metadata
\ No newline at end of file