Search in sources :

Example 21 with Lane

use of org.eclipse.bpmn2.Lane in project kie-wb-common by kiegroup.

the class AbstractProcessConverter method convertLaneSets.

private void convertLaneSets(List<LaneSet> laneSets, Map<String, BpmnNode> freeFloatingNodes, BpmnNode firstDiagramNode) {
    laneSets.stream().flatMap(laneSet -> laneSet.getLanes().stream()).forEach(lane -> {
        BpmnNode laneNode = converterFactory.laneConverter().convert(lane);
        laneNode.setParent(firstDiagramNode);
        lane.getFlowNodeRefs().forEach(node -> {
            freeFloatingNodes.get(node.getId()).setParent(laneNode);
        });
    });
}
Also used : LinkedHashMap(java.util.LinkedHashMap) Result(org.kie.workbench.common.stunner.bpmn.backend.converters.Result) List(java.util.List) LaneSet(org.eclipse.bpmn2.LaneSet) Map(java.util.Map) TypedFactoryManager(org.kie.workbench.common.stunner.bpmn.backend.converters.TypedFactoryManager) BpmnNode(org.kie.workbench.common.stunner.bpmn.backend.converters.tostunner.BpmnNode) ConverterFactory(org.kie.workbench.common.stunner.bpmn.backend.converters.tostunner.ConverterFactory) DefinitionResolver(org.kie.workbench.common.stunner.bpmn.backend.converters.tostunner.DefinitionResolver) FlowElement(org.eclipse.bpmn2.FlowElement) PropertyReaderFactory(org.kie.workbench.common.stunner.bpmn.backend.converters.tostunner.properties.PropertyReaderFactory) BpmnNode(org.kie.workbench.common.stunner.bpmn.backend.converters.tostunner.BpmnNode)

Example 22 with Lane

use of org.eclipse.bpmn2.Lane in project kie-wb-common by kiegroup.

the class Bpmn2JsonMarshaller method marshallLanes.

private List<String> marshallLanes(Lane lane, BPMNPlane plane, JsonGenerator generator, float xOffset, float yOffset, String preProcessingData, Definitions def) throws JsonGenerationException, IOException {
    Bounds bounds = ((BPMNShape) findDiagramElement(plane, lane)).getBounds();
    List<String> nodeRefIds = new ArrayList<String>();
    if (bounds != null) {
        generator.writeStartObject();
        generator.writeObjectField("resourceId", lane.getId());
        Map<String, Object> laneProperties = new LinkedHashMap<String, Object>();
        if (lane.getName() != null) {
            laneProperties.put(NAME, StringEscapeUtils.unescapeXml(lane.getName()));
        } else {
            laneProperties.put(NAME, "");
        }
        // overwrite name if elementname extension element is present
        String elementName = Utils.getMetaDataValue(lane.getExtensionValues(), "elementname");
        if (elementName != null) {
            laneProperties.put(NAME, elementName);
        }
        putDocumentationProperty(lane, laneProperties);
        Iterator<FeatureMap.Entry> iter = lane.getAnyAttribute().iterator();
        boolean foundBgColor = false;
        boolean foundBrColor = false;
        boolean foundFontColor = false;
        boolean foundSelectable = false;
        while (iter.hasNext()) {
            FeatureMap.Entry entry = iter.next();
            if (entry.getEStructuralFeature().getName().equals("background-color") || entry.getEStructuralFeature().getName().equals("bgcolor")) {
                laneProperties.put(BGCOLOR, entry.getValue());
                foundBgColor = true;
            }
            if (entry.getEStructuralFeature().getName().equals("border-color") || entry.getEStructuralFeature().getName().equals("bordercolor")) {
                laneProperties.put(BORDERCOLOR, entry.getValue());
                foundBrColor = true;
            }
            if (entry.getEStructuralFeature().getName().equals("fontsize")) {
                laneProperties.put(FONTSIZE, entry.getValue());
                foundBrColor = true;
            }
            if (entry.getEStructuralFeature().getName().equals("color") || entry.getEStructuralFeature().getName().equals("fontcolor")) {
                laneProperties.put(FONTCOLOR, entry.getValue());
                foundFontColor = true;
            }
            if (entry.getEStructuralFeature().getName().equals("selectable")) {
                laneProperties.put(ISSELECTABLE, entry.getValue());
                foundSelectable = true;
            }
        }
        if (!foundBgColor) {
            laneProperties.put(BGCOLOR, defaultBgColor_Swimlanes);
        }
        if (!foundBrColor) {
            laneProperties.put(BORDERCOLOR, defaultBrColor);
        }
        if (!foundFontColor) {
            laneProperties.put(FONTCOLOR, defaultFontColor);
        }
        if (!foundSelectable) {
            laneProperties.put(ISSELECTABLE, "true");
        }
        marshallProperties(laneProperties, generator);
        generator.writeObjectFieldStart("stencil");
        generator.writeObjectField("id", "Lane");
        generator.writeEndObject();
        generator.writeArrayFieldStart("childShapes");
        for (FlowElement flowElement : lane.getFlowNodeRefs()) {
            nodeRefIds.add(flowElement.getId());
            if (coordianteManipulation) {
                marshallFlowElement(flowElement, plane, generator, bounds.getX(), bounds.getY(), preProcessingData, def);
            } else {
                marshallFlowElement(flowElement, plane, generator, 0, 0, preProcessingData, def);
            }
        }
        generator.writeEndArray();
        generator.writeArrayFieldStart("outgoing");
        Process process = (Process) plane.getBpmnElement();
        writeAssociations(process, lane.getId(), generator);
        generator.writeEndArray();
        generator.writeObjectFieldStart("bounds");
        generator.writeObjectFieldStart("lowerRight");
        generator.writeObjectField("x", bounds.getX() + bounds.getWidth() - xOffset);
        generator.writeObjectField("y", bounds.getY() + bounds.getHeight() - yOffset);
        generator.writeEndObject();
        generator.writeObjectFieldStart("upperLeft");
        generator.writeObjectField("x", bounds.getX() - xOffset);
        generator.writeObjectField("y", bounds.getY() - yOffset);
        generator.writeEndObject();
        generator.writeEndObject();
        generator.writeEndObject();
    } else {
        // dont marshall the lane unless it has BPMNDI info (eclipse editor does not generate it for lanes currently.
        for (FlowElement flowElement : lane.getFlowNodeRefs()) {
            nodeRefIds.add(flowElement.getId());
            // we dont want an offset here!
            marshallFlowElement(flowElement, plane, generator, 0, 0, preProcessingData, def);
        }
    }
    return nodeRefIds;
}
Also used : Bounds(org.eclipse.dd.dc.Bounds) ArrayList(java.util.ArrayList) AdHocSubProcess(org.eclipse.bpmn2.AdHocSubProcess) Process(org.eclipse.bpmn2.Process) SubProcess(org.eclipse.bpmn2.SubProcess) BPMNShape(org.eclipse.bpmn2.di.BPMNShape) LinkedHashMap(java.util.LinkedHashMap) FeatureMap(org.eclipse.emf.ecore.util.FeatureMap) Entry(java.util.Map.Entry) FlowElement(org.eclipse.bpmn2.FlowElement) DataObject(org.eclipse.bpmn2.DataObject)

Example 23 with Lane

use of org.eclipse.bpmn2.Lane in project kie-wb-common by kiegroup.

the class SubProcessPropertyWriter method addLaneSet.

public void addLaneSet(List<LanePropertyWriter> lanes) {
    if (lanes.isEmpty()) {
        return;
    }
    LaneSet laneSet = bpmn2.createLaneSet();
    List<org.eclipse.bpmn2.Lane> laneList = laneSet.getLanes();
    lanes.forEach(l -> laneList.add(l.getElement()));
    process.getLaneSets().add(laneSet);
    lanes.forEach(l -> {
        this.childElements.put(l.getElement().getId(), l);
    });
}
Also used : LaneSet(org.eclipse.bpmn2.LaneSet)

Example 24 with Lane

use of org.eclipse.bpmn2.Lane in project kie-wb-common by kiegroup.

the class LanePropertyWriterTest method JBPM_7523_shouldPreserveNameChars.

@Test
public void JBPM_7523_shouldPreserveNameChars() {
    Lane lane = bpmn2.createLane();
    PropertyWriterFactory writerFactory = new PropertyWriterFactory();
    LanePropertyWriter w = writerFactory.of(lane);
    String aWeirdName = "   XXX  !!@@ <><> ";
    String aWeirdDoc = "   XXX  !!@@ <><> Docs ";
    w.setName(aWeirdName);
    w.setDocumentation(aWeirdDoc);
    assertThat(lane.getName()).isEqualTo(StringEscapeUtils.escapeXml10(aWeirdName.trim()));
    assertThat(CustomElement.name.of(lane).get()).isEqualTo(asCData(aWeirdName));
    assertThat(lane.getDocumentation().get(0).getText()).isEqualTo(asCData(aWeirdDoc));
}
Also used : Lane(org.eclipse.bpmn2.Lane) Test(org.junit.Test)

Example 25 with Lane

use of org.eclipse.bpmn2.Lane in project kie-wb-common by kiegroup.

the class ProcessConverterDelegateTest method testConvertLanes.

@Test
public void testConvertLanes() {
    Task task0_1 = mockTask("TASK0_1");
    Task task0_2 = mockTask("TASK0_2");
    Task task0_3 = mockTask("TASK0_3");
    Task task1_1 = mockTask("TASK1_1");
    Lane lane1 = mockLane("Lane1", "Lane1Name", task1_1);
    Task task2_1 = mockTask("TASK2_1");
    Lane lane2 = mockLane("Lane2", "Lane2Name", task2_1);
    LaneSet laneSet1 = mockLaneSet("LaneSet1", lane1, lane2);
    Task task3_2_1 = mockTask("TASK3_2_1");
    Task task3_2_2 = mockTask("TASK3_2_2");
    Lane lane3_2 = mockLane("Lane3_2", "Lane3_2Name", task3_2_1, task3_2_2);
    Task task3_1_2_1 = mockTask("TASK3_1_2_1");
    Lane lane3_1_2 = mockLane("Lane3_1_2", "Lane3_1_2Name", task3_1_2_1);
    Task task3_1_1_1_1 = mockTask("task3_1_1_1_1");
    Lane lane3_1_1_1 = mockLane("Lane3_1_1_1", "lane3_1_1_1Name", task3_1_1_1_1);
    Task task3_1_1_2_1 = mockTask("task3_1_1_2_1");
    Lane lane3_1_1_2 = mockLane("Lane3_1_1_2", "lane3_1_1_2Name", task3_1_1_2_1);
    Lane lane3_1_1 = mockLane("Lane3_1_1", "Lane3_1_1Name", mockLaneSet("laneSet3_1_1", lane3_1_1_1, lane3_1_1_2));
    Lane lane3_1 = mockLane("Lane3_1", "Lane3_1Name", mockLaneSet("laneSet3_1", lane3_1_1, lane3_1_2));
    Lane lane3 = mockLane("Lane3", "Lane3Name", mockLaneSet("LaneSet3", lane3_1, lane3_2));
    LaneSet laneSet2 = mockLaneSet("LaneSet2", lane3);
    List<FlowElement> flowElements = Arrays.asList(task0_1, task0_2, task0_3, task1_1, task2_1, task3_1_1_1_1, task3_1_1_2_1, task3_1_2_1, task3_2_1, task3_2_2);
    List<LaneSet> laneSets = Arrays.asList(laneSet1, laneSet2);
    Result<Map<String, BpmnNode>> result = converterDelegate.convertChildNodes(parentNode, flowElements, laneSets);
    Map<String, BpmnNode> nodes = result.value();
    assertEquals(16, nodes.size());
    assertEquals(9, parentNode.getChildren().size());
    assertHasChildren(parentNode, task0_1.getId(), task0_2.getId(), task0_3.getId(), lane1.getId(), lane2.getId(), lane3_2.getId(), lane3_1_2.getId(), lane3_1_1_1.getId(), lane3_1_1_2.getId());
    BpmnNode lane1Node = getChildById(parentNode, lane1.getId());
    assertNotNull(lane1Node);
    assertHasChildren(lane1Node, task1_1.getId());
    BpmnNode lane2Node = getChildById(parentNode, lane2.getId());
    assertNotNull(lane2Node);
    assertHasChildren(lane2Node, task2_1.getId());
    BpmnNode lane3_1_1_1Node = getChildById(parentNode, lane3_1_1_1.getId());
    assertNotNull(lane3_1_1_1Node);
    assertHasChildren(lane3_1_1_1Node, task3_1_1_1_1.getId());
    BpmnNode lane3_1_1_2Node = getChildById(parentNode, lane3_1_1_2.getId());
    assertNotNull(lane3_1_1_2Node);
    assertHasChildren(lane3_1_1_2Node, task3_1_1_2_1.getId());
    BpmnNode lane3_1_2Node = getChildById(parentNode, lane3_1_2.getId());
    assertNotNull(lane3_1_2Node);
    assertHasChildren(lane3_1_2Node, task3_1_2_1.getId());
    BpmnNode lane3_2Node = getChildById(parentNode, lane3_2.getId());
    assertHasChildren(lane3_2Node);
    assertHasChildren(lane3_2Node, task3_2_1.getId(), task3_2_2.getId());
    // assert messages for converted lane sets
    List<MarshallingMessage> messages = result.messages();
    assertEquals(4, messages.size());
    assertTrue(messages.stream().map(MarshallingMessage::getMessageKey).allMatch(MarshallingMessageKeys.childLaneSetConverted::equals));
}
Also used : MarshallingMessage(org.kie.workbench.common.stunner.core.marshaller.MarshallingMessage) Task(org.eclipse.bpmn2.Task) ManualTask(org.eclipse.bpmn2.ManualTask) Lane(org.eclipse.bpmn2.Lane) LaneSet(org.eclipse.bpmn2.LaneSet) BpmnNode(org.kie.workbench.common.stunner.bpmn.backend.converters.tostunner.BpmnNode) FlowElement(org.eclipse.bpmn2.FlowElement) MarshallingMessageKeys(org.kie.workbench.common.stunner.core.marshaller.MarshallingMessageKeys) Map(java.util.Map) HashMap(java.util.HashMap) Test(org.junit.Test)

Aggregations

Lane (org.eclipse.bpmn2.Lane)17 SubProcess (org.eclipse.bpmn2.SubProcess)13 AdHocSubProcess (org.eclipse.bpmn2.AdHocSubProcess)12 LaneSet (org.eclipse.bpmn2.LaneSet)12 Process (org.eclipse.bpmn2.Process)11 RootElement (org.eclipse.bpmn2.RootElement)11 FlowElement (org.eclipse.bpmn2.FlowElement)10 ArrayList (java.util.ArrayList)9 FlowNode (org.eclipse.bpmn2.FlowNode)8 ItemDefinition (org.eclipse.bpmn2.ItemDefinition)5 Message (org.eclipse.bpmn2.Message)5 Bounds (org.eclipse.dd.dc.Bounds)5 Entry (java.util.Map.Entry)4 Error (org.eclipse.bpmn2.Error)4 Escalation (org.eclipse.bpmn2.Escalation)4 FlowElementsContainer (org.eclipse.bpmn2.FlowElementsContainer)4 Signal (org.eclipse.bpmn2.Signal)4 SimpleFeatureMapEntry (org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.SimpleFeatureMapEntry)4 FeatureMap (org.eclipse.emf.ecore.util.FeatureMap)4 Test (org.junit.Test)4