Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/infra/core/org.eclipse.papyrus.infra.core.adaptor.emf/src/org/eclipse/papyrus/infra/core/adaptor/emf/CreateDiagramHandler.java')
-rw-r--r--plugins/infra/core/org.eclipse.papyrus.infra.core.adaptor.emf/src/org/eclipse/papyrus/infra/core/adaptor/emf/CreateDiagramHandler.java103
1 files changed, 103 insertions, 0 deletions
diff --git a/plugins/infra/core/org.eclipse.papyrus.infra.core.adaptor.emf/src/org/eclipse/papyrus/infra/core/adaptor/emf/CreateDiagramHandler.java b/plugins/infra/core/org.eclipse.papyrus.infra.core.adaptor.emf/src/org/eclipse/papyrus/infra/core/adaptor/emf/CreateDiagramHandler.java
new file mode 100644
index 00000000000..5391a7d49f5
--- /dev/null
+++ b/plugins/infra/core/org.eclipse.papyrus.infra.core.adaptor.emf/src/org/eclipse/papyrus/infra/core/adaptor/emf/CreateDiagramHandler.java
@@ -0,0 +1,103 @@
+/*****************************************************************************
+ * Copyright (c) 2008 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are 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:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.core.adaptor.emf;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.NotationFactory;
+import org.eclipse.papyrus.infra.core.extension.diagrameditor.IPluggableEditorFactory;
+import org.eclipse.papyrus.infra.core.resource.notation.NotationUtils;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+
+/**
+ * Base class for create diagram Handlers.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public abstract class CreateDiagramHandler extends AbstractHandler implements IHandler {
+
+ /**
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ *
+ * @param event
+ * @return
+ * @throws ExecutionException
+ */
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+
+ TransactionalEditingDomain editingDomain = getEditingDomain();
+ RecordingCommand command = new RecordingCommand(editingDomain, "Create EMF Diagram") {
+
+ @Override
+ protected void doExecute() {
+ addNewDiagram();
+ }
+
+ };
+
+ editingDomain.getCommandStack().execute(command);
+ return null;
+ }
+
+ /**
+ * Subclasses should implements this method.
+ */
+ protected abstract void addNewDiagram();
+
+ /**
+ * Add a new Diagram to the graphical model.
+ *
+ * @param diagram
+ * The diagram to add to graphical model. This will be the diagram provided to
+ * {@link IPluggableEditorFactory#createIPageModel(Object, org.eclipse.papyrus.infra.core.services.ServicesRegistry)}
+ */
+ protected void addNewDiagram(String name, String type, EObject diagram) {
+
+ // TODO Create a special node inside the sash model (di) instead of introducing
+ // a dependence on notation.
+ // This implies to change the factory also.
+ // The special node creation should be done by methods from sash
+ // create di2node
+ Diagram di2Diagram = NotationFactory.eINSTANCE.createDiagram();
+ di2Diagram.setVisible(true);
+ di2Diagram.setType(type);
+ if(name != null)
+ di2Diagram.setName(name);
+
+ // Add it to resource, so that it will be saved.
+// NotationUtils.getNotationResource().getContents().add(di2Diagram);
+ NotationUtils.getNotationModel().addDiagram(di2Diagram);
+
+ // Attach to sash in order to show it
+ // Add the diagram as a page to the current sash folder
+ EditorUtils.getISashWindowsContentProvider().addPage(di2Diagram);
+ }
+
+ /**
+ * Get the main editing doamin.
+ *
+ * @return
+ */
+ protected TransactionalEditingDomain getEditingDomain() {
+ return EditorUtils.getTransactionalEditingDomain();
+ }
+}

Back to the top