Merge branch 'develop' into local
diff --git a/org.eclipse.bpmn2.modeler.ui/META-INF/MANIFEST.MF b/org.eclipse.bpmn2.modeler.ui/META-INF/MANIFEST.MF
index 374812a..974b7d5 100644
--- a/org.eclipse.bpmn2.modeler.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.bpmn2.modeler.ui/META-INF/MANIFEST.MF
@@ -67,7 +67,8 @@
org.eclipse.bpmn2.modeler.ui.util,
org.eclipse.bpmn2.modeler.ui.views,
org.eclipse.bpmn2.modeler.ui.wizards
-Import-Package: org.eclipse.emf.workspace,
+Import-Package: org.eclipse.core.expressions,
+ org.eclipse.emf.workspace,
org.eclipse.emf.workspace.util,
org.eclipse.wst.validation
diff --git a/org.eclipse.bpmn2.modeler.ui/notes.txt b/org.eclipse.bpmn2.modeler.ui/notes.txt
new file mode 100644
index 0000000..524acff
--- /dev/null
+++ b/org.eclipse.bpmn2.modeler.ui/notes.txt
@@ -0,0 +1 @@
+Test file
diff --git a/org.eclipse.bpmn2.modeler.ui/plugin.xml b/org.eclipse.bpmn2.modeler.ui/plugin.xml
index 4639c2a..5f1781e 100644
--- a/org.eclipse.bpmn2.modeler.ui/plugin.xml
+++ b/org.eclipse.bpmn2.modeler.ui/plugin.xml
@@ -613,5 +613,83 @@
<style object="UserTask" foreground="546778" background="D4E7F8" textColor="546778" font="arial,10,-,-"/>
</extension>
+
+ <!-- menu commands -->
+ <extension
+ point="org.eclipse.ui.commands">
+ <category
+ id="org.eclipse.bpmn2.modeler.command.category"
+ name="BPMN2 Modeler Category">
+ </category>
+ <command
+ id="org.eclipse.bpmn2.modeler.command.createProcess"
+ categoryId="org.eclipse.bpmn2.modeler.command.category"
+ name="Create Process"/>
+ <command
+ id="org.eclipse.bpmn2.modeler.command.createChoreography"
+ categoryId="org.eclipse.bpmn2.modeler.command.category"
+ name="Create Choreography">
+ </command>
+ <command
+ id="org.eclipse.bpmn2.modeler.command.createCollaboration"
+ categoryId="org.eclipse.bpmn2.modeler.command.category"
+ name="Create Collaboration">
+ </command>
+ </extension>
+ <!-- menu handlers -->
+ <extension
+ point="org.eclipse.ui.handlers">
+ <handler
+ class="org.eclipse.bpmn2.modeler.ui.commands.CreateDiagramCommand"
+ commandId="org.eclipse.bpmn2.modeler.command.createProcess">
+ </handler>
+ <handler
+ class="org.eclipse.bpmn2.modeler.ui.commands.CreateDiagramCommand"
+ commandId="org.eclipse.bpmn2.modeler.command.createChoreography">
+ </handler>
+ <handler
+ class="org.eclipse.bpmn2.modeler.ui.commands.CreateDiagramCommand"
+ commandId="org.eclipse.bpmn2.modeler.command.createCollaboration">
+ </handler>
+ </extension>
+
+ <!-- menu -->
+ <extension
+ id="org.eclipse.bpmn2.modeler.diagram.menu.extension"
+ point="org.eclipse.ui.menus">
+ <menuContribution
+ locationURI= "menu:org.eclipse.ui.main.menu?after=File">
+ <menu
+ id="org.eclipse.bpmn2.modeler.diagram.menu"
+ label="Diagram">
+ <visibleWhen>
+ <with
+ variable="activeEditorId">
+ <equals
+ value="org.eclipse.bpmn2.modeler.ui.bpmn2editor">
+ </equals>
+ </with>
+ </visibleWhen>
+ </menu>
+ </menuContribution>
+ <menuContribution
+ locationURI= "menu:org.eclipse.bpmn2.modeler.diagram.menu?after=additions">
+ <command
+ commandId="org.eclipse.bpmn2.modeler.command.createProcess"
+ id= "createProcess"
+ label= "Create Process Diagram">
+ </command>
+ <command
+ commandId="org.eclipse.bpmn2.modeler.command.createChoreography"
+ id= "createChoreography"
+ label= "Create Choreography Diagram">
+ </command>
+ <command
+ commandId="org.eclipse.bpmn2.modeler.command.createCollaboration"
+ id= "createCollaboration"
+ label= "Create Collaboration Diagram">
+ </command>
+ </menuContribution>
+</extension>
</plugin>
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/commands/CreateDiagramCommand.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/commands/CreateDiagramCommand.java
new file mode 100644
index 0000000..93099b8
--- /dev/null
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/commands/CreateDiagramCommand.java
@@ -0,0 +1,140 @@
+package org.eclipse.bpmn2.modeler.ui.commands;
+
+import java.util.List;
+
+import org.eclipse.bpmn2.BaseElement;
+import org.eclipse.bpmn2.Bpmn2Package;
+import org.eclipse.bpmn2.Definitions;
+import org.eclipse.bpmn2.RootElement;
+import org.eclipse.bpmn2.Process;
+import org.eclipse.bpmn2.Collaboration;
+import org.eclipse.bpmn2.Choreography;
+import org.eclipse.bpmn2.di.BPMNDiagram;
+import org.eclipse.bpmn2.di.BPMNPlane;
+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.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gef.EditPart;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.widgets.Shell;
+
+public class CreateDiagramCommand extends AbstractHandler {
+
+ public final static String ID_CREATE_PROCESS = "org.eclipse.bpmn2.modeler.command.createProcess";
+ public final static String ID_CREATE_CHOREOGRAPHY = "org.eclipse.bpmn2.modeler.command.createChoreography";
+ public final static String ID_CREATE_COLLABORATION = "org.eclipse.bpmn2.modeler.command.createCollaboration";
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ EvaluationContext ctx = (EvaluationContext)event.getApplicationContext();
+ Object var = ctx.getDefaultVariable();
+ Object model = null;
+ BPMN2Editor editor = BPMN2Editor.getActiveEditor();
+ if (var instanceof List) {
+ for (Object e : (List)var) {
+ if ( e instanceof EditPart) {
+ model = ((EditPart)e).getModel();
+ }
+ }
+ }
+
+ InputDialog dlg = null;
+ final String id = event.getCommand().getId();
+ if (ID_CREATE_PROCESS.equals(id)) {
+ dlg = new NewDiagramNameDialog(editor, "Process");
+ }
+ else if (ID_CREATE_CHOREOGRAPHY.equals(id)) {
+ dlg = new NewDiagramNameDialog(editor, "Choreography");
+ }
+ else if (ID_CREATE_COLLABORATION.equals(id)) {
+ dlg = new NewDiagramNameDialog(editor, "Collaboration");
+ }
+ if (dlg!=null) {
+ if (dlg.open()==Window.OK) {
+ TransactionalEditingDomain domain = editor.getEditingDomain();
+ final Definitions definitions = ModelUtil.getDefinitions(editor.getBpmnDiagram());
+ final String name = dlg.getValue();
+ domain.getCommandStack().execute(new RecordingCommand(domain) {
+ @Override
+ protected void doExecute() {
+ Class clazz = null;
+ if (ID_CREATE_PROCESS.equals(id)) {
+ clazz = Process.class;
+ }
+ else if (ID_CREATE_CHOREOGRAPHY.equals(id)) {
+ clazz = Choreography.class;
+ }
+ else if (ID_CREATE_COLLABORATION.equals(id)) {
+ clazz = Collaboration.class;
+ }
+ RootElement bpmnElement = Bpmn2ModelerFactory.create(clazz);
+ EStructuralFeature f = bpmnElement.eClass().getEStructuralFeature("name");
+ bpmnElement.eSet(f, name);
+ definitions.getRootElements().add(bpmnElement);
+
+ BPMNPlane plane = BpmnDiFactory.eINSTANCE.createBPMNPlane();
+ plane.setBpmnElement(bpmnElement);
+
+ BPMNDiagram diagram = BpmnDiFactory.eINSTANCE.createBPMNDiagram();
+ diagram.setPlane(plane);
+ diagram.setName(name);
+ definitions.getDiagrams().add(diagram);
+
+ ModelUtil.setID(bpmnElement);
+ ModelUtil.setID(plane);
+ ModelUtil.setID(diagram);
+ }
+
+ });
+ }
+ }
+ return null;
+ }
+
+ private static class NewDiagramNameDialog extends InputDialog {
+
+ public NewDiagramNameDialog(final BPMN2Editor editor, final String type) {
+ super(editor.getSite().getShell(), "New "+type+" Diagram",
+ "Enter "+type+" name", "",
+ new IInputValidator() {
+ @Override
+ public String isValid(String newText) {
+ if (newText==null || newText.isEmpty())
+ return "Name must not be empty";
+ for (RootElement re : getDefinitions(editor).getRootElements()) {
+ String name = null;
+ if (re instanceof Process) {
+ name = ((Process)re).getName();
+ }
+ else if (re instanceof Collaboration) {
+ name = ((Collaboration)re).getName();
+ }
+ else if (re instanceof Choreography) {
+ name = ((Choreography)re).getName();
+ }
+ if (newText.equals(name))
+ return "The "+type+" '"+name+"' already exists.";
+ }
+
+ return null;
+ }
+
+ }
+ );
+ }
+
+ public static Definitions getDefinitions(BPMN2Editor editor) {
+ return ModelUtil.getDefinitions(editor.getBpmnDiagram());
+ }
+ }
+}
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java
index 74e3f96..6c4430f 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java
@@ -858,6 +858,9 @@
// create a new Graphiti Diagram if needed
Diagram diagram = DIUtils.getOrCreateDiagram(this, bpmnDiagram);
+ // clear current selection to avoid confusing the GraphicalViewer
+ selectPictogramElements(new PictogramElement[] {});
+
// Tell the DTP about the new Diagram
getDiagramTypeProvider().resourceReloaded(diagram);
getRefreshBehavior().initRefresh();