diff options
13 files changed, 1000 insertions, 67 deletions
diff --git a/src/main/java/org/onap/clamp/clds/service/CldsTemplateService.java b/src/main/java/org/onap/clamp/clds/service/CldsTemplateService.java index 87f9c0c4..e6e7325a 100644 --- a/src/main/java/org/onap/clamp/clds/service/CldsTemplateService.java +++ b/src/main/java/org/onap/clamp/clds/service/CldsTemplateService.java @@ -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 index 00000000..bd419647 --- /dev/null +++ b/src/test/java/org/onap/clamp/clds/it/CldsDaoIT.java @@ -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"); + } +} diff --git a/src/test/java/org/onap/clamp/clds/it/DcaeIT.java b/src/test/java/org/onap/clamp/clds/it/DcaeIT.java index fc13270c..4f0ebb4e 100644 --- a/src/test/java/org/onap/clamp/clds/it/DcaeIT.java +++ b/src/test/java/org/onap/clamp/clds/it/DcaeIT.java @@ -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); diff --git a/src/test/java/org/onap/clamp/clds/it/HttpsIT.java b/src/test/java/org/onap/clamp/clds/it/HttpsIT.java index ff630330..98319b41 100644 --- a/src/test/java/org/onap/clamp/clds/it/HttpsIT.java +++ b/src/test/java/org/onap/clamp/clds/it/HttpsIT.java @@ -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) diff --git a/src/test/java/org/onap/clamp/clds/it/PolicyClientIT.java b/src/test/java/org/onap/clamp/clds/it/PolicyClientIT.java index 69df9721..09f1efef 100644 --- a/src/test/java/org/onap/clamp/clds/it/PolicyClientIT.java +++ b/src/test/java/org/onap/clamp/clds/it/PolicyClientIT.java @@ -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; diff --git a/src/test/java/org/onap/clamp/clds/it/PropJsonBuilderIT.java b/src/test/java/org/onap/clamp/clds/it/PropJsonBuilderIT.java index c3b35eec..525f9cb3 100644 --- a/src/test/java/org/onap/clamp/clds/it/PropJsonBuilderIT.java +++ b/src/test/java/org/onap/clamp/clds/it/PropJsonBuilderIT.java @@ -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": { " ": " " } } } } */ diff --git a/src/test/java/org/onap/clamp/clds/it/RefPropIT.java b/src/test/java/org/onap/clamp/clds/it/RefPropIT.java index c6a5de29..473ce4a2 100644 --- a/src/test/java/org/onap/clamp/clds/it/RefPropIT.java +++ b/src/test/java/org/onap/clamp/clds/it/RefPropIT.java @@ -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 { diff --git a/src/test/java/org/onap/clamp/clds/it/SdcCatalogServicesIT.java b/src/test/java/org/onap/clamp/clds/it/SdcCatalogServicesIT.java index 2995b6c8..dce6c901 100644 --- a/src/test/java/org/onap/clamp/clds/it/SdcCatalogServicesIT.java +++ b/src/test/java/org/onap/clamp/clds/it/SdcCatalogServicesIT.java @@ -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(); diff --git a/src/test/java/org/onap/clamp/clds/it/SdcIT.java b/src/test/java/org/onap/clamp/clds/it/SdcIT.java index da9e5af7..025420ff 100644 --- a/src/test/java/org/onap/clamp/clds/it/SdcIT.java +++ b/src/test/java/org/onap/clamp/clds/it/SdcIT.java @@ -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 index 00000000..dbf0e5ba --- /dev/null +++ b/src/test/resources/application-no-camunda.properties @@ -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 index 00000000..f2bfc7de --- /dev/null +++ b/src/test/resources/example/dao/bpmn-prop.json @@ -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 index 00000000..5aa133ac --- /dev/null +++ b/src/test/resources/example/dao/bpmn-template.xml @@ -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 index 00000000..d7af2aa6 --- /dev/null +++ b/src/test/resources/example/dao/image-template.xml @@ -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("#markerSj7j5bqgxx");" + 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("#markerSj7j5bqgxx");" + 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("#markerSj7j5bqgxx");" + 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("#markerSj7j5bqgxx");" + 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("#markerSj7j5bqgxx");" + 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("#markerSj7j5bqgxx");" + 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("#markerSj7j5bqgxx");" + 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 |