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 + -
显示快捷键?