notation refactoring support
diff --git a/org.eclipse.emf.refactor.refactoring.papyrus/META-INF/MANIFEST.MF b/org.eclipse.emf.refactor.refactoring.papyrus/META-INF/MANIFEST.MF
index 98b3f53..2d93bed 100644
--- a/org.eclipse.emf.refactor.refactoring.papyrus/META-INF/MANIFEST.MF
+++ b/org.eclipse.emf.refactor.refactoring.papyrus/META-INF/MANIFEST.MF
@@ -17,3 +17,4 @@
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.eclipse.ui
+Export-Package: org.eclipse.emf.refactor.refactoring.papyrus.managers
diff --git a/org.eclipse.emf.refactor.refactoring.papyrus/bin/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusManager.class b/org.eclipse.emf.refactor.refactoring.papyrus/bin/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusManager.class
new file mode 100644
index 0000000..1e1ff5e
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring.papyrus/bin/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusManager.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactoring.papyrus/bin/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusSelectionManager.class b/org.eclipse.emf.refactor.refactoring.papyrus/bin/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusSelectionManager.class
index 38d50b2..7121c12 100644
--- a/org.eclipse.emf.refactor.refactoring.papyrus/bin/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusSelectionManager.class
+++ b/org.eclipse.emf.refactor.refactoring.papyrus/bin/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusSelectionManager.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactoring.papyrus/bin/org/eclipse/emf/refactor/refactoring/papyrus/ui/PapyrusModelApplicationMenu$1.class b/org.eclipse.emf.refactor.refactoring.papyrus/bin/org/eclipse/emf/refactor/refactoring/papyrus/ui/PapyrusModelApplicationMenu$1.class
new file mode 100644
index 0000000..99c2b64
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring.papyrus/bin/org/eclipse/emf/refactor/refactoring/papyrus/ui/PapyrusModelApplicationMenu$1.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactoring.papyrus/bin/org/eclipse/emf/refactor/refactoring/papyrus/ui/PapyrusModelApplicationMenu.class b/org.eclipse.emf.refactor.refactoring.papyrus/bin/org/eclipse/emf/refactor/refactoring/papyrus/ui/PapyrusModelApplicationMenu.class
new file mode 100644
index 0000000..b69b21c
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring.papyrus/bin/org/eclipse/emf/refactor/refactoring/papyrus/ui/PapyrusModelApplicationMenu.class
Binary files differ
diff --git a/org.eclipse.emf.refactor.refactoring.papyrus/plugin.xml b/org.eclipse.emf.refactor.refactoring.papyrus/plugin.xml
index 04dc999..55e4bde 100644
--- a/org.eclipse.emf.refactor.refactoring.papyrus/plugin.xml
+++ b/org.eclipse.emf.refactor.refactoring.papyrus/plugin.xml
@@ -48,4 +48,37 @@
</handler>
</extension>
+ <extension
+ point="org.eclipse.ui.menus">
+ <menuContribution
+ allPopups="false"
+ locationURI="popup:org.eclipse.ui.popup.any">
+ <menu
+ label="Papyrus UML Model Refactorings">
+ <visibleWhen
+ checkEnabled="true">
+ <iterate
+ ifEmpty="false">
+ <or>
+ <instanceof
+ value="org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart">
+ </instanceof>
+ <instanceof
+ value="org.eclipse.emf.facet.infra.browser.uicore.internal.model.ModelElementItem">
+ </instanceof>
+ </or>
+ </iterate>
+ </visibleWhen>
+ <dynamic
+ class="org.eclipse.emf.refactor.refactoring.papyrus.ui.PapyrusModelApplicationMenu"
+ id="org.eclipse.emf.refactor.papyrus.dynamicmenu">
+ </dynamic>
+ </menu>
+ </menuContribution>
+ </extension>
+
+
+
+
+
</plugin>
diff --git a/org.eclipse.emf.refactor.refactoring.papyrus/src/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusManager.java b/org.eclipse.emf.refactor.refactoring.papyrus/src/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusManager.java
new file mode 100644
index 0000000..a7c5c76
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring.papyrus/src/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusManager.java
@@ -0,0 +1,29 @@
+package org.eclipse.emf.refactor.refactoring.papyrus.managers;
+
+import org.eclipse.gmf.runtime.notation.Diagram;
+
+public class PapyrusManager {
+
+ private static PapyrusManager instance;
+ private Diagram diagram;
+
+ private PapyrusManager() {
+ setDiagram(null);
+ System.out.println("PapyrusManager initialized!");
+ }
+
+ public static PapyrusManager getInstance() {
+ if (instance == null) {
+ instance = new PapyrusManager();
+ }
+ return instance;
+ }
+
+ public Diagram getDiagram() {
+ return diagram;
+ }
+
+ public void setDiagram(Diagram diagram) {
+ this.diagram = diagram;
+ }
+}
diff --git a/org.eclipse.emf.refactor.refactoring.papyrus/src/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusSelectionManager.java b/org.eclipse.emf.refactor.refactoring.papyrus/src/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusSelectionManager.java
index 36e6e55..cd97759 100644
--- a/org.eclipse.emf.refactor.refactoring.papyrus/src/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusSelectionManager.java
+++ b/org.eclipse.emf.refactor.refactoring.papyrus/src/org/eclipse/emf/refactor/refactoring/papyrus/managers/PapyrusSelectionManager.java
@@ -3,13 +3,49 @@
import java.util.List;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.facet.infra.browser.uicore.internal.model.ModelElementItem;
import org.eclipse.emf.refactor.refactoring.managers.SelectionManager;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
@SuppressWarnings("restriction")
public class PapyrusSelectionManager extends SelectionManager {
+
+ public static List<EObject> getENotationSelection() {
+ ISelection selection =
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+ .getSelectionService().getSelection();
+ List<EObject> r = SelectionManager.getESelection(selection);
+ for (Object o : getSelection(selection)) {
+ if (o instanceof IGraphicalEditPart) {
+ System.out.println("instanceof IGraphicalEditPart");
+ IGraphicalEditPart gep = (IGraphicalEditPart) o;
+ System.out.println("element: " + gep.resolveSemanticElement());
+ System.out.println("notation view: " + gep.getNotationView());
+ System.out.println("notation view element: " + gep.getNotationView().getElement());
+ EObject root = EcoreUtil.getRootContainer(gep.getNotationView());
+ System.out.println("root: " + root);
+ r.add(gep.getNotationView().getElement());
+ PapyrusManager.getInstance().setDiagram((Diagram) root);
+ r.add(root);
+ } else {
+ return null;
+ }
+ }
+ return r;
+ }
+
+ public static List<EObject> getESelection() {
+ ISelection selection =
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+ .getSelectionService().getSelection();
+ return getESelection(selection);
+ }
public static List<EObject> getESelection(ISelection selection) {
if (selection == null)
@@ -34,5 +70,16 @@
}
return r;
}
+
+ public static void getDiagram() {
+ IWorkbenchWindow[] iwws = PlatformUI.getWorkbench().getWorkbenchWindows();
+ for (IWorkbenchWindow iww : iwws) {
+ System.out.println("IWorkbenchWindow: " + iww);
+ IWorkbenchPage[] iwps = iww.getPages();
+ for (IWorkbenchPage iwp : iwps) {
+ System.out.println("IWorkbenchPage: " + iwp);
+ }
+ }
+ }
}
diff --git a/org.eclipse.emf.refactor.refactoring.papyrus/src/org/eclipse/emf/refactor/refactoring/papyrus/ui/PapyrusModelApplicationMenu.java b/org.eclipse.emf.refactor.refactoring.papyrus/src/org/eclipse/emf/refactor/refactoring/papyrus/ui/PapyrusModelApplicationMenu.java
new file mode 100644
index 0000000..e75fd04
--- /dev/null
+++ b/org.eclipse.emf.refactor.refactoring.papyrus/src/org/eclipse/emf/refactor/refactoring/papyrus/ui/PapyrusModelApplicationMenu.java
@@ -0,0 +1,73 @@
+package org.eclipse.emf.refactor.refactoring.papyrus.ui;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.refactor.refactoring.configuration.managers.ConfigurationManager;
+import org.eclipse.emf.refactor.refactoring.core.Refactoring;
+import org.eclipse.emf.refactor.refactoring.managers.ProjectManager;
+import org.eclipse.emf.refactor.refactoring.papyrus.managers.PapyrusSelectionManager;
+import org.eclipse.jface.action.ContributionItem;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+
+public class PapyrusModelApplicationMenu extends ContributionItem {
+
+ private final List<EObject> selection;
+
+ public PapyrusModelApplicationMenu() {
+ selection = PapyrusSelectionManager.getENotationSelection();
+ System.out.println("PapyrusNotationApplicationMenu::selection: " + selection);
+ }
+
+ public PapyrusModelApplicationMenu(String id) {
+ super(id);
+ selection = PapyrusSelectionManager.getENotationSelection();
+ System.out.println("PapyrusNotationApplicationMenu::selection: " + selection);
+ }
+
+ @Override
+ public void fill(Menu menu, int index) {
+ ConfigurationManager.getInstance();
+ IProject project = ProjectManager.getActualProject();
+ LinkedList<Refactoring> refactorings =
+ ConfigurationManager.getSelectedRefactorings(project);
+ for(final Refactoring r : refactorings){
+ if(r.getGui().showInMenu(this.selection)){
+ MenuItem menuItem = new MenuItem(menu, SWT.CHECK, index);
+ menuItem.setText(r.getName());
+ menuItem.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ try {
+ //1. Set Selection:
+ r.getController().setSelection(selection);
+ //2. Preselect Values:
+ r.getController().getDataManagementObject()
+ .preselect(selection);
+ //3. Show Refactoring-Gui:
+ Shell shell =
+ Display.getDefault().getActiveShell();
+ RefactoringWizardOpenOperation dialog =
+ new RefactoringWizardOpenOperation
+ (r.getGui().show());
+ dialog.run(shell, "Refactoring: " + r.getName());
+
+ } catch (Exception e2) {
+ MessageDialog
+ .openError(null, "Error", e2.getMessage());
+ }
+ }
+ });
+ }
+ }
+ }
+}
\ No newline at end of file