📄 workflowgraphmodel.java
字号:
recordResults(fromCell, results, null); } public List getResultsToStep(StepCell stepCell) { return results.getResultsToStep(stepCell.getDescriptor().getId()); } /** * Find Results that have StepCell's associated Step passed in as next Step. Connect all such cells */ private void processStepEndPointResult(StepCell stepCell) { int stepId = stepCell.getDescriptor().getId(); Iterator results = this.results.getResultsToStep(stepId).iterator(); while(results.hasNext()) { ResultHolder result = (ResultHolder)results.next(); connectCells(result, stepCell); } } public void connectCells(WorkflowCell from, ActionDescriptor action, WorkflowCell to, ResultDescriptor result) { WorkflowPort fromPort = (WorkflowPort)from.getChildAt(from.getSelectedPort()); WorkflowPort toPort = (WorkflowPort)to.getChildAt(to.getSelectedPort()); resultIdGenerator.checkId(result.getId()); if(result.getId() == 0) result.setId(resultIdGenerator.generateId()); // Create Edge ResultEdge edge = new ResultEdge(result, layout != null ? layout.getLabelPosition(result.getId()) : null); // Connect Edge ConnectionSet cs = new ConnectionSet(edge, fromPort, toPort); Object[] cells = new Object[]{edge}; // Insert into Model insert(cells, null, cs, null, null); //toPort.assignIndex(edge); //fromPort.assignIndex(edge); // process join changed event if(to instanceof JoinCell) { processJoinChangeEvent((JoinCell)to); } } /** * Connects fromCell contained in resultCell to the toCell passed in. */ private void connectCells(ResultHolder resultCell, WorkflowCell toCell) { WorkflowPort fromPort; WorkflowPort toPort; // Create Edge ResultDescriptor descriptor = resultCell.getDescriptor(); resultIdGenerator.checkId(descriptor.getId()); if(descriptor.getId() == 0) descriptor.setId(resultIdGenerator.generateId()); ResultEdge edge; if(layout != null) { edge = new ResultEdge(descriptor, layout.getLabelPosition(descriptor.getId()), layout.getLineWidth(descriptor.getId()), new Color(layout.getColor(descriptor.getId())), layout.getRoutingPoints(descriptor.getId())); fromPort = (WorkflowPort)resultCell.getFromCell().getChildAt(layout.getFromPort(descriptor.getId())); toPort = (WorkflowPort)toCell.getChildAt(layout.getToPort(descriptor.getId())); } else { edge = new ResultEdge(descriptor, null); fromPort = (WorkflowPort)resultCell.getFromCell().getChildAt(resultCell.getFromCell().getSelectedPort()); toPort = (WorkflowPort)toCell.getChildAt(toCell.getSelectedPort()); } ConnectionSet cs = new ConnectionSet(edge, fromPort, toPort); Object[] cells = new Object[]{edge}; // Insert into Model insert(cells, null, cs, null, null); //toPort.assignIndex(edge); //fromPort.assignIndex(edge); } /** * When a Step is inserted, introspect it. find all the actions and add them to the GraphModel. * Introspect each action and record results. */ public void recordResults(StepCell fromCell) { StepDescriptor stepDescriptor = fromCell.getDescriptor(); List actionList = stepDescriptor.getActions(); for(int i = 0; i < actionList.size(); i++) { ActionDescriptor action = (ActionDescriptor)actionList.get(i); Utils.checkId(context, action); List conResults = action.getConditionalResults(); recordResults(fromCell, conResults, action); ResultDescriptor result = action.getUnconditionalResult(); if(result != null) { recordResult(fromCell, result, action); } } } private void recordResults(WorkflowCell fromCell, List results, ActionDescriptor action) { for(int i = 0; i < results.size(); i++) { ResultDescriptor result = (ResultDescriptor)results.get(i); recordResult(fromCell, result, action); } } public ResultHolder recordResult(WorkflowCell fromCell, ResultDescriptor result, ActionDescriptor action) { Utils.checkId(context, result); // [KAP] This fixes the ID duplication bug ResultHolder newCell = new ResultHolder(fromCell, result, action); results.add(newCell); return newCell; } public Collection getActivitiesList() { List l = new ArrayList(); l.addAll(initialActions); l.addAll(stepCells); l.addAll(splitCells); l.addAll(joinCells); Iterator i = l.iterator(); Map edges = new HashMap(); while(i.hasNext()) { WorkflowCell cell = (WorkflowCell)i.next(); //we know every edge has to start somewhere, so we don't need to check to cells Iterator j = cell.getChildren().iterator(); while(j.hasNext()) { Object port = j.next(); Iterator k = edges(port); while(k.hasNext()) { WorkflowEdge edge = (WorkflowEdge)k.next(); ResultDescriptor descriptor = (ResultDescriptor)edge.getUserObject(); edges.put(new Integer(descriptor.getId()), edge); } } } l.addAll(edges.values()); return l; } public boolean removeEdge(ResultEdge edge) { ResultDescriptor result = edge.getDescriptor(); ResultHolder cell = results.getResultCell(result); DefaultGraphCell from = cell.getFromCell(); if(from instanceof ResultAware) { // remove descriptor ResultAware remove = (ResultAware)from; if(!remove.removeResult(result)) { return false; } Object[] objs = new Object[]{edge}; // remove edge remove(objs); // remove result cell results.remove(cell); // System.out.println(obj); } if(result.getJoin() > 0) { JoinCell join = getJoinCell(result.getJoin()); if(join != null) { this.processJoinChangeEvent(join); } else { return false; } } return true; } public boolean removeStep(StepCell cell) { StepDescriptor step = cell.getDescriptor(); // remove all edges and result cells Set set = getEdges(this, new Object[]{cell}); Iterator iter = set.iterator(); while(iter.hasNext()) { Object obj = iter.next(); if(obj instanceof ResultEdge) { removeEdge((ResultEdge)obj); } } // remove step descriptor WorkflowDescriptor workflow = (WorkflowDescriptor)step.getParent(); List list = workflow.getSteps(); list.remove(step); // remove cell // 1. remove port list = cell.getChildren(); for(int i = 0; i < list.size(); i++) { remove(new Object[]{list.get(i)}); } // 2. remove cell remove(new Object[]{cell}); // remove step cell from model stepCells.remove(cell); return true; } public boolean removeJoin(JoinCell cell) { JoinDescriptor join = cell.getJoinDescriptor(); // remove all edges and result cells Set set = getEdges(this, new Object[]{cell}); Iterator iter = set.iterator(); while(iter.hasNext()) { Object obj = iter.next(); if(obj instanceof ResultEdge) { removeEdge((ResultEdge)obj); } } // remove join descriptor WorkflowDescriptor workflow = (WorkflowDescriptor)join.getParent(); List list = workflow.getJoins(); list.remove(join); // remove cell // 1. remove port list = cell.getChildren(); for(int i = 0; i < list.size(); i++) { remove(new Object[]{list.get(i)}); } // 2. remove cell remove(new Object[]{cell}); // remove join cell from model joinCells.remove(cell); return true; } public boolean removeSplit(SplitCell cell) { SplitDescriptor split = cell.getSplitDescriptor(); // remove all edges and result cells Set set = getEdges(this, new Object[]{cell}); Iterator iter = set.iterator(); while(iter.hasNext()) { Object obj = iter.next(); if(obj instanceof ResultEdge) { removeEdge((ResultEdge)obj); } } // remove split descriptor WorkflowDescriptor workflow = (WorkflowDescriptor)split.getParent(); List list = workflow.getSplits(); list.remove(split); // remove cell // 1. remove port list = cell.getChildren(); for(int i = 0; i < list.size(); i++) { remove(new Object[]{list.get(i)}); } // 2. remove cell remove(new Object[]{cell}); // remove split cell from model splitCells.remove(cell); return true; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -