⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 workflowgraphmodel.java

📁 一个很好实用的工作流OSWORKFLOW开发例子.有着非常优秀的灵活性.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    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 + -