Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlavio Donzé2015-04-17 18:23:05 +0000
committerFlavio Donzé2015-04-17 18:24:23 +0000
commitedf8a2e543a6aeb57bc4e31f577d7bd2ed46c7be (patch)
treed3631e1cb41e3617df1532525c7d21bfe2cbc598
parentab212ae425ee379becdbb08ddb664f069ccfc8f6 (diff)
downloadorg.eclipse.bpmn2-modeler-edf8a2e543a6aeb57bc4e31f577d7bd2ed46c7be.tar.gz
org.eclipse.bpmn2-modeler-edf8a2e543a6aeb57bc4e31f577d7bd2ed46c7be.tar.xz
org.eclipse.bpmn2-modeler-edf8a2e543a6aeb57bc4e31f577d7bd2ed46c7be.zip
[462355] refactor BPMN2Editor for use outside of an IDE
Splitting the BPMN2Editor into BPMN2Editor and DefaultBPMN2Editor where the later is IDE independent. Where possible use DefaultBPMN2Editor instead of BPMN2Editor to reduce IDE dependencies. Bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=462355 Signed-off-by: Flavio Donzé <flavio.donze@gmx.ch>
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/commands/CreateDiagramCommand.java5
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/BPMN2FeatureProvider.java11
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2DiagramTypeProvider.java4
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2ToolBehaviorProvider.java16
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditingDomainListener.java5
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java1199
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditorDiagramBehavior.java59
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2MarkerChangeListener.java4
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2PersistencyBehavior.java9
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/DefaultBPMN2Editor.java940
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/DefaultBPMN2EditorDiagramBehavior.java68
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/wizards/BPMN2DiagramCreator.java5
-rw-r--r--plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/wizards/FileService.java11
13 files changed, 1258 insertions, 1078 deletions
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/commands/CreateDiagramCommand.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/commands/CreateDiagramCommand.java
index ae9e397a..d3d5f1a8 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/commands/CreateDiagramCommand.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/commands/CreateDiagramCommand.java
@@ -25,6 +25,7 @@ import org.eclipse.bpmn2.di.BpmnDiFactory;
import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerFactory;
import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
import org.eclipse.bpmn2.modeler.ui.editor.BPMN2Editor;
+import org.eclipse.bpmn2.modeler.ui.editor.DefaultBPMN2Editor;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
@@ -112,7 +113,7 @@ public class CreateDiagramCommand extends AbstractHandler {
private static class NewDiagramNameDialog extends InputDialog {
- public NewDiagramNameDialog(final BPMN2Editor editor, final String type) {
+ public NewDiagramNameDialog(final DefaultBPMN2Editor editor, final String type) {
super(editor.getSite().getShell(),
NLS.bind(Messages.CreateDiagramCommand_Title,type),
NLS.bind(Messages.CreateDiagramCommand_Message,type),
@@ -144,7 +145,7 @@ public class CreateDiagramCommand extends AbstractHandler {
);
}
- public static Definitions getDefinitions(BPMN2Editor editor) {
+ public static Definitions getDefinitions(DefaultBPMN2Editor editor) {
return ModelUtil.getDefinitions(editor.getBpmnDiagram());
}
}
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/BPMN2FeatureProvider.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/BPMN2FeatureProvider.java
index f3c16520..1c3345f9 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/BPMN2FeatureProvider.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/BPMN2FeatureProvider.java
@@ -106,7 +106,7 @@ import org.eclipse.bpmn2.modeler.core.runtime.CustomTaskDescriptor;
import org.eclipse.bpmn2.modeler.core.runtime.FeatureContainerDescriptor;
import org.eclipse.bpmn2.modeler.core.runtime.TargetRuntime;
import org.eclipse.bpmn2.modeler.core.utils.BusinessObjectUtil;
-import org.eclipse.bpmn2.modeler.ui.editor.BPMN2Editor;
+import org.eclipse.bpmn2.modeler.ui.editor.DefaultBPMN2Editor;
import org.eclipse.bpmn2.modeler.ui.features.activity.subprocess.AdHocSubProcessFeatureContainer;
import org.eclipse.bpmn2.modeler.ui.features.activity.subprocess.SubProcessFeatureContainer;
import org.eclipse.bpmn2.modeler.ui.features.activity.subprocess.TransactionFeatureContainer;
@@ -314,8 +314,7 @@ public class BPMN2FeatureProvider extends DefaultFeatureProvider implements IBpm
// Collect all of the <featureContainerDelegate> extensions defined by the current TargetRuntime
// and replace the ones in our list of FeatureContainers
- BPMN2Editor editor = BPMN2Editor.getActiveEditor(); //(BPMN2Editor)getDiagramTypeProvider().getDiagramEditor();;
- TargetRuntime rt = editor.getTargetRuntime();
+ TargetRuntime rt = TargetRuntime.getCurrentRuntime();
for (FeatureContainerDescriptor fcd : rt.getFeatureContainerDescriptors()) {
IFeatureContainer fc = fcd.getFeatureContainer();
if (fc instanceof IConnectionFeatureContainer) {
@@ -419,7 +418,7 @@ public class BPMN2FeatureProvider extends DefaultFeatureProvider implements IBpm
// if (lfc.getApplyObject(context)!=null)
// return lfc;
- BPMN2Editor editor = (BPMN2Editor)getDiagramTypeProvider().getDiagramBehavior().getDiagramContainer();
+ DefaultBPMN2Editor editor = (DefaultBPMN2Editor)getDiagramTypeProvider().getDiagramBehavior().getDiagramContainer();
TargetRuntime rt = editor.getTargetRuntime();
EObject object = getApplyObject(context);
if (object!=null) {
@@ -471,7 +470,7 @@ public class BPMN2FeatureProvider extends DefaultFeatureProvider implements IBpm
// is called during file loading.
Object id = CustomElementFeatureContainer.getId(context);
if (id!=null) {
- BPMN2Editor editor = (BPMN2Editor)getDiagramTypeProvider().getDiagramBehavior().getDiagramContainer();
+ DefaultBPMN2Editor editor = (DefaultBPMN2Editor)getDiagramTypeProvider().getDiagramBehavior().getDiagramContainer();
TargetRuntime rt = editor.getTargetRuntime();
for (CustomTaskDescriptor ct : rt.getCustomTaskDescriptors()) {
if (id.equals(ct.getId())) {
@@ -619,7 +618,7 @@ public class BPMN2FeatureProvider extends DefaultFeatureProvider implements IBpm
public ICustomFeature[] getCustomFeatures(ICustomContext context) {
List<ICustomFeature> list = new ArrayList<ICustomFeature>();
- BPMN2Editor editor = (BPMN2Editor)getDiagramTypeProvider().getDiagramBehavior().getDiagramContainer();
+ DefaultBPMN2Editor editor = (DefaultBPMN2Editor)getDiagramTypeProvider().getDiagramBehavior().getDiagramContainer();
TargetRuntime rt = editor.getTargetRuntime();
String id = CustomElementFeatureContainer.getId(context);
if (id!=null) {
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2DiagramTypeProvider.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2DiagramTypeProvider.java
index 83b5fdfc..446f41f5 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2DiagramTypeProvider.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2DiagramTypeProvider.java
@@ -19,7 +19,7 @@ import org.eclipse.bpmn2.DataState;
import org.eclipse.bpmn2.ParticipantMultiplicity;
import org.eclipse.bpmn2.modeler.core.runtime.TargetRuntime;
import org.eclipse.bpmn2.modeler.ui.Activator;
-import org.eclipse.bpmn2.modeler.ui.editor.BPMN2Editor;
+import org.eclipse.bpmn2.modeler.ui.editor.DefaultBPMN2Editor;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.graphiti.dt.AbstractDiagramTypeProvider;
@@ -43,7 +43,7 @@ public class Bpmn2DiagramTypeProvider extends AbstractDiagramTypeProvider {
@Override
public IToolBehaviorProvider[] getAvailableToolBehaviorProviders() {
if (toolBehaviorProviders == null) {
- BPMN2Editor editor = (BPMN2Editor)getDiagramEditor();
+ DefaultBPMN2Editor editor = (DefaultBPMN2Editor)getDiagramEditor();
TargetRuntime rt = editor.getTargetRuntime();
IConfigurationElement[] config = Platform.getExtensionRegistry().getConfigurationElementsFor(
Activator.UI_EXTENSION_ID);
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2ToolBehaviorProvider.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2ToolBehaviorProvider.java
index f473c327..808f0653 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2ToolBehaviorProvider.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/diagram/Bpmn2ToolBehaviorProvider.java
@@ -49,7 +49,7 @@ import org.eclipse.bpmn2.modeler.core.validation.ValidationStatusAdapter;
import org.eclipse.bpmn2.modeler.ui.Activator;
import org.eclipse.bpmn2.modeler.ui.IConstants;
import org.eclipse.bpmn2.modeler.ui.ImageProvider;
-import org.eclipse.bpmn2.modeler.ui.editor.BPMN2Editor;
+import org.eclipse.bpmn2.modeler.ui.editor.DefaultBPMN2Editor;
import org.eclipse.bpmn2.modeler.ui.features.choreography.ChoreographySelectionBehavior;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.ecore.EClassifier;
@@ -111,18 +111,18 @@ import org.eclipse.swt.widgets.Display;
public class Bpmn2ToolBehaviorProvider extends DefaultToolBehaviorProvider implements IFeatureCheckerHolder {
- protected BPMN2Editor editor;
+ protected DefaultBPMN2Editor editor;
protected TargetRuntime targetRuntime;
protected BPMN2FeatureProvider featureProvider;
protected ModelEnablements modelEnablements;
protected Hashtable<String, PaletteCompartmentEntry> categories = new Hashtable<String, PaletteCompartmentEntry>();
protected List<IPaletteCompartmentEntry> palette;
protected CustomKeyCommandFeature commandFeature = null;
-
+
protected class ProfileSelectionToolEntry extends ToolEntry {
- BPMN2Editor editor;
+ DefaultBPMN2Editor editor;
- ProfileSelectionToolEntry(BPMN2Editor editor, String profileId) {
+ ProfileSelectionToolEntry(DefaultBPMN2Editor editor, String profileId) {
super("", null, null, null, null); //$NON-NLS-1$
TargetRuntime rt = editor.getTargetRuntime();
ModelEnablementDescriptor med = rt.getModelEnablements(profileId);
@@ -165,7 +165,7 @@ public class Bpmn2ToolBehaviorProvider extends DefaultToolBehaviorProvider imple
super(diagramTypeProvider);
}
- public void createPaletteProfilesGroup(BPMN2Editor editor, PaletteRoot paletteRoot) {
+ public void createPaletteProfilesGroup(DefaultBPMN2Editor editor, PaletteRoot paletteRoot) {
TargetRuntime rt = editor.getTargetRuntime();
PaletteDrawer drawer = new PaletteDrawer(Messages.BPMNToolBehaviorProvider_Profiles_Drawer_Label, null);
@@ -183,7 +183,7 @@ public class Bpmn2ToolBehaviorProvider extends DefaultToolBehaviorProvider imple
@Override
public IPaletteCompartmentEntry[] getPalette() {
- BPMN2Editor editor = (BPMN2Editor)getDiagramTypeProvider().getDiagramBehavior().getDiagramContainer();
+ DefaultBPMN2Editor editor = (DefaultBPMN2Editor)getDiagramTypeProvider().getDiagramBehavior().getDiagramContainer();
targetRuntime = editor.getTargetRuntime();
modelEnablements = editor.getModelEnablements();
featureProvider = (BPMN2FeatureProvider)getFeatureProvider();
@@ -505,7 +505,7 @@ public class Bpmn2ToolBehaviorProvider extends DefaultToolBehaviorProvider imple
private void createCustomTasks(List<IPaletteCompartmentEntry> ret) {
PaletteCompartmentEntry compartmentEntry = null;
- BPMN2Editor editor = (BPMN2Editor)getDiagramTypeProvider().getDiagramBehavior().getDiagramContainer();
+ DefaultBPMN2Editor editor = (DefaultBPMN2Editor)getDiagramTypeProvider().getDiagramBehavior().getDiagramContainer();
TargetRuntime rt = editor.getTargetRuntime();
try {
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditingDomainListener.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditingDomainListener.java
index db99e292..e32588f1 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditingDomainListener.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditingDomainListener.java
@@ -14,7 +14,6 @@ package org.eclipse.bpmn2.modeler.ui.editor;
import org.eclipse.bpmn2.modeler.core.LifecycleEvent;
import org.eclipse.bpmn2.modeler.core.LifecycleEvent.EventType;
-import org.eclipse.bpmn2.modeler.core.runtime.TargetRuntime;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
@@ -26,12 +25,10 @@ import org.eclipse.emf.transaction.TransactionalEditingDomainListenerImpl;
public class BPMN2EditingDomainListener extends TransactionalEditingDomainListenerImpl implements ExceptionHandler {
- protected BPMN2Editor bpmn2Editor;
protected BasicDiagnostic diagnostics;
- public BPMN2EditingDomainListener(BPMN2Editor bpmn2Editor) {
+ public BPMN2EditingDomainListener(DefaultBPMN2Editor bpmn2Editor) {
super();
- this.bpmn2Editor = bpmn2Editor;
TransactionalCommandStack stack = (TransactionalCommandStack) bpmn2Editor.getEditingDomain().getCommandStack();
stack.setExceptionHandler(this);
}
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java
index e610743a..ea7c66a3 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java
@@ -13,55 +13,25 @@
package org.eclipse.bpmn2.modeler.ui.editor;
import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
import java.util.Arrays;
-import java.util.List;
-import org.eclipse.bpmn2.BaseElement;
-import org.eclipse.bpmn2.Definitions;
-import org.eclipse.bpmn2.di.BPMNDiagram;
-import org.eclipse.bpmn2.modeler.core.LifecycleEvent;
-import org.eclipse.bpmn2.modeler.core.LifecycleEvent.EventType;
import org.eclipse.bpmn2.modeler.core.builder.BPMN2Builder;
-import org.eclipse.bpmn2.modeler.core.di.DIImport;
-import org.eclipse.bpmn2.modeler.core.di.DIUtils;
-import org.eclipse.bpmn2.modeler.core.merrimac.clad.Bpmn2TabbedPropertySheetPage;
import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.ObjectEditingDialog;
-import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerResourceImpl;
-import org.eclipse.bpmn2.modeler.core.model.ModelHandler;
import org.eclipse.bpmn2.modeler.core.model.ModelHandlerLocator;
-import org.eclipse.bpmn2.modeler.core.model.ProxyURIConverterImplExtension;
import org.eclipse.bpmn2.modeler.core.preferences.Bpmn2Preferences;
-import org.eclipse.bpmn2.modeler.core.preferences.ModelEnablements;
-import org.eclipse.bpmn2.modeler.core.preferences.ShapeStyle;
import org.eclipse.bpmn2.modeler.core.runtime.TargetRuntime;
-import org.eclipse.bpmn2.modeler.core.runtime.ToolPaletteDescriptor;
-import org.eclipse.bpmn2.modeler.core.utils.BusinessObjectUtil;
-import org.eclipse.bpmn2.modeler.core.utils.DiagramEditorAdapter;
import org.eclipse.bpmn2.modeler.core.utils.ErrorUtils;
-import org.eclipse.bpmn2.modeler.core.utils.FeatureSupport;
import org.eclipse.bpmn2.modeler.core.utils.FileUtils;
import org.eclipse.bpmn2.modeler.core.utils.MarkerUtils;
import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
-import org.eclipse.bpmn2.modeler.core.utils.ModelUtil.Bpmn2DiagramType;
-import org.eclipse.bpmn2.modeler.core.utils.StyleUtil;
import org.eclipse.bpmn2.modeler.core.validation.BPMN2ProjectValidator;
import org.eclipse.bpmn2.modeler.core.validation.BPMN2ValidationStatusLoader;
-import org.eclipse.bpmn2.modeler.help.IHelpContexts;
import org.eclipse.bpmn2.modeler.ui.Activator;
import org.eclipse.bpmn2.modeler.ui.Bpmn2DiagramEditorInput;
-import org.eclipse.bpmn2.modeler.ui.diagram.Bpmn2ToolBehaviorProvider;
-import org.eclipse.bpmn2.modeler.ui.property.PropertyTabDescriptorProvider;
import org.eclipse.bpmn2.modeler.ui.util.PropertyUtil;
-import org.eclipse.bpmn2.modeler.ui.views.outline.BPMN2EditorOutlinePage;
-import org.eclipse.bpmn2.modeler.ui.views.outline.BPMN2EditorSelectionSynchronizer;
-import org.eclipse.bpmn2.modeler.ui.wizards.BPMN2DiagramCreator;
-import org.eclipse.bpmn2.modeler.ui.wizards.FileService;
import org.eclipse.bpmn2.util.Bpmn2ResourceImpl;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
@@ -70,52 +40,16 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
-import org.eclipse.draw2d.IFigure;
-import org.eclipse.draw2d.MarginBorder;
-import org.eclipse.emf.common.command.BasicCommandStack;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.TreeIterator;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.EValidator;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.transaction.NotificationFilter;
-import org.eclipse.emf.transaction.RecordingCommand;
-import org.eclipse.emf.transaction.TransactionalEditingDomain.Lifecycle;
-import org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl;
-import org.eclipse.gef.EditPart;
-import org.eclipse.gef.GraphicalViewer;
-import org.eclipse.gef.MouseWheelHandler;
-import org.eclipse.gef.MouseWheelZoomHandler;
-import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
-import org.eclipse.gef.ui.parts.SelectionSynchronizer;
import org.eclipse.graphiti.features.IFeatureProvider;
-import org.eclipse.graphiti.features.IUpdateFeature;
-import org.eclipse.graphiti.features.context.impl.UpdateContext;
-import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
-import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.mm.pictograms.PictogramElement;
-import org.eclipse.graphiti.mm.pictograms.Shape;
-import org.eclipse.graphiti.services.Graphiti;
-import org.eclipse.graphiti.services.IGaService;
-import org.eclipse.graphiti.services.IPeService;
import org.eclipse.graphiti.ui.editor.DiagramBehavior;
-import org.eclipse.graphiti.ui.editor.DiagramEditor;
-import org.eclipse.graphiti.ui.editor.DiagramEditorInput;
-import org.eclipse.graphiti.ui.internal.editor.GFPaletteRoot;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
@@ -133,100 +67,33 @@ import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.SaveAsDialog;
import org.eclipse.ui.ide.IGotoMarker;
import org.eclipse.ui.ide.ResourceUtil;
-import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
-import org.eclipse.ui.views.properties.IPropertySheetPage;
-import org.eclipse.ui.views.properties.tabbed.ITabDescriptorProvider;
import org.eclipse.wst.sse.ui.StructuredTextEditor;
-@SuppressWarnings("restriction")
-public class BPMN2Editor extends DiagramEditor implements IPreferenceChangeListener, IGotoMarker {
-
- static {
- TargetRuntime.createTargetRuntimes();
- }
-
+public class BPMN2Editor extends DefaultBPMN2Editor implements IGotoMarker {
public static final String EDITOR_ID = "org.eclipse.bpmn2.modeler.ui.bpmn2editor"; //$NON-NLS-1$
- public static final String CONTRIBUTOR_ID = "org.eclipse.bpmn2.modeler.ui.PropertyContributor"; //$NON-NLS-1$
- private ModelHandler modelHandler;
- private URI modelUri;
- private URI diagramUri;
- private boolean editable = true;
+ private static BPMN2Editor activeEditor;
- protected BPMNDiagram bpmnDiagram;
- protected Bpmn2ResourceImpl bpmnResource;
-
- private IWorkbenchListener workbenchListener;
+ protected BPMN2MultiPageEditor multipageEditor;
private IPartListener2 selectionListener;
+ private IWorkbenchListener workbenchListener;
private IResourceChangeListener markerChangeListener;
private boolean workbenchShutdown = false;
- private static BPMN2Editor activeEditor;
- // We need this to find BPMN2 Editors that are already open for this file
- // Used when opening a New Editor window for an already open editor.
- private IEditorInput currentInput;
- private static ITabDescriptorProvider tabDescriptorProvider;
- private BPMN2EditingDomainListener editingDomainListener;
-
- private Bpmn2Preferences preferences;
- private TargetRuntime targetRuntime;
- private ModelEnablements modelEnablements;
- private boolean importInProgress;
- private BPMN2EditorSelectionSynchronizer synchronizer;
- protected DiagramEditorAdapter editorAdapter;
- protected BPMN2MultiPageEditor multipageEditor;
- protected IPropertySheetPage propertySheetPage;
- protected IContentOutlinePage outlinePage;
-
- protected boolean saveInProgress = false;
- private static NotificationFilter filterNone = new NotificationFilter.Custom() {
- @Override
- public boolean matches(Notification notification) {
- return false;
- }
- };
-
public BPMN2Editor(BPMN2MultiPageEditor mpe) {
multipageEditor = mpe;
}
-
- public static BPMN2Editor getActiveEditor() {
- return activeEditor;
- }
-
- public IEditorInput getEditorInput() {
- return currentInput;
- }
-
- private void setActiveEditor(BPMN2Editor editor) {
- activeEditor = editor;
- if (activeEditor!=null) {
- Bpmn2Preferences.setActiveProject(activeEditor.getProject());
- TargetRuntime.setCurrentRuntime( activeEditor.getTargetRuntime() );
- }
- else
- TargetRuntime.setCurrentRuntime(null);
- }
-
- public BPMN2MultiPageEditor getMultipageEditor() {
- return multipageEditor;
- }
-
- protected DiagramEditorAdapter getEditorAdapter() {
- return editorAdapter;
- }
@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
+ if (input instanceof IFileEditorInput) {
+ BPMN2Builder.INSTANCE.loadExtensions( ((IFileEditorInput)input).getFile().getProject() );
+ }
+
// This needs to happen very early because setActiveEditor will try to
// determine the TargetRuntime from the EditorInput.
- currentInput = input;
setActiveEditor(this);
- if (input instanceof IFileEditorInput) {
- BPMN2Builder.INSTANCE.loadExtensions( ((IFileEditorInput)input).getFile().getProject() );
- }
-
if (this.getDiagramBehavior()==null) {
super.init(site, input);
// add a listener so we get notified if the workbench is shutting down.
@@ -235,274 +102,151 @@ public class BPMN2Editor extends DiagramEditor implements IPreferenceChangeListe
addSelectionListener();
addMarkerChangeListener();
}
- else {
- if (input instanceof Bpmn2DiagramEditorInput) {
- bpmnDiagram = ((Bpmn2DiagramEditorInput)input).getBpmnDiagram();
- if (bpmnDiagram!=null) {
- setBpmnDiagram(bpmnDiagram);
- }
+ else if (input instanceof Bpmn2DiagramEditorInput) {
+ bpmnDiagram = ((Bpmn2DiagramEditorInput)input).getBpmnDiagram();
+ if (bpmnDiagram!=null) {
+ setBpmnDiagram(bpmnDiagram);
}
}
}
-
- /**
- * Beware, creates a new input and changes this editor!
- */
- private Bpmn2DiagramEditorInput createNewDiagramEditorInput(IEditorInput input, Bpmn2DiagramType diagramType, String targetNamespace)
- throws PartInitException {
-
- modelUri = FileService.getInputUri(input);
- if (modelUri==null)
- throw new PartInitException(Messages.BPMN2Editor_Cannot_Create_Editor_Input);
- input = BPMN2DiagramCreator.createDiagram(input, modelUri, diagramType,targetNamespace,this);
- diagramUri = ((Bpmn2DiagramEditorInput)input).getUri();
-
- return (Bpmn2DiagramEditorInput)input;
- }
-
- /**
- * Bypasses Graphiti's Persistency Behavior code and save only the BPMN2 model resource.
- * This is only used after a successful Import if the BPMN2 model was changed in any way,
- * e.g. missing DI elements were added.
- */
- private void saveModelFile() {
- try {
- bpmnResource.save(null);
- ((BasicCommandStack) getEditingDomain().getCommandStack()).saveIsDone();
- updateDirtyState();
- }
- catch (IOException e) {
- e.printStackTrace();
- }
- }
@Override
- protected void setInput(IEditorInput input) {
- try {
- if (input instanceof Bpmn2DiagramEditorInput) {
- Bpmn2DiagramType diagramType = Bpmn2DiagramType.NONE;
- String targetNamespace = null;
- diagramType = ((Bpmn2DiagramEditorInput)input).getInitialDiagramType();
- targetNamespace = ((Bpmn2DiagramEditorInput)input).getTargetNamespace();
- input = createNewDiagramEditorInput(input, diagramType, targetNamespace);
- }
- }
- catch (Exception e) {
- Activator.logError(e);
- }
-
- // Check if this is a New Editor Window for an already open editor
- currentInput = input;
- BPMN2Editor otherEditor = findOpenEditor(this,input);
-
- // Determine which Target Runtime to use for this input and initialize the ResourceSet
- TargetRuntime targetRuntime = getTargetRuntime(input);
- getTargetRuntime().notify(new LifecycleEvent(EventType.EDITOR_STARTUP,this));
-
- ResourceSet resourceSet = getEditingDomain().getResourceSet();
- resourceSet.setURIConverter(new ProxyURIConverterImplExtension(modelUri));
- resourceSet.eAdapters().add(editorAdapter = new DiagramEditorAdapter(this));
+ protected EditorInputHelper getInputHelper() {
+ return new ExtendedEditorInputHelper();
+ }
- // Tell the TargetRuntime about the ResourceSet. This allows the TargetRuntime to provide its
- // own ResourceFactory if needed.
- targetRuntime.registerExtensionResourceFactory(resourceSet);
-
- // Now create the BPMN2 model resource, or reuse the one from the already open editor.
- if (otherEditor==null) {
- bpmnResource = (Bpmn2ResourceImpl) resourceSet.createResource(modelUri, Bpmn2ModelerResourceImpl.BPMN2_CONTENT_TYPE_ID);
- }
- else {
- bpmnResource = otherEditor.bpmnResource;
- }
-
- // Set this input in Graphiti DiagramEditor
- super.setInput(input);
-
- // Hook a transaction exception handler so we can get diagnostics about EMF validation errors.
- getEditingDomainListener();
-
- // This does the actual loading of the resource.
- // TODO: move the loading code to BPMN2PersistencyBehavior where it belongs,
- // and get rid of ModelHandler and ModelHandlerLocator
- modelHandler = ModelHandlerLocator.createModelHandler(modelUri, bpmnResource);
- ModelHandlerLocator.put(diagramUri, modelHandler);
+ protected void loadMarkers() {
+ if (getModelFile()!=null) {
+ // read in the markers
+ BPMN2ValidationStatusLoader vsl = new BPMN2ValidationStatusLoader(this);
- // Allow the runtime extension to construct custom tasks and whatever else it needs
- // custom tasks should be added to the current target runtime's custom tasks list
- // where they will be picked up by the toolpalette refresh.
- setActiveEditor(this); // set the Bpmn2Preferences.activeProject just before RT extension is initialized
- getTargetRuntime().notify(new LifecycleEvent(EventType.EDITOR_INITIALIZED,this));
+ try {
+ vsl.load(Arrays.asList(getModelFile().findMarkers(null, true, IResource.DEPTH_ZERO)));
+ } catch (CoreException e) {
+ Activator.logStatus(e.getStatus());
+ }
+ }
+ }
- if (otherEditor==null) {
- try {
- getPreferences().setDoCoreValidation(false);
- // Import the BPMNDI model that creates the Graphiti shapes, connections, etc.
- BasicCommandStack commandStack = (BasicCommandStack) getEditingDomain().getCommandStack();
- commandStack.execute(new RecordingCommand(getEditingDomain()) {
- @Override
- protected void doExecute() {
- importDiagram();
- }
- });
-
- Definitions definitions = ModelUtil.getDefinitions(bpmnResource);
- if (definitions!=null) {
- // we'll need this in case doSaveAs()
- ((Bpmn2DiagramEditorInput)input).setTargetNamespace(definitions.getTargetNamespace());
- ((Bpmn2DiagramEditorInput)input).setInitialDiagramType(ModelUtil.getDiagramType(this));
- }
- // Reset the save point and initialize the undo stack
- commandStack.saveIsDone();
- commandStack.flush();
- }
- finally {
- getPreferences().setDoCoreValidation(true);
- }
- }
-
- // Load error markers
- loadMarkers();
- }
-
- protected DiagramEditorInput convertToDiagramEditorInput(IEditorInput input) throws PartInitException {
- IEditorInput newInput = createNewDiagramEditorInput(input, Bpmn2DiagramType.NONE, ""); //$NON-NLS-1$
- if (newInput==null)
- newInput = super.convertToDiagramEditorInput(input);
- return (DiagramEditorInput) newInput;
+ @Override
+ protected DiagramBehavior createDiagramBehavior() {
+ DiagramBehavior diagramBehavior = new BPMN2EditorDiagramBehavior(this);
+ return diagramBehavior;
}
-
- private void importDiagram() {
- try {
- importInProgress = true;
- // make sure this guy is active, otherwise it's not selectable
- Diagram diagram = getDiagramTypeProvider().getDiagram();
- IFeatureProvider featureProvider = getDiagramTypeProvider().getFeatureProvider();
- diagram.setActive(true);
- Bpmn2DiagramEditorInput input = (Bpmn2DiagramEditorInput) getEditorInput();
- Bpmn2DiagramType diagramType = input.getInitialDiagramType();
- String targetNamespace = input.getTargetNamespace();
-
- if (diagramType != Bpmn2DiagramType.NONE) {
- bpmnDiagram = modelHandler.createDiagramType(diagramType, targetNamespace);
- featureProvider.link(diagram, bpmnDiagram);
- // If the bpmn file was missing DI elements, they would have been added by the importer
- // so save the file now in case it was changed.
- saveModelFile();
- } else if (targetNamespace!=null && !targetNamespace.isEmpty()){
- modelHandler.getDefinitions().setTargetNamespace(targetNamespace);
- }
- DIImport di = new DIImport(this, getPreferences());
- di.setModelHandler(modelHandler);
-
- di.generateFromDI();
- }
- finally {
- importInProgress = false;
- }
+ public BPMN2MultiPageEditor getMultipageEditor() {
+ return multipageEditor;
}
- public void setEditable(boolean editable) {
- this.editable = editable;
+ public static BPMN2Editor getActiveEditor() {
+ return activeEditor;
}
- public boolean isEditable() {
- return editable;
+ protected void setActiveEditor(BPMN2Editor editor) {
+ activeEditor = editor;
+ if (activeEditor!=null) {
+ Bpmn2Preferences.setActiveProject(activeEditor.getProject());
+ TargetRuntime.setCurrentRuntime( activeEditor.getTargetRuntime() );
+ }
+ else
+ TargetRuntime.setCurrentRuntime(null);
}
+ @SuppressWarnings("rawtypes")
@Override
- public boolean isDirty() {
- if (!editable)
- return false;
- if (getEditorInput()==null)
- return false;
- return super.isDirty();
- }
-
- protected DiagramBehavior createDiagramBehavior() {
- DiagramBehavior diagramBehavior = new BPMN2EditorDiagramBehavior(this);
- return diagramBehavior;
- }
-
- public Bpmn2Preferences getPreferences() {
- if (preferences==null) {
- loadPreferences(getProject());
+ public Object getAdapter(Class required) {
+ if (required == StructuredTextEditor.class) {
+ // ugly hack to disable selection in Property Viewer while source viewer is active
+ if (multipageEditor.getActiveEditor() == multipageEditor.getSourceViewer())
+ return multipageEditor.getSourceViewer();
}
- return preferences;
- }
-
- private void loadPreferences(IProject project) {
- preferences = Bpmn2Preferences.getInstance(project);
- preferences.addPreferenceChangeListener(this);
+ return super.getAdapter(required);
}
- /**
- * ID for tabbed property sheets.
- *
- * @return the contributor id
- */
- @Override
- public String getContributorId() {
- return CONTRIBUTOR_ID;
- }
-
- public TargetRuntime getTargetRuntime() {
- if (targetRuntime==null) {
- targetRuntime = getTargetRuntime(getEditorInput());
+ @Override
+ public void gotoMarker(IMarker marker) {
+ ResourceSet rs = getEditingDomain().getResourceSet();
+ EObject target = MarkerUtils.getTargetObject(rs, marker);
+ if (target == null) {
+ return;
+ }
+ IFeatureProvider fp = getDiagramTypeProvider().getFeatureProvider();
+ PictogramElement pe = MarkerUtils.getContainerShape(fp, marker);
+
+ if (pe!=null)
+ selectPictogramElements(new PictogramElement[] {pe});
+ if (pe == null || PropertyUtil.getPropertySheetView() == null) {
+ ObjectEditingDialog dialog = new ObjectEditingDialog(this, target);
+ ObjectEditingDialog.openWithTransaction(dialog);
+ }
+ }
+
+ @Override
+ public void doSave(IProgressMonitor monitor) {
+ super.doSave(monitor);
+
+ Resource resource = getResourceSet().getResource(modelUri, false);
+ BPMN2ProjectValidator.validateOnSave(resource, monitor);
+ }
+
+ @Override
+ public void doSaveAs() {
+ IFile oldFile = getModelFile();
+ SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+ saveAsDialog.setOriginalFile(oldFile);
+ saveAsDialog.create();
+ if (saveAsDialog.open() == SaveAsDialog.CANCEL) {
+ return;
}
- return targetRuntime;
- }
-
- public ModelEnablements getModelEnablements() {
- String profileName = getPreferences().getDefaultToolProfile(getTargetRuntime());
- if (modelEnablements!=null) {
- if (!modelEnablements.getId().equals(profileName)) {
- modelEnablements = null;
- }
-
+ IPath newFilePath = saveAsDialog.getResult();
+ if (newFilePath == null){
+ return;
}
- if (modelEnablements==null) {
- modelEnablements = getPreferences().getModelEnablements(getTargetRuntime(), profileName);
- if (modelEnablements.size()==0) {
- // This Target Runtime doesn't define a Tool Profile
- // so we'll use the one for Default Runtime
- profileName = getPreferences().getDefaultToolProfile(TargetRuntime.getDefaultRuntime());
- ModelEnablements defaultEnablements = getPreferences().getModelEnablements(TargetRuntime.getDefaultRuntime(), profileName);
- modelEnablements.copy(defaultEnablements);
- }
+
+ IFile newFile = ResourcesPlugin.getWorkspace().getRoot().getFile(newFilePath);
+ IWorkbenchPage page = getSite().getPage();
+ try {
+ // if new file exists, close its editor (if open) and delete the existing file
+ if (newFile.exists()) {
+ IEditorPart editorPart = ResourceUtil.findEditor(page, newFile);
+ if (editorPart!=null)
+ page.closeEditor(editorPart, false);
+ newFile.delete(true, null);
+ }
+ // make a copy
+ oldFile.copy(newFilePath, true, null);
+ } catch (CoreException e) {
+ showErrorDialogWithLogging(e);
+ return;
}
- return modelEnablements;
+
+ // change the Resource URI and save it to the new file
+ URI newURI = URI.createPlatformResourceURI(newFile.getFullPath().toString(), true);
+ handleResourceMoved(bpmnResource,newURI);
+ doSave(null);
}
-
- protected TargetRuntime getTargetRuntime(IEditorInput input) {
- if (targetRuntime==null && input!=null) {
- // If the project has not been configured for a specific runtime through the "BPMN2"
- // project properties page (i.e. the target is "None") then allow the runtime extension
- // plug-ins an opportunity to identify the given process file contents as their own.
- // If none of the plug-ins respond with "yes, this file is targeted for my runtime",
- // then use the "None" as the extension. This will configure the BPMN2 Modeler with
- // generic property sheets and other default behavior.
- if (input instanceof Bpmn2DiagramEditorInput)
- targetRuntime = ((Bpmn2DiagramEditorInput)input).getRuntime();
- if (targetRuntime==null)
- targetRuntime = TargetRuntime.getRuntime(input);
-
- TargetRuntime.setCurrentRuntime(targetRuntime);
- }
- return targetRuntime;
+
+ public void closeEditor() {
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ boolean closed = getSite().getPage().closeEditor(BPMN2Editor.this, false);
+ if (!closed){
+ // If close editor fails, try again with explicit editorpart
+ // of the old file
+ IFile oldFile = ResourcesPlugin.getWorkspace().getRoot().getFile(getModelPath());
+ IEditorPart editorPart = ResourceUtil.findEditor(getSite().getPage(), oldFile);
+ closed = getSite().getPage().closeEditor(editorPart, false);
+ }
+ }
+ });
}
- public void updatePalette() {
- GFPaletteRoot pr = (GFPaletteRoot)getPaletteRoot();
- if (pr!=null) {
- // force a reload of this
- modelEnablements = null;
- pr.updatePaletteEntries();
- Bpmn2ToolBehaviorProvider toolBehaviorProvider =
- (Bpmn2ToolBehaviorProvider)getDiagramTypeProvider().
- getCurrentToolBehaviorProvider();
- toolBehaviorProvider.createPaletteProfilesGroup(this, pr);
- }
+
+ // Show error dialog and log the error
+ private void showErrorDialogWithLogging(Exception e) {
+ Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
+ ErrorUtils.showErrorWithLogging(status);
}
private void addWorkbenchListener() {
@@ -522,40 +266,8 @@ public class BPMN2Editor extends DiagramEditor implements IPreferenceChangeListe
PlatformUI.getWorkbench().addWorkbenchListener(workbenchListener);
}
}
-
- @Override
- public void gotoMarker(IMarker marker) {
- ResourceSet rs = getEditingDomain().getResourceSet();
- EObject target = MarkerUtils.getTargetObject(rs, marker);
- if (target == null) {
- return;
- }
- IFeatureProvider fp = getDiagramTypeProvider().getFeatureProvider();
- PictogramElement pe = MarkerUtils.getContainerShape(fp, marker);
-
- if (pe!=null)
- selectPictogramElements(new PictogramElement[] {pe});
- if (pe == null || PropertyUtil.getPropertySheetView() == null) {
- ObjectEditingDialog dialog = new ObjectEditingDialog(this, target);
- ObjectEditingDialog.openWithTransaction(dialog);
- }
- }
- private void loadMarkers() {
- if (getModelFile()!=null) {
- // read in the markers
- BPMN2ValidationStatusLoader vsl = new BPMN2ValidationStatusLoader(this);
-
- try {
- vsl.load(Arrays.asList(getModelFile().findMarkers(null, true, IResource.DEPTH_ZERO)));
- } catch (CoreException e) {
- Activator.logStatus(e.getStatus());
- }
- }
- }
-
- private void removeWorkbenchListener()
- {
+ private void removeWorkbenchListener() {
if (workbenchListener!=null) {
PlatformUI.getWorkbench().removeWorkbenchListener(workbenchListener);
workbenchListener = null;
@@ -611,8 +323,7 @@ public class BPMN2Editor extends DiagramEditor implements IPreferenceChangeListe
}
}
- private void removeSelectionListener()
- {
+ private void removeSelectionListener() {
if (selectionListener!=null) {
getSite().getPage().removePartListener(selectionListener);
selectionListener = null;
@@ -634,376 +345,6 @@ public class BPMN2Editor extends DiagramEditor implements IPreferenceChangeListe
markerChangeListener = null;
}
}
-
- public void refreshTitle() {
- if (getEditorInput()!=null) {
- String name = getEditorInput().getName();
- setPartName(URI.decode(name));
- }
- }
-
- public BPMN2EditingDomainListener getEditingDomainListener() {
- if (editingDomainListener==null) {
- TransactionalEditingDomainImpl editingDomain = (TransactionalEditingDomainImpl)getEditingDomain();
- if (editingDomain==null) {
- return null;
- }
- editingDomainListener = new BPMN2EditingDomainListener(this);
-
- Lifecycle domainLifeCycle = (Lifecycle) editingDomain.getAdapter(Lifecycle.class);
- domainLifeCycle.addTransactionalEditingDomainListener(editingDomainListener);
- }
- return editingDomainListener;
- }
-
- public BasicDiagnostic getDiagnostics() {
- return getEditingDomainListener().getDiagnostics();
- }
-
- @Override
- protected SelectionSynchronizer getSelectionSynchronizer() {
- if (synchronizer == null)
- synchronizer = new BPMN2EditorSelectionSynchronizer();
- return synchronizer;
- }
-
- @Override
- public Object getAdapter(Class required) {
- if (required==DiagramEditor.class) {
- return this;
- }
- if (required==ITabDescriptorProvider.class) {
- if (tabDescriptorProvider==null) {
- tabDescriptorProvider = new PropertyTabDescriptorProvider();
-// IWorkbenchPage page = getEditorSite().getPage();
-// String viewID = "org.eclipse.ui.views.PropertySheet"; //$NON-NLS-1$
-// try {
-// page.showView(viewID, null, IWorkbenchPage.VIEW_CREATE);
-// page.showView(viewID, null, IWorkbenchPage.VIEW_ACTIVATE);
-// }
-// catch (Exception e) {}
- }
- return tabDescriptorProvider;
- }
- if (required==TargetRuntime.class)
- return getTargetRuntime();
- if (required==Bpmn2Preferences.class)
- return getPreferences();
- if (required == IPropertySheetPage.class) {
- if (propertySheetPage==null) {
- propertySheetPage = new Bpmn2TabbedPropertySheetPage(this);
- Display.getCurrent().asyncExec(new Runnable() {
- @Override
- public void run() {
- if (!propertySheetPage.getControl().isDisposed()) {
- propertySheetPage.getControl().addDisposeListener(new DisposeListener() {
- @Override
- public void widgetDisposed(DisposeEvent e) {
- propertySheetPage = null;
- }
- });
- }
- }
- });
- }
- return propertySheetPage;
- }
- if (required == SelectionSynchronizer.class) {
- return getSelectionSynchronizer();
- }
- if (required == IContentOutlinePage.class) {
- if (getDiagramTypeProvider() != null) {
- if (outlinePage==null) {
- outlinePage = new BPMN2EditorOutlinePage(this);
- }
- return outlinePage;
- }
- }
- if (required == StructuredTextEditor.class) {
- // ugly hack to disable selection in Property Viewer while source viewer is active
- if (multipageEditor.getActiveEditor() == multipageEditor.getSourceViewer())
- return multipageEditor.getSourceViewer();
- }
- if (required == ModelEnablements.class) {
- return getModelEnablements();
- }
- if (required == ToolPaletteDescriptor.class) {
- String profileName = getPreferences().getDefaultToolProfile(getTargetRuntime());
- return getTargetRuntime().getToolPalette(profileName);
- }
- if (required == NotificationFilter.class) {
- if (saveInProgress)
- return filterNone;
- else
- return null;
- }
- if (required==GraphicalViewer.class) {
- return getGraphicalViewer();
- }
-
- return super.getAdapter(required);
- }
-
- @Override
- public void dispose() {
- if (targetRuntime != null) {
- targetRuntime.notify(new LifecycleEvent(EventType.EDITOR_SHUTDOWN,this));
- }
-
- // clear ID mapping tables if no more instances of editor are active
- int instances = 0;
- IWorkbenchPage[] pages = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPages();
- for (IWorkbenchPage p : pages) {
- IEditorReference[] refs = p.findEditors(null, EDITOR_ID, IWorkbenchPage.MATCH_ID);
- for (IEditorReference r : refs) {
- if (r.getEditor(false) instanceof BPMN2MultiPageEditor) {
- if (((BPMN2MultiPageEditor)r.getEditor(false)).designEditor != this)
- ++instances;
- }
- }
- }
- BPMN2Editor otherEditor = findOpenEditor(this, getEditorInput());
- if (otherEditor==null && diagramUri != null) {
- // we can delete the Graphiti Diagram file if there are no other
- // editor windows open for this BPMN2 file.
- File diagramFile = new File(diagramUri.toFileString());
- if (diagramFile.exists()) {
- try {
- diagramFile.delete();
- }
- catch (Exception e) {
- }
- }
- }
- if (modelHandler!=null) {
- ModelUtil.clearIDs(modelHandler.getResource(), instances==0);
- modelHandler.dispose();
- }
- if (preferences != null) {
- preferences.removePreferenceChangeListener(this);
- }
-
- // cancel the Property Sheet Page job
- if (propertySheetPage!=null)
- propertySheetPage.selectionChanged(this, null);
-
- // get rid of cached Property Tab Descriptors
- if (tabDescriptorProvider instanceof PropertyTabDescriptorProvider)
- ((PropertyTabDescriptorProvider)tabDescriptorProvider).disposeTabDescriptors(bpmnResource);
-
- if (getResourceSet() != null) {
- getResourceSet().eAdapters().remove(getEditorAdapter());
- }
- removeSelectionListener();
- if (instances==0)
- setActiveEditor(null);
-
- super.dispose();
- if (modelUri != null) {
- ModelHandlerLocator.remove(modelUri);
- // get rid of temp files and folders, but NOT if the workbench is being shut down.
- // when the workbench is restarted, we need to have those temp files around!
- if (!workbenchShutdown) {
- if (FileUtils.isTempFile(modelUri)) {
- FileUtils.deleteTempFile(modelUri);
- }
- }
- }
-
- removeWorkbenchListener();
- removeMarkerChangeListener();
-
- if (preferences != null) {
- preferences.dispose();
- }
-
- currentInput = null;
- }
-
- public IPath getModelPath() {
- if (getModelFile()!=null)
- return getModelFile().getFullPath();
- return null;
- }
-
- public IProject getProject() {
- if (getModelFile()!=null)
- return getModelFile().getProject();
- return null;
- }
-
- public IFile getModelFile() {
- if (modelUri!=null) {
- String uriString = modelUri.trimFragment().toPlatformString(true);
- if (uriString!=null) {
- IPath fullPath = new Path(uriString);
- return ResourcesPlugin.getWorkspace().getRoot().getFile(fullPath);
- }
- }
- return null;
- }
-
- public URI getModelUri() {
- return modelUri;
- }
-
- public URI getDiagramUri() {
- return diagramUri;
- }
-
- public ModelHandler getModelHandler() {
- return modelHandler;
- }
-
- public Resource getResource() {
- return bpmnResource;
- }
-
- public ResourceSet getResourceSet() {
- return getEditingDomain().getResourceSet();
- }
-
- public void refresh() {
- if (!importInProgress)
- getDiagramBehavior().getRefreshBehavior().refresh();
- }
-
- public void createPartControl(Composite parent) {
- if (getGraphicalViewer()==null) {
- super.createPartControl(parent);
- PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IHelpContexts.TOC);
- }
- }
-
- public BPMNDiagram getBpmnDiagram() {
- if (bpmnDiagram==null) {
- Definitions definitions = ModelUtil.getDefinitions(bpmnResource);
- if (definitions!=null && definitions.getDiagrams().size()>0)
- bpmnDiagram = definitions.getDiagrams().get(0);
- }
-
-// if (bpmnDiagram!=null) {
-// GraphicalViewer viewer = getGraphicalViewer();
-// mapDiagramToViewer.put(bpmnDiagram, viewer);
-// }
- return bpmnDiagram;
- }
-
- public void setBpmnDiagram(final BPMNDiagram bpmnDiagram) {
- // create a new Graphiti Diagram if needed
- Diagram diagram = DIUtils.getOrCreateDiagram(getDiagramBehavior(), bpmnDiagram);
-
- // clear current selection to avoid confusing the GraphicalViewer
- selectPictogramElements(new PictogramElement[] {});
-
- // Tell the DTP about the new Diagram
- getDiagramTypeProvider().resourceReloaded(diagram);
- getDiagramBehavior().getRefreshBehavior().initRefresh();
- setPictogramElementsForSelection(null);
- // set Diagram as contents for the graphical viewer and refresh
- GraphicalViewer viewer = getGraphicalViewer();
- viewer.setContents(diagram);
- EditPart ep = viewer.getRootEditPart().getContents();
- if (ep instanceof AbstractGraphicalEditPart) {
- IFigure fig = ((AbstractGraphicalEditPart)ep).getFigure();
- fig.setBorder(new MarginBorder(50));
- }
-
- ConnectionLayerClippingStrategy.applyTo(viewer);
-
- getDiagramBehavior().refreshContent();
-
- // remember this for later
- this.bpmnDiagram = bpmnDiagram;
- modelEnablements = null;
- }
-
- @Override
- public void doSave(IProgressMonitor monitor) {
- final PictogramElement selections[] = getSelectedPictogramElements();
-// long start = System.currentTimeMillis();
- try {
- saveInProgress = true;
-// System.out.print("Saving...");
- super.doSave(monitor);
- }
- finally {
- saveInProgress = false;
- }
-// System.out.println("done in "+(System.currentTimeMillis()-start)+" ms");
- Resource resource = getResourceSet().getResource(modelUri, false);
- BPMN2ProjectValidator.validateOnSave(resource, monitor);
-
- Display.getCurrent().asyncExec(new Runnable() {
- @Override
- public void run() {
- selectPictogramElements(selections);
- }
- });
- }
-
- @Override
- public boolean isSaveAsAllowed() {
- return getModelFile()!=null;
- }
-
- @Override
- public void doSaveAs() {
- IFile oldFile = getModelFile();
- SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
- saveAsDialog.setOriginalFile(oldFile);
- saveAsDialog.create();
- if (saveAsDialog.open() == SaveAsDialog.CANCEL) {
- return;
- }
- IPath newFilePath = saveAsDialog.getResult();
- if (newFilePath == null){
- return;
- }
-
- IFile newFile = ResourcesPlugin.getWorkspace().getRoot().getFile(newFilePath);
- IWorkbenchPage page = getSite().getPage();
- try {
- // if new file exists, close its editor (if open) and delete the existing file
- if (newFile.exists()) {
- IEditorPart editorPart = ResourceUtil.findEditor(page, newFile);
- if (editorPart!=null)
- page.closeEditor(editorPart, false);
- newFile.delete(true, null);
- }
- // make a copy
- oldFile.copy(newFilePath, true, null);
- } catch (CoreException e) {
- showErrorDialogWithLogging(e);
- return;
- }
-
- // change the Resource URI and save it to the new file
- URI newURI = URI.createPlatformResourceURI(newFile.getFullPath().toString(), true);
- handleResourceMoved(bpmnResource,newURI);
- doSave(null);
- }
-
- public void closeEditor() {
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- boolean closed = getSite().getPage().closeEditor(BPMN2Editor.this, false);
- if (!closed){
- // If close editor fails, try again with explicit editorpart
- // of the old file
- IFile oldFile = ResourcesPlugin.getWorkspace().getRoot().getFile(getModelPath());
- IEditorPart editorPart = ResourceUtil.findEditor(getSite().getPage(), oldFile);
- closed = getSite().getPage().closeEditor(editorPart, false);
- }
- }
- });
- }
-
- // Show error dialog and log the error
- private void showErrorDialogWithLogging(Exception e) {
- Status status = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e);
- ErrorUtils.showErrorWithLogging(status);
- }
////////////////////////////////////////////////////////////////////////////////
// WorkspaceSynchronizer handlers called from delegate
@@ -1012,6 +353,8 @@ public class BPMN2Editor extends DiagramEditor implements IPreferenceChangeListe
public boolean handleResourceChanged(Resource resource) {
if (resource==bpmnResource) {
URI newURI = resource.getURI();
+ URI modelUri = getModelUri();
+ Bpmn2Preferences preferences = getPreferences();
if (!modelUri.equals(newURI)) {
ModelHandlerLocator.remove(modelUri);
modelUri = newURI;
@@ -1087,193 +430,59 @@ public class BPMN2Editor extends DiagramEditor implements IPreferenceChangeListe
return true;
}
-
- ////////////////////////////////////////////////////////////////////////////////
- // Other handlers
- ////////////////////////////////////////////////////////////////////////////////
-
- @Override
- public void selectionChanged(IWorkbenchPart part, ISelection selection) {
- // Graphiti understands multipage editors
- super.selectionChanged(part,selection); // Graphiti's DiagramEditorInternal
- // but apparently GEF doesn't
- updateActions(getSelectionActions()); // usually done in GEF's GraphicalEditor
-
- // if the selected element is obscured by another shape
- // send it to the top of the z-stack.
- // FIXME: this should be done in the figure's UpdateFeature or LayoutFeature, not here.
-// final List<ContainerShape> moved = new ArrayList<ContainerShape>();
-// for (PictogramElement pe : getSelectedPictogramElements()) {
-// if (pe instanceof ContainerShape && !(pe instanceof Diagram)) {
-// final ContainerShape shape = (ContainerShape)pe;
-// ContainerShape container = shape.getContainer();
-// // make sure this shape has not been deleted
-// if (container==null)
-// continue;
-// int size = container.getChildren().size();
-// if (size>1) {
-// // don't send Choreography Participant bands, Pools or Lanes to front
-// // they're already there...
-// BaseElement baseElement = BusinessObjectUtil.getFirstBaseElement(shape);
-// if (baseElement instanceof Participant || baseElement instanceof Lane)
-// continue;
-// boolean obscured = false;
-// int index = container.getChildren().indexOf(shape);
-// for (int i=index+1; i<container.getChildren().size(); ++i) {
-// PictogramElement sibling = container.getChildren().get(i);
-// if (sibling instanceof ContainerShape &&
-// !FeatureSupport.isLabelShape((ContainerShape)sibling)) {
-// if (GraphicsUtil.intersects(shape, (ContainerShape)sibling)) {
-// boolean siblingIsBoundaryEvent = false;
-// if (baseElement instanceof Activity) {
-// BaseElement be = BusinessObjectUtil.getFirstBaseElement(sibling);
-// for (BoundaryEvent boundaryEvent : ((Activity)baseElement).getBoundaryEventRefs()) {
-// if (be==boundaryEvent) {
-// siblingIsBoundaryEvent = true;
-// break;
-// }
-// }
-// }
-// if (!siblingIsBoundaryEvent) {
-// obscured = true;
-// }
-// }
-// }
-// }
-// // if the selected shape is an Activity, it may have Boundary Event shapes
-// // attached to it - these will have to be moved to the top so they're
-// // not obscured by the Activity.
-// if (baseElement instanceof Activity) {
-// for (BoundaryEvent be : ((Activity)baseElement).getBoundaryEventRefs()) {
-// for (PictogramElement child : container.getChildren()) {
-// if (child instanceof ContainerShape && BusinessObjectUtil.getFirstBaseElement(child) == be) {
-// index = container.getChildren().indexOf(child);
-// for (int i=index+1; i<container.getChildren().size(); ++i) {
-// PictogramElement sibling = container.getChildren().get(i);
-// if (sibling!=shape && sibling instanceof ContainerShape) {
-// if (GraphicsUtil.intersects((ContainerShape)child, (ContainerShape)sibling)) {
-// obscured = true;
-// moved.add((ContainerShape)child);
-// }
-// }
-// }
-// }
-// }
-// }
-// }
-// if (obscured) {
-// moved.add(0,shape);
-// }
-// }
-// }
-// }
-// if (!moved.isEmpty()) {
-// Display.getDefault().asyncExec(new Runnable() {
-// @Override
-// public void run() {
-// getEditingDomain().getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
-// @Override
-// protected void doExecute() {
-// for (ContainerShape child : moved) {
-// GraphicsUtil.sendToFront(child);
-// }
-// }
-// });
-// }
-// });
-// }
- }
@Override
- public void preferenceChange(final PreferenceChangeEvent event) {
- getPreferences().reload();
-
- if (event.getKey().contains("/"+Bpmn2Preferences.PREF_MODEL_ENABLEMENT+"/")) //$NON-NLS-1$ //$NON-NLS-2$
- modelEnablements = null;
-
- if (event.getKey().contains(Bpmn2Preferences.PREF_SHOW_ADVANCED_PROPERTIES) ||
- event.getKey().contains("/"+Bpmn2Preferences.PREF_TOOL_PROFILE+"/")) { //$NON-NLS-1$ //$NON-NLS-2$
- // get rid of cached Property Tab Descriptors
- if (tabDescriptorProvider instanceof PropertyTabDescriptorProvider)
- ((PropertyTabDescriptorProvider)tabDescriptorProvider).disposeTabDescriptors(bpmnResource);
- }
-
- if (event.getKey().contains("/"+Bpmn2Preferences.PREF_SHAPE_STYLE+"/")) { //$NON-NLS-1$ //$NON-NLS-2$
- int i = event.getKey().lastIndexOf('/');
- if (i<=0)
- return;
- // Get the object type whose ShapeStyle has changed (e.g. "Task")
- // and change it if possible. This needs to run in a transaction.
- final String name = event.getKey().substring(i+1);
- getEditingDomain().getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
- @Override
- protected void doExecute() {
- IFeatureProvider fp = BPMN2Editor.this.getDiagramTypeProvider().getFeatureProvider();
- IPeService peService = Graphiti.getPeService();
- // Collect all PictogramElements and their corresponding GraphicsAlgorithms
- // to which the ShapeStyle change applies.
- Resource resource = getDiagramTypeProvider().getDiagram().eResource();
- for (PictogramElement pe : ModelUtil.getAllObjectsOfType(resource, PictogramElement.class)) {
- BaseElement be = BusinessObjectUtil.getFirstElementOfType(pe, BaseElement.class);
- // The Business Object class name must match the ShapeStyle type
- if (be!=null && be.eClass().getName().equals(name)) {
- // find this PE's GraphicsAlgorithrms that has the
- // PREF_SHAPE_STYLE property set - this is the GA to
- // which the ShapeStyle applies.
- GraphicsAlgorithm ga = StyleUtil.getShapeStyleContainer(pe);
- // If the ShapeStyle for this BaseElement has already
- // been changed by the user, do not reset it.
- String style = ShapeStyle.encode(ShapeStyle.getShapeStyle(be));
- if (style.equals(event.getNewValue())) {
- StyleUtil.applyStyle(ga, be);
- if (pe instanceof Shape && FeatureSupport.isLabelShape((Shape)pe)) {
- UpdateContext context = new UpdateContext(pe);
- IUpdateFeature feature = fp.getUpdateFeature(context);
- if (feature!=null && feature.canUpdate(context)) {
- feature.update(context);
- }
- }
- }
- }
- }
+ public void dispose() {
+ // clear ID mapping tables if no more instances of editor are active
+ int instances = 0;
+ IWorkbenchPage[] pages = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPages();
+ for (IWorkbenchPage p : pages) {
+ IEditorReference[] refs = p.findEditors(null, EDITOR_ID, IWorkbenchPage.MATCH_ID);
+ for (IEditorReference r : refs) {
+ if (r.getEditor(false) instanceof BPMN2MultiPageEditor) {
+ if (((BPMN2MultiPageEditor)r.getEditor(false)).designEditor != this)
+ ++instances;
}
- });
+ }
}
-
- if (event.getKey().contains(ShapeStyle.Category.GRID.toString())) { //$NON-NLS-1$
- getEditingDomain().getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
- @Override
- protected void doExecute() {
- ShapeStyle ss = getPreferences().getShapeStyle(ShapeStyle.Category.GRID);
- Diagram diagram = getDiagramTypeProvider().getDiagram();
- diagram.setGridUnit(ss.getDefaultWidth());
- diagram.setVerticalGridUnit(ss.getDefaultHeight());
- diagram.setSnapToGrid(ss.getSnapToGrid());
- GraphicsAlgorithm ga = diagram.getGraphicsAlgorithm();
- IGaService gaService = Graphiti.getGaService();
- ga.setForeground(gaService.manageColor(diagram, ss.getShapeForeground()));
- refresh();
- getGraphicalControl().redraw();
+
+ BPMN2Editor otherEditor = findOpenEditor(this, getEditorInput());
+ if (otherEditor==null && diagramUri != null) {
+ // we can delete the Graphiti Diagram file if there are no other
+ // editor windows open for this BPMN2 file.
+ File diagramFile = new File(diagramUri.toFileString());
+ if (diagramFile.exists()) {
+ try {
+ diagramFile.delete();
}
- });
- }
-
- if (event.getKey().contains(ShapeStyle.Category.CANVAS.toString())) { //$NON-NLS-1$
- getEditingDomain().getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
- @Override
- protected void doExecute() {
- ShapeStyle ss = getPreferences().getShapeStyle(ShapeStyle.Category.CANVAS);
- Diagram diagram = getDiagramTypeProvider().getDiagram();
- GraphicsAlgorithm ga = diagram.getGraphicsAlgorithm();
- IGaService gaService = Graphiti.getGaService();
- ga.setBackground(gaService.manageColor(diagram, ss.getShapeBackground()));
- refresh();
- getGraphicalControl().redraw();
+ catch (Exception e) {
}
- });
+ }
+ }
+ if (modelHandler != null) {
+ // TODO have to clear IDs in BasicBPMN2Editor?
+ ModelUtil.clearIDs(modelHandler.getResource(), instances==0);
+ }
+
+
+ removeSelectionListener();
+ if (instances==0)
+ setActiveEditor(null);
+
+ super.dispose();
+
+ // get rid of temp files and folders, but NOT if the workbench is being shut down.
+ // when the workbench is restarted, we need to have those temp files around!
+ if (modelUri != null && !workbenchShutdown) {
+ if (FileUtils.isTempFile(modelUri)) {
+ FileUtils.deleteTempFile(modelUri);
+ }
}
+
+ removeWorkbenchListener();
+ removeMarkerChangeListener();
}
-
+
public static BPMN2Editor findOpenEditor(IEditorPart newEditor, IEditorInput newInput) {
if (newEditor!=null && newInput!=null) {
IWorkbenchPage[] pages = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPages();
@@ -1298,25 +507,47 @@ public class BPMN2Editor extends DiagramEditor implements IPreferenceChangeListe
}
return null;
}
-
- public static IEditorPart openEditor(URI modelURI) {
- IEditorPart part = null;
- try {
- Bpmn2DiagramEditorInput input = BPMN2DiagramCreator.createDiagram(modelURI, Bpmn2DiagramType.NONE, ""); //$NON-NLS-1$
- part = BPMN2DiagramCreator.openEditor(input);
+
+ /**
+ * input helper class for the BPMN2Editor, handles IDE specific functionality
+ *
+ * @author Flavio Donzé
+ */
+ public class ExtendedEditorInputHelper extends EditorInputHelper {
+ /** current open BPMNEditor with the same editor input */
+ private BPMN2Editor otherEditor;
+
+ @Override
+ public void preSetInput(IEditorInput input, DefaultBPMN2Editor editor) {
+ input = recreateInput(input, editor);
+
+ // Check if this is a New Editor Window for an already open editor
+ otherEditor = BPMN2Editor.findOpenEditor(editor,input);
+
+ ResourceSet resourceSet = initializeResourceSet(input, editor);
+
+ // Now create the BPMN2 model resource, or reuse the one from the already open editor.
+ if (otherEditor==null) {
+ editor.bpmnResource = createBPMN2Resource(editor, resourceSet);
+ }
+ else {
+ editor.bpmnResource = otherEditor.bpmnResource;
+ }
}
- catch (Exception e) {
- e.printStackTrace();
+
+ @Override
+ public void postSetInput(IEditorInput input, DefaultBPMN2Editor editor) {
+ super.postSetInput(input, editor);
+
+ // Load error markers
+ ((BPMN2Editor) editor).loadMarkers();
}
-
- return part;
- }
- @Override
- public void configureGraphicalViewer() {
- super.configureGraphicalViewer();
- // add zooming action with "CTRL + Mouse Wheel"
- GraphicalViewer viewer = getGraphicalViewer();
- viewer.setProperty(MouseWheelHandler.KeyGenerator.getKey(SWT.MOD1), MouseWheelZoomHandler.SINGLETON);
+ @Override
+ protected void importDiagram(IEditorInput input, DefaultBPMN2Editor editor) {
+ if (otherEditor==null) {
+ super.importDiagram(input, editor);
+ }
+ }
}
}
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditorDiagramBehavior.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditorDiagramBehavior.java
index d40cc1a8..7cc36261 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditorDiagramBehavior.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2EditorDiagramBehavior.java
@@ -10,75 +10,18 @@
******************************************************************************/
package org.eclipse.bpmn2.modeler.ui.editor;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.util.Diagnostic;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.util.EContentAdapter;
import org.eclipse.gef.ContextMenuProvider;
-import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
-import org.eclipse.graphiti.mm.pictograms.PictogramElement;
-import org.eclipse.graphiti.ui.editor.DefaultMarkerBehavior;
-import org.eclipse.graphiti.ui.editor.DefaultPersistencyBehavior;
-import org.eclipse.graphiti.ui.editor.DefaultUpdateBehavior;
-import org.eclipse.graphiti.ui.editor.DiagramBehavior;
import org.eclipse.graphiti.ui.editor.DiagramEditorContextMenuProvider;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IWorkbenchPart;
-public class BPMN2EditorDiagramBehavior extends DiagramBehavior {
+public class BPMN2EditorDiagramBehavior extends DefaultBPMN2EditorDiagramBehavior {
BPMN2Editor bpmn2Editor;
public BPMN2EditorDiagramBehavior(BPMN2Editor bpmn2Editor) {
super(bpmn2Editor);
this.bpmn2Editor = bpmn2Editor;
- setParentPart((IWorkbenchPart) bpmn2Editor);
- initDefaultBehaviors();
- }
-
- @Override
- protected DefaultUpdateBehavior createUpdateBehavior() {
- return new BPMN2EditorUpdateBehavior(this);
- }
-
- @Override
- protected DefaultPersistencyBehavior createPersistencyBehavior() {
- return new BPMN2PersistencyBehavior(this);
- }
-
- protected DefaultMarkerBehavior createMarkerBehavior() {
- return new BPMN2EditorMarkerBehavior(this);
- }
-
- @Override
- protected PictogramElement[] getPictogramElementsForSelection() {
- // filter out invisible elements when setting selection
- PictogramElement[] pictogramElements = super.getPictogramElementsForSelection();
- if (pictogramElements==null)
- return null;
- ArrayList<PictogramElement> visibleList = new ArrayList<PictogramElement>();
- for (PictogramElement pe : pictogramElements) {
- if (pe.isVisible())
- visibleList.add(pe);
- }
- return visibleList.toArray(new PictogramElement[visibleList.size()]);
- }
-
- @Override
- protected void selectPictogramElements(PictogramElement[] pictogramElements) {
- // Avoid NPE when a final selection comes in from the Outline Viewer AFTER
- // the editor is closed and the workbench is shutting down.
- Control control = getDiagramContainer().getGraphicalViewer().getControl();
- if (control==null || control.isDisposed())
- return;
- super.selectPictogramElements(pictogramElements);
}
@Override
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2MarkerChangeListener.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2MarkerChangeListener.java
index 2aac7f1b..c076b75d 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2MarkerChangeListener.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2MarkerChangeListener.java
@@ -35,9 +35,9 @@ import org.eclipse.ui.views.properties.PropertySheet;
public class BPMN2MarkerChangeListener implements IResourceChangeListener {
- BPMN2Editor editor;
+ DefaultBPMN2Editor editor;
- public BPMN2MarkerChangeListener(BPMN2Editor editor) {
+ public BPMN2MarkerChangeListener(DefaultBPMN2Editor editor) {
this.editor = editor;
}
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2PersistencyBehavior.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2PersistencyBehavior.java
index 8f9c5dcf..528cfe35 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2PersistencyBehavior.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2PersistencyBehavior.java
@@ -16,9 +16,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import org.eclipse.bpmn2.modeler.core.utils.FixDuplicateIdsDialog;
import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
-import org.eclipse.bpmn2.modeler.core.utils.Tuple;
import org.eclipse.bpmn2.modeler.core.validation.BPMN2ProjectValidator;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -27,7 +25,6 @@ import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.common.util.WrappedException;
-import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.ui.editor.DefaultPersistencyBehavior;
@@ -39,11 +36,11 @@ import org.eclipse.swt.widgets.Display;
public class BPMN2PersistencyBehavior extends DefaultPersistencyBehavior {
- BPMN2Editor editor;
-
+ DefaultBPMN2Editor editor;
+
public BPMN2PersistencyBehavior(DiagramBehavior diagramBehavior) {
super(diagramBehavior);
- editor = (BPMN2Editor)diagramBehavior.getDiagramContainer();
+ editor = (DefaultBPMN2Editor)diagramBehavior.getDiagramContainer();
}
@Override
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/DefaultBPMN2Editor.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/DefaultBPMN2Editor.java
new file mode 100644
index 00000000..4c8f45f2
--- /dev/null
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/DefaultBPMN2Editor.java
@@ -0,0 +1,940 @@
+/*******************************************************************************
+ * Copyright (c) 2011 - 2015 Red Hat, Inc.
+ * All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ *
+ * @author Innar Made
+ ******************************************************************************/
+package org.eclipse.bpmn2.modeler.ui.editor;
+
+import java.io.IOException;
+
+import org.eclipse.bpmn2.BaseElement;
+import org.eclipse.bpmn2.Definitions;
+import org.eclipse.bpmn2.di.BPMNDiagram;
+import org.eclipse.bpmn2.modeler.core.LifecycleEvent;
+import org.eclipse.bpmn2.modeler.core.LifecycleEvent.EventType;
+import org.eclipse.bpmn2.modeler.core.di.DIImport;
+import org.eclipse.bpmn2.modeler.core.di.DIUtils;
+import org.eclipse.bpmn2.modeler.core.merrimac.clad.Bpmn2TabbedPropertySheetPage;
+import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerResourceImpl;
+import org.eclipse.bpmn2.modeler.core.model.ModelHandler;
+import org.eclipse.bpmn2.modeler.core.model.ModelHandlerLocator;
+import org.eclipse.bpmn2.modeler.core.model.ProxyURIConverterImplExtension;
+import org.eclipse.bpmn2.modeler.core.preferences.Bpmn2Preferences;
+import org.eclipse.bpmn2.modeler.core.preferences.ModelEnablements;
+import org.eclipse.bpmn2.modeler.core.preferences.ShapeStyle;
+import org.eclipse.bpmn2.modeler.core.runtime.TargetRuntime;
+import org.eclipse.bpmn2.modeler.core.runtime.ToolPaletteDescriptor;
+import org.eclipse.bpmn2.modeler.core.utils.BusinessObjectUtil;
+import org.eclipse.bpmn2.modeler.core.utils.DiagramEditorAdapter;
+import org.eclipse.bpmn2.modeler.core.utils.FeatureSupport;
+import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
+import org.eclipse.bpmn2.modeler.core.utils.ModelUtil.Bpmn2DiagramType;
+import org.eclipse.bpmn2.modeler.core.utils.StyleUtil;
+import org.eclipse.bpmn2.modeler.help.IHelpContexts;
+import org.eclipse.bpmn2.modeler.ui.Activator;
+import org.eclipse.bpmn2.modeler.ui.Bpmn2DiagramEditorInput;
+import org.eclipse.bpmn2.modeler.ui.diagram.Bpmn2ToolBehaviorProvider;
+import org.eclipse.bpmn2.modeler.ui.property.PropertyTabDescriptorProvider;
+import org.eclipse.bpmn2.modeler.ui.views.outline.BPMN2EditorOutlinePage;
+import org.eclipse.bpmn2.modeler.ui.views.outline.BPMN2EditorSelectionSynchronizer;
+import org.eclipse.bpmn2.modeler.ui.wizards.BPMN2DiagramCreator;
+import org.eclipse.bpmn2.modeler.ui.wizards.FileService;
+import org.eclipse.bpmn2.util.Bpmn2ResourceImpl;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.transaction.NotificationFilter;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.TransactionalEditingDomain.Lifecycle;
+import org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.GraphicalViewer;
+import org.eclipse.gef.MouseWheelHandler;
+import org.eclipse.gef.MouseWheelZoomHandler;
+import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
+import org.eclipse.gef.ui.parts.SelectionSynchronizer;
+import org.eclipse.graphiti.features.IFeatureProvider;
+import org.eclipse.graphiti.features.IUpdateFeature;
+import org.eclipse.graphiti.features.context.impl.UpdateContext;
+import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
+import org.eclipse.graphiti.mm.pictograms.Diagram;
+import org.eclipse.graphiti.mm.pictograms.PictogramElement;
+import org.eclipse.graphiti.mm.pictograms.Shape;
+import org.eclipse.graphiti.services.Graphiti;
+import org.eclipse.graphiti.services.IGaService;
+import org.eclipse.graphiti.ui.editor.DiagramBehavior;
+import org.eclipse.graphiti.ui.editor.DiagramEditor;
+import org.eclipse.graphiti.ui.editor.DiagramEditorInput;
+import org.eclipse.graphiti.ui.internal.editor.GFPaletteRoot;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.ITabDescriptorProvider;
+
+@SuppressWarnings("restriction")
+public class DefaultBPMN2Editor extends DiagramEditor implements IPreferenceChangeListener {
+
+ static {
+ TargetRuntime.createTargetRuntimes();
+ }
+
+ public static final String CONTRIBUTOR_ID = "org.eclipse.bpmn2.modeler.ui.PropertyContributor"; //$NON-NLS-1$
+
+ protected ModelHandler modelHandler;
+ protected URI modelUri;
+ protected URI diagramUri;
+ private boolean editable = true;
+
+ protected BPMNDiagram bpmnDiagram;
+ protected Bpmn2ResourceImpl bpmnResource;
+
+ // We need this to find BPMN2 Editors that are already open for this file
+ // Used when opening a New Editor window for an already open editor.
+ private IEditorInput currentInput;
+ private static ITabDescriptorProvider tabDescriptorProvider;
+ private BPMN2EditingDomainListener editingDomainListener;
+
+ protected Bpmn2Preferences preferences;
+ protected TargetRuntime targetRuntime;
+ private ModelEnablements modelEnablements;
+ private boolean importInProgress;
+ private BPMN2EditorSelectionSynchronizer synchronizer;
+
+ protected DiagramEditorAdapter editorAdapter;
+ protected IPropertySheetPage propertySheetPage;
+ protected IContentOutlinePage outlinePage;
+
+ protected boolean saveInProgress = false;
+ private static NotificationFilter filterNone = new NotificationFilter.Custom() {
+ @Override
+ public boolean matches(Notification notification) {
+ return false;
+ }
+ };
+
+ @Override
+ public IEditorInput getEditorInput() {
+ return currentInput;
+ }
+
+ protected DiagramEditorAdapter getEditorAdapter() {
+ return editorAdapter;
+ }
+
+ @Override
+ public void init(IEditorSite site, IEditorInput input) throws PartInitException {
+ currentInput = input;
+
+ if (this.getDiagramBehavior()==null) {
+ super.init(site, input);
+ }
+ else if (input instanceof Bpmn2DiagramEditorInput) {
+ bpmnDiagram = ((Bpmn2DiagramEditorInput)input).getBpmnDiagram();
+ if (bpmnDiagram!=null) {
+ setBpmnDiagram(bpmnDiagram);
+ }
+ }
+ }
+
+ /**
+ * Beware, creates a new input and changes this editor!
+ */
+ protected Bpmn2DiagramEditorInput createNewDiagramEditorInput(IEditorInput input, Bpmn2DiagramType diagramType, String targetNamespace)
+ throws PartInitException {
+
+ modelUri = FileService.getInputUri(input);
+ if (modelUri==null)
+ throw new PartInitException(Messages.BPMN2Editor_Cannot_Create_Editor_Input);
+ input = BPMN2DiagramCreator.createDiagram(input, modelUri, diagramType,targetNamespace,this);
+ diagramUri = ((Bpmn2DiagramEditorInput)input).getUri();
+
+ return (Bpmn2DiagramEditorInput)input;
+ }
+
+ /**
+ * Bypasses Graphiti's Persistency Behavior code and save only the BPMN2 model resource.
+ * This is only used after a successful Import if the BPMN2 model was changed in any way,
+ * e.g. missing DI elements were added.
+ */
+ private void saveModelFile() {
+ try {
+ bpmnResource.save(null);
+ ((BasicCommandStack) getEditingDomain().getCommandStack()).saveIsDone();
+ updateDirtyState();
+ }
+ catch (IOException e) {
+ Activator.logError(e);
+ }
+ }
+
+ protected EditorInputHelper getInputHelper() {
+ return new EditorInputHelper();
+ }
+
+ @Override
+ protected void setInput(IEditorInput input) {
+ EditorInputHelper inputHelper = getInputHelper();
+ inputHelper.preSetInput(input, this);
+ super.setInput(input);
+ inputHelper.postSetInput(input, this);
+ }
+
+ @Override
+ protected DiagramEditorInput convertToDiagramEditorInput(IEditorInput input) throws PartInitException {
+ IEditorInput newInput = createNewDiagramEditorInput(input, Bpmn2DiagramType.NONE, ""); //$NON-NLS-1$
+ if (newInput==null)
+ newInput = super.convertToDiagramEditorInput(input);
+ return (DiagramEditorInput) newInput;
+ }
+
+ protected void importDiagram() {
+ try {
+ importInProgress = true;
+ // make sure this guy is active, otherwise it's not selectable
+ Diagram diagram = getDiagramTypeProvider().getDiagram();
+ IFeatureProvider featureProvider = getDiagramTypeProvider().getFeatureProvider();
+ diagram.setActive(true);
+ Bpmn2DiagramEditorInput input = (Bpmn2DiagramEditorInput) getEditorInput();
+ Bpmn2DiagramType diagramType = input.getInitialDiagramType();
+ String targetNamespace = input.getTargetNamespace();
+
+ if (diagramType != Bpmn2DiagramType.NONE) {
+ bpmnDiagram = modelHandler.createDiagramType(diagramType, targetNamespace);
+ featureProvider.link(diagram, bpmnDiagram);
+ // If the bpmn file was missing DI elements, they would have been added by the importer
+ // so save the file now in case it was changed.
+ saveModelFile();
+ } else if (targetNamespace != null && !targetNamespace.isEmpty()) {
+ modelHandler.getDefinitions().setTargetNamespace(targetNamespace);
+ }
+
+ DIImport di = new DIImport(this, getPreferences());
+ di.setModelHandler(modelHandler);
+
+ di.generateFromDI();
+ }
+ finally {
+ importInProgress = false;
+ }
+ }
+
+ public void setEditable(boolean editable) {
+ this.editable = editable;
+ }
+
+ public boolean isEditable() {
+ return editable;
+ }
+
+ @Override
+ public boolean isDirty() {
+ if (!editable)
+ return false;
+ if (getEditorInput()==null)
+ return false;
+ return super.isDirty();
+ }
+
+ @Override
+ protected DiagramBehavior createDiagramBehavior() {
+ DiagramBehavior diagramBehavior = new DefaultBPMN2EditorDiagramBehavior(this);
+ return diagramBehavior;
+ }
+
+ public Bpmn2Preferences getPreferences() {
+ if (preferences==null) {
+ loadPreferences(getProject());
+ }
+ return preferences;
+ }
+
+ private void loadPreferences(IProject project) {
+ preferences = Bpmn2Preferences.getInstance(project);
+ preferences.addPreferenceChangeListener(this);
+ }
+
+ /**
+ * ID for tabbed property sheets.
+ *
+ * @return the contributor id
+ */
+ @Override
+ public String getContributorId() {
+ return CONTRIBUTOR_ID;
+ }
+
+ public TargetRuntime getTargetRuntime() {
+ if (targetRuntime==null) {
+ targetRuntime = getTargetRuntime(getEditorInput());
+ }
+ return targetRuntime;
+ }
+
+ public ModelEnablements getModelEnablements() {
+ String profileName = getPreferences().getDefaultToolProfile(getTargetRuntime());
+ if (modelEnablements!=null) {
+ if (!modelEnablements.getId().equals(profileName)) {
+ modelEnablements = null;
+ }
+
+ }
+ if (modelEnablements==null) {
+ modelEnablements = getPreferences().getModelEnablements(getTargetRuntime(), profileName);
+ if (modelEnablements.size()==0) {
+ // This Target Runtime doesn't define a Tool Profile
+ // so we'll use the one for Default Runtime
+ profileName = getPreferences().getDefaultToolProfile(TargetRuntime.getDefaultRuntime());
+ ModelEnablements defaultEnablements = getPreferences().getModelEnablements(TargetRuntime.getDefaultRuntime(), profileName);
+ modelEnablements.copy(defaultEnablements);
+ }
+ }
+ return modelEnablements;
+ }
+
+ protected TargetRuntime getTargetRuntime(IEditorInput input) {
+ if (targetRuntime==null && input!=null) {
+ // If the project has not been configured for a specific runtime through the "BPMN2"
+ // project properties page (i.e. the target is "None") then allow the runtime extension
+ // plug-ins an opportunity to identify the given process file contents as their own.
+ // If none of the plug-ins respond with "yes, this file is targeted for my runtime",
+ // then use the "None" as the extension. This will configure the BPMN2 Modeler with
+ // generic property sheets and other default behavior.
+ if (input instanceof Bpmn2DiagramEditorInput)
+ targetRuntime = ((Bpmn2DiagramEditorInput)input).getRuntime();
+ if (targetRuntime==null)
+ targetRuntime = TargetRuntime.getRuntime(input);
+
+ TargetRuntime.setCurrentRuntime(targetRuntime);
+ }
+ return targetRuntime;
+ }
+
+ public void updatePalette() {
+ GFPaletteRoot pr = (GFPaletteRoot)getPaletteRoot();
+ if (pr!=null) {
+ // force a reload of this
+ modelEnablements = null;
+ pr.updatePaletteEntries();
+ Bpmn2ToolBehaviorProvider toolBehaviorProvider =
+ (Bpmn2ToolBehaviorProvider)getDiagramTypeProvider().
+ getCurrentToolBehaviorProvider();
+ toolBehaviorProvider.createPaletteProfilesGroup(this, pr);
+ }
+ }
+
+
+ @Override
+ public void refreshTitle() {
+ if (getEditorInput()!=null) {
+ String name = getEditorInput().getName();
+ setPartName(URI.decode(name));
+ }
+ }
+
+ public BPMN2EditingDomainListener getEditingDomainListener() {
+ if (editingDomainListener==null) {
+ TransactionalEditingDomainImpl editingDomain = (TransactionalEditingDomainImpl)getEditingDomain();
+ if (editingDomain==null) {
+ return null;
+ }
+ editingDomainListener = new BPMN2EditingDomainListener(this);
+
+ Lifecycle domainLifeCycle = editingDomain.getAdapter(Lifecycle.class);
+ domainLifeCycle.addTransactionalEditingDomainListener(editingDomainListener);
+ }
+ return editingDomainListener;
+ }
+
+ public BasicDiagnostic getDiagnostics() {
+ return getEditingDomainListener().getDiagnostics();
+ }
+
+ @Override
+ protected SelectionSynchronizer getSelectionSynchronizer() {
+ if (synchronizer == null)
+ synchronizer = new BPMN2EditorSelectionSynchronizer();
+ return synchronizer;
+ }
+
+ @SuppressWarnings("rawtypes")
+ @Override
+ public Object getAdapter(Class required) {
+ if (required==DiagramEditor.class) {
+ return this;
+ }
+ if (required==ITabDescriptorProvider.class) {
+ if (tabDescriptorProvider==null) {
+ tabDescriptorProvider = new PropertyTabDescriptorProvider();
+// IWorkbenchPage page = getEditorSite().getPage();
+// String viewID = "org.eclipse.ui.views.PropertySheet"; //$NON-NLS-1$
+// try {
+// page.showView(viewID, null, IWorkbenchPage.VIEW_CREATE);
+// page.showView(viewID, null, IWorkbenchPage.VIEW_ACTIVATE);
+// }
+// catch (Exception e) {}
+ }
+ return tabDescriptorProvider;
+ }
+ if (required==TargetRuntime.class)
+ return getTargetRuntime();
+ if (required==Bpmn2Preferences.class)
+ return getPreferences();
+ if (required == IPropertySheetPage.class) {
+ if (propertySheetPage==null) {
+ propertySheetPage = new Bpmn2TabbedPropertySheetPage(this);
+ Display.getCurrent().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ if (!propertySheetPage.getControl().isDisposed()) {
+ propertySheetPage.getControl().addDisposeListener(new DisposeListener() {
+ @Override
+ public void widgetDisposed(DisposeEvent e) {
+ propertySheetPage = null;
+ }
+ });
+ }
+ }
+ });
+ }
+ return propertySheetPage;
+ }
+ if (required == SelectionSynchronizer.class) {
+ return getSelectionSynchronizer();
+ }
+ if (required == IContentOutlinePage.class) {
+ if (getDiagramTypeProvider() != null) {
+ if (outlinePage==null) {
+ outlinePage = new BPMN2EditorOutlinePage(this);
+ }
+ return outlinePage;
+ }
+ }
+ if (required == ModelEnablements.class) {
+ return getModelEnablements();
+ }
+ if (required == ToolPaletteDescriptor.class) {
+ String profileName = getPreferences().getDefaultToolProfile(getTargetRuntime());
+ return getTargetRuntime().getToolPalette(profileName);
+ }
+ if (required == NotificationFilter.class) {
+ if (saveInProgress)
+ return filterNone;
+ else
+ return null;
+ }
+ if (required==GraphicalViewer.class) {
+ return getGraphicalViewer();
+ }
+
+ return super.getAdapter(required);
+ }
+
+ @Override
+ public void dispose() {
+ if (targetRuntime != null) {
+ targetRuntime.notify(new LifecycleEvent(EventType.EDITOR_SHUTDOWN,this));
+ }
+ if (modelHandler!=null) {
+ modelHandler.dispose();
+ }
+ if (preferences != null) {
+ preferences.removePreferenceChangeListener(this);
+ }
+
+ // cancel the Property Sheet Page job
+ if (propertySheetPage!=null)
+ propertySheetPage.selectionChanged(this, null);
+
+ // get rid of cached Property Tab Descriptors
+ if (tabDescriptorProvider instanceof PropertyTabDescriptorProvider)
+ ((PropertyTabDescriptorProvider)tabDescriptorProvider).disposeTabDescriptors(bpmnResource);
+
+ if (getResourceSet() != null) {
+ getResourceSet().eAdapters().remove(getEditorAdapter());
+ }
+
+ super.dispose();
+
+ if (modelUri != null) {
+ ModelHandlerLocator.remove(modelUri);
+ }
+
+ if (preferences != null) {
+ preferences.dispose();
+ }
+
+ currentInput = null;
+ }
+
+ public IPath getModelPath() {
+ if (getModelFile()!=null)
+ return getModelFile().getFullPath();
+ return null;
+ }
+
+ public IProject getProject() {
+ if (getModelFile()!=null)
+ return getModelFile().getProject();
+ return null;
+ }
+
+ public IFile getModelFile() {
+ if (modelUri!=null) {
+ String uriString = modelUri.trimFragment().toPlatformString(true);
+ if (uriString!=null) {
+ IPath fullPath = new Path(uriString);
+ return ResourcesPlugin.getWorkspace().getRoot().getFile(fullPath);
+ }
+ }
+ return null;
+ }
+
+ public URI getModelUri() {
+ return modelUri;
+ }
+
+ public URI getDiagramUri() {
+ return diagramUri;
+ }
+
+ public ModelHandler getModelHandler() {
+ return modelHandler;
+ }
+
+ public Resource getResource() {
+ return bpmnResource;
+ }
+
+ public ResourceSet getResourceSet() {
+ TransactionalEditingDomain editingDomain = getEditingDomain();
+ return editingDomain != null ? editingDomain.getResourceSet() : null;
+ }
+
+ public void refresh() {
+ if (!importInProgress)
+ getDiagramBehavior().getRefreshBehavior().refresh();
+ }
+
+ @Override
+ public void createPartControl(Composite parent) {
+ if (getGraphicalViewer()==null) {
+ super.createPartControl(parent);
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IHelpContexts.TOC);
+ }
+ }
+
+ public BPMNDiagram getBpmnDiagram() {
+ if (bpmnDiagram==null) {
+ Definitions definitions = ModelUtil.getDefinitions(bpmnResource);
+ if (definitions!=null && definitions.getDiagrams().size()>0)
+ bpmnDiagram = definitions.getDiagrams().get(0);
+ }
+
+// if (bpmnDiagram!=null) {
+// GraphicalViewer viewer = getGraphicalViewer();
+// mapDiagramToViewer.put(bpmnDiagram, viewer);
+// }
+ return bpmnDiagram;
+ }
+
+ public void setBpmnDiagram(final BPMNDiagram bpmnDiagram) {
+ // create a new Graphiti Diagram if needed
+ Diagram diagram = DIUtils.getOrCreateDiagram(getDiagramBehavior(), bpmnDiagram);
+
+ // clear current selection to avoid confusing the GraphicalViewer
+ selectPictogramElements(new PictogramElement[] {});
+
+ // Tell the DTP about the new Diagram
+ getDiagramTypeProvider().resourceReloaded(diagram);
+ getDiagramBehavior().getRefreshBehavior().initRefresh();
+ setPictogramElementsForSelection(null);
+ // set Diagram as contents for the graphical viewer and refresh
+ GraphicalViewer viewer = getGraphicalViewer();
+ viewer.setContents(diagram);
+ EditPart ep = viewer.getRootEditPart().getContents();
+ if (ep instanceof AbstractGraphicalEditPart) {
+ IFigure fig = ((AbstractGraphicalEditPart)ep).getFigure();
+ fig.setBorder(new MarginBorder(50));
+ }
+
+ ConnectionLayerClippingStrategy.applyTo(viewer);
+
+ getDiagramBehavior().refreshContent();
+
+ // remember this for later
+ this.bpmnDiagram = bpmnDiagram;
+ modelEnablements = null;
+ }
+
+ @Override
+ public void doSave(IProgressMonitor monitor) {
+ final PictogramElement selections[] = getSelectedPictogramElements();
+// long start = System.currentTimeMillis();
+ try {
+ saveInProgress = true;
+// System.out.print("Saving...");
+ super.doSave(monitor);
+ }
+ finally {
+ saveInProgress = false;
+ }
+// System.out.println("done in "+(System.currentTimeMillis()-start)+" ms");
+ Display.getCurrent().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ selectPictogramElements(selections);
+ }
+ });
+ }
+
+ @Override
+ public boolean isSaveAsAllowed() {
+ return getModelFile()!=null;
+ }
+
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // Other handlers
+ ////////////////////////////////////////////////////////////////////////////////
+
+ @Override
+ public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+ // Graphiti understands multipage editors
+ super.selectionChanged(part,selection); // Graphiti's DiagramEditorInternal
+ // but apparently GEF doesn't
+ updateActions(getSelectionActions()); // usually done in GEF's GraphicalEditor
+
+ // if the selected element is obscured by another shape
+ // send it to the top of the z-stack.
+ // FIXME: this should be done in the figure's UpdateFeature or LayoutFeature, not here.
+// final List<ContainerShape> moved = new ArrayList<ContainerShape>();
+// for (PictogramElement pe : getSelectedPictogramElements()) {
+// if (pe instanceof ContainerShape && !(pe instanceof Diagram)) {
+// final ContainerShape shape = (ContainerShape)pe;
+// ContainerShape container = shape.getContainer();
+// // make sure this shape has not been deleted
+// if (container==null)
+// continue;
+// int size = container.getChildren().size();
+// if (size>1) {
+// // don't send Choreography Participant bands, Pools or Lanes to front
+// // they're already there...
+// BaseElement baseElement = BusinessObjectUtil.getFirstBaseElement(shape);
+// if (baseElement instanceof Participant || baseElement instanceof Lane)
+// continue;
+// boolean obscured = false;
+// int index = container.getChildren().indexOf(shape);
+// for (int i=index+1; i<container.getChildren().size(); ++i) {
+// PictogramElement sibling = container.getChildren().get(i);
+// if (sibling instanceof ContainerShape &&
+// !FeatureSupport.isLabelShape((ContainerShape)sibling)) {
+// if (GraphicsUtil.intersects(shape, (ContainerShape)sibling)) {
+// boolean siblingIsBoundaryEvent = false;
+// if (baseElement instanceof Activity) {
+// BaseElement be = BusinessObjectUtil.getFirstBaseElement(sibling);
+// for (BoundaryEvent boundaryEvent : ((Activity)baseElement).getBoundaryEventRefs()) {
+// if (be==boundaryEvent) {
+// siblingIsBoundaryEvent = true;
+// break;
+// }
+// }
+// }
+// if (!siblingIsBoundaryEvent) {
+// obscured = true;
+// }
+// }
+// }
+// }
+// // if the selected shape is an Activity, it may have Boundary Event shapes
+// // attached to it - these will have to be moved to the top so they're
+// // not obscured by the Activity.
+// if (baseElement instanceof Activity) {
+// for (BoundaryEvent be : ((Activity)baseElement).getBoundaryEventRefs()) {
+// for (PictogramElement child : container.getChildren()) {
+// if (child instanceof ContainerShape && BusinessObjectUtil.getFirstBaseElement(child) == be) {
+// index = container.getChildren().indexOf(child);
+// for (int i=index+1; i<container.getChildren().size(); ++i) {
+// PictogramElement sibling = container.getChildren().get(i);
+// if (sibling!=shape && sibling instanceof ContainerShape) {
+// if (GraphicsUtil.intersects((ContainerShape)child, (ContainerShape)sibling)) {
+// obscured = true;
+// moved.add((ContainerShape)child);
+// }
+// }
+// }
+// }
+// }
+// }
+// }
+// if (obscured) {
+// moved.add(0,shape);
+// }
+// }
+// }
+// }
+// if (!moved.isEmpty()) {
+// Display.getDefault().asyncExec(new Runnable() {
+// @Override
+// public void run() {
+// getEditingDomain().getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
+// @Override
+// protected void doExecute() {
+// for (ContainerShape child : moved) {
+// GraphicsUtil.sendToFront(child);
+// }
+// }
+// });
+// }
+// });
+// }
+ }
+
+ @Override
+ public void preferenceChange(final PreferenceChangeEvent event) {
+ getPreferences().reload();
+
+ if (event.getKey().contains("/"+Bpmn2Preferences.PREF_MODEL_ENABLEMENT+"/")) //$NON-NLS-1$ //$NON-NLS-2$
+ modelEnablements = null;
+
+ if (event.getKey().contains(Bpmn2Preferences.PREF_SHOW_ADVANCED_PROPERTIES) ||
+ event.getKey().contains("/"+Bpmn2Preferences.PREF_TOOL_PROFILE+"/")) { //$NON-NLS-1$ //$NON-NLS-2$
+ // get rid of cached Property Tab Descriptors
+ if (tabDescriptorProvider instanceof PropertyTabDescriptorProvider)
+ ((PropertyTabDescriptorProvider)tabDescriptorProvider).disposeTabDescriptors(bpmnResource);
+ }
+
+ if (event.getKey().contains("/"+Bpmn2Preferences.PREF_SHAPE_STYLE+"/")) { //$NON-NLS-1$ //$NON-NLS-2$
+ int i = event.getKey().lastIndexOf('/');
+ if (i<=0)
+ return;
+ // Get the object type whose ShapeStyle has changed (e.g. "Task")
+ // and change it if possible. This needs to run in a transaction.
+ final String name = event.getKey().substring(i+1);
+ getEditingDomain().getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
+ @Override
+ protected void doExecute() {
+ IFeatureProvider fp = DefaultBPMN2Editor.this.getDiagramTypeProvider().getFeatureProvider();
+ // Collect all PictogramElements and their corresponding GraphicsAlgorithms
+ // to which the ShapeStyle change applies.
+ Resource resource = getDiagramTypeProvider().getDiagram().eResource();
+ for (PictogramElement pe : ModelUtil.getAllObjectsOfType(resource, PictogramElement.class)) {
+ BaseElement be = BusinessObjectUtil.getFirstElementOfType(pe, BaseElement.class);
+ // The Business Object class name must match the ShapeStyle type
+ if (be!=null && be.eClass().getName().equals(name)) {
+ // find this PE's GraphicsAlgorithrms that has the
+ // PREF_SHAPE_STYLE property set - this is the GA to
+ // which the ShapeStyle applies.
+ GraphicsAlgorithm ga = StyleUtil.getShapeStyleContainer(pe);
+ // If the ShapeStyle for this BaseElement has already
+ // been changed by the user, do not reset it.
+ String style = ShapeStyle.encode(ShapeStyle.getShapeStyle(be));
+ if (style.equals(event.getNewValue())) {
+ StyleUtil.applyStyle(ga, be);
+ if (pe instanceof Shape && FeatureSupport.isLabelShape(pe)) {
+ UpdateContext context = new UpdateContext(pe);
+ IUpdateFeature feature = fp.getUpdateFeature(context);
+ if (feature!=null && feature.canUpdate(context)) {
+ feature.update(context);
+ }
+ }
+ }
+ }
+ }
+ }
+ });
+ }
+
+ if (event.getKey().contains(ShapeStyle.Category.GRID.toString())) { //$NON-NLS-1$
+ getEditingDomain().getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
+ @Override
+ protected void doExecute() {
+ ShapeStyle ss = getPreferences().getShapeStyle(ShapeStyle.Category.GRID);
+ Diagram diagram = getDiagramTypeProvider().getDiagram();
+ diagram.setGridUnit(ss.getDefaultWidth());
+ diagram.setVerticalGridUnit(ss.getDefaultHeight());
+ diagram.setSnapToGrid(ss.getSnapToGrid());
+ GraphicsAlgorithm ga = diagram.getGraphicsAlgorithm();
+ IGaService gaService = Graphiti.getGaService();
+ ga.setForeground(gaService.manageColor(diagram, ss.getShapeForeground()));
+ refresh();
+ getGraphicalControl().redraw();
+ }
+ });
+ }
+
+ if (event.getKey().contains(ShapeStyle.Category.CANVAS.toString())) { //$NON-NLS-1$
+ getEditingDomain().getCommandStack().execute(new RecordingCommand(getEditingDomain()) {
+ @Override
+ protected void doExecute() {
+ ShapeStyle ss = getPreferences().getShapeStyle(ShapeStyle.Category.CANVAS);
+ Diagram diagram = getDiagramTypeProvider().getDiagram();
+ GraphicsAlgorithm ga = diagram.getGraphicsAlgorithm();
+ IGaService gaService = Graphiti.getGaService();
+ ga.setBackground(gaService.manageColor(diagram, ss.getShapeBackground()));
+ refresh();
+ getGraphicalControl().redraw();
+ }
+ });
+ }
+ }
+
+ public static IEditorPart openEditor(URI modelURI) {
+ IEditorPart part = null;
+ try {
+ Bpmn2DiagramEditorInput input = BPMN2DiagramCreator.createDiagram(modelURI, Bpmn2DiagramType.NONE, ""); //$NON-NLS-1$
+ part = BPMN2DiagramCreator.openEditor(input);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return part;
+ }
+
+ @Override
+ public void configureGraphicalViewer() {
+ super.configureGraphicalViewer();
+ // add zooming action with "CTRL + Mouse Wheel"
+ GraphicalViewer viewer = getGraphicalViewer();
+ viewer.setProperty(MouseWheelHandler.KeyGenerator.getKey(SWT.MOD1), MouseWheelZoomHandler.SINGLETON);
+ }
+
+ /**
+ * helper class used to handle setInput() of the editor, because of it's complexity split it up in own class,
+ * which may be overridden and customized
+ *
+ * @author Flavio Donzé
+ *
+ */
+ public class EditorInputHelper {
+
+ /**
+ * method called in editor.setInput() previous to super.setInput()
+ *
+ * @param input
+ * @param editor
+ */
+ public void preSetInput(IEditorInput input, DefaultBPMN2Editor editor) {
+ input = recreateInput(input, editor);
+
+ ResourceSet resourceSet = initializeResourceSet(input, editor);
+ editor.bpmnResource = createBPMN2Resource(editor, resourceSet);
+ }
+
+ protected IEditorInput recreateInput(IEditorInput input, DefaultBPMN2Editor editor) {
+ try {
+ if (input instanceof Bpmn2DiagramEditorInput) {
+ Bpmn2DiagramType diagramType = Bpmn2DiagramType.NONE;
+ String targetNamespace = null;
+ diagramType = ((Bpmn2DiagramEditorInput)input).getInitialDiagramType();
+ targetNamespace = ((Bpmn2DiagramEditorInput)input).getTargetNamespace();
+ input = editor.createNewDiagramEditorInput(input, diagramType, targetNamespace);
+ }
+ editor.currentInput = input;
+ }
+ catch (Exception e) {
+ Activator.logError(e);
+ }
+ return input;
+ }
+
+ protected ResourceSet initializeResourceSet(IEditorInput input, DefaultBPMN2Editor editor) {
+ // Determine which Target Runtime to use for this input and initialize the ResourceSet
+ TargetRuntime targetRuntime = editor.getTargetRuntime(input);
+ editor.getTargetRuntime().notify(new LifecycleEvent(EventType.EDITOR_STARTUP,editor));
+
+ ResourceSet resourceSet = editor.getEditingDomain().getResourceSet();
+ resourceSet.setURIConverter(new ProxyURIConverterImplExtension(editor.modelUri));
+ resourceSet.eAdapters().add(editor.editorAdapter = new DiagramEditorAdapter(editor));
+
+ // Tell the TargetRuntime about the ResourceSet. This allows the TargetRuntime to provide its
+ // own ResourceFactory if needed.
+ targetRuntime.registerExtensionResourceFactory(resourceSet);
+ return resourceSet;
+ }
+
+ protected Bpmn2ResourceImpl createBPMN2Resource(DefaultBPMN2Editor editor, ResourceSet resourceSet) {
+ return (Bpmn2ResourceImpl) resourceSet.createResource(editor.modelUri, Bpmn2ModelerResourceImpl.BPMN2_CONTENT_TYPE_ID);
+ }
+
+ /**
+ * method called in editor.setInput() after super.setInput()
+ *
+ * @param input
+ * @param editor
+ */
+ public void postSetInput(IEditorInput input, DefaultBPMN2Editor editor) {
+ // Hook a transaction exception handler so we can get diagnostics about EMF validation errors.
+ editor.getEditingDomainListener();
+
+ // This does the actual loading of the resource.
+ // TODO: move the loading code to BPMN2PersistencyBehavior where it belongs,
+ // and get rid of ModelHandler and ModelHandlerLocator
+ editor.modelHandler = ModelHandlerLocator.createModelHandler(editor.modelUri, editor.bpmnResource);
+ ModelHandlerLocator.put(editor.diagramUri, editor.modelHandler);
+
+ editor.getTargetRuntime().notify(new LifecycleEvent(EventType.EDITOR_INITIALIZED, editor));
+
+ importDiagram(input, editor);
+ }
+
+ protected void importDiagram(IEditorInput input, final DefaultBPMN2Editor editor) {
+ try {
+ editor.getPreferences().setDoCoreValidation(false);
+ // Import the BPMNDI model that creates the Graphiti shapes, connections, etc.
+ BasicCommandStack commandStack = (BasicCommandStack) editor.getEditingDomain().getCommandStack();
+ commandStack.execute(new RecordingCommand(editor.getEditingDomain()) {
+ @Override
+ protected void doExecute() {
+ editor.importDiagram();
+ }
+ });
+
+ Definitions definitions = ModelUtil.getDefinitions(editor.bpmnResource);
+ if (definitions!=null) {
+ // we'll need this in case doSaveAs()
+ ((Bpmn2DiagramEditorInput)input).setTargetNamespace(definitions.getTargetNamespace());
+ ((Bpmn2DiagramEditorInput)input).setInitialDiagramType(ModelUtil.getDiagramType(editor));
+ }
+ // Reset the save point and initialize the undo stack
+ commandStack.saveIsDone();
+ commandStack.flush();
+ }
+ finally {
+ editor.getPreferences().setDoCoreValidation(true);
+ }
+ }
+ }
+}
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/DefaultBPMN2EditorDiagramBehavior.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/DefaultBPMN2EditorDiagramBehavior.java
new file mode 100644
index 00000000..d6781055
--- /dev/null
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/DefaultBPMN2EditorDiagramBehavior.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2011 - 2015 Red Hat, Inc.
+ * All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.bpmn2.modeler.ui.editor;
+
+import java.util.ArrayList;
+
+import org.eclipse.graphiti.mm.pictograms.PictogramElement;
+import org.eclipse.graphiti.ui.editor.DefaultMarkerBehavior;
+import org.eclipse.graphiti.ui.editor.DefaultPersistencyBehavior;
+import org.eclipse.graphiti.ui.editor.DefaultUpdateBehavior;
+import org.eclipse.graphiti.ui.editor.DiagramBehavior;
+import org.eclipse.swt.widgets.Control;
+
+public class DefaultBPMN2EditorDiagramBehavior extends DiagramBehavior {
+
+ public DefaultBPMN2EditorDiagramBehavior(DefaultBPMN2Editor bpmn2Editor) {
+ super(bpmn2Editor);
+ setParentPart(bpmn2Editor);
+ initDefaultBehaviors();
+ }
+
+ @Override
+ protected DefaultUpdateBehavior createUpdateBehavior() {
+ return new BPMN2EditorUpdateBehavior(this);
+ }
+
+ @Override
+ protected DefaultPersistencyBehavior createPersistencyBehavior() {
+ return new BPMN2PersistencyBehavior(this);
+ }
+
+ @Override
+ protected DefaultMarkerBehavior createMarkerBehavior() {
+ return new BPMN2EditorMarkerBehavior(this);
+ }
+
+ @Override
+ protected PictogramElement[] getPictogramElementsForSelection() {
+ // filter out invisible elements when setting selection
+ PictogramElement[] pictogramElements = super.getPictogramElementsForSelection();
+ if (pictogramElements==null)
+ return null;
+ ArrayList<PictogramElement> visibleList = new ArrayList<PictogramElement>();
+ for (PictogramElement pe : pictogramElements) {
+ if (pe.isVisible())
+ visibleList.add(pe);
+ }
+ return visibleList.toArray(new PictogramElement[visibleList.size()]);
+ }
+
+ @Override
+ protected void selectPictogramElements(PictogramElement[] pictogramElements) {
+ // Avoid NPE when a final selection comes in from the Outline Viewer AFTER
+ // the editor is closed and the workbench is shutting down.
+ Control control = getDiagramContainer().getGraphicalViewer().getControl();
+ if (control==null || control.isDisposed())
+ return;
+ super.selectPictogramElements(pictogramElements);
+ }
+}
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/wizards/BPMN2DiagramCreator.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/wizards/BPMN2DiagramCreator.java
index a6986d9d..13ed1ff7 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/wizards/BPMN2DiagramCreator.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/wizards/BPMN2DiagramCreator.java
@@ -21,6 +21,7 @@ import org.eclipse.bpmn2.modeler.core.utils.ModelUtil.Bpmn2DiagramType;
import org.eclipse.bpmn2.modeler.ui.Activator;
import org.eclipse.bpmn2.modeler.ui.Bpmn2DiagramEditorInput;
import org.eclipse.bpmn2.modeler.ui.editor.BPMN2Editor;
+import org.eclipse.bpmn2.modeler.ui.editor.DefaultBPMN2Editor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
@@ -41,9 +42,9 @@ public class BPMN2DiagramCreator {
return createDiagram(null, uri, diagramType, targetNamespace, null);
}
- public static Bpmn2DiagramEditorInput createDiagram(IEditorInput oldInput, URI modelUri, Bpmn2DiagramType diagramType, String targetNamespace, BPMN2Editor diagramEditor) {
+ public static Bpmn2DiagramEditorInput createDiagram(IEditorInput oldInput, URI modelUri, Bpmn2DiagramType diagramType, String targetNamespace, DefaultBPMN2Editor diagramEditor) {
- // Should we create a new Graphiti Diamgra file or reuse the one
+ // Should we create a new Graphiti diagram file or reuse the one
// from an already open editor window?
boolean createNew = true;
URI diagramUri = null;
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/wizards/FileService.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/wizards/FileService.java
index b6963b48..3848f90c 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/wizards/FileService.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/wizards/FileService.java
@@ -29,7 +29,7 @@ import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerResourceSetImpl;
import org.eclipse.bpmn2.modeler.core.utils.FileUtils;
import org.eclipse.bpmn2.modeler.ui.Activator;
import org.eclipse.bpmn2.modeler.ui.Bpmn2DiagramEditorInput;
-import org.eclipse.bpmn2.modeler.ui.editor.BPMN2Editor;
+import org.eclipse.bpmn2.modeler.ui.editor.DefaultBPMN2Editor;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
@@ -57,8 +57,7 @@ import org.eclipse.ui.part.FileEditorInput;
public class FileService {
- public static TransactionalEditingDomain createEmfFileForDiagram(URI diagramResourceUri, final Diagram diagram, BPMN2Editor diagramEditor) {
-
+ public static TransactionalEditingDomain createEmfFileForDiagram(URI diagramResourceUri, Diagram diagram, DefaultBPMN2Editor diagramEditor) {
ResourceSet resourceSet = null;
TransactionalEditingDomain editingDomain = null;
if (diagramEditor==null) {
@@ -74,7 +73,11 @@ public class FileService {
editingDomain = diagramEditor.getEditingDomain();
resourceSet = diagramEditor.getResourceSet();
}
-
+ return createEmfFileForDiagram(diagramResourceUri, diagram, resourceSet, editingDomain);
+ }
+
+ public static TransactionalEditingDomain createEmfFileForDiagram(URI diagramResourceUri, final Diagram diagram, ResourceSet resourceSet,
+ TransactionalEditingDomain editingDomain) {
// Create a resource for this file.
final Resource resource = resourceSet.createResource(diagramResourceUri);
CommandStack commandStack = editingDomain.getCommandStack();

Back to the top