package org.enhydra.jawe.components.graph; import java.awt.Point; import java.awt.Rectangle; import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Observable; import java.util.Observer; import javax.swing.ToolTipManager; import org.enhydra.jawe.ChoiceButton; import org.enhydra.jawe.ChoiceButtonListener; import org.enhydra.jawe.HistoryManager; import org.enhydra.jawe.JaWE; import org.enhydra.jawe.JaWEComponent; import org.enhydra.jawe.JaWEComponentSettings; import org.enhydra.jawe.JaWEComponentView; import org.enhydra.jawe.JaWEManager; import org.enhydra.jawe.XPDLElementChangeInfo; import org.enhydra.jawe.base.xpdlhandler.XPDLHandler; import org.enhydra.jawe.components.graph.actions.SimpleGraphLayout; import org.enhydra.shark.utilities.SequencedHashMap; import org.enhydra.shark.xpdl.XMLCollection; import org.enhydra.shark.xpdl.XMLCollectionElement; import org.enhydra.shark.xpdl.XMLElement; import org.enhydra.shark.xpdl.XMLElementChangeInfo; import org.enhydra.shark.xpdl.XMLUtil; import org.enhydra.shark.xpdl.elements.Activity; import org.enhydra.shark.xpdl.elements.ActivitySet; import org.enhydra.shark.xpdl.elements.ExtendedAttribute; import org.enhydra.shark.xpdl.elements.Package; import org.enhydra.shark.xpdl.elements.Participant; import org.enhydra.shark.xpdl.elements.Transition; import org.enhydra.shark.xpdl.elements.WorkflowProcess; import org.jgraph.event.GraphSelectionEvent; import org.jgraph.event.GraphSelectionListener; public class GraphController extends Observable implements Observer, JaWEComponent, ChoiceButtonListener, GraphSelectionListener { protected String type = JaWEComponent.MAIN_COMPONENT; protected boolean updateInProgress = false; protected GraphObjectFactory graphObjectFactory; protected GraphObjectRendererFactory graphObjectRendererFactory; protected GraphMarqueeHandler graphMarqueeHandler; protected Graph selectedGraph; protected GraphControllerPanel panel; protected GraphOverview overview; protected Map graphMap = new SequencedHashMap(); protected CopyOrCutInfo copyOrCutInfo; protected GraphSettings settings; protected HistoryManager hm; public GraphController(JaWEComponentSettings settings) throws Exception { this.settings = (GraphSettings) settings; this.settings.init(this); try { String hmc = this.settings.historyManagerClass(); if (hmc != null && !hmc.equals("")) { hm = (HistoryManager) Class.forName(hmc).newInstance(); hm.init(this.settings.historySize()); } } catch (Exception ex) { System.err.println("Failed to instantiate history manager for " + this); ex.printStackTrace(); } graphObjectFactory = (GraphObjectFactory) Class.forName(this.settings.getGraphObjectFactory()).newInstance(); graphObjectRendererFactory = (GraphObjectRendererFactory) Class.forName(this.settings.getGraphObjectRendererFactory()).newInstance(); Constructor c = Class.forName(this.settings.getGraphMarqueeHandler()).getConstructor(new Class[]{GraphController.class}); graphMarqueeHandler = (GraphMarqueeHandler) c.newInstance(new Object[]{this}); if (this.settings.shouldShowGraphOverview()) { try { String ovc = this.settings.overviewClass(); if (ovc != null && !ovc.equals("")) { overview = (GraphOverview) Class.forName(ovc).newInstance(); overview.init(this); } } catch (Exception ex) { System.err.println("Failed to instantiate GraphOverview!"); } } init(); JaWEManager.getInstance().getJaWEController().addObserver(this); if (overview != null) { JaWEManager.getInstance().getComponentManager().addComponent(overview); JaWEManager.getInstance().getJaWEController().registerJaWEComponent(overview); } } // ********************** Observable // ********************** // ********************** Observer public void update(Observable o, Object arg) { if (updateInProgress) { return; } if (!(arg instanceof XPDLElementChangeInfo)) { return; } XPDLElementChangeInfo info = (XPDLElementChangeInfo) arg; XMLElement changedElement = info.getChangedElement(); int action = info.getAction(); if (info.getSource() == this || (changedElement == null && action != XPDLElementChangeInfo.SELECTED)) { return; } if (!(action == XMLElementChangeInfo.UPDATED || action == XMLElementChangeInfo.INSERTED || action == XMLElementChangeInfo.REMOVED || action == XMLElementChangeInfo.REPOSITIONED || action == XPDLElementChangeInfo.SELECTED || action == XPDLElementChangeInfo.ADJUST_UNDOABLE_ACTION || action == XPDLElementChangeInfo.UNDO || action == XPDLElementChangeInfo.REDO || action == XPDLElementChangeInfo.COPY || action == XPDLElementChangeInfo.CUT)) { return; } long start = System.currentTimeMillis(); JaWEManager.getInstance().getLoggingManager().info( "GraphController -> update for event " + info + " started ..."); updateInProgress = true; try { if (action == XPDLElementChangeInfo.COPY || action == XPDLElementChangeInfo.CUT) { copyOrCutInfo = null; if (selectedGraph != null) { GraphManager gm = selectedGraph.getGraphManager(); Map actRectangles = new HashMap(); Iterator it = info.getChangedSubElements().iterator(); while (it.hasNext()) { XMLElement toCopyOrCut = (XMLElement) it.next(); if (!(toCopyOrCut instanceof Activity)) { continue; } Activity a = (Activity) toCopyOrCut; GraphActivityInterface ga = gm.getGraphActivity(a); if (ga != null) { CopiedActivityInfo ai = new CopiedActivityInfo( GraphUtilities.getParticipantId(a), GraphUtilities.getOffsetPoint(a)); Rectangle rect = gm.getBounds(ga, new HashMap()); actRectangles.put(ai, rect); } } if (actRectangles.size() > 0) { Rectangle[] rarr = new Rectangle[actRectangles.size()]; actRectangles.values().toArray(rarr); Point referencePoint = gm.getUnionBounds(rarr).getLocation(); copyOrCutInfo = new CopyOrCutInfo(referencePoint, actRectangles); } } } else if (action == XPDLElementChangeInfo.UNDO || action == XPDLElementChangeInfo.REDO || action == XPDLElementChangeInfo.ADJUST_UNDOABLE_ACTION) { if (action == XPDLElementChangeInfo.ADJUST_UNDOABLE_ACTION) { GraphUtilities.adjustPackageOnUndoableChangeEvent(info.getChangedSubElements()); } else { GraphUtilities.adjustPackageOnUndoOrRedoEvent(info.getChangedSubElements()); } } else { update(info); } } finally { updateInProgress = false; } JaWEManager.getInstance().getLoggingManager().info("GraphController -> update ended"); long end = System.currentTimeMillis(); double diffs = (end - start) / 1000.0; JaWEManager.getInstance().getLoggingManager().debug("THE UPDATE OF GRAPH COMPONENT LASTED FOR " + diffs + " SECONDS!"); } // ********************** // ********************** JaWEComponent public JaWEComponentSettings getSettings() { return settings; } public JaWEComponentView getView() { return panel; } public String getName() { return "GraphComponent"; } public String getType() { return type; } public void setType(String type) { this.type = type; } public boolean adjustXPDL(Package pkg) { return GraphUtilities.scanExtendedAttributes(pkg); } public List checkValidity(XMLElement el, boolean fullCheck) { GraphSettings gv = getGraphSettings(); if (!gv.shouldUseBubbles()) { return null; } List graphsToValidate = getGraphsToValidate(el); boolean isValid = true; List verrors = new ArrayList(); for (int i = 0; i < graphsToValidate.size(); i++) { Graph toValidate = (Graph) graphsToValidate.get(i); List vers = toValidate.checkConnections(fullCheck); isValid = (vers == null || vers.size() == 0) && isValid; if (vers != null) { verrors.addAll(vers); } if (!(isValid || fullCheck)) { break; } } return verrors; } protected List getGraphsToValidate(XMLElement el) { List graphsToValidate = new ArrayList(); if (el instanceof WorkflowProcess || el instanceof ActivitySet) { Graph g = (Graph) graphMap.get(el); if (g != null) { graphsToValidate.add(g); } if (el instanceof WorkflowProcess) { Iterator ass = ((WorkflowProcess) el).getActivitySets().toElements().iterator(); while (ass.hasNext()) { ActivitySet as = (ActivitySet) ass.next(); g = (Graph) graphMap.get(as); if (g != null) { graphsToValidate.add(g); } } } } else if (el instanceof Package) { Iterator it = ((Package) el).getWorkflowProcesses().toElements().iterator(); while (it.hasNext()) { WorkflowProcess wp = (WorkflowProcess) it.next(); graphsToValidate.addAll(getGraphsToValidate(wp)); } } return graphsToValidate; } public boolean canCreateElement(XMLCollection col) { return true; } public boolean canInsertElement(XMLCollection col, XMLElement el) { if (el == null) { return true; } ExtendedAttribute ea = null; if (el instanceof ExtendedAttribute) { ea = (ExtendedAttribute) el; } else if (el.getParent() instanceof ExtendedAttribute) { ea = (ExtendedAttribute) el.getParent(); } if (ea != null) { return !GraphUtilities.isMyKindOfExtendedAttribute(ea); } return true; } public boolean canModifyElement(XMLElement el) { if (el == null) { return true; } ExtendedAttribute ea = null; if (el instanceof ExtendedAttribute) { ea = (ExtendedAttribute) el; } else if (el.getParent() instanceof ExtendedAttribute) { ea = (ExtendedAttribute) el.getParent(); } if (ea != null) { return !GraphUtilities.isMyKindOfExtendedAttribute(ea); } return true; } public boolean canRemoveElement(XMLCollection col, XMLElement el) { if (el == null) { return true; } ExtendedAttribute ea = null; if (el instanceof ExtendedAttribute) { ea = (ExtendedAttribute) el; } else if (el.getParent() instanceof ExtendedAttribute) { ea = (ExtendedAttribute) el.getParent(); } if (ea != null) { boolean isMyEA = GraphUtilities.isMyKindOfExtendedAttribute(ea); if (isMyEA) { String eaName = ea.getName(); if (eaName.equals(GraphEAConstants.EA_JAWE_GRAPH_END_OF_WORKFLOW) || eaName.equals(GraphEAConstants.EA_JAWE_GRAPH_START_OF_WORKFLOW) || eaName.equals(GraphEAConstants.EA_JAWE_GRAPH_START_OF_BLOCK) || eaName.equals(GraphEAConstants.EA_JAWE_GRAPH_END_OF_BLOCK)) { return true; } return false; } } else if (el instanceof FreeTextExpressionParticipant || el instanceof CommonExpressionParticipant) { return false; } return true; } public boolean canDuplicateElement(XMLCollection col, XMLElement el) { if (el == null) { return true; } ExtendedAttribute ea = null; if (el instanceof ExtendedAttribute) { ea = (ExtendedAttribute) el; } else if (el.getParent() instanceof ExtendedAttribute) { ea = (ExtendedAttribute) el.getParent(); } if (ea != null) { return !GraphUtilities.isMyKindOfExtendedAttribute(ea); } else if (el instanceof FreeTextExpressionParticipant || el instanceof CommonExpressionParticipant) { return false; } return true; } public boolean canRepositionElement(XMLCollection col, XMLElement el) { if (el == null) { return true; } ExtendedAttribute ea = null; if (el instanceof ExtendedAttribute) { ea = (ExtendedAttribute) el; } else if (el.getParent() instanceof ExtendedAttribute) { ea = (ExtendedAttribute) el.getParent(); } if (ea != null) { return !GraphUtilities.isMyKindOfExtendedAttribute(ea); } else if (el instanceof FreeTextExpressionParticipant || el instanceof CommonExpressionParticipant) { return false; } return true; } // ********************** // ********************** ChoiceButtonListener public void selectionChanged(ChoiceButton cbutton, Object change) { if (updateInProgress) { return; } if (getSelectedGraph() == null) { return; } if (cbutton.getChoiceType() == Participant.class) { Participant par = (Participant) change; setUpdateInProgress(true); JaWEManager.getInstance().getJaWEController().startUndouableChange(); List vo = GraphUtilities.getParticipantVisualOrder(getSelectedGraph().getXPDLObject()); vo.add(par.getId()); GraphUtilities.setParticipantVisualOrder(getSelectedGraph().getXPDLObject(), vo); getSelectedGraph().getGraphManager().insertParticipantAndArrangeParticipants(par); List toSelect = new ArrayList(); toSelect.add(par); JaWEManager.getInstance().getJaWEController().endUndouableChange(toSelect); selectedGraph.selectParticipant(par); setUpdateInProgress(false); adjustActions(); } else if (cbutton.getChoiceType() == ActivitySet.class) { ActivitySet aset = (ActivitySet) change; setSelectedGraph(getGraph(aset)); JaWEManager.getInstance().getJaWEController().getSelectionManager().setSelection(aset, true); } } public Object getSelectedObject(ChoiceButton cbutton) { if (cbutton.getChoiceType() == Participant.class) { return null; } return null; } public List getChoices(ChoiceButton cbutton) { List choices = new ArrayList(); if (selectedGraph == null) { return choices; } if (cbutton.getChoiceType() == Participant.class) { WorkflowProcess wp = selectedGraph.getWorkflowProcess(); SequencedHashMap choiceMap = XMLUtil.getPossibleParticipants(wp, JaWEManager.getInstance().getXPDLHandler()); //CUSTOM if (!JaWE.BASIC_MODE) { choiceMap.put(FreeTextExpressionParticipant.getInstance().getName(), FreeTextExpressionParticipant.getInstance()); } //END CUSTOM List toRemove = selectedGraph.getGraphManager().getDisplayedParticipants(); Iterator it = choiceMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry me = (Map.Entry) it.next(); if (toRemove.contains(me.getValue())) { it.remove(); } } choices.addAll(choiceMap.values()); } else if (cbutton.getChoiceType() == ActivitySet.class) { WorkflowProcess wp = selectedGraph.getWorkflowProcess(); choices = wp.getActivitySets().toElements(); } return choices; } // ********************** // ********************** GraphSelectionListener public void valueChanged(GraphSelectionEvent e) { if (updateInProgress) { return; } Object[] selectedCells = getSelectedGraph().getSelectionCells(); Participant par = null; List selectedElements = new ArrayList(); if (selectedCells != null) { for (int i = 0; i < selectedCells.length; i++) { if (selectedCells[i] instanceof WorkflowElement) { WorkflowElement we = (WorkflowElement) selectedCells[i]; XMLElement el = we.getPropertyObject(); if (el != null) { if (el instanceof Participant) { par = (Participant) el; } selectedElements.add(el); } } } } if (selectedElements.size() != 0) { if (par != null) { JaWEManager.getInstance().getJaWEController().getSelectionManager().setSelection(selectedElements, false); } else { JaWEManager.getInstance().getJaWEController().getSelectionManager().setSelection(selectedElements, true); } } else { JaWEManager.getInstance().getJaWEController().getSelectionManager().setSelection(selectedGraph.getXPDLObject(), true); } } // ********************** protected void init() throws Exception { panel = createPanel(); adjustActions(); } public GraphSettings getGraphSettings() { return settings; } public void update(XPDLElementChangeInfo info) { XMLElement changedElement = info.getChangedElement(); List changedElements = info.getChangedSubElements(); int action = info.getAction(); // ********************************* START OF SELECTION EVENT if (action == XPDLElementChangeInfo.SELECTED) { // clean old selection if (selectedGraph != null) { if (overview != null) { if (overview.getGraph() != null) { overview.getGraph().clearSelection(); } } selectedGraph.clearSelection(); } if (changedElement != null) { // ***************************** find graph Graph g = null; XMLElement lastSel = changedElement; if (changedElements.size() > 0) { lastSel = (XMLElement) changedElements.get(changedElements.size() - 1); } if (graphMap.containsKey(lastSel)) { g = getGraph((XMLCollectionElement) lastSel); } if (g == null && selectedGraph != null) { if (lastSel instanceof Participant && selectedGraph.getGraphManager().getGraphParticipant((Participant) lastSel) != null) { g = selectedGraph; } else if (lastSel instanceof ExtendedAttribute && selectedGraph.getGraphManager().getBubble((ExtendedAttribute) lastSel) != null) { g = selectedGraph; } else if (lastSel instanceof Activity && selectedGraph.getGraphManager().getGraphActivity((Activity) lastSel) != null) { g = selectedGraph; GraphUtilities.reloadGraph(g); } else if (lastSel instanceof Transition && selectedGraph.getGraphManager().getGraphTransition((Transition) lastSel) != null) { g = selectedGraph; } } if (g == null) { XMLElement parent = lastSel; do { parent = parent.getParent(); } while (parent != null && !(parent instanceof ActivitySet || parent instanceof WorkflowProcess)); if (parent != null) { g = getGraph((XMLCollectionElement) parent); } else { if (selectedGraph != null) { if (XMLUtil.getPackage(lastSel) == XMLUtil.getPackage(selectedGraph.getXPDLObject())) { g = selectedGraph; } } } } if (g == null) { Package sp = XMLUtil.getPackage(lastSel); if (sp != null) { List wps = sp.getWorkflowProcesses().toElements(); if (wps.size() != 0) { g = getGraph((XMLCollectionElement) wps.get(0)); } } } if (g != selectedGraph) { setSelectedGraph(g); } if (selectedGraph != null) { selectedGraph.clearSelection(); } // ***************************** end of find graph // **************************** select elements WorkflowElement selectedElement = null; WorkflowElement lastSelected = null; if (selectedGraph != null) { List selectedElements = new ArrayList(); List overviewElements = new ArrayList(); List toCheck = new ArrayList(); if (changedElements == null || changedElements.size() == 0) { toCheck.add(changedElement); } else { toCheck.addAll(changedElements); } for (Iterator it = toCheck.iterator(); it.hasNext();) { XMLElement el = (XMLElement) it.next(); selectedElement = selectedGraph.getGraphInterface(el); if (overview != null && selectedElement != null && !(selectedElement instanceof GraphTransitionInterface)) { overviewElements.add(selectedElement); } if (selectedElement != null) { lastSelected = selectedElement; selectedElements.add(selectedElement); } } selectedGraph.selectElements(selectedElements.toArray(), true, true); if (overview != null) { overview.getGraph().selectElements(overviewElements.toArray(), true, true); } } if (lastSelected != null) { selectedGraph.scrollCellToVisible(lastSelected); } } // ********************************* END OF SELECTION EVENT } else { if (changedElement instanceof Package && (action == XMLElementChangeInfo.INSERTED || action == XMLElementChangeInfo.REMOVED)) { List toHandle = new ArrayList(); if (changedElements != null) { toHandle.addAll(changedElements); } if (changedElements.size() == 0) { toHandle.add(changedElement); } Package mainPkg = JaWEManager.getInstance().getJaWEController().getMainPackage(); boolean adjustOtherPkgs = !toHandle.contains(mainPkg); for (int i = 0; i < changedElements.size(); i++) { Package pkg = (Package) changedElements.get(i); if (action == XMLElementChangeInfo.INSERTED) { insertPackage(pkg); } else if (action == XMLElementChangeInfo.REMOVED) { removePackage(pkg); } } if (adjustOtherPkgs) { XPDLHandler xpdlh = JaWEManager.getInstance().getXPDLHandler(); List allPkgs = new ArrayList(xpdlh.getAllPackages()); allPkgs.removeAll(changedElements); Map allExtPkgPars = getAllPackageParticipants(changedElements); List allGraphElements = getAllWorkflowProcessesAndActivitySetsForAdjustment(allPkgs); Iterator it = allGraphElements.iterator(); while (it.hasNext()) { XMLCollectionElement wpOrAs = (XMLCollectionElement) it.next(); GraphUtilities.adjustWorkflowProcessOrActivitySetOnUndoableChangeEvent(new ArrayList(), wpOrAs, allExtPkgPars, action == XMLElementChangeInfo.INSERTED); } } } else { if (action == XMLElementChangeInfo.INSERTED || action == XMLElementChangeInfo.REMOVED || action == XMLElementChangeInfo.UPDATED) { List l = new ArrayList(); l.add(info); GraphUtilities.adjustPackageOnUndoableChangeEvent(l); } } } adjustActions(); } protected List getAllWorkflowProcessesAndActivitySetsForAdjustment(List pkgs) { List l = new ArrayList(); Iterator it = pkgs.iterator(); while (it.hasNext()) { Package pkg = (Package) it.next(); if (pkg.isReadOnly()) { continue; } l.addAll(pkg.getWorkflowProcesses().toElements()); Iterator itWPs = pkg.getWorkflowProcesses().toElements().iterator(); while (itWPs.hasNext()) { WorkflowProcess wp = (WorkflowProcess) itWPs.next(); l.addAll(wp.getActivitySets().toElements()); } } return l; } protected Map getAllPackageParticipants(List pkgs) { Map m = new HashMap(); Iterator it = pkgs.iterator(); while (it.hasNext()) { Package pkg = (Package) it.next(); Iterator itPars = pkg.getParticipants().toElements().iterator(); while (itPars.hasNext()) { Participant par = (Participant) itPars.next(); String parId = par.getId(); if (!m.containsKey(parId)) { m.put(parId, par); } } } return m; } protected GraphControllerPanel createPanel() { GraphControllerPanel p = new GraphControllerPanel(this); p.configure(); p.init(); return p; } public GraphMarqueeHandler getGraphMarqueeHandler() { return graphMarqueeHandler; } public GraphObjectFactory getGraphObjectFactory() { return graphObjectFactory; } public GraphObjectRendererFactory getGraphObjectRendererFactory() { return graphObjectRendererFactory; } public XMLCollectionElement getDisplayedXPDLObject() { if (selectedGraph != null) { return selectedGraph.getXPDLObject(); } return null; } public void createGraph(WorkflowProcess wp) { if (graphMap.get(wp) != null) { return; } Graph g = new Graph(this, new JaWEGraphModel(), graphMarqueeHandler, wp); g.addGraphSelectionListener(this); graphMap.put(wp, g); g.clearSelection(); ToolTipManager.sharedInstance().registerComponent(g); } public void createGraph(ActivitySet as) { if (graphMap.get(as) != null) { return; } Graph g = new Graph(this, new JaWEGraphModel(), graphMarqueeHandler, as); g.addGraphSelectionListener(this); graphMap.put(as, g); g.clearSelection(); ToolTipManager.sharedInstance().registerComponent(g); } // TODO: handle exception protected Graph createGraph() { try { String gmhc = settings.getGraphClass(); Constructor c = Class.forName(gmhc).getConstructor(new Class[]{this.getClass(), JaWEGraphModel.class, GraphMarqueeHandler.class}); return (Graph) c.newInstance(new Object[]{this, createGraphModel(), graphMarqueeHandler}); } catch (Exception ex) { return null; } } protected JaWEGraphModel createGraphModel() { try { String gm = settings.getGraphModelClass(); return (JaWEGraphModel) Class.forName(gm).newInstance(); } catch (Exception ex) { return null; } } public Graph getSelectedGraph() { return selectedGraph; } public Graph getGraph(XMLCollectionElement wpOrAs) { return (Graph) graphMap.get(wpOrAs); } protected void setSelectedGraph(Graph graph) { Graph current = selectedGraph; if (selectedGraph != null) { selectedGraph.clearSelection(); } selectedGraph = graph; panel.graphSelected(selectedGraph); if (selectedGraph != null) { getGraphMarqueeHandler().setSelectionMode(); } if (overview != null) { overview.displayGraph(); } if (hm != null) { hm.addToHistory((current != null) ? current.getXPDLObject() : null, (graph != null) ? graph.getXPDLObject() : null); } adjustActions(); } public void selectGraphForElement(XMLCollectionElement cel) { Graph current = selectedGraph; Graph graph = (Graph) graphMap.get(cel); selectedGraph = graph; panel.graphSelected(selectedGraph); if (selectedGraph != null) { JaWEManager.getInstance().getJaWEController().getSelectionManager().setSelection(selectedGraph.getXPDLObject(), true); getGraphMarqueeHandler().setSelectionMode(); if (overview != null) { overview.displayGraph(); } } if (hm != null) { hm.addToHistory((current != null) ? current.getXPDLObject() : null, (graph != null) ? graph.getXPDLObject() : null); } adjustActions(); } protected void removeGraph(XMLCollectionElement wpOrAs) { Graph g = (Graph) graphMap.remove(wpOrAs); ToolTipManager.sharedInstance().unregisterComponent(g); g.removeGraphSelectionListener(this); if (selectedGraph == g) { selectedGraph = null; panel.graphSelected(selectedGraph); } g.clearXPDLObjectReferences(); if (copyOrCutInfo != null) { copyOrCutInfo.removeGraphInfo(g); } if (overview != null) { overview.displayGraph(); } if (hm != null) { hm.removeFromHistory(wpOrAs); } adjustActions(); } public void displayPreviousGraph() { if (hm != null && hm.canGoBack()) { XMLCollectionElement el = (XMLCollectionElement) hm.getPrevious((selectedGraph != null) ? selectedGraph.getXPDLObject() : null); Graph g = getGraph(el); if (g != selectedGraph) { selectedGraph = g; panel.graphSelected(selectedGraph); if (selectedGraph != null) { getGraphMarqueeHandler().setSelectionMode(); } if (overview != null) { overview.displayGraph(); } if (g != null) { JaWEManager.getInstance().getJaWEController().getSelectionManager().setSelection(g.getXPDLObject(), true); } } } adjustActions(); } public void displayNextGraph() { if (hm != null && hm.canGoForward()) { XMLCollectionElement el = (XMLCollectionElement) hm.getNext((selectedGraph != null) ? selectedGraph.getXPDLObject() : null); Graph g = getGraph(el); if (g != selectedGraph) { selectedGraph = g; panel.graphSelected(selectedGraph); if (selectedGraph != null) { getGraphMarqueeHandler().setSelectionMode(); } if (overview != null) { overview.displayGraph(); } if (g != null) { JaWEManager.getInstance().getJaWEController().getSelectionManager().setSelection(g.getXPDLObject(), true); } } } adjustActions(); } protected void insertPackage(Package pkg) { Iterator it = pkg.getWorkflowProcesses().toElements().iterator(); boolean isRO = pkg.isReadOnly(); while (it.hasNext()) { WorkflowProcess wp = (WorkflowProcess) it.next(); createGraph(wp); if (settings.performAutomaticLayoutOnInsertion()) { if (isRO) { wp.setReadOnly(false); } SimpleGraphLayout.layoutGraph(this, getGraph(wp)); if (isRO) { wp.setReadOnly(true); } } Iterator asi = wp.getActivitySets().toElements().iterator(); while (asi.hasNext()) { ActivitySet as = (ActivitySet) asi.next(); createGraph(as); if (settings.performAutomaticLayoutOnInsertion()) { if (isRO) { wp.setReadOnly(false); } SimpleGraphLayout.layoutGraph(this, getGraph(as)); if (isRO) { wp.setReadOnly(true); } } } } } protected void removePackage(Package pkg) { Iterator it = pkg.getWorkflowProcesses().toElements().iterator(); while (it.hasNext()) { WorkflowProcess wp = (WorkflowProcess) it.next(); removeGraph(wp); Iterator asi = wp.getActivitySets().toElements().iterator(); while (asi.hasNext()) { ActivitySet as = (ActivitySet) asi.next(); removeGraph(as); } } } protected XPDLElementChangeInfo createInfo(XMLElement main, List elements, int action) { XPDLElementChangeInfo info = new XPDLElementChangeInfo(); info.setChangedElement(main); if (elements.size() != 0) { info.setChangedElement((XMLElement) elements.iterator().next()); } info.setChangedSubElements(elements); info.setAction(action); info.setSource(this); return info; } public void setUpdateInProgress(boolean isInProgress) { updateInProgress = isInProgress; } public boolean isUpdateInProgress() { return updateInProgress; } public CopyOrCutInfo getCopyOrCutInfo() { return copyOrCutInfo; } public GraphOverview getOverview() { return overview; } public HistoryManager getHistoryManager() { return hm; } protected void adjustActions() { settings.adjustActions(); panel.enableDisableButtons(); } }