Search in sources :

Example 11 with Pool

use of org.activiti.bpmn.model.Pool in project Activiti by Activiti.

the class DefaultProcessDiagramGenerator method initProcessDiagramCanvas.

protected static DefaultProcessDiagramCanvas initProcessDiagramCanvas(BpmnModel bpmnModel, String imageType, String activityFontName, String labelFontName, String annotationFontName, ClassLoader customClassLoader) {
    // We need to calculate maximum values to know how big the image will be in its entirety
    double minX = Double.MAX_VALUE;
    double maxX = 0;
    double minY = Double.MAX_VALUE;
    double maxY = 0;
    for (Pool pool : bpmnModel.getPools()) {
        GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(pool.getId());
        minX = graphicInfo.getX();
        maxX = graphicInfo.getX() + graphicInfo.getWidth();
        minY = graphicInfo.getY();
        maxY = graphicInfo.getY() + graphicInfo.getHeight();
    }
    List<FlowNode> flowNodes = gatherAllFlowNodes(bpmnModel);
    for (FlowNode flowNode : flowNodes) {
        GraphicInfo flowNodeGraphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());
        // width
        if (flowNodeGraphicInfo.getX() + flowNodeGraphicInfo.getWidth() > maxX) {
            maxX = flowNodeGraphicInfo.getX() + flowNodeGraphicInfo.getWidth();
        }
        if (flowNodeGraphicInfo.getX() < minX) {
            minX = flowNodeGraphicInfo.getX();
        }
        // height
        if (flowNodeGraphicInfo.getY() + flowNodeGraphicInfo.getHeight() > maxY) {
            maxY = flowNodeGraphicInfo.getY() + flowNodeGraphicInfo.getHeight();
        }
        if (flowNodeGraphicInfo.getY() < minY) {
            minY = flowNodeGraphicInfo.getY();
        }
        for (SequenceFlow sequenceFlow : flowNode.getOutgoingFlows()) {
            List<GraphicInfo> graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(sequenceFlow.getId());
            if (graphicInfoList != null) {
                for (GraphicInfo graphicInfo : graphicInfoList) {
                    // width
                    if (graphicInfo.getX() > maxX) {
                        maxX = graphicInfo.getX();
                    }
                    if (graphicInfo.getX() < minX) {
                        minX = graphicInfo.getX();
                    }
                    // height
                    if (graphicInfo.getY() > maxY) {
                        maxY = graphicInfo.getY();
                    }
                    if (graphicInfo.getY() < minY) {
                        minY = graphicInfo.getY();
                    }
                }
            }
        }
    }
    List<Artifact> artifacts = gatherAllArtifacts(bpmnModel);
    for (Artifact artifact : artifacts) {
        GraphicInfo artifactGraphicInfo = bpmnModel.getGraphicInfo(artifact.getId());
        if (artifactGraphicInfo != null) {
            // width
            if (artifactGraphicInfo.getX() + artifactGraphicInfo.getWidth() > maxX) {
                maxX = artifactGraphicInfo.getX() + artifactGraphicInfo.getWidth();
            }
            if (artifactGraphicInfo.getX() < minX) {
                minX = artifactGraphicInfo.getX();
            }
            // height
            if (artifactGraphicInfo.getY() + artifactGraphicInfo.getHeight() > maxY) {
                maxY = artifactGraphicInfo.getY() + artifactGraphicInfo.getHeight();
            }
            if (artifactGraphicInfo.getY() < minY) {
                minY = artifactGraphicInfo.getY();
            }
        }
        List<GraphicInfo> graphicInfoList = bpmnModel.getFlowLocationGraphicInfo(artifact.getId());
        if (graphicInfoList != null) {
            for (GraphicInfo graphicInfo : graphicInfoList) {
                // width
                if (graphicInfo.getX() > maxX) {
                    maxX = graphicInfo.getX();
                }
                if (graphicInfo.getX() < minX) {
                    minX = graphicInfo.getX();
                }
                // height
                if (graphicInfo.getY() > maxY) {
                    maxY = graphicInfo.getY();
                }
                if (graphicInfo.getY() < minY) {
                    minY = graphicInfo.getY();
                }
            }
        }
    }
    int nrOfLanes = 0;
    for (Process process : bpmnModel.getProcesses()) {
        for (Lane l : process.getLanes()) {
            nrOfLanes++;
            GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(l.getId());
            // // width
            if (graphicInfo.getX() + graphicInfo.getWidth() > maxX) {
                maxX = graphicInfo.getX() + graphicInfo.getWidth();
            }
            if (graphicInfo.getX() < minX) {
                minX = graphicInfo.getX();
            }
            // height
            if (graphicInfo.getY() + graphicInfo.getHeight() > maxY) {
                maxY = graphicInfo.getY() + graphicInfo.getHeight();
            }
            if (graphicInfo.getY() < minY) {
                minY = graphicInfo.getY();
            }
        }
    }
    // Special case, see https://activiti.atlassian.net/browse/ACT-1431
    if (flowNodes.isEmpty() && bpmnModel.getPools().isEmpty() && nrOfLanes == 0) {
        // Nothing to show
        minX = 0;
        minY = 0;
    }
    return new DefaultProcessDiagramCanvas((int) maxX + 10, (int) maxY + 10, (int) minX, (int) minY, imageType, activityFontName, labelFontName, annotationFontName, customClassLoader);
}
Also used : SequenceFlow(org.activiti.bpmn.model.SequenceFlow) GraphicInfo(org.activiti.bpmn.model.GraphicInfo) Lane(org.activiti.bpmn.model.Lane) EventSubProcess(org.activiti.bpmn.model.EventSubProcess) Process(org.activiti.bpmn.model.Process) SubProcess(org.activiti.bpmn.model.SubProcess) Artifact(org.activiti.bpmn.model.Artifact) Pool(org.activiti.bpmn.model.Pool) FlowNode(org.activiti.bpmn.model.FlowNode)

Example 12 with Pool

use of org.activiti.bpmn.model.Pool in project Activiti by Activiti.

the class PoolConverterTest method validateModel.

private void validateModel(BpmnModel model) {
    String idPool = "idPool";
    String idProcess = "poolProcess";
    assertEquals(1, model.getPools().size());
    Pool pool = model.getPool(idPool);
    assertEquals(idPool, pool.getId());
    assertEquals(idProcess, pool.getProcessRef());
    assertTrue(pool.isExecutable());
    Process process = model.getProcess(idPool);
    assertEquals(idProcess, process.getId());
    assertTrue(process.isExecutable());
    assertEquals(3, process.getLanes().size());
    Lane lane = process.getLanes().get(0);
    assertEquals("idLane1", lane.getId());
    assertEquals("Lane 1", lane.getName());
    assertEquals(7, lane.getFlowReferences().size());
    assertTrue(lane.getFlowReferences().contains("startevent"));
    assertTrue(lane.getFlowReferences().contains("usertask1"));
    assertTrue(lane.getFlowReferences().contains("usertask6"));
    assertTrue(lane.getFlowReferences().contains("endevent"));
    lane = process.getLanes().get(1);
    assertEquals("idLane2", lane.getId());
    assertEquals("Lane 2", lane.getName());
    assertEquals(4, lane.getFlowReferences().size());
    assertTrue(lane.getFlowReferences().contains("usertask2"));
    assertTrue(lane.getFlowReferences().contains("usertask5"));
    lane = process.getLanes().get(2);
    assertEquals("idLane3", lane.getId());
    assertEquals("Lane 3", lane.getName());
    assertEquals(4, lane.getFlowReferences().size());
    assertTrue(lane.getFlowReferences().contains("usertask3"));
    assertTrue(lane.getFlowReferences().contains("usertask4"));
    assertNotNull(process.getFlowElement("startevent"));
    assertNotNull(process.getFlowElement("usertask1"));
    assertNotNull(process.getFlowElement("usertask2"));
    assertNotNull(process.getFlowElement("usertask3"));
    assertNotNull(process.getFlowElement("usertask4"));
    assertNotNull(process.getFlowElement("usertask5"));
    assertNotNull(process.getFlowElement("usertask6"));
    assertNotNull(process.getFlowElement("endevent"));
    assertNotNull(process.getFlowElement("flow1"));
    assertNotNull(process.getFlowElement("flow2"));
    assertNotNull(process.getFlowElement("flow3"));
    assertNotNull(process.getFlowElement("flow4"));
    assertNotNull(process.getFlowElement("flow5"));
    assertNotNull(process.getFlowElement("flow6"));
    assertNotNull(process.getFlowElement("flow7"));
}
Also used : Lane(org.activiti.bpmn.model.Lane) Pool(org.activiti.bpmn.model.Pool) Process(org.activiti.bpmn.model.Process)

Aggregations

Pool (org.activiti.bpmn.model.Pool)12 Process (org.activiti.bpmn.model.Process)8 Lane (org.activiti.bpmn.model.Lane)6 SubProcess (org.activiti.bpmn.model.SubProcess)5 FlowElement (org.activiti.bpmn.model.FlowElement)4 SequenceFlow (org.activiti.bpmn.model.SequenceFlow)4 EventSubProcess (org.activiti.bpmn.model.EventSubProcess)3 GraphicInfo (org.activiti.bpmn.model.GraphicInfo)3 MessageFlow (org.activiti.bpmn.model.MessageFlow)3 ArrayNode (com.fasterxml.jackson.databind.node.ArrayNode)2 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 Artifact (org.activiti.bpmn.model.Artifact)2 BpmnModel (org.activiti.bpmn.model.BpmnModel)2 DataStore (org.activiti.bpmn.model.DataStore)2 FlowNode (org.activiti.bpmn.model.FlowNode)2 JsonNode (com.fasterxml.jackson.databind.JsonNode)1 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)1 IOException (java.io.IOException)1 UnsupportedEncodingException (java.io.UnsupportedEncodingException)1