2  * Copyright (c) 2017 ZTE Corporation.
\r 
   3  * All rights reserved. This program and the accompanying materials
\r 
   4  * are made available under the Apache License, Version 2.0
\r 
   5  * and the Eclipse Public License v1.0 which both accompany this distribution,
\r 
   6  * and are available at http://www.eclipse.org/legal/epl-v10.html
\r 
   7  * and http://www.apache.org/licenses/LICENSE-2.0
\r 
  10  *     ZTE - initial API and implementation and/or initial documentation
\r 
  12 package org.onap.sdc.workflowdesigner.parser;
\r 
  14 import static org.junit.Assert.assertEquals;
\r 
  15 import static org.junit.Assert.fail;
\r 
  17 import java.io.IOException;
\r 
  18 import java.net.MalformedURLException;
\r 
  19 import java.net.URI;
\r 
  20 import java.nio.file.Paths;
\r 
  21 import java.util.Iterator;
\r 
  22 import java.util.List;
\r 
  24 import org.junit.Test;
\r 
  25 import org.onap.sdc.workflowdesigner.model.Element;
\r 
  26 import org.onap.sdc.workflowdesigner.model.EndEvent;
\r 
  27 import org.onap.sdc.workflowdesigner.model.Process;
\r 
  28 import org.onap.sdc.workflowdesigner.model.SequenceFlow;
\r 
  29 import org.onap.sdc.workflowdesigner.model.StartEvent;
\r 
  31 import com.fasterxml.jackson.core.JsonParseException;
\r 
  32 import com.fasterxml.jackson.databind.JsonMappingException;
\r 
  34 public class Bpmn4ToscaJsonParserTest {
\r 
  36     private static String RESOURCES_DIR = "src/test/resources/workflow";
\r 
  37     protected static String PROCESS_NAME = "test1";
\r 
  40     public void parseTest() throws JsonParseException, JsonMappingException, MalformedURLException, IOException {
\r 
  41         Bpmn4ToscaJsonParser parser = new Bpmn4ToscaJsonParser();
\r 
  42         URI srcUri = Paths.get(RESOURCES_DIR, "workflow.json").toUri();
\r 
  43         Process actualProcess = parser.parse(PROCESS_NAME, srcUri);
\r 
  44         Process expectedProcess = createReferenceProcess();
\r 
  46         assertElements(expectedProcess.getElementList(), actualProcess.getElementList());
\r 
  47         assertSequenceFlows(expectedProcess.getSequenceFlowList(), actualProcess.getSequenceFlowList());
\r 
  50     private static void assertElements(List<Element> expectedElementList, List<Element> actualElementList) {
\r 
  51         assertEquals(expectedElementList.size(), actualElementList.size());
\r 
  53         for (Iterator<Element> iterator = expectedElementList.iterator(); iterator.hasNext();) {
\r 
  54             Element expectedElement = (Element) iterator.next();
\r 
  55             Element actualElement = getElementById(expectedElement.getId(), actualElementList);
\r 
  56             if (actualElement != null) {
\r 
  57                 assertElement(expectedElement, actualElement);
\r 
  59                 fail("Element with id " + expectedElement.getId() + " could not be found");
\r 
  64     private static Element getElementById(String id, List<Element> actualElementList) {
\r 
  65         Iterator<Element> iter = actualElementList.iterator();
\r 
  66         while (iter.hasNext()) {
\r 
  67             Element element = (Element) iter.next();
\r 
  68             if (element.getId().equals(id)) {
\r 
  75     public static void assertElement(Element expected, Element actual) {
\r 
  76         assertEquals("element: id ", expected.getId(), actual.getId());
\r 
  77         assertEquals("element: name ", expected.getName(), actual.getName());
\r 
  80     public static void assertSequenceFlows(List<SequenceFlow> expectedSequenceList,
\r 
  81             List<SequenceFlow> actualSequenceFlowList) {
\r 
  82         assertEquals(expectedSequenceList.size(), actualSequenceFlowList.size());
\r 
  84         for (Iterator<SequenceFlow> iterator = expectedSequenceList.iterator(); iterator.hasNext();) {
\r 
  85             SequenceFlow expectedElement = (SequenceFlow) iterator.next();
\r 
  86             SequenceFlow actualElement = getSequenceById(expectedElement.getSourceRef(), expectedElement.getTargetRef(),
\r 
  87                     actualSequenceFlowList);
\r 
  88             if (actualElement != null) {
\r 
  89                 assertLink(expectedElement, actualElement);
\r 
  91                 fail("Element with id " + expectedElement.getId() + " could not be found");
\r 
  96     private static SequenceFlow getSequenceById(String sourceRef, String targetRef,
\r 
  97             List<SequenceFlow> actualSequenceFlowList) {
\r 
  98         Iterator<SequenceFlow> iter = actualSequenceFlowList.iterator();
\r 
  99         while (iter.hasNext()) {
\r 
 100             SequenceFlow element = (SequenceFlow) iter.next();
\r 
 101             if (element.getSourceRef().equals(sourceRef) && element.getTargetRef().equals(targetRef)) {
\r 
 108     public static void assertLink(SequenceFlow expectedLink, SequenceFlow actualLink) {
\r 
 109         assertEquals("Link source: id", expectedLink.getSourceRef(), actualLink.getSourceRef());
\r 
 110         assertEquals("Link target :id", expectedLink.getTargetRef(), actualLink.getTargetRef());
\r 
 113     private static Process createReferenceProcess() {
\r 
 114         Process process = new Process(PROCESS_NAME);
\r 
 116         StartEvent startEvent = new StartEvent();
\r 
 117         startEvent.setDocumentation("");
\r 
 118         startEvent.setId("node0");
\r 
 119         startEvent.setName("startEvent");
\r 
 120         process.getElementList().add(startEvent);
\r 
 122         EndEvent endEvent = new EndEvent();
\r 
 123         endEvent.setDocumentation("");
\r 
 124         endEvent.setId("node1");
\r 
 125         endEvent.setName("endEvent");
\r 
 126         process.getElementList().add(endEvent);
\r 
 128         SequenceFlow flow2 = new SequenceFlow();
\r 
 129         flow2.setId("node0node1");
\r 
 130         flow2.setSourceRef("node0");
\r 
 131         flow2.setTargetRef("node1");
\r 
 132         process.getSequenceFlowList().add(flow2);
\r