📄 jaweselectionmanager.java
字号:
/** * Miroslav Popov, Sep 14, 2005 miroslav.popov@gmail.com */package org.enhydra.jawe.base.controller;import java.util.ArrayList;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Set;import org.enhydra.jawe.XPDLElementChangeInfo;import org.enhydra.shark.xpdl.XMLAttribute;import org.enhydra.shark.xpdl.XMLCollection;import org.enhydra.shark.xpdl.XMLComplexChoice;import org.enhydra.shark.xpdl.XMLComplexElement;import org.enhydra.shark.xpdl.XMLElement;import org.enhydra.shark.xpdl.XMLSimpleElement;import org.enhydra.shark.xpdl.XMLUtil;import org.enhydra.shark.xpdl.elements.Activities;import org.enhydra.shark.xpdl.elements.Activity;import org.enhydra.shark.xpdl.elements.ActivitySet;import org.enhydra.shark.xpdl.elements.Application;import org.enhydra.shark.xpdl.elements.DataField;import org.enhydra.shark.xpdl.elements.FormalParameter;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.TypeDeclaration;import org.enhydra.shark.xpdl.elements.WorkflowProcess;import org.enhydra.shark.xpdl.elements.WorkflowProcesses;/** * @author Miroslav Popov * @author Sasa Bojanic */public class JaWESelectionManager { protected JaWEController jc; protected List selectedElements = new ArrayList(); protected Package workingPKG; protected WorkflowProcess workingWP; protected ActivitySet workingAS; public JaWESelectionManager(JaWEController controller) { jc = controller; } public void clear() { selectedElements = new ArrayList(); workingPKG = null; workingWP = null; workingAS = null; } public List getSelectedElements() { return new ArrayList(selectedElements); } public XMLElement getSelectedElement() { if (selectedElements.size() > 0) { return (XMLElement) selectedElements.get(0); } return null; } public void setSelection(XMLElement el, boolean setPkgAndWpAndas) { selectedElements = new ArrayList(); if (el != null) selectedElements.add(el); if (setPkgAndWpAndas) setPkgWpAndAs(); XPDLElementChangeInfo info = jc.createInfo(el, XPDLElementChangeInfo.SELECTED); jc.sendEvent(info); } public void setSelection(List selection, boolean setPkgAndWpAndas) { if (checkSelection(selection)) { if (selection == null) { selectedElements = new ArrayList(); } else { selectedElements = selection; } } else { selectedElements = new ArrayList(); selectedElements.add(selection.get(selection.size() - 1)); } if (setPkgAndWpAndas) setPkgWpAndAs(); if (selectedElements.size() == 0) return; List temp = new ArrayList(selectedElements); XMLElement firstEl = (XMLElement) temp.get(0); XMLElement selOwner = firstEl; if (temp.size() > 1) { selOwner = firstEl.getParent(); if (selOwner == null) { selOwner = firstEl; } } else { temp.clear(); } XPDLElementChangeInfo info = jc.createInfo(selOwner, temp, XPDLElementChangeInfo.SELECTED); jc.sendEvent(info); } public void addToSelection(XMLElement el) { List temp = new ArrayList(); temp.add(el); addToSelection(temp); } public void addToSelection(List elements) { if (canBeAddedToSelection(elements)) { selectedElements.addAll(elements); } else { selectedElements = new ArrayList(); selectedElements.add(elements.get(elements.size() - 1)); } setPkgWpAndAs(); if (selectedElements.size() == 0) return; List temp = new ArrayList(selectedElements); XMLElement firstEl = (XMLElement) temp.get(0); XMLElement selOwner = firstEl; if (temp.size() > 1) { selOwner = firstEl.getParent(); if (selOwner == null) { selOwner = firstEl; } } else { temp.clear(); } XPDLElementChangeInfo info = jc.createInfo(selOwner, temp, XPDLElementChangeInfo.SELECTED); jc.sendEvent(info); } public void removeFromSelection(XMLElement el) { List temp = new ArrayList(); temp.add(el); removeFromSelection(temp); } public void removeFromSelection(List elements) { Set elementsToRemove = new HashSet(); for (int i = 0; i < elements.size(); i++) { XMLElement el = (XMLElement) elements.get(i); // for (int j = 0; j < selectedElements.size(); j++) { // XMLElement element = (XMLElement)selectedElements.get(j); // // XMLElement parent = element.getParent(); // while (parent != null && parent != el) { // parent = parent.getParent(); // } // // if (parent != null) // elementsToRemove.add(element); // } elementsToRemove.add(el); } for (Iterator it = elementsToRemove.iterator(); it.hasNext();) { selectedElements.remove(it.next()); } setPkgWpAndAs(); jc.adjustActions(); } protected void setPkgWpAndAs() { if (selectedElements.size() != 0) { XMLElement el = (XMLElement) selectedElements.get(0); workingPKG = XMLUtil.getPackage(el); if (workingPKG != null) { WorkflowProcess oldWp = workingWP; if (oldWp != null) { WorkflowProcesses wprs = (WorkflowProcesses) oldWp.getParent(); if (!wprs.contains(oldWp)) { oldWp = null; } } workingWP = XMLUtil.getWorkflowProcess(el); if (workingWP == null) { if (oldWp != null && XMLUtil.getPackage(oldWp) == workingPKG) { workingWP = oldWp; } else { List wps = workingPKG.getWorkflowProcesses().toElements(); if (wps.size() != 0) { workingWP = (WorkflowProcess) wps.get(0); } } } workingAS = XMLUtil.getActivitySet(el); } else { workingWP = null; workingAS = null; } } else { workingPKG = null; workingWP = null; workingAS = null; } } public Package getWorkingPKG() { return workingPKG; } public String getWorkingPackageId() { if (workingPKG != null) { return workingPKG.getId(); } return null; } public WorkflowProcess getWorkingProcess() { return workingWP; } public String getWorkingWorkflowProcessId() { if (workingWP != null) { return workingWP.getId(); } return null; } public ActivitySet getWorkingActivitySet() { return workingAS; } public String getWorkingActivitySetId() { if (workingAS != null) { return workingAS.getId(); } return null; } public boolean canBeAddedToSelection(List selection) { List temp = new ArrayList(selectedElements); temp.addAll(selection); return checkSelection(temp); } public boolean checkSelection(List selection) { if (selection == null) { return true; } if (selection.size() <= 1) { return true; } boolean hasActivity = false; boolean hasTransition = false; boolean hasSingleSelectionElement = false; boolean hasOther = false; Set parents = new HashSet(); Set classes = new HashSet(); for (int i = 0; i < selection.size(); i++) { XMLElement el = (XMLElement) selection.get(i);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -