jawecontroller.java
来自「jawe的最新版本,基于Java的图形化工作流编辑器。图形化工作流编辑器 。使用」· Java 代码 · 共 1,644 行 · 第 1/5 页
JAVA
1,644 行
package org.enhydra.jawe.base.controller;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.RandomAccessFile;import java.lang.reflect.Constructor;import java.nio.channels.FileLock;import java.nio.channels.NonWritableChannelException;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.Collections;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Observable;import java.util.Observer;import java.util.Properties;import java.util.Set;import javax.swing.JComponent;import javax.swing.JOptionPane;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.enhydra.jawe.BarFactory;import org.enhydra.jawe.ChoiceButton;import org.enhydra.jawe.ChoiceButtonListener;import org.enhydra.jawe.JaWEComponent;import org.enhydra.jawe.JaWEComponentSettings;import org.enhydra.jawe.JaWEComponentView;import org.enhydra.jawe.JaWEConstants;import org.enhydra.jawe.JaWEEAHandler;import org.enhydra.jawe.JaWEManager;import org.enhydra.jawe.JaWEXMLUtil;import org.enhydra.jawe.UndoHistoryManager;import org.enhydra.jawe.Utils;import org.enhydra.jawe.WaitScreen;import org.enhydra.jawe.XPDLElementChangeInfo;import org.enhydra.jawe.XPDLListenerAndObservable;import org.enhydra.jawe.base.xpdlhandler.XPDLHandler;import org.enhydra.jawe.base.xpdlobjectfactory.XPDLObjectFactory;import org.enhydra.jawe.base.xpdlvalidator.ValidationError;import org.enhydra.shark.utilities.SequencedHashMap;import org.enhydra.shark.xpdl.Path;import org.enhydra.shark.xpdl.StandardPackageValidator;import org.enhydra.shark.xpdl.XMLAttribute;import org.enhydra.shark.xpdl.XMLCollection;import org.enhydra.shark.xpdl.XMLCollectionElement;import org.enhydra.shark.xpdl.XMLComplexElement;import org.enhydra.shark.xpdl.XMLElement;import org.enhydra.shark.xpdl.XMLElementChangeInfo;import org.enhydra.shark.xpdl.XMLUtil;import org.enhydra.shark.xpdl.XMLValidationError;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.ActivitySets;import org.enhydra.shark.xpdl.elements.Application;import org.enhydra.shark.xpdl.elements.Applications;import org.enhydra.shark.xpdl.elements.DataField;import org.enhydra.shark.xpdl.elements.DataFields;import org.enhydra.shark.xpdl.elements.EnumerationValue;import org.enhydra.shark.xpdl.elements.ExtendedAttribute;import org.enhydra.shark.xpdl.elements.ExtendedAttributes;import org.enhydra.shark.xpdl.elements.ExternalPackage;import org.enhydra.shark.xpdl.elements.ExternalPackages;import org.enhydra.shark.xpdl.elements.FormalParameter;import org.enhydra.shark.xpdl.elements.FormalParameters;import org.enhydra.shark.xpdl.elements.Join;import org.enhydra.shark.xpdl.elements.Member;import org.enhydra.shark.xpdl.elements.Namespace;import org.enhydra.shark.xpdl.elements.Namespaces;import org.enhydra.shark.xpdl.elements.Package;import org.enhydra.shark.xpdl.elements.Participant;import org.enhydra.shark.xpdl.elements.Participants;import org.enhydra.shark.xpdl.elements.Responsible;import org.enhydra.shark.xpdl.elements.Responsibles;import org.enhydra.shark.xpdl.elements.Split;import org.enhydra.shark.xpdl.elements.Tools;import org.enhydra.shark.xpdl.elements.Transition;import org.enhydra.shark.xpdl.elements.TransitionRef;import org.enhydra.shark.xpdl.elements.TransitionRefs;import org.enhydra.shark.xpdl.elements.TransitionRestriction;import org.enhydra.shark.xpdl.elements.TransitionRestrictions;import org.enhydra.shark.xpdl.elements.Transitions;import org.enhydra.shark.xpdl.elements.TypeDeclaration;import org.enhydra.shark.xpdl.elements.TypeDeclarations;import org.enhydra.shark.xpdl.elements.WorkflowProcess;import org.enhydra.shark.xpdl.elements.WorkflowProcesses;import org.w3c.dom.Document;/** * Used to handle JaWE. * * @author Sasa Bojanic * @author Miroslav Popov */public class JaWEController extends Observable implements Observer, JaWEComponent, ChoiceButtonListener { protected ControllerSettings settings; protected boolean undoableChangeInProgress = false; protected boolean updateInProgress = false; protected boolean updateSpecialInProgress = false; protected JaWEEdit edit = new JaWEEdit(); protected JaWETypes jtypes; protected JaWETypeResolver jtypeResolver; protected List xpdlInfoList = new ArrayList(); protected List xpdlListenerObservables = new ArrayList(); protected JaWESelectionManager selectionMng; protected JaWEActions defaultJaWEActions; protected UndoHistoryManager undoHistoryManager; protected JaWEFrame frame; protected boolean jaweFrameShown = false; protected XPDLElementChangeInfo undoSelectionEvent = null; protected String currentConfig = null; protected Map configInfo; public JaWEController(ControllerSettings settings) { this.settings = settings; this.settings.init(this); jtypes = new JaWETypes(); jtypes.setPropertyMgr(settings.getPropertyMgr()); jtypes.init(this); } // ********************** Observable public void addObserver(Observer obs) { super.addObserver(obs); if (obs instanceof Observable) { ((Observable) obs).addObserver(this); } } // ********************** // ********************** Observer public void update(Observable o, Object arg) { if (updateInProgress) { JaWEManager.getInstance() .getLoggingManager() .warn("JaWEController -> this is nested event dispatch, because another one is in progress!"); Thread.dumpStack(); return; } if (!(arg instanceof XMLElementChangeInfo) || ((XMLElementChangeInfo) arg).getChangedElement() == null) { JaWEManager.getInstance() .getLoggingManager() .error("JaWEController -> Invalid arg " + arg + " or element"); Thread.dumpStack(); return; } XPDLElementChangeInfo info; if (!(arg instanceof XPDLElementChangeInfo)) { info = new XPDLElementChangeInfo(this, (XMLElementChangeInfo) arg); } else { info = (XPDLElementChangeInfo) arg; } if (arg instanceof XPDLElementChangeInfo && info.getSource() == this) { JaWEManager.getInstance() .getLoggingManager() .error("JaWEController -> Aborting update because JaWEController is a source!"); Thread.dumpStack(); return; } int action = info.getAction(); XMLElement chel = info.getChangedElement(); if (chel != null && chel.getParent() instanceof Package) { if (action == XMLElementChangeInfo.UPDATED && chel instanceof XMLAttribute && chel.toName().equals("Id") || chel.toName().equals("Name")) { if (chel.toName().equals("Id")) { changePackageId((Package) chel.getParent(), (String) info.getOldValue(), (String) info.getNewValue()); } updateTitle(); } } if (isUndoOrRedoInProgress()) { JaWEManager.getInstance() .getLoggingManager() .debug("JaWEController -> event " + info + " won't be taken into account while processing undo/redo actions!"); return; } if (undoableChangeInProgress) { if (!(action == XMLElementChangeInfo.INSERTED || action == XMLElementChangeInfo.REMOVED || action == XMLElementChangeInfo.UPDATED || action == XMLElementChangeInfo.REPOSITIONED)) { JaWEManager.getInstance() .getLoggingManager() .error("JaWEController -> event " + info + " won't be taken into account while processing undoable change action!"); return; } xpdlInfoList.add(info); return; } if (updateSpecialInProgress) { JaWEManager.getInstance() .getLoggingManager() .warn("JaWEController -> this is nested event dispatch, because another special update is in progress!"); Thread.dumpStack(); return; } updateInProgress = true; JaWEManager.getInstance() .getLoggingManager() .info("JaWEController -> normal update for event " + arg + " started ..."); if (action == XPDLElementChangeInfo.SELECTED) { JaWEManager.getInstance() .getLoggingManager() .error("JaWEController -> SELECTION event not sent from JaWEController! "); Thread.dumpStack(); return; } clearHistory(); setChanged(); notifyObservers(info); JaWEManager.getInstance() .getLoggingManager() .info("JaWEController -> normal update ended"); updateTitle(); adjustActions(); updateInProgress = false; if (settings.isDesingTimeValidationEnabled()) { if (getMainPackage() != null && (action == XMLElementChangeInfo.INSERTED || action == XMLElementChangeInfo.REMOVED || action == XMLElementChangeInfo.UPDATED || action == XMLElementChangeInfo.REPOSITIONED)) { checkValidity(getMainPackage(), true, false,true); } } handleEvent(info); } // ********************** // ********************** JaWEComponent public JaWEComponentSettings getSettings() { return settings; } public JaWEComponentView getView() { return getJaWEFrame(); } public String getName() { return "TogWE"; } public String getType() { return JaWEComponent.MAIN_COMPONENT; } public void setType(String type) { } public boolean adjustXPDL(Package pkg) { boolean changed = JaWEManager.getInstance() .getXPDLUtils() .correctSplitsAndJoins(pkg); if (JaWEManager.getInstance() .getXPDLHandler() .getXPDLRepositoryHandler() .isXPDLPrefixEnabled()) { List l = pkg.getNamespaces().toElements(); boolean hasxpdlns = false; for (int i = 0; i < l.size(); i++) { Namespace ns = (Namespace) l.get(i); String nsn = ns.getName(); if (nsn.equals("xpdl")) { hasxpdlns = true; break; } } if (!hasxpdlns) { Namespaces nss = pkg.getNamespaces(); XPDLObjectFactory xpdlof = JaWEManager.getInstance().getXPDLObjectFactory(); Namespace ns = xpdlof.createXPDLObject(nss, "", false); ns.setName("xpdl"); ns.setLocation("http://www.wfmc.org/2002/XPDL1.0"); nss.add(ns);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?