use of org.eclipse.bpmn2.di.BPMNPlane in project kie-wb-common by kiegroup.
the class Bpmn2JsonUnmarshaller method createBpmnEdgeForSequenceFlow.
private void createBpmnEdgeForSequenceFlow(BpmnDiFactory factory, BPMNPlane plane, SequenceFlow sequenceFlow) {
BPMNEdge edge = factory.createBPMNEdge();
edge.setBpmnElement(sequenceFlow);
DcFactory dcFactory = DcFactory.eINSTANCE;
Point point = dcFactory.createPoint();
List<Point> dockers = _dockers.get(sequenceFlow.getId());
if (sequenceFlow.getSourceRef() != null) {
Bounds sourceBounds = _bounds.get(sequenceFlow.getSourceRef().getId());
// Test for valid docker with X and Y > -1, created by EdgeParser
if (dockers != null && dockers.size() > 0 && dockers.get(0).getX() > -1 && dockers.get(0).getY() > -1) {
// First docker is connection to Source
point.setX(sourceBounds.getX() + dockers.get(0).getX());
point.setY(sourceBounds.getY() + dockers.get(0).getY());
} else {
// Default is right middle of Source
point.setX(sourceBounds.getX() + sourceBounds.getWidth());
point.setY(sourceBounds.getY() + (sourceBounds.getHeight() / 2));
}
}
edge.getWaypoint().add(point);
for (int i = 1; i < dockers.size() - 1; i++) {
edge.getWaypoint().add(dockers.get(i));
}
point = dcFactory.createPoint();
if (sequenceFlow.getTargetRef() != null) {
Bounds targetBounds = _bounds.get(sequenceFlow.getTargetRef().getId());
// Test for valid docker with X and Y > -1, created by EdgeParser
if (dockers != null && dockers.size() > 1 && dockers.get(dockers.size() - 1).getX() > -1 && dockers.get(dockers.size() - 1).getY() > -1) {
// Last docker is connection to Target
point.setX(targetBounds.getX() + dockers.get(dockers.size() - 1).getX());
point.setY(targetBounds.getY() + dockers.get(dockers.size() - 1).getY());
} else {
// Default is left middle of Target
point.setX(targetBounds.getX());
point.setY(targetBounds.getY() + (targetBounds.getHeight() / 2));
}
}
edge.getWaypoint().add(point);
plane.getPlaneElement().add(edge);
}
use of org.eclipse.bpmn2.di.BPMNPlane in project kie-wb-common by kiegroup.
the class Bpmn2JsonUnmarshaller method updateShapeBounds.
public void updateShapeBounds(Definitions def, BPMNPlane plane, BaseElement ele) {
if (ele instanceof Lane) {
Lane nextLane = (Lane) ele;
Bounds laneBounds = getBoundsForElement(nextLane, plane);
updateShapeBoundsInLanes(plane, ele, nextLane, laneBounds.getX(), laneBounds.getY());
} else {
List<RootElement> rootElements = def.getRootElements();
for (RootElement root : rootElements) {
if (root instanceof Process) {
Process process = (Process) root;
List<FlowElement> flowElements = process.getFlowElements();
boolean foundAsTopLevel = false;
for (FlowElement fe : flowElements) {
if (fe.getId().equals(ele.getId())) {
foundAsTopLevel = true;
break;
}
}
if (!foundAsTopLevel) {
for (FlowElement fe : flowElements) {
if (fe instanceof SubProcess) {
SubProcess sp = (SubProcess) fe;
// process if this subprocess is not in a lane already. otherwise we already updated it
if (sp.getLanes().size() < 1) {
// find the subprocess bounds
Bounds subprocessBounds = getBoundsForElement(fe, plane);
if (subprocessBounds != null) {
updateShapeBoundsInSubprocess(plane, ele, (SubProcess) fe, subprocessBounds.getX(), subprocessBounds.getY());
}
}
}
}
}
}
}
}
}
use of org.eclipse.bpmn2.di.BPMNPlane in project kie-wb-common by kiegroup.
the class Bpmn2JsonUnmarshaller method revisitDI.
public void revisitDI(Definitions def) {
revisitDIColors(def);
BPMNPlane plane = def.getDiagrams().get(0).getPlane();
List<DiagramElement> diagramElements = plane.getPlaneElement();
for (DiagramElement dia : diagramElements) {
if (dia instanceof BPMNShape) {
BPMNShape shape = (BPMNShape) dia;
updateShapeBounds(def, plane, shape.getBpmnElement());
}
}
revisitEdgeBoundsInLanes(def);
revisitEdgeBoundsInContainers(def);
}
use of org.eclipse.bpmn2.di.BPMNPlane in project kie-wb-common by kiegroup.
the class Bpmn2JsonUnmarshaller method orderDiagramElements.
private void orderDiagramElements(Definitions def) {
if (zOrderEnabled) {
if (def.getDiagrams() != null) {
for (BPMNDiagram diagram : def.getDiagrams()) {
if (diagram != null) {
_logger.debug("Sorting diagram elements using DIZorderComparator");
BPMNPlane plane = diagram.getPlane();
List<DiagramElement> unsortedElements = new ArrayList<DiagramElement>(plane.getPlaneElement());
plane.getPlaneElement().clear();
Collections.sort(unsortedElements, new DIZorderComparator());
plane.getPlaneElement().addAll(unsortedElements);
diagram.setPlane(plane);
}
}
}
}
}
use of org.eclipse.bpmn2.di.BPMNPlane in project kie-wb-common by kiegroup.
the class Bpmn2JsonUnmarshaller method updateEdgeBoundsInContainers.
public void updateEdgeBoundsInContainers(FlowElementsContainer container, SequenceFlow sq, BPMNPlane plane, BPMNEdge edge) {
for (FlowElement fele : container.getFlowElements()) {
// dont do this if its on process level
if (!(container instanceof Process)) {
if (fele.getId().equals(sq.getSourceRef().getId())) {
Bounds sourceBounds = getBoundsForElement(sq.getSourceRef(), plane);
List<Point> edgePoints = edge.getWaypoint();
if (edgePoints != null && edgePoints.size() > 1) {
if (sourceBounds != null) {
Point first = edgePoints.get(0);
first.setX(first.getX() + getBoundsForElement(container, plane).getX() + (sourceBounds.getWidth() / 2));
first.setY(first.getY() + getBoundsForElement(container, plane).getY());
}
}
} else if (fele.getId().equals(sq.getTargetRef().getId())) {
Bounds targetBounds = getBoundsForElement(sq.getTargetRef(), plane);
List<Point> edgePoints = edge.getWaypoint();
if (edgePoints != null && edgePoints.size() > 1) {
if (targetBounds != null) {
Point last = edgePoints.get(edgePoints.size() - 1);
last.setX(last.getX() + getBoundsForElement(container, plane).getX() - (targetBounds.getWidth() / 2));
last.setY(last.getY() + getBoundsForElement(container, plane).getY());
}
}
}
}
if (fele instanceof FlowElementsContainer) {
updateEdgeBoundsInContainers((FlowElementsContainer) fele, sq, plane, edge);
}
}
}
Aggregations