Add new tests for DAO 53/12453/1
authorDeterme, Sebastien (sd378r) <sd378r@intl.att.com>
Thu, 14 Sep 2017 14:11:00 +0000 (16:11 +0200)
committerDeterme, Sebastien (sd378r) <sd378r@intl.att.com>
Thu, 14 Sep 2017 14:11:00 +0000 (16:11 +0200)
New test to validate some methods of the DAO and attempt to disable
Camunda in IT when it was not required to have it

Change-Id: I231230a7a4818f4bfd7887319a321625f66ffcae
Issue-ID: CLAMP-54
Signed-off-by: Determe, Sebastien (sd378r) <sd378r@intl.att.com>
13 files changed:
src/main/java/org/onap/clamp/clds/service/CldsTemplateService.java
src/test/java/org/onap/clamp/clds/it/CldsDaoIT.java [new file with mode: 0644]
src/test/java/org/onap/clamp/clds/it/DcaeIT.java
src/test/java/org/onap/clamp/clds/it/HttpsIT.java
src/test/java/org/onap/clamp/clds/it/PolicyClientIT.java
src/test/java/org/onap/clamp/clds/it/PropJsonBuilderIT.java
src/test/java/org/onap/clamp/clds/it/RefPropIT.java
src/test/java/org/onap/clamp/clds/it/SdcCatalogServicesIT.java
src/test/java/org/onap/clamp/clds/it/SdcIT.java
src/test/resources/application-no-camunda.properties [new file with mode: 0644]
src/test/resources/example/dao/bpmn-prop.json [new file with mode: 0644]
src/test/resources/example/dao/bpmn-template.xml [new file with mode: 0644]
src/test/resources/example/dao/image-template.xml [new file with mode: 0644]

index 87f9c0c..e6e7325 100644 (file)
@@ -49,7 +49,6 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.xml.transform.TransformerException;
 
-import org.camunda.bpm.engine.RuntimeService;
 import org.onap.clamp.clds.dao.CldsDao;
 import org.onap.clamp.clds.model.CldsTemplate;
 import org.onap.clamp.clds.model.ValueItem;
@@ -90,8 +89,7 @@ public class CldsTemplateService extends SecureServiceBase {
 
     @Autowired
     private CldsDao        cldsDao;
-    @Autowired
-    private RuntimeService runtimeService;
+
     @Autowired
     private XslTransformer cldsBpmnTransformer;
 
diff --git a/src/test/java/org/onap/clamp/clds/it/CldsDaoIT.java b/src/test/java/org/onap/clamp/clds/it/CldsDaoIT.java
new file mode 100644 (file)
index 0000000..bd41964
--- /dev/null
@@ -0,0 +1,149 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+
+package org.onap.clamp.clds.it;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import javax.ws.rs.NotFoundException;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.onap.clamp.clds.AbstractIT;
+import org.onap.clamp.clds.dao.CldsDao;
+import org.onap.clamp.clds.model.CldsEvent;
+import org.onap.clamp.clds.model.CldsModel;
+import org.onap.clamp.clds.model.CldsTemplate;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * Test CldsDAO calls through CldsModel and CldsEvent. This really test the DB
+ * and stored procedures.
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@TestPropertySource(locations = "classpath:application-no-camunda.properties")
+public class CldsDaoIT extends AbstractIT {
+
+    @Autowired
+    public CldsDao cldsDao;
+
+    private String bpmnText;
+    private String imageText;
+    private String bpmnPropText;
+
+    @Before
+    public void setupBefore() throws IOException {
+        bpmnText = ResourceFileUtil.getResourceAsString("example/dao/bpmn-template.xml");
+        imageText = ResourceFileUtil.getResourceAsString("example/dao/image-template.xml");
+        bpmnPropText = ResourceFileUtil.getResourceAsString("example/dao/bpmn-prop.json");
+    }
+
+    @Test
+    public void testModelSave() throws IOException {
+        // Add the template first
+        CldsTemplate newTemplate = new CldsTemplate();
+        newTemplate.setName("test-template");
+
+        newTemplate.setBpmnText(bpmnText);
+        newTemplate.setImageText(imageText);
+
+        // Save the template in DB
+        cldsDao.setTemplate(newTemplate, "user");
+        // Test if it's well there
+        CldsTemplate newTemplateRead = cldsDao.getTemplate("test-template");
+        assertEquals(bpmnText, newTemplateRead.getBpmnText());
+        assertEquals(imageText, newTemplateRead.getImageText());
+
+        // Save the model
+        CldsModel newModel = new CldsModel();
+        newModel.setName("test-model");
+
+        newModel.setBpmnText(bpmnText);
+        newModel.setImageText(imageText);
+        newModel.setPropText(bpmnPropText);
+        newModel.setControlNamePrefix("ClosedLoop-");
+        newModel.setTemplateName("test-template");
+        newModel.setTemplateId(newTemplate.getId());
+        newModel.setDocText(newTemplate.getPropText());
+        newModel.setDocId(newTemplate.getPropId());
+        // Save the model in DB
+        cldsDao.setModel(newModel, "user");
+        // Test if the model can be retrieved
+        CldsModel newCldsModel = cldsDao.getModelTemplate("test-model");
+        assertEquals(bpmnText, newCldsModel.getBpmnText());
+        assertEquals(imageText, newCldsModel.getImageText());
+        assertEquals(bpmnPropText, newCldsModel.getPropText());
+
+    }
+
+    @Test(expected = NotFoundException.class)
+    public void testGetModelNotFound() {
+        CldsModel.retrieve(cldsDao, "test-model-not-found", false);
+    }
+
+    @Test(expected = NotFoundException.class)
+    public void testGetTemplateNotFound() {
+        CldsTemplate.retrieve(cldsDao, "test-template-not-found", false);
+    }
+
+    @Test
+    public void testInsEvent() {
+        // Add the template first
+        CldsTemplate newTemplate = new CldsTemplate();
+        newTemplate.setName("test-template-for-event");
+
+        newTemplate.setBpmnText(bpmnText);
+        newTemplate.setImageText(imageText);
+
+        newTemplate.save(cldsDao, "user");
+
+        // Test if it's well there
+        CldsTemplate newTemplateRead = CldsTemplate.retrieve(cldsDao, "test-template-for-event", false);
+        assertEquals(bpmnText, newTemplateRead.getBpmnText());
+        assertEquals(imageText, newTemplateRead.getImageText());
+
+        // Save the model
+        CldsModel newModel = new CldsModel();
+        newModel.setName("test-model-for-event");
+
+        newModel.setBpmnText(bpmnText);
+        newModel.setImageText(imageText);
+        newModel.setPropText(bpmnPropText);
+        newModel.setControlNamePrefix("ClosedLoop-");
+        newModel.setTemplateName("test-template-for-event");
+        newModel.setTemplateId(newTemplate.getId());
+        newModel.setDocText(newTemplate.getPropText());
+        newModel.setDocId(newTemplate.getPropId());
+
+        CldsEvent.insEvent(cldsDao, newModel, "user", CldsEvent.ACTION_RESTART, CldsEvent.ACTION_STATE_COMPLETED,
+                "process-instance-id");
+    }
+}
index fc13270..4f0ebb4 100644 (file)
@@ -25,7 +25,6 @@ package org.onap.clamp.clds.it;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
-
 import org.onap.clamp.clds.AbstractIT;
 import org.onap.clamp.clds.client.req.DcaeReq;
 import org.onap.clamp.clds.model.CldsEvent;
@@ -33,13 +32,16 @@ import org.onap.clamp.clds.model.prop.ModelProperties;
 import org.onap.clamp.clds.util.ResourceFileUtil;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit4.SpringRunner;
 
 /**
- * Test DCAE API in org.onap.clamp.ClampDesigner.client package - replicate DCAE Delegates in test.
+ * Test DCAE API in org.onap.clamp.ClampDesigner.client package - replicate DCAE
+ * Delegates in test.
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
+@TestPropertySource(locations = "classpath:application-no-camunda.properties")
 public class DcaeIT extends AbstractIT {
 
     @Test
@@ -49,8 +51,8 @@ public class DcaeIT extends AbstractIT {
         String modelName = "example-model";
         String controlName = "ClosedLoop-FRWL-SIG-1582f840-2881-11e6-b4ec-005056a9d756";
 
-        ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT,
-                true, modelBpmnProp, modelProp);
+        ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT, true, modelBpmnProp,
+                modelProp);
         String dcaeReq = DcaeReq.format(refProp, prop);
 
         System.out.println("dcaeReq=" + dcaeReq);
index ff63033..98319b4 100644 (file)
@@ -50,8 +50,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.web.client.RestTemplate;
 
 /**
- * Test DCAE API in org.onap.clamp.ClampDesigner.client package - replicate DCAE
- * Delegates in test.
+ * Test HTTP and HTTPS settings + redirection of HTTP to HTTPS.
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT)
index 69df972..09f1efe 100644 (file)
@@ -48,6 +48,7 @@ import org.onap.policy.api.AttributeType;
 import org.skyscreamer.jsonassert.JSONAssert;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit4.SpringRunner;
 
 /**
@@ -56,6 +57,7 @@ import org.springframework.test.context.junit4.SpringRunner;
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
+@TestPropertySource(locations = "classpath:application-no-camunda.properties")
 public class PolicyClientIT extends AbstractIT {
     String modelProp;
     String modelBpmnProp;
index c3b35ee..525f9cb 100644 (file)
@@ -39,6 +39,7 @@ import org.onap.clamp.clds.client.req.SdcReq;
 import org.onap.clamp.clds.model.CldsSdcServiceDetail;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit4.SpringRunner;
 
 /**
@@ -49,9 +50,10 @@ import org.springframework.test.context.junit4.SpringRunner;
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
+@TestPropertySource(locations = "classpath:application-no-camunda.properties")
 public class PropJsonBuilderIT extends AbstractIT {
 
-    private String globalPropsPartial;
+    private String       globalPropsPartial;
     private ObjectMapper mapper;
 
     /**
@@ -86,8 +88,8 @@ public class PropJsonBuilderIT extends AbstractIT {
     private void sampleJsonObject() throws JsonProcessingException {
 
         /**
-         * Create three JSON Objects objectNode1, objectNode2, objectNode3.
-         * Add all these three objects in the array
+         * Create three JSON Objects objectNode1, objectNode2, objectNode3. Add
+         * all these three objects in the array
          */
         ObjectNode objectNode1 = mapper.createObjectNode();
         objectNode1.put("bookName", "Java");
@@ -124,9 +126,8 @@ public class PropJsonBuilderIT extends AbstractIT {
     private String createEmptySharedObject() throws JsonProcessingException {
 
         /**
-         * Empty Object initialization.
-         * "": { "vf": { "": "" }, "location": { "": "" }, "alarmCondition": {
-         * "": "" } }
+         * Empty Object initialization. "": { "vf": { "": "" }, "location": {
+         * "": "" }, "alarmCondition": { "": "" } }
          */
         ObjectNode emptyObjectNode = mapper.createObjectNode();
         emptyObjectNode.put("", "");
@@ -144,8 +145,8 @@ public class PropJsonBuilderIT extends AbstractIT {
         emptyServiceObjectNode.putPOJO("", samArrayNode);
 
         /**
-         * Object initialization.
-         * "vf": { " ": " ", "DCAE_CLAMP_DEMO3 1": "DCAE_CLAMP_DEMO3" }
+         * Object initialization. "vf": { " ": " ", "DCAE_CLAMP_DEMO3 1":
+         * "DCAE_CLAMP_DEMO3" }
          *
          */
         ObjectNode dcaeClampDemo3Node = mapper.createObjectNode();
@@ -157,9 +158,8 @@ public class PropJsonBuilderIT extends AbstractIT {
         vfObjectNode2.putPOJO("vf", vfArrayNode);
 
         /**
-         * Object initialization.
-         * "location": { "SNDGCA64": "San Diego SAN3", "ALPRGAED":
-         * "Alpharetta PDK1", "LSLEILAA": "Lisle DPA3" },
+         * Object initialization. "location": { "SNDGCA64": "San Diego SAN3",
+         * "ALPRGAED": "Alpharetta PDK1", "LSLEILAA": "Lisle DPA3" },
          */
         ObjectNode sandiegoLocationNode = mapper.createObjectNode();
         sandiegoLocationNode.put("SNDGCA64", "San Diego SAN3");
@@ -173,10 +173,10 @@ public class PropJsonBuilderIT extends AbstractIT {
         locationObjectNode2.putPOJO("location", locationArrayNode);
 
         /**
-         * Object initialization.
-         * "alarmCondition": { "A+Fallback+Operation+will+soon+be+started":
-         * "A Fallback Operation will soon be started",
-         * "BRM%2C+Auto+Export+Backup+Failed": "BRM, Auto Export Backup Failed",
+         * Object initialization. "alarmCondition": {
+         * "A+Fallback+Operation+will+soon+be+started": "A Fallback Operation
+         * will soon be started", "BRM%2C+Auto+Export+Backup+Failed": "BRM, Auto
+         * Export Backup Failed",
          */
         ObjectNode alamrCondition1 = mapper.createObjectNode();
         alamrCondition1.put("A+Fallback+Operation+will+soon+be+started", "A Fallback Operation will soon be started");
@@ -206,8 +206,7 @@ public class PropJsonBuilderIT extends AbstractIT {
         byServiceBasicObjetNode.putPOJO("byService", byServiceBasicArrayNode);
 
         /**
-         * Object initialization.
-         * "byVf": { "": { "vfc": { "": "" },
+         * Object initialization. "byVf": { "": { "vfc": { "": "" },
          * "03596c12-c7e3-44b7-8994-5cdfeda8afdd": { "vfc": { " ": " " } } } }
          */
         ObjectNode vfCObjectNode = mapper.createObjectNode();
@@ -240,9 +239,8 @@ public class PropJsonBuilderIT extends AbstractIT {
     private String createTestEmptySharedObject() throws IOException {
 
         /**
-         * Object initialization.
-         * "": { "vf": { "": "" }, "location": { "": "" }, "alarmCondition": {
-         * "": "" } }
+         * Object initialization. "": { "vf": { "": "" }, "location": { "": ""
+         * }, "alarmCondition": { "": "" } }
          */
         ObjectNode emptyObjectNode = mapper.createObjectNode();
         emptyObjectNode.put("", "");
@@ -254,8 +252,8 @@ public class PropJsonBuilderIT extends AbstractIT {
         emptyServiceObjectNode.putPOJO("", vfObjectNode);
 
         /**
-         * Object initialization.
-         * "vf": { " ": " ", "DCAE_CLAMP_DEMO3 1": "DCAE_CLAMP_DEMO3" }
+         * Object initialization. "vf": { " ": " ", "DCAE_CLAMP_DEMO3 1":
+         * "DCAE_CLAMP_DEMO3" }
          *
          */
         ObjectNode vfObjectNode2 = mapper.createObjectNode();
@@ -265,9 +263,8 @@ public class PropJsonBuilderIT extends AbstractIT {
         vfObjectNode2.putPOJO("vf", dcaeClampDemo3Node);
 
         /**
-         * Object initialization.
-         * "location": { "SNDGCA64": "San Diego SAN3", "ALPRGAED":
-         * "Alpharetta PDK1", "LSLEILAA": "Lisle DPA3" },
+         * Object initialization. "location": { "SNDGCA64": "San Diego SAN3",
+         * "ALPRGAED": "Alpharetta PDK1", "LSLEILAA": "Lisle DPA3" },
          */
         // ObjectNode sandiegoLocationNode = mapper.createObjectNode();
         // sandiegoLocationNode.put("SNDGCA64","San Diego SAN3");
@@ -277,10 +274,10 @@ public class PropJsonBuilderIT extends AbstractIT {
         vfObjectNode2.putPOJO("location", locationJsonNode);
 
         /**
-         * Object initialization.
-         * "alarmCondition": { "A+Fallback+Operation+will+soon+be+started":
-         * "A Fallback Operation will soon be started",
-         * "BRM%2C+Auto+Export+Backup+Failed": "BRM, Auto Export Backup Failed",
+         * Object initialization. "alarmCondition": {
+         * "A+Fallback+Operation+will+soon+be+started": "A Fallback Operation
+         * will soon be started", "BRM%2C+Auto+Export+Backup+Failed": "BRM, Auto
+         * Export Backup Failed",
          */
         // ObjectNode alamrCondition1 = mapper.createObjectNode();
         // alamrCondition1.put("A+Fallback+Operation+will+soon+be+started","A
@@ -295,8 +292,7 @@ public class PropJsonBuilderIT extends AbstractIT {
         byServiceBasicObjetNode.putPOJO("byService", emptyServiceObjectNode);
 
         /**
-         * Object initialization.
-         * "byVf": { "": { "vfc": { "": "" },
+         * Object initialization. "byVf": { "": { "vfc": { "": "" },
          * "03596c12-c7e3-44b7-8994-5cdfeda8afdd": { "vfc": { " ": " " } } } }
          */
         ObjectNode vfCObjectNode = mapper.createObjectNode();
@@ -316,9 +312,8 @@ public class PropJsonBuilderIT extends AbstractIT {
 
     private String createCldsSharedObject(CldsSdcServiceDetail CldsSdcServiceDetail) throws IOException {
         /**
-         * Object initialization.
-         * "": { "vf": { "": "" }, "location": { "": "" }, "alarmCondition": {
-         * "": "" } }
+         * Object initialization. "": { "vf": { "": "" }, "location": { "": ""
+         * }, "alarmCondition": { "": "" } }
          */
         ObjectNode emptyObjectNode = mapper.createObjectNode();
         emptyObjectNode.put("", "");
@@ -330,8 +325,8 @@ public class PropJsonBuilderIT extends AbstractIT {
         emptyServiceObjectNode.putPOJO("", vfObjectNode);
 
         /**
-         * Object initialization.
-         * "vf": { " ": " ", "DCAE_CLAMP_DEMO3 1": "DCAE_CLAMP_DEMO3" }
+         * Object initialization. "vf": { " ": " ", "DCAE_CLAMP_DEMO3 1":
+         * "DCAE_CLAMP_DEMO3" }
          *
          */
         ObjectNode vfObjectNode2 = mapper.createObjectNode();
@@ -341,9 +336,8 @@ public class PropJsonBuilderIT extends AbstractIT {
         vfObjectNode2.putPOJO("vf", dcaeClampDemo3Node);
 
         /**
-         * Object initialization.
-         * "location": { "SNDGCA64": "San Diego SAN3", "ALPRGAED":
-         * "Alpharetta PDK1", "LSLEILAA": "Lisle DPA3" },
+         * Object initialization. "location": { "SNDGCA64": "San Diego SAN3",
+         * "ALPRGAED": "Alpharetta PDK1", "LSLEILAA": "Lisle DPA3" },
          */
         ObjectNode sandiegoLocationNode = mapper.createObjectNode();
         sandiegoLocationNode.put("SNDGCA64", "San Diego SAN3");
@@ -351,10 +345,10 @@ public class PropJsonBuilderIT extends AbstractIT {
         vfObjectNode2.putPOJO("location", sandiegoLocationNode);
 
         /**
-         * Object initialization.
-         * "alarmCondition": { "A+Fallback+Operation+will+soon+be+started":
-         * "A Fallback Operation will soon be started",
-         * "BRM%2C+Auto+Export+Backup+Failed": "BRM, Auto Export Backup Failed",
+         * Object initialization. "alarmCondition": {
+         * "A+Fallback+Operation+will+soon+be+started": "A Fallback Operation
+         * will soon be started", "BRM%2C+Auto+Export+Backup+Failed": "BRM, Auto
+         * Export Backup Failed",
          */
         ObjectNode alamrCondition1 = mapper.createObjectNode();
         alamrCondition1.put("A+Fallback+Operation+will+soon+be+started", "A Fallback Operation will soon be started");
@@ -365,8 +359,7 @@ public class PropJsonBuilderIT extends AbstractIT {
         byServiceBasicObjetNode.putPOJO("byService", emptyServiceObjectNode);
 
         /**
-         * Object initialization.
-         * "byVf": { "": { "vfc": { "": "" },
+         * Object initialization. "byVf": { "": { "vfc": { "": "" },
          * "03596c12-c7e3-44b7-8994-5cdfeda8afdd": { "vfc": { " ": " " } } } }
          */
 
index c6a5de2..473ce4a 100644 (file)
@@ -32,6 +32,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.onap.clamp.clds.AbstractIT;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit4.SpringRunner;
 
 /**
@@ -39,12 +40,14 @@ import org.springframework.test.context.junit4.SpringRunner;
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest
+@TestPropertySource(locations = "classpath:application-no-camunda.properties")
 public class RefPropIT extends AbstractIT {
 
     /**
      * Test getting prop value as a JSON Node / template.
      *
-     * @throws IOException when JSON parsing fails
+     * @throws IOException
+     *             when JSON parsing fails
      */
     @Test
     public void testJsonTemplate() throws IOException {
index 2995b6c..dce6c90 100644 (file)
@@ -41,14 +41,15 @@ import org.onap.clamp.clds.model.CldsSdcServiceInfo;
 import org.onap.clamp.clds.model.CldsServiceData;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit4.SpringRunner;
 
 /**
- * Test DCAE API in org.onap.clamp.ClampDesigner.client package - replicate DCAE
- * Delegates in test.
+ * Test SDC Catalog Service class by mocking the SDC answers.
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest
+@TestPropertySource(locations = "classpath:application-no-camunda.properties")
 public class SdcCatalogServicesIT extends AbstractIT {
     @Autowired
     private SdcCatalogServices sdcCatalogWired = new SdcCatalogServices();
index da9e5af..025420f 100644 (file)
@@ -26,7 +26,6 @@ package org.onap.clamp.clds.it;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-
 import org.onap.clamp.clds.AbstractIT;
 import org.onap.clamp.clds.client.SdcCatalogServices;
 import org.onap.clamp.clds.client.req.SdcReq;
@@ -36,16 +35,18 @@ import org.onap.clamp.clds.model.refprop.RefProp;
 import org.onap.clamp.clds.util.ResourceFileUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.junit4.SpringRunner;
 
 /**
- * Test DCAE API in org.onap.clamp.ClampDesigner.client package - replicate DCAE Delegates in test.
+ * Test SDC Blueprint formater.
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest
+@TestPropertySource(locations = "classpath:application-no-camunda.properties")
 public class SdcIT extends AbstractIT {
     @Autowired
-    private RefProp refProp;
+    private RefProp            refProp;
 
     @Autowired
     private SdcCatalogServices sdcCatalogServices;
@@ -62,14 +63,13 @@ public class SdcIT extends AbstractIT {
         String modelName = "example-model06";
         String controlName = "ClosedLoop-FRWL-SIG04-1582f840-test-test-1234-005056a9d756";
         String docText = ResourceFileUtil.getResourceAsString("example/templateProp.json");
-        ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT,
-                true, modelBpmnProp, modelProp);
+        ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT, true, modelBpmnProp,
+                modelProp);
         String blueprint = SdcReq.formatBlueprint(refProp, prop, docText);
         System.out.println("blueprint=" + blueprint);
-        //assertEquals(blueprint, "");
+        // assertEquals(blueprint, "");
     }
 
-
     @Test
     public void testTcaBlueprint() throws Exception {
         String modelProp = ResourceFileUtil.getResourceAsString("example/modelPropForPolicy.json");
@@ -77,10 +77,10 @@ public class SdcIT extends AbstractIT {
         String modelName = "example-model06";
         String controlName = "ClosedLoop-FRWL-SIG04-1582f840-test-test-1234-005056a9d756";
         String docText = ResourceFileUtil.getResourceAsString("example/templatePropForTca.json");
-        ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT,
-                true, modelBpmnProp, modelProp);
+        ModelProperties prop = new ModelProperties(modelName, controlName, CldsEvent.ACTION_SUBMIT, true, modelBpmnProp,
+                modelProp);
         String blueprint = SdcReq.formatBlueprint(refProp, prop, docText);
         System.out.println("blueprint=" + blueprint);
-        //assertEquals(blueprint, "");
+        // assertEquals(blueprint, "");
     }
 }
diff --git a/src/test/resources/application-no-camunda.properties b/src/test/resources/application-no-camunda.properties
new file mode 100644 (file)
index 0000000..dbf0e5b
--- /dev/null
@@ -0,0 +1,158 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP CLAMP
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property. All rights
+#                             reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END============================================
+# ===================================================================
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+###
+
+info.build.artifact=@project.artifactId@
+info.build.name=@project.name@
+info.build.description=@project.description@
+info.build.version=@project.version@
+
+### Set the port for HTTP or HTTPS protocol (Controlled by Spring framework, only one at a time).
+### (See below for the parameter 'server.http.port' if you want to have both enabled) 
+### To have only HTTP, keep the lines server.ssl.* commented
+### To have only HTTPS enabled, uncomment the server.ssl.* lines and specify a right keystore location
+server.port=10443
+### Settings for HTTPS (this automatically enables the HTTPS on the port 'server.port') 
+server.ssl.key-store=classpath:https/keystore-test.jks
+server.ssl.key-store-password=testpass
+server.ssl.key-password=testpass
+
+### In order to be user friendly when HTTPS is enabled, 
+### you can add another HTTP port that will be automatically redirected to HTTPS
+### by enabling this parameter (server.http.port) and set it to another port (80 or 8080, 8090, etc ...)
+#server.http-to-https-redirection.port=10080
+
+### HTTP Example:
+###--------------
+### server.port=8080
+
+### HTTPS Example:
+### --------------
+### server.port=8443
+### server.ssl.key-store=file:/tmp/mykey.jks
+### server.ssl.key-store-password=mypass
+### server.ssl.key-password=mypass
+
+### HTTP (Redirected to HTTPS) and HTTPS Example:
+### --------------------------------------------
+### server.port=8443           <-- The HTTPS port
+### server.ssl.key-store=file:/tmp/mykey.jks
+### server.ssl.key-store-password=mypass
+### server.ssl.key-password=mypass
+### server.http-to-https-redirection.port=8090  <-- The HTTP port
+
+server.contextPath=/
+#Modified engine-rest applicationpath
+spring.jersey.application-path=/engine-rest
+spring.profiles.active=clamp-default,clamp-spring-authentication
+spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
+
+#The max number of active threads in this pool
+server.tomcat.max-threads=200
+#The minimum number of threads always kept alive
+server.tomcat.min-Spare-Threads=25
+#The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less or equal to minSpareThreads
+server.tomcat.max-idle-time=60000
+
+
+#Add this properties only if you want to change the URL, AJSC Framework interceptors will intercept
+#com.att.ajsc.common.interceptors.PreInterceptor.url=/**
+#com.att.ajsc.common.interceptors.PostInterceptor.url=/**
+
+#Servlet context parameters
+server.context_parameters.p-name=value #context parameter with p-name as key and value as value.
+
+camel.springboot.consumer-template-cache-size=1000
+camel.springboot.producer-template-cache-size=1000
+camel.springboot.jmx-enabled=true
+camel.defaultthreadpool.poolsize=10
+camel.defaultthreadpool.maxpoolsize=20
+camel.defaultthreadpool.maxqueuesize=1000
+camel.defaultthreadpool.keepaliveTime=60
+camel.defaultthreadpool.rejectpolicy=CallerRuns
+
+kubernetes.namespace=com-att-ajsc
+
+#server.port=0
+
+#Camunda Process Engine DataSource connection Details
+spring.datasource.camunda.url=jdbc:mariadb://localhost:${docker.mariadb.port.host}/camundabpm?verifyServerCertificate=false&useSSL=false&requireSSL=false&autoReconnect=true&maxReconnects=100
+spring.datasource.camunda.username=camunda
+spring.datasource.camunda.password=ndMSpw4CAM
+spring.datasource.camunda.driverClassName=org.mariadb.jdbc.Driver
+spring.datasource.camunda.validationQuery=SELECT 1
+spring.datasource.camunda.validationQueryTimeout=20000
+spring.datasource.camunda.validationInterval=60000
+spring.datasource.camunda.testWhileIdle = true
+# Automatically test whether a connection provided is good or not
+spring.datasource.camunda.testOnBorrow=true
+
+#Camunda application properties
+#Camunda history level
+camunda.bpm.history-level=auto
+camunda.bpm.enabled=false
+camunda.bpm.auto-deployment-enabled=false
+camunda.bpm.job-execution.active=false
+camunda.bpm.job-execution.enabled=false
+camunda.bpm.management.health.camunda.enabled=false
+camunda.bpm.metrics.enabled=false
+
+#clds datasource connection details
+spring.datasource.cldsdb.driver-class-name=org.mariadb.jdbc.Driver
+spring.datasource.cldsdb.url=jdbc:mariadb://localhost:${docker.mariadb.port.host}/cldsdb4?verifyServerCertificate=false&useSSL=false&requireSSL=false&autoReconnect=true&maxReconnects=100
+spring.datasource.cldsdb.username=clds
+spring.datasource.cldsdb.password=sidnnd83K
+spring.datasource.cldsdb.driverClassName=com.mysql.jdbc.Driver
+spring.datasource.cldsdb.validationQuery=SELECT 1
+spring.datasource.cldsdb.validationQueryTimeout=20000
+spring.datasource.cldsdb.validationInterval=60000
+spring.datasource.cldsdb.testWhileIdle = true
+# Automatically test whether a connection provided is good or not
+spring.datasource.cldsdb.testOnBorrow=true
+
+#Async Executor default Parameters
+async.core.pool.size=10
+async.max.pool.size=20
+async.queue.capacity=500
+
+org.onap.clamp.config.dcae.url=http://localhost:9000/closedloop-dcae-services
+
+#GRM Edge endpoint details
+service.name=ajsc6camundademo
+service.version=1.0.0.0
+routeoffer=TEST
+#Update with your application name
+application.name=AJSC6CAMUNDA
+
+org.onap.clamp.config.files.cldsReference=classpath:/clds/clds-reference.properties
+org.onap.clamp.config.files.cldsPolicyConfig=classpath:/clds/clds-policy-config.properties
+org.onap.clamp.config.files.cldsUsers=classpath:/clds/clds-users.json
+org.onap.clamp.config.files.globalClds=classpath:/clds/globalClds.properties
+
+#Define user permission related parameters, the permission type can be changed but MUST be redefined in clds-users.properties in that case !
+CLDS_PERMISSION_TYPE_CL=permission-type-cl
+CLDS_PERMISSION_TYPE_CL_MANAGE=permission-type-cl-manage
+CLDS_PERMISSION_TYPE_CL_EVENT=permission-type-cl-event
+CLDS_PERMISSION_TYPE_FILTER_VF=permission-type-filter-vf
+CLDS_PERMISSION_TYPE_TEMPLATE=permission-type-template
+#This one indicates the type of instances (dev|prod|perf...), this must be set accordingly in clds-users.properties
+CLDS_PERMISSION_INSTANCE=dev
\ No newline at end of file
diff --git a/src/test/resources/example/dao/bpmn-prop.json b/src/test/resources/example/dao/bpmn-prop.json
new file mode 100644 (file)
index 0000000..f2bfc7d
--- /dev/null
@@ -0,0 +1,54 @@
+{
+       "Holmes_1m8n1s9": [
+               {
+                       "name": "correlationalLogic",
+                       "value": "uktukk"
+               }
+       ],
+       "Policy_19c1hms": {
+               "policy1": [
+                       {
+                               "name": "pname",
+                               "value": "policy1"
+                       },
+                       {
+                               "name": "pid",
+                               "value": "0"
+                       },
+                       {
+                               "name": "timeout",
+                               "value": "345"
+                       },
+                       {
+                               "policyConfigurations": [
+                                       [
+                                               {
+                                                       "name": "maxRetries",
+                                                       "value": [
+                                                               "3"
+                                                       ]
+                                               },
+                                               {
+                                                       "name": "retryTimeLimit",
+                                                       "value": [
+                                                               "180"
+                                                       ]
+                                               },
+                                               {
+                                                       "name": "_id",
+                                                       "value": [
+                                                               "JmAZRQx"
+                                                       ]
+                                               },
+                                               {
+                                                       "name": "parentPolicy",
+                                                       "value": [
+                                                               ""
+                                                       ]
+                                               }
+                                       ]
+                               ]
+                       }
+               ]
+       }
+}
\ No newline at end of file
diff --git a/src/test/resources/example/dao/bpmn-template.xml b/src/test/resources/example/dao/bpmn-template.xml
new file mode 100644 (file)
index 0000000..5aa133a
--- /dev/null
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn">
+  <bpmn:process id="Process_1" isExecutable="false">
+    <bpmn:startEvent id="StartEvent_1">
+      <bpmn:outgoing>SequenceFlow_0mshiwd</bpmn:outgoing>
+    </bpmn:startEvent>
+    <bpmn:collector id="Collector_1i63yo1">
+      <bpmn:incoming>SequenceFlow_0mshiwd</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0z37chw</bpmn:outgoing>
+    </bpmn:collector>
+    <bpmn:stringMatch id="StringMatch_1g5af0z">
+      <bpmn:incoming>SequenceFlow_0z37chw</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1io8zzg</bpmn:outgoing>
+    </bpmn:stringMatch>
+    <bpmn:vesCollector id="VesCollector_1s3sgbh">
+      <bpmn:incoming>SequenceFlow_1io8zzg</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0yenh9m</bpmn:outgoing>
+    </bpmn:vesCollector>
+    <bpmn:holmes id="Holmes_1m8n1s9">
+      <bpmn:incoming>SequenceFlow_0yenh9m</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1gq21be</bpmn:outgoing>
+    </bpmn:holmes>
+    <bpmn:tCA id="TCA_11n5nl9">
+      <bpmn:incoming>SequenceFlow_1gq21be</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_14phr7v</bpmn:outgoing>
+    </bpmn:tCA>
+    <bpmn:policy id="Policy_19c1hms">
+      <bpmn:incoming>SequenceFlow_14phr7v</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1q2yngv</bpmn:outgoing>
+    </bpmn:policy>
+    <bpmn:endEvent id="EndEvent_0z8t6ek">
+      <bpmn:incoming>SequenceFlow_1q2yngv</bpmn:incoming>
+    </bpmn:endEvent>
+    <bpmn:sequenceFlow id="SequenceFlow_0mshiwd" sourceRef="StartEvent_1" targetRef="Collector_1i63yo1" />
+    <bpmn:sequenceFlow id="SequenceFlow_0z37chw" sourceRef="Collector_1i63yo1" targetRef="StringMatch_1g5af0z" />
+    <bpmn:sequenceFlow id="SequenceFlow_1io8zzg" sourceRef="StringMatch_1g5af0z" targetRef="VesCollector_1s3sgbh" />
+    <bpmn:sequenceFlow id="SequenceFlow_0yenh9m" sourceRef="VesCollector_1s3sgbh" targetRef="Holmes_1m8n1s9" />
+    <bpmn:sequenceFlow id="SequenceFlow_1gq21be" sourceRef="Holmes_1m8n1s9" targetRef="TCA_11n5nl9" />
+    <bpmn:sequenceFlow id="SequenceFlow_14phr7v" sourceRef="TCA_11n5nl9" targetRef="Policy_19c1hms" />
+    <bpmn:sequenceFlow id="SequenceFlow_1q2yngv" sourceRef="Policy_19c1hms" targetRef="EndEvent_0z8t6ek" />
+  </bpmn:process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
+      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
+        <dc:Bounds x="50" y="162" width="36" height="36" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Collector_1i63yo1_di" bpmnElement="Collector_1i63yo1">
+        <dc:Bounds x="216" y="152" width="120" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="StringMatch_1g5af0z_di" bpmnElement="StringMatch_1g5af0z">
+        <dc:Bounds x="378" y="140" width="120" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="VesCollector_1s3sgbh_di" bpmnElement="VesCollector_1s3sgbh">
+        <dc:Bounds x="552" y="140" width="120" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Holmes_1m8n1s9_di" bpmnElement="Holmes_1m8n1s9">
+        <dc:Bounds x="702" y="140" width="120" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="TCA_11n5nl9_di" bpmnElement="TCA_11n5nl9">
+        <dc:Bounds x="878" y="140" width="120" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="Policy_19c1hms_di" bpmnElement="Policy_19c1hms">
+        <dc:Bounds x="1031" y="140" width="120" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_0z8t6ek_di" bpmnElement="EndEvent_0z8t6ek">
+        <dc:Bounds x="1231" y="162" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1204" y="198" width="90" height="20" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0mshiwd_di" bpmnElement="SequenceFlow_0mshiwd">
+        <di:waypoint xsi:type="dc:Point" x="86" y="180" />
+        <di:waypoint xsi:type="dc:Point" x="151" y="180" />
+        <di:waypoint xsi:type="dc:Point" x="151" y="192" />
+        <di:waypoint xsi:type="dc:Point" x="216" y="192" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="106" y="176" width="90" height="20" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0z37chw_di" bpmnElement="SequenceFlow_0z37chw">
+        <di:waypoint xsi:type="dc:Point" x="336" y="192" />
+        <di:waypoint xsi:type="dc:Point" x="357" y="192" />
+        <di:waypoint xsi:type="dc:Point" x="357" y="180" />
+        <di:waypoint xsi:type="dc:Point" x="378" y="180" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="312" y="176" width="90" height="20" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1io8zzg_di" bpmnElement="SequenceFlow_1io8zzg">
+        <di:waypoint xsi:type="dc:Point" x="498" y="180" />
+        <di:waypoint xsi:type="dc:Point" x="552" y="180" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="480" y="170" width="90" height="20" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0yenh9m_di" bpmnElement="SequenceFlow_0yenh9m">
+        <di:waypoint xsi:type="dc:Point" x="672" y="180" />
+        <di:waypoint xsi:type="dc:Point" x="702" y="180" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="642" y="170" width="90" height="20" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1gq21be_di" bpmnElement="SequenceFlow_1gq21be">
+        <di:waypoint xsi:type="dc:Point" x="822" y="180" />
+        <di:waypoint xsi:type="dc:Point" x="878" y="180" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="805" y="170" width="90" height="20" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_14phr7v_di" bpmnElement="SequenceFlow_14phr7v">
+        <di:waypoint xsi:type="dc:Point" x="998" y="180" />
+        <di:waypoint xsi:type="dc:Point" x="1031" y="180" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="969.5" y="170" width="90" height="20" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1q2yngv_di" bpmnElement="SequenceFlow_1q2yngv">
+        <di:waypoint xsi:type="dc:Point" x="1151" y="180" />
+        <di:waypoint xsi:type="dc:Point" x="1231" y="180" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1146" y="170" width="90" height="20" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</bpmn:definitions>
diff --git a/src/test/resources/example/dao/image-template.xml b/src/test/resources/example/dao/image-template.xml
new file mode 100644 (file)
index 0000000..d7af2aa
--- /dev/null
@@ -0,0 +1,448 @@
+<?xml version="1.0" encoding="utf-8"?><!-- created with bpmn-js / http://bpmn.io --><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+       width="1229" height="104" viewBox="44 134 1229 104" version="1.1">
+       <defs>
+               <marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10"
+                       orient="auto" refX="11" refY="10" id="markerSj7j5bqgxx">
+                       <path d="M 1 5 L 11 10 L 1 15 Z"
+                               style="stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;"
+                               fill="#000000" />
+               </marker>
+               <marker viewBox="0 0 20 20" markerWidth="20" markerHeight="20"
+                       orient="auto" refX="6" refY="6" id="markerSj7j5bqgxz">
+                       <circle cx="6" cy="6" r="3.5"
+                               style="stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;"
+                               fill="#ffffff" stroke="#000000" />
+               </marker>
+               <marker viewBox="0 0 20 20" markerWidth="20" markerHeight="20"
+                       orient="auto" refX="8.5" refY="5" id="markerSj7j5bqgx11">
+                       <path d="m 1 5 l 0 -3 l 7 3 l -7 3 z"
+                               style="stroke-width: 1; stroke-linecap: butt; stroke-dasharray: 10000, 1;"
+                               fill="#ffffff" stroke="#000000" />
+               </marker>
+               <marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10"
+                       orient="auto" refX="11" refY="10" id="markerSj7j5bqgx13">
+                       <path d="M 1 5 L 11 10 L 1 15"
+                               style="stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;"
+                               fill="#ffffff" stroke="#000000" />
+               </marker>
+               <marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10"
+                       orient="auto" refX="-1" refY="10" id="markerSj7j5bqgx15">
+                       <path d="M 0 10 L 8 6 L 16 10 L 8 14 Z"
+                               style="stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;"
+                               fill="#ffffff" stroke="#000000" />
+               </marker>
+               <marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10"
+                       orient="auto" refX="-5" refY="10" id="markerSj7j5bqgx17">
+                       <path d="M 1 4 L 5 16"
+                               style="stroke-width: 1; stroke-linecap: round; stroke-dasharray: 10000, 1;"
+                               fill="#000000" stroke="#000000" />
+               </marker>
+       </defs>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="StartEvent_1"
+                       transform="matrix(1,0,0,1,50,162)" style="display: block;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="48"
+                               height="48"></rect>
+                       <g class="djs-visual">
+                               <circle cx="18" cy="18" r="18" style="stroke-width: 2;"
+                                       stroke="#000000" fill="#ffffff"></circle>
+                       </g>
+                       <rect x="0" y="0" width="36" height="36"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="StartEvent_1_label"
+                       transform="matrix(1,0,0,1,23,198)" style="display: none;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+                               height="32"></rect>
+                       <g class="djs-visual">
+                               <text style="font-family: Arial,sans-serif; font-size: 11px;"
+                                       class=" djs-label">
+                                       <tspan x="45" y="0"></tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="90" height="20"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="Collector_1i63yo1"
+                       transform="matrix(1,0,0,1,216,152)" style="display: block;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="132"
+                               height="92"></rect>
+                       <g class="djs-visual">
+                               <rect x="0" y="0" width="120" height="80" rx="0" ry="0"
+                                       style="stroke-width: 2;" stroke="#000000" fill="#ffffff"></rect>
+                               <polyline points="120,80 120,20 " style="stroke-width: 2;"
+                                       fill="none" stroke="#000000"></polyline>
+                               <polyline points="20,0 20,80 " style="stroke-width: 2;"
+                                       fill="none" stroke="#000000"></polyline>
+                               <text style="font-family: Arial,sans-serif; font-size: 12px;"
+                                       class=" djs-label">
+                                       <tspan x="35.5" y="43.5">Collector</tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="120" height="80"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="StringMatch_1g5af0z"
+                       transform="matrix(1,0,0,1,378,140)" style="display: block;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="132"
+                               height="92"></rect>
+                       <g class="djs-visual">
+                               <rect x="0" y="0" width="120" height="80" rx="0" ry="0"
+                                       style="stroke-width: 2;" stroke="#000000" fill="#ffffff"></rect>
+                               <polyline points="0,20 120,20 " style="stroke-width: 2;"
+                                       fill="none" stroke="#000000"></polyline>
+                               <text style="font-family: Arial,sans-serif; font-size: 12px;"
+                                       class=" djs-label">
+                                       <tspan x="27.5" y="43.5">StringMatch</tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="120" height="80"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="VesCollector_1s3sgbh"
+                       transform="matrix(1,0,0,1,552,140)" style="display: block;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="132"
+                               height="92"></rect>
+                       <g class="djs-visual">
+                               <rect x="0" y="0" width="120" height="80" rx="0" ry="0"
+                                       style="stroke-width: 2;" stroke="#000000" fill="#ffffff"></rect>
+                               <polyline points="120,80 120,20 " style="stroke-width: 2;"
+                                       fill="none" stroke="#000000"></polyline>
+                               <polyline points="20,0 20,80 " style="stroke-width: 2;"
+                                       fill="none" stroke="#000000"></polyline>
+                               <text style="font-family: Arial,sans-serif; font-size: 12px;">
+                                       <tspan x="5" y="14">V</tspan>
+                               </text>
+                               <text style="font-family: Arial,sans-serif; font-size: 12px;">
+                                       <tspan x="5" y="26">E</tspan>
+                               </text>
+                               <text style="font-family: Arial,sans-serif; font-size: 12px;">
+                                       <tspan x="5" y="38">S</tspan>
+                               </text>
+                               <text style="font-family: Arial,sans-serif; font-size: 12px;"
+                                       class=" djs-label">
+                                       <tspan x="25.5" y="43.5">VesCollector</tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="120" height="80"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="Holmes_1m8n1s9"
+                       transform="matrix(1,0,0,1,702,140)" style="display: block;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="132"
+                               height="92"></rect>
+                       <g class="djs-visual">
+                               <rect x="0" y="0" width="120" height="80" rx="0" ry="0"
+                                       style="stroke-width: 2;" stroke="#000000" fill="#ffffff"></rect>
+                               <circle cx="15" cy="15" r="10" style="stroke-width: 1;"
+                                       stroke="#000000" fill="#ffffff"></circle>
+                               <text style="font-family: Arial,sans-serif; font-size: 12px;">
+                                       <tspan x="11" y="20">H</tspan>
+                               </text>
+                               <text style="font-family: Arial,sans-serif; font-size: 12px;"
+                                       class=" djs-label">
+                                       <tspan x="39" y="43.5">Holmes</tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="120" height="80"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="TCA_11n5nl9"
+                       transform="matrix(1,0,0,1,878,140)" style="display: block;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="132"
+                               height="92"></rect>
+                       <g class="djs-visual">
+                               <rect x="0" y="0" width="120" height="80" rx="0" ry="0"
+                                       style="stroke-width: 2;" stroke="#000000" fill="#ffffff"></rect>
+                               <polyline points="0,60 120,60 " style="stroke-width: 2;"
+                                       fill="none" stroke="#000000"></polyline>
+                               <text style="font-family: Arial,sans-serif; font-size: 12px;"
+                                       class=" djs-label">
+                                       <tspan x="48" y="43.5">TCA</tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="120" height="80"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="Policy_19c1hms"
+                       transform="matrix(1,0,0,1,1031,140)" style="display: block;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="132"
+                               height="92"></rect>
+                       <g class="djs-visual">
+                               <rect x="0" y="0" width="120" height="80" rx="0" ry="0"
+                                       style="stroke-width: 2;" stroke="#000000" fill="#ffffff"></rect>
+                               <polyline points="0,40 60,0 " style="stroke-width: 2;"
+                                       fill="none" stroke="#000000"></polyline>
+                               <text style="font-family: Arial,sans-serif; font-size: 12px;"
+                                       class=" djs-label">
+                                       <tspan x="43.5" y="43.5">Policy</tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="120" height="80"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="EndEvent_0z8t6ek"
+                       transform="matrix(1,0,0,1,1231,162)" style="display: block;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="48"
+                               height="48"></rect>
+                       <g class="djs-visual">
+                               <circle cx="18" cy="18" r="18" style="stroke-width: 4;"
+                                       stroke="#000000" fill="#ffffff"></circle>
+                       </g>
+                       <rect x="0" y="0" width="36" height="36"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="EndEvent_0z8t6ek_label"
+                       transform="matrix(1,0,0,1,1204,198)" style="display: none;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+                               height="32"></rect>
+                       <g class="djs-visual">
+                               <text style="font-family: Arial,sans-serif; font-size: 11px;"
+                                       class=" djs-label">
+                                       <tspan x="45" y="0"></tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="90" height="20"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-connection" data-element-id="SequenceFlow_0mshiwd"
+                       style="display: block;">
+                       <rect fill="none" class="djs-outline" x="80" y="174" width="142"
+                               height="24"></rect>
+                       <g class="djs-visual">
+                               <path d="m  86,180L151,180 L151,192 L216,192 "
+                                       style="stroke-width: 2; stroke-linejoin: round; marker-end: url(&quot;#markerSj7j5bqgxx&quot;);"
+                                       fill="none" stroke="#000000"></path>
+                       </g>
+                       <polyline points="86,180 151,180 151,192 216,192 " style="stroke-opacity: 0; stroke-width: 15;"
+                               fill="none" stroke="#ffffff" class="djs-hit"></polyline>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="SequenceFlow_0mshiwd_label"
+                       transform="matrix(1,0,0,1,106,176)" style="display: none;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+                               height="32"></rect>
+                       <g class="djs-visual">
+                               <text style="font-family: Arial,sans-serif; font-size: 11px;"
+                                       class=" djs-label">
+                                       <tspan x="45" y="0"></tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="90" height="20"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-connection" data-element-id="SequenceFlow_0z37chw"
+                       style="display: block;">
+                       <rect fill="none" class="djs-outline" x="330" y="174" width="54"
+                               height="24"></rect>
+                       <g class="djs-visual">
+                               <path d="m  336,192L357,192 L357,180 L378,180 "
+                                       style="stroke-width: 2; stroke-linejoin: round; marker-end: url(&quot;#markerSj7j5bqgxx&quot;);"
+                                       fill="none" stroke="#000000"></path>
+                       </g>
+                       <polyline points="336,192 357,192 357,180 378,180 " style="stroke-opacity: 0; stroke-width: 15;"
+                               fill="none" stroke="#ffffff" class="djs-hit"></polyline>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="SequenceFlow_0z37chw_label"
+                       transform="matrix(1,0,0,1,312,176)" style="display: none;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+                               height="32"></rect>
+                       <g class="djs-visual">
+                               <text style="font-family: Arial,sans-serif; font-size: 11px;"
+                                       class=" djs-label">
+                                       <tspan x="45" y="0"></tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="90" height="20"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-connection" data-element-id="SequenceFlow_1io8zzg"
+                       style="display: block;">
+                       <rect fill="none" class="djs-outline" x="492" y="174" width="66"
+                               height="12"></rect>
+                       <g class="djs-visual">
+                               <path d="m  498,180L552,180 "
+                                       style="stroke-width: 2; stroke-linejoin: round; marker-end: url(&quot;#markerSj7j5bqgxx&quot;);"
+                                       fill="none" stroke="#000000"></path>
+                       </g>
+                       <polyline points="498,180 552,180 " style="stroke-opacity: 0; stroke-width: 15;"
+                               fill="none" stroke="#ffffff" class="djs-hit"></polyline>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="SequenceFlow_1io8zzg_label"
+                       transform="matrix(1,0,0,1,480,170)" style="display: none;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+                               height="32"></rect>
+                       <g class="djs-visual">
+                               <text style="font-family: Arial,sans-serif; font-size: 11px;"
+                                       class=" djs-label">
+                                       <tspan x="45" y="0"></tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="90" height="20"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-connection" data-element-id="SequenceFlow_0yenh9m"
+                       style="display: block;">
+                       <rect fill="none" class="djs-outline" x="666" y="174" width="42"
+                               height="12"></rect>
+                       <g class="djs-visual">
+                               <path d="m  672,180L702,180 "
+                                       style="stroke-width: 2; stroke-linejoin: round; marker-end: url(&quot;#markerSj7j5bqgxx&quot;);"
+                                       fill="none" stroke="#000000"></path>
+                       </g>
+                       <polyline points="672,180 702,180 " style="stroke-opacity: 0; stroke-width: 15;"
+                               fill="none" stroke="#ffffff" class="djs-hit"></polyline>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="SequenceFlow_0yenh9m_label"
+                       transform="matrix(1,0,0,1,642,170)" style="display: none;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+                               height="32"></rect>
+                       <g class="djs-visual">
+                               <text style="font-family: Arial,sans-serif; font-size: 11px;"
+                                       class=" djs-label">
+                                       <tspan x="45" y="0"></tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="90" height="20"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-connection" data-element-id="SequenceFlow_1gq21be"
+                       style="display: block;">
+                       <rect fill="none" class="djs-outline" x="816" y="174" width="68"
+                               height="12"></rect>
+                       <g class="djs-visual">
+                               <path d="m  822,180L878,180 "
+                                       style="stroke-width: 2; stroke-linejoin: round; marker-end: url(&quot;#markerSj7j5bqgxx&quot;);"
+                                       fill="none" stroke="#000000"></path>
+                       </g>
+                       <polyline points="822,180 878,180 " style="stroke-opacity: 0; stroke-width: 15;"
+                               fill="none" stroke="#ffffff" class="djs-hit"></polyline>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="SequenceFlow_1gq21be_label"
+                       transform="matrix(1,0,0,1,805,170)" style="display: none;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+                               height="32"></rect>
+                       <g class="djs-visual">
+                               <text style="font-family: Arial,sans-serif; font-size: 11px;"
+                                       class=" djs-label">
+                                       <tspan x="45" y="0"></tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="90" height="20"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-connection" data-element-id="SequenceFlow_14phr7v"
+                       style="display: block;">
+                       <rect fill="none" class="djs-outline" x="992" y="174" width="45"
+                               height="12"></rect>
+                       <g class="djs-visual">
+                               <path d="m  998,180L1031,180 "
+                                       style="stroke-width: 2; stroke-linejoin: round; marker-end: url(&quot;#markerSj7j5bqgxx&quot;);"
+                                       fill="none" stroke="#000000"></path>
+                       </g>
+                       <polyline points="998,180 1031,180 " style="stroke-opacity: 0; stroke-width: 15;"
+                               fill="none" stroke="#ffffff" class="djs-hit"></polyline>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="SequenceFlow_14phr7v_label"
+                       transform="matrix(1,0,0,1,969.5,170)" style="display: none;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+                               height="32"></rect>
+                       <g class="djs-visual">
+                               <text style="font-family: Arial,sans-serif; font-size: 11px;"
+                                       class=" djs-label">
+                                       <tspan x="45" y="0"></tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="90" height="20"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-connection" data-element-id="SequenceFlow_1q2yngv"
+                       style="display: block;">
+                       <rect fill="none" class="djs-outline" x="1145" y="174" width="92"
+                               height="12"></rect>
+                       <g class="djs-visual">
+                               <path d="m  1151,180L1231,180 "
+                                       style="stroke-width: 2; stroke-linejoin: round; marker-end: url(&quot;#markerSj7j5bqgxx&quot;);"
+                                       fill="none" stroke="#000000"></path>
+                       </g>
+                       <polyline points="1151,180 1231,180 " style="stroke-opacity: 0; stroke-width: 15;"
+                               fill="none" stroke="#ffffff" class="djs-hit"></polyline>
+               </g>
+       </g>
+       <g class="djs-group" xmlns="http://www.w3.org/2000/svg">
+               <g class="djs-element djs-shape" data-element-id="SequenceFlow_1q2yngv_label"
+                       transform="matrix(1,0,0,1,1146,170)" style="display: none;">
+                       <rect fill="none" class="djs-outline" x="-6" y="-6" width="102"
+                               height="32"></rect>
+                       <g class="djs-visual">
+                               <text style="font-family: Arial,sans-serif; font-size: 11px;"
+                                       class=" djs-label">
+                                       <tspan x="45" y="0"></tspan>
+                               </text>
+                       </g>
+                       <rect x="0" y="0" width="90" height="20"
+                               style="stroke-opacity: 0; stroke-width: 15;" fill="none" stroke="#ffffff"
+                               class="djs-hit"></rect>
+               </g>
+       </g>
+</svg>
\ No newline at end of file