Search in sources :

Example 11 with Point

use of org.eclipse.dd.dc.Point in project kie-wb-common by kiegroup.

the class Bpmn2JsonMarshaller method marshallSequenceFlow.

protected void marshallSequenceFlow(SequenceFlow sequenceFlow, BPMNPlane plane, JsonGenerator generator, float xOffset, float yOffset) throws JsonGenerationException, IOException {
    // dont marshal "dangling" sequence flow..better to just omit than fail
    if (sequenceFlow.getSourceRef() == null || sequenceFlow.getTargetRef() == null) {
        return;
    }
    Map<String, Object> properties = new LinkedHashMap<String, Object>();
    // check null for sequence flow name
    if (sequenceFlow.getName() != null && !"".equals(sequenceFlow.getName())) {
        properties.put(NAME, StringEscapeUtils.unescapeXml(sequenceFlow.getName()));
    } else {
        properties.put(NAME, "");
    }
    // overwrite name if elementname extension element is present
    String elementName = Utils.getMetaDataValue(sequenceFlow.getExtensionValues(), "elementname");
    if (elementName != null) {
        properties.put(NAME, elementName);
    }
    putDocumentationProperty(sequenceFlow, properties);
    if (sequenceFlow.isIsImmediate()) {
        properties.put(ISIMMEDIATE, "true");
    } else {
        properties.put(ISIMMEDIATE, "false");
    }
    Expression conditionExpression = sequenceFlow.getConditionExpression();
    if (conditionExpression instanceof FormalExpression) {
        setConditionExpressionProperties((FormalExpression) conditionExpression, properties, "mvel");
    }
    boolean foundBgColor = false;
    boolean foundBrColor = false;
    boolean foundFontColor = false;
    boolean foundSelectable = false;
    Iterator<FeatureMap.Entry> iter = sequenceFlow.getAnyAttribute().iterator();
    while (iter.hasNext()) {
        FeatureMap.Entry entry = iter.next();
        if (entry.getEStructuralFeature().getName().equals("priority")) {
            String priorityStr = String.valueOf(entry.getValue());
            if (priorityStr != null) {
                try {
                    Integer priorityInt = Integer.parseInt(priorityStr);
                    if (priorityInt >= 1) {
                        properties.put(PRIORITY, entry.getValue());
                    } else {
                        _logger.error("Priority must be equal or greater than 1.");
                    }
                } catch (NumberFormatException e) {
                    _logger.error("Priority must be a number.");
                }
            }
        }
        if (entry.getEStructuralFeature().getName().equals("background-color") || entry.getEStructuralFeature().getName().equals("bgcolor")) {
            properties.put(BGCOLOR, entry.getValue());
            foundBgColor = true;
        }
        if (entry.getEStructuralFeature().getName().equals("border-color") || entry.getEStructuralFeature().getName().equals("bordercolor")) {
            properties.put(BORDERCOLOR, entry.getValue());
            foundBrColor = true;
        }
        if (entry.getEStructuralFeature().getName().equals("fontsize")) {
            properties.put(FONTSIZE, entry.getValue());
            foundBrColor = true;
        }
        if (entry.getEStructuralFeature().getName().equals("color") || entry.getEStructuralFeature().getName().equals("fontcolor")) {
            properties.put(FONTCOLOR, entry.getValue());
            foundFontColor = true;
        }
        if (entry.getEStructuralFeature().getName().equals("selectable")) {
            properties.put(ISSELECTABLE, entry.getValue());
            foundSelectable = true;
        }
    }
    if (!foundBgColor) {
        properties.put(BGCOLOR, defaultSequenceflowColor);
    }
    if (!foundBrColor) {
        properties.put(BORDERCOLOR, defaultSequenceflowColor);
    }
    if (!foundFontColor) {
        properties.put(FONTCOLOR, defaultSequenceflowColor);
    }
    if (!foundSelectable) {
        properties.put(ISSELECTABLE, "true");
    }
    // simulation properties
    setSimulationProperties(sequenceFlow.getId(), properties);
    // Custom attributes for Stunner's connectors - source/target auto connection flag.
    String sourcePropertyName = Bpmn2OryxManager.MAGNET_AUTO_CONNECTION + Bpmn2OryxManager.SOURCE;
    String sourceConnectorAuto = Utils.getMetaDataValue(sequenceFlow.getExtensionValues(), sourcePropertyName);
    if (sourceConnectorAuto != null && sourceConnectorAuto.trim().length() > 0) {
        properties.put(sourcePropertyName, sourceConnectorAuto);
    }
    String targetPropertyName = Bpmn2OryxManager.MAGNET_AUTO_CONNECTION + Bpmn2OryxManager.TARGET;
    String targetConnectorAuto = Utils.getMetaDataValue(sequenceFlow.getExtensionValues(), targetPropertyName);
    if (targetConnectorAuto != null && targetConnectorAuto.trim().length() > 0) {
        properties.put(targetPropertyName, targetConnectorAuto);
    }
    marshallProperties(properties, generator);
    generator.writeObjectFieldStart("stencil");
    generator.writeObjectField("id", "SequenceFlow");
    generator.writeEndObject();
    generator.writeArrayFieldStart("childShapes");
    generator.writeEndArray();
    generator.writeArrayFieldStart("outgoing");
    generator.writeStartObject();
    generator.writeObjectField("resourceId", sequenceFlow.getTargetRef().getId());
    generator.writeEndObject();
    generator.writeEndArray();
    Bounds sourceBounds = ((BPMNShape) findDiagramElement(plane, sequenceFlow.getSourceRef())).getBounds();
    Bounds targetBounds = ((BPMNShape) findDiagramElement(plane, sequenceFlow.getTargetRef())).getBounds();
    generator.writeArrayFieldStart("dockers");
    List<Point> waypoints = ((BPMNEdge) findDiagramElement(plane, sequenceFlow)).getWaypoint();
    if (waypoints.size() > 1) {
        Point waypoint = waypoints.get(0);
        writeWaypointObject(generator, waypoint.getX() - sourceBounds.getX(), waypoint.getY() - sourceBounds.getY());
    } else {
        writeWaypointObject(generator, sourceBounds.getWidth() / 2, sourceBounds.getHeight() / 2);
    }
    for (int i = 1; i < waypoints.size() - 1; i++) {
        Point waypoint = waypoints.get(i);
        writeWaypointObject(generator, waypoint.getX(), waypoint.getY());
    }
    if (waypoints.size() > 1) {
        Point waypoint = waypoints.get(waypoints.size() - 1);
        writeWaypointObject(generator, waypoint.getX() - targetBounds.getX(), waypoint.getY() - targetBounds.getY());
    } else {
        writeWaypointObject(generator, targetBounds.getWidth() / 2, targetBounds.getHeight() / 2);
    }
    generator.writeEndArray();
}
Also used : Bounds(org.eclipse.dd.dc.Bounds) Point(org.eclipse.dd.dc.Point) FormalExpression(org.eclipse.bpmn2.FormalExpression) BPMNShape(org.eclipse.bpmn2.di.BPMNShape) Point(org.eclipse.dd.dc.Point) LinkedHashMap(java.util.LinkedHashMap) FeatureMap(org.eclipse.emf.ecore.util.FeatureMap) Entry(java.util.Map.Entry) Expression(org.eclipse.bpmn2.Expression) FormalExpression(org.eclipse.bpmn2.FormalExpression) DataObject(org.eclipse.bpmn2.DataObject) BPMNEdge(org.eclipse.bpmn2.di.BPMNEdge)

Aggregations

Point (org.eclipse.dd.dc.Point)11 Bounds (org.eclipse.dd.dc.Bounds)10 BPMNEdge (org.eclipse.bpmn2.di.BPMNEdge)7 ArrayList (java.util.ArrayList)5 List (java.util.List)4 AdHocSubProcess (org.eclipse.bpmn2.AdHocSubProcess)4 DataObject (org.eclipse.bpmn2.DataObject)4 Process (org.eclipse.bpmn2.Process)4 SubProcess (org.eclipse.bpmn2.SubProcess)4 BPMNShape (org.eclipse.bpmn2.di.BPMNShape)4 Entry (java.util.Map.Entry)3 SequenceFlow (org.eclipse.bpmn2.SequenceFlow)3 TextAnnotation (org.eclipse.bpmn2.TextAnnotation)3 FeatureMap (org.eclipse.emf.ecore.util.FeatureMap)3 LinkedHashMap (java.util.LinkedHashMap)2 BoundaryEvent (org.eclipse.bpmn2.BoundaryEvent)2 FlowElement (org.eclipse.bpmn2.FlowElement)2 FlowElementsContainer (org.eclipse.bpmn2.FlowElementsContainer)2 FlowNode (org.eclipse.bpmn2.FlowNode)2 Lane (org.eclipse.bpmn2.Lane)2