Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcletavernie2012-03-19 14:26:52 +0000
committercletavernie2012-03-19 14:26:52 +0000
commitae4b6349f545d41c386ca6a15c8ed0403ae55044 (patch)
tree8f820e9874bc5ee52559d2aeb05be99a78811868 /deprecated
parent6fc2fbbf3c1e89213cea89fbb011613b00aa6235 (diff)
downloadorg.eclipse.papyrus-ae4b6349f545d41c386ca6a15c8ed0403ae55044.tar.gz
org.eclipse.papyrus-ae4b6349f545d41c386ca6a15c8ed0403ae55044.tar.xz
org.eclipse.papyrus-ae4b6349f545d41c386ca6a15c8ed0403ae55044.zip
359058: [Refactoring - Architecture] Identify the layers and sub-layers for the Papyrus architecture
https://bugs.eclipse.org/bugs/show_bug.cgi?id=359058
Diffstat (limited to 'deprecated')
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/.classpath7
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/.project28
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/META-INF/MANIFEST.MF33
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/about.html28
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/build.properties7
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/icons/ModelExplorer.gifbin0 -> 114 bytes
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/icons/etool16/duplicate.pngbin0 -> 663 bytes
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/icons/etool16/rename.gifbin0 -> 922 bytes
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/icons/etool16/search.gifbin0 -> 545 bytes
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/plugin.properties14
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/plugin.xml270
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/schema/org.eclipse.papyrus.navigator.actionHandler.exsd135
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/schema/providerAdapterFactory.exsd79
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/ModelNavigator.java592
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/AbstractCommonActionProvider.java79
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/AbstractSubmenuActionProvider.java112
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CloseAllDiagramsAction.java65
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CloseDiagramAction.java44
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CreateChildActionProvider.java125
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CreateDiagramAction.java86
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CreateDiagramActionProvider.java51
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/DeleteDiagramAction.java77
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/DiagramActionProvider.java64
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/DuplicateDiagramAction.java87
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/EditingDomainActionProvider.java255
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GenericTransformAction.java101
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GenericTransformActionProvider.java187
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GenericTransformer.java437
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GroupChildrenAction.java58
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/OpenDiagramAction.java62
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/RemoveTypePrefixAction.java80
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/RenameDiagramAction.java66
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/RenameNamedElementAction.java142
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/SearchElementAction.java48
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/commands/EObjectInheritanceCopyCommand.java391
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dialog/InformationDialog.java124
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dialog/NavigatorSearchDialog.java274
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dnd/CommonDragAdapterAssistant.java45
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dnd/CommonDropAdapterAssistant.java116
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/DefaultEMFActionsFactory.java180
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/GroupableAdapterFactory.java71
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/IActionHandlerFactory.java82
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/RenameActionFactory.java100
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/DiResourceFilter.java45
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideAdditionalResourcesViewerFilter.java34
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideDiagramsViewerFilter.java34
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideEAnnotationsViewerFilter.java34
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideProfileApplicationsViewerFilter.java34
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/Activator.java93
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/AdditionalResources.java51
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/DeleteModelParticipant.java143
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/DirtyEditorChange.java146
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/ModelParticipantHelpers.java128
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/MoveModelParticipant.java112
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/RenameModelChange.java272
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/RenameModelParticipant.java137
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/utils/NavigatorUtils.java262
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/utils/StereotypeApplicationUtils.java128
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/INavigatorPreferenceConstants.java27
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/NavigatorPreferenceInitializer.java41
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/NavigatorPreferencePage.java57
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/TransformCommandShowPopupDialogGroup.java67
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/EObjectPackagingNode.java124
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/GroupableLabelProvider.java41
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/GroupableTreeArrayContentProvider.java278
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/IContentProvider.java12
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/NavigatorComposedAdapterFactory.java71
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/NoTypePrefixLabelDecorator.java122
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/PackagingNode.java58
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/ProviderAdapterFactoryReader.java57
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/ToEditorSaveable.java116
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/UMLContentProvider.java271
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/UMLLabelProvider.java227
-rw-r--r--deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/sorters/UMLViewerSorter.java37
75 files changed, 8068 insertions, 0 deletions
diff --git a/deprecated/org.eclipse.papyrus.navigator/.classpath b/deprecated/org.eclipse.papyrus.navigator/.classpath
new file mode 100644
index 00000000000..64c5e31b7a2
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/deprecated/org.eclipse.papyrus.navigator/.project b/deprecated/org.eclipse.papyrus.navigator/.project
new file mode 100644
index 00000000000..80f0f97e73b
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.navigator</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/deprecated/org.eclipse.papyrus.navigator/.settings/org.eclipse.jdt.core.prefs b/deprecated/org.eclipse.papyrus.navigator/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..66cb186456f
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Wed Feb 04 16:43:43 GMT+01:00 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/deprecated/org.eclipse.papyrus.navigator/META-INF/MANIFEST.MF b/deprecated/org.eclipse.papyrus.navigator/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..546bd9bf6b3
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/META-INF/MANIFEST.MF
@@ -0,0 +1,33 @@
+Manifest-Version: 1.0
+Require-Bundle: org.eclipse.ui.navigator;bundle-version="3.3.101",
+ org.eclipse.emf.ecore.editor;bundle-version="2.4.0",
+ org.eclipse.uml2.uml.editor;bundle-version="2.2.0",
+ org.eclipse.papyrus.infra.core;bundle-version="0.9.0";visibility:=reexport,
+ org.eclipse.papyrus.infra.core.sasheditor.di;bundle-version="0.9.0";visibility:=reexport,
+ org.eclipse.ltk.core.refactoring;bundle-version="3.5.0",
+ org.eclipse.emf.converter;bundle-version="2.5.0",
+ org.eclipse.papyrus.infra.gmfdiag.preferences;bundle-version="0.9.0",
+ org.eclipse.emf.transaction;bundle-version="1.4.0",
+ org.eclipse.gmf.runtime.notation;bundle-version="1.5.0",
+ org.eclipse.gef;bundle-version="3.7.1",
+ org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.5.0"
+Export-Package: org.eclipse.papyrus.navigator,
+ org.eclipse.papyrus.navigator.actions,
+ org.eclipse.papyrus.navigator.dialog,
+ org.eclipse.papyrus.navigator.dnd,
+ org.eclipse.papyrus.navigator.factory,
+ org.eclipse.papyrus.navigator.filters;uses:="org.eclipse.jface.viewers",
+ org.eclipse.papyrus.navigator.internal;x-internal:=true,
+ org.eclipse.papyrus.navigator.internal.utils;x-internal:=true,
+ org.eclipse.papyrus.navigator.providers,
+ org.eclipse.papyrus.navigator.sorters
+Bundle-Vendor: %providerName
+Bundle-ActivationPolicy: lazy
+Bundle-Version: 0.9.0.qualifier
+Bundle-Localization: plugin
+Bundle-Name: %pluginName
+Bundle-ManifestVersion: 2
+Bundle-Activator: org.eclipse.papyrus.navigator.internal.Activator
+Bundle-SymbolicName: org.eclipse.papyrus.navigator;singleton:=true
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+
diff --git a/deprecated/org.eclipse.papyrus.navigator/about.html b/deprecated/org.eclipse.papyrus.navigator/about.html
new file mode 100644
index 00000000000..82d49bf5f81
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/deprecated/org.eclipse.papyrus.navigator/build.properties b/deprecated/org.eclipse.papyrus.navigator/build.properties
new file mode 100644
index 00000000000..8308a1ef92d
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/build.properties
@@ -0,0 +1,7 @@
+#
+#Mon Sep 12 09:29:59 CEST 2011
+bin.includes=META-INF/,.,plugin.xml,icons/,about.html,plugin.properties,schema/
+output..=bin/
+src.includes=about.html,schema/,META-INF/,.,plugin.xml,icons/,plugin.properties
+source..=src/
+bin..=bin/
diff --git a/deprecated/org.eclipse.papyrus.navigator/icons/ModelExplorer.gif b/deprecated/org.eclipse.papyrus.navigator/icons/ModelExplorer.gif
new file mode 100644
index 00000000000..acb63823aa3
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/icons/ModelExplorer.gif
Binary files differ
diff --git a/deprecated/org.eclipse.papyrus.navigator/icons/etool16/duplicate.png b/deprecated/org.eclipse.papyrus.navigator/icons/etool16/duplicate.png
new file mode 100644
index 00000000000..195dc6d6c36
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/icons/etool16/duplicate.png
Binary files differ
diff --git a/deprecated/org.eclipse.papyrus.navigator/icons/etool16/rename.gif b/deprecated/org.eclipse.papyrus.navigator/icons/etool16/rename.gif
new file mode 100644
index 00000000000..e6f786eca9a
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/icons/etool16/rename.gif
Binary files differ
diff --git a/deprecated/org.eclipse.papyrus.navigator/icons/etool16/search.gif b/deprecated/org.eclipse.papyrus.navigator/icons/etool16/search.gif
new file mode 100644
index 00000000000..a75166978d7
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/icons/etool16/search.gif
Binary files differ
diff --git a/deprecated/org.eclipse.papyrus.navigator/plugin.properties b/deprecated/org.eclipse.papyrus.navigator/plugin.properties
new file mode 100644
index 00000000000..ff4e6c71189
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/plugin.properties
@@ -0,0 +1,14 @@
+########################################################################################
+#
+# Copyright (c) 2009 Obeo.
+# 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:
+# Obeo - initial API and implementation
+########################################################################################
+pluginName=Papyrus Navigator (Incubation)
+providerName=Eclipse Modeling Project
+
diff --git a/deprecated/org.eclipse.papyrus.navigator/plugin.xml b/deprecated/org.eclipse.papyrus.navigator/plugin.xml
new file mode 100644
index 00000000000..60715ef991d
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/plugin.xml
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<!--
+########################################################################################
+#
+# Copyright (c) 2009 Obeo.
+# 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:
+# Obeo - initial API and implementation
+########################################################################################
+-->
+<plugin>
+ <extension-point id="actionHandler" name="ActionHandler" schema="schema/org.eclipse.papyrus.navigator.actionHandler.exsd"/>
+ <extension-point id="providerAdapterFactory" name="providerAdapterFactory" schema="schema/providerAdapterFactory.exsd"/>
+ <extension
+ point="org.eclipse.ui.views">
+ <view
+ allowMultiple="false"
+ category="org.eclipse.papyrus.views.category"
+ class="org.eclipse.papyrus.navigator.ModelNavigator"
+ icon="icons/ModelExplorer.gif"
+ id="org.eclipse.papyrus.navigator.modelExplorer"
+ name="Model Explorer">
+ </view>
+ </extension>
+ <extension
+ point="org.eclipse.ui.navigator.viewer">
+ <viewer
+ viewerId="org.eclipse.papyrus.navigator.modelExplorer">
+ </viewer>
+ <viewerContentBinding
+ viewerId="org.eclipse.papyrus.navigator.modelExplorer">
+ <includes>
+ <contentExtension
+ pattern="org.eclipse.papyrus.navigator.providers.UMLContentProvider">
+ </contentExtension>
+ <contentExtension
+ pattern="org.eclipse.papyrus.navigator.filters.*">
+ </contentExtension>
+ <contentExtension
+ pattern="org.eclipse.ui.navigator.resourceContent">
+ </contentExtension>
+ <contentExtension
+ pattern="org.eclipse.ui.navigator.resources.filters.*">
+ </contentExtension>
+ </includes>
+ </viewerContentBinding>
+ <dragAssistant
+ class="org.eclipse.papyrus.navigator.dnd.CommonDragAdapterAssistant"
+ viewerId="org.eclipse.papyrus.navigator.dnd.dragAssistant">
+ </dragAssistant>
+ <viewerActionBinding
+ viewerId="org.eclipse.papyrus.navigator.modelExplorer">
+ <includes>
+ <actionExtension
+ pattern="org.eclipse.ui.navigator.resources.*">
+ </actionExtension>
+ </includes>
+ </viewerActionBinding>
+ <viewerContentBinding
+ viewerId="org.eclipse.papyrus.navigator.modelExplorer">
+ <includes>
+ <contentExtension
+ pattern="org.eclipse.ui.navigator.resourceContent">
+ </contentExtension>
+ <contentExtension
+ pattern="org.eclipse.ui.navigator.resources.filters.*">
+ </contentExtension>
+ </includes>
+ </viewerContentBinding>
+ </extension>
+ <extension
+ point="org.eclipse.ui.navigator.navigatorContent">
+ <navigatorContent
+ activeByDefault="true"
+ contentProvider="org.eclipse.papyrus.navigator.providers.UMLContentProvider"
+ id="org.eclipse.papyrus.navigator.providers.UMLContentProvider"
+ labelProvider="org.eclipse.papyrus.navigator.providers.UMLLabelProvider"
+ name="UML Logical View"
+ priority="normal">
+ <triggerPoints>
+ <or>
+ <adapt
+ type="org.eclipse.core.resources.IWorkspaceRoot">
+ </adapt>
+ <adapt
+ type="org.eclipse.emf.ecore.resource.Resource">
+ </adapt>
+ <adapt
+ type="org.eclipse.emf.ecore.EObject">
+ </adapt>
+ </or>
+ </triggerPoints>
+ <possibleChildren>
+ <or>
+ <adapt
+ type="org.eclipse.emf.ecore.EObject">
+ </adapt>
+ <adapt
+ type="org.eclipse.emf.ecore.resource.Resource">
+ </adapt>
+ <adapt
+ type="org.eclipse.papyrus.navigator.providers.PackagingNode">
+ </adapt>
+ </or>
+ </possibleChildren>
+ <actionProvider
+ class="org.eclipse.papyrus.navigator.actions.CreateChildActionProvider"
+ id="org.eclipse.papyrus.navigator.actions.CreateChildActionProvider">
+ </actionProvider>
+ <actionProvider
+ class="org.eclipse.papyrus.navigator.actions.GenericTransformActionProvider"
+ id="org.eclipse.papyrus.navigator.actions.GenericTransformActionProvider">
+ </actionProvider>
+ <actionProvider
+ class="org.eclipse.papyrus.navigator.actions.CreateDiagramActionProvider"
+ id="org.eclipse.papyrus.navigator.actions.CreateDiagramActionProvider">
+ </actionProvider>
+ <actionProvider
+ class="org.eclipse.papyrus.navigator.actions.EditingDomainActionProvider"
+ id="org.eclipse.papyrus.navigator.actions.EditingDomainActionProvider">
+ </actionProvider>
+ <actionProvider
+ class="org.eclipse.papyrus.navigator.actions.DiagramActionProvider"
+ id="org.eclipse.papyrus.navigator.actions.DiagramActionProvider">
+ <enablement>
+ <or>
+ <adapt
+ type="org.eclipse.gmf.runtime.notation.Diagram">
+ </adapt>
+ </or>
+ </enablement>
+ </actionProvider>
+ <commonSorter
+ class="org.eclipse.papyrus.navigator.sorters.UMLViewerSorter">
+ <parentExpression>
+ <or>
+ <adapt
+ type="java.lang.Object">
+ </adapt>
+ <instanceof
+ value="java.lang.Object">
+ </instanceof>
+ </or>
+ </parentExpression>
+ </commonSorter>
+ <dropAssistant
+ class="org.eclipse.papyrus.navigator.dnd.CommonDropAdapterAssistant"
+ id="org.eclipse.papyrus.navigator.dnd.dropAssistant">
+ <possibleDropTargets></possibleDropTargets>
+ </dropAssistant>
+ </navigatorContent>
+ <commonFilter
+ activeByDefault="false"
+ class="org.eclipse.papyrus.navigator.filters.HideDiagramsViewerFilter"
+ description="Hide Diagrams items in the navigator"
+ id="org.eclipse.papyrus.navigator.filters.HideDiagramsViewerFilter"
+ name="Diagrams">
+ </commonFilter>
+ <commonFilter
+ activeByDefault="true"
+ class="org.eclipse.papyrus.navigator.filters.HideProfileApplicationsViewerFilter"
+ description="Hide Profile Applications items in the navigator"
+ id="org.eclipse.papyrus.navigator.filters.HideProfileApplicationsViewerFilter"
+ name="Profile Applications">
+ </commonFilter>
+ <commonFilter
+ activeByDefault="true"
+ class="org.eclipse.papyrus.navigator.filters.HideAdditionalResourcesViewerFilter"
+ description="Hide Additional Resources items in the navigator"
+ id="org.eclipse.papyrus.navigator.filters.HideAdditionalResourcesViewerFilter"
+ name="Additional Resources">
+ </commonFilter>
+ <commonFilter
+ activeByDefault="true"
+ class="org.eclipse.papyrus.navigator.filters.HideEAnnotationsViewerFilter"
+ description="Hide EAnnotations items in the navigator"
+ id="org.eclipse.papyrus.navigator.filters.HideEAnnotationsViewerFilter"
+ name="EAnnotations">
+ </commonFilter>
+ <commonFilter
+ activeByDefault="true"
+ class="org.eclipse.papyrus.navigator.filters.DiResourceFilter"
+ description="Hides the .uml and .notation associated to a .di"
+ id="org.eclipse.papyrus.navigator.filters.DiResourceFilter"
+ name="Di Resources">
+ </commonFilter>
+ </extension>
+ <extension
+ point="org.eclipse.papyrus.navigator.actionHandler">
+ <customAction
+ actionHandler="org.eclipse.papyrus.navigator.factory.RenameActionFactory"
+ actionId="org.eclipse.papyrus.navigator.factory.renameAction"
+ needSeparator="true">
+ </customAction>
+ <customAction
+ actionHandler="org.eclipse.papyrus.navigator.factory.DefaultEMFActionsFactory"
+ actionId="org.eclipse.papyrus.navigator.factory.defaultEMFActions"
+ afterAction="org.eclipse.papyrus.navigator.factory.renameAction"
+ needSeparator="true">
+ </customAction>
+ </extension>
+ <extension
+ point="org.eclipse.ltk.core.refactoring.deleteParticipants">
+ <deleteParticipant
+ class="org.eclipse.papyrus.navigator.internal.ltk.DeleteModelParticipant"
+ id="org.eclipse.papyrus.navigator.internal.ltk.DeleteModelParticipant"
+ name="Papyrus Model Deletion">
+ <enablement>
+ <with variable="element">
+ <instanceof value="org.eclipse.core.resources.IFile"/>
+ </with>
+ </enablement>
+ </deleteParticipant>
+ </extension>
+ <extension
+ point="org.eclipse.ltk.core.refactoring.moveParticipants">
+ <moveParticipant
+ class="org.eclipse.papyrus.navigator.internal.ltk.MoveModelParticipant"
+ id="org.eclipse.papyrus.navigator.internal.ltk.MoveModelParticipant"
+ name="Papyrus Model Move">
+ <enablement>
+ <with variable="element">
+ <instanceof value="org.eclipse.core.resources.IFile"/>
+ </with>
+ </enablement>
+ </moveParticipant>
+ </extension>
+ <extension
+ point="org.eclipse.ltk.core.refactoring.renameParticipants">
+ <renameParticipant
+ class="org.eclipse.papyrus.navigator.internal.ltk.RenameModelParticipant"
+ id="org.eclipse.papyrus.navigator.internal.ltk.RenameModelParticipant"
+ name="Papyrus Model Renaming">
+ <enablement>
+ <with variable="element">
+ <instanceof value="org.eclipse.core.resources.IFile"/>
+ </with>
+ </enablement>
+ </renameParticipant>
+ </extension>
+ <extension point="org.eclipse.core.runtime.preferences">
+ <?gmfgen generated="false"?>
+ <initializer class="org.eclipse.papyrus.navigator.preferences.NavigatorPreferenceInitializer"/>
+ </extension>
+ <extension
+ point="org.eclipse.ui.preferencePages">
+ <page
+ category="org.eclipse.papyrus.infra.core.sasheditor.preferences.generalcategory"
+ class="org.eclipse.papyrus.navigator.preferences.NavigatorPreferencePage"
+ id="org.eclipse.papyrus.navigator.preferences.NavigatorPreferencePage"
+ name="Model Explorer">
+ </page>
+ </extension>
+ <extension
+ point="org.eclipse.ui.menus">
+ <menuContribution
+ allPopups="false"
+ locationURI="popup:org.eclipse.papyrus.navigator.modelExplorer">
+ <menu
+ id="org.eclipse.papyrus.views.modelexplorer.popupmenu.createchild"
+ label="Create Child ...">
+ </menu>
+ </menuContribution>
+ </extension>
+</plugin>
diff --git a/deprecated/org.eclipse.papyrus.navigator/schema/org.eclipse.papyrus.navigator.actionHandler.exsd b/deprecated/org.eclipse.papyrus.navigator/schema/org.eclipse.papyrus.navigator.actionHandler.exsd
new file mode 100644
index 00000000000..f01f090dfac
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/schema/org.eclipse.papyrus.navigator.actionHandler.exsd
@@ -0,0 +1,135 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.papyrus.navigator" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.papyrus.navigator" id="org.eclipse.papyrus.navigator.actionHandler" name="ActionHandler"/>
+ </appInfo>
+ <documentation>
+ This extension point allows adding action in the contextual menu of the model explorer
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appInfo>
+ <meta.element />
+ </appInfo>
+ </annotation>
+ <complexType>
+ <sequence minOccurs="0" maxOccurs="unbounded">
+ <element ref="customAction"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="customAction">
+ <complexType>
+ <attribute name="actionId" type="string" use="required">
+ <annotation>
+ <documentation>
+ registered action identifier
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="actionHandler" type="string" use="required">
+ <annotation>
+ <documentation>
+ implement the action handler factory to add your custom actions
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.papyrus.navigator.factory.IActionHandlerFactory"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ <attribute name="afterAction" type="string">
+ <annotation>
+ <documentation>
+ fill the action id after you want to insert yours
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="needSeparator" type="boolean" use="default" value="false">
+ <annotation>
+ <documentation>
+ Add a separator before your action(s) if needed
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ org.eclipse.papyrus.navigator.factory.DefaultEMFActionsFactory adds default EMF actions in model explorer.
+See registered extension org.eclipse.papyrus.navigator.actionHandler
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiinfo"/>
+ </appInfo>
+ <documentation>
+ The class must implement interface org.eclipse.papyrus.navigator.factory.IActionHandlerFactory
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ none
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+ 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
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/deprecated/org.eclipse.papyrus.navigator/schema/providerAdapterFactory.exsd b/deprecated/org.eclipse.papyrus.navigator/schema/providerAdapterFactory.exsd
new file mode 100644
index 00000000000..f16405105b2
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/schema/providerAdapterFactory.exsd
@@ -0,0 +1,79 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.papyrus.navigator" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.papyrus.navigator" id="providerAdapterFactory" name="providerAdapterFactory"/>
+ </appInfo>
+ <documentation>
+ This extension provides factories to the navigator which will be used to display informations like labels and images of the EObjects displayed in this navigator.
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appInfo>
+ <meta.element />
+ </appInfo>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="providerAdapterFactory" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="providerAdapterFactory">
+ <complexType>
+ <attribute name="adapterFactoryClass" type="string">
+ <annotation>
+ <documentation>
+ An adapter factory
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.emf.common.notify.AdapterFactory"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ UMLComposedAdapterFactory adds a composed factory for UML which used UMLResourceItemProviderAdapterFactory and UMLItemProviderAdapterFactory (from the uml2 plugin) to retrieved labels or images from the UML elements.
+ </documentation>
+ </annotation>
+
+
+
+
+</schema>
+
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/ModelNavigator.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/ModelNavigator.java
new file mode 100644
index 00000000000..8dfb4130cc7
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/ModelNavigator.java
@@ -0,0 +1,592 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+
+ * 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:
+ * Obeo - initial API and implementation
+ * Francisco Javier Cano Muñoz (Prodevelop) - bugs solving, features implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator;
+
+import static org.eclipse.papyrus.navigator.internal.Activator.log;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.emf.transaction.ResourceSetChangeEvent;
+import org.eclipse.emf.transaction.ResourceSetListener;
+import org.eclipse.emf.transaction.ResourceSetListenerImpl;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor;
+import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramGraphicalViewer;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.papyrus.navigator.actions.GroupChildrenAction;
+import org.eclipse.papyrus.navigator.actions.RemoveTypePrefixAction;
+import org.eclipse.papyrus.navigator.actions.SearchElementAction;
+import org.eclipse.papyrus.navigator.internal.Activator;
+import org.eclipse.papyrus.navigator.internal.utils.NavigatorUtils;
+import org.eclipse.papyrus.navigator.internal.utils.StereotypeApplicationUtils;
+import org.eclipse.papyrus.navigator.providers.IContentProvider;
+import org.eclipse.papyrus.navigator.providers.ToEditorSaveable;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.Saveable;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.ICommonActionConstants;
+import org.eclipse.ui.navigator.INavigatorContentExtension;
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+
+/**
+ * This class define a view used to navigate in UML model and resource
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ */
+public class ModelNavigator extends CommonNavigator implements IEditingDomainProvider {
+
+ /** ID Of the Navigator. */
+ public static final String ID_MODELNAVIGATOR = "org.eclipse.papyrus.navigator.modelExplorer";
+
+ // //
+ // fjcano #291192 :: type prefix in model explorer
+ // //
+ public static final String PROPERTY_REMOVEPREFIX = "org.eclipse.papyrus.navigator.view.removeTypePrefix";
+
+ public static final int IS_REMOVEPREFIXTYPE_ENABLED_PROPERTY = 16774;
+
+ // //
+ // fjcano #290422 :: grouping children by type
+ // //
+ public static final String PROPERTY_GROUPCHILDS = "org.eclipse.papyrus.navigator.view.groupchilds";
+
+ public static final int IS_GROUPINGCHILDS_ENABLED_PROPERTY = 987;
+
+ // //
+ // fjcano #288599# :: enable linking by default in the model explorer
+ // //
+ private final String LINKING_ENABLED = "CommonNavigator.LINKING_ENABLED"; //$NON-NLS-1$
+
+ private boolean isRemovePrefixTypeEnabled = false;
+
+ private IWorkbenchPage page = null;
+
+ private boolean isGroupingChildsEnabled = false;
+
+ // optimize selection handling
+ private boolean handlingSelectionChanged = false;
+
+ /** {@link TransactionalEditingDomain} used to perform actions and commands. */
+ private TransactionalEditingDomain editingDomain = null;
+
+ /** Active {@link IEditorPart}. */
+ private IEditorPart editorPart = null;
+
+ /**
+ * The {@link IPropertySheetPage} this model exploer will use.
+ */
+ private IPropertySheetPage propertySheetPage = null;
+
+ /**
+ * {@link ResourceSetListener} to listen and react to changes in the resource set.
+ */
+ private final ResourceSetListener resourceSetListener = new ResourceSetListenerImpl() {
+
+ @Override
+ public void resourceSetChanged(ResourceSetChangeEvent event) {
+ super.resourceSetChanged(event);
+ handleResourceSetChanged(event);
+ }
+ };
+
+ // //
+ // fjcano #290424 :: allow saving from the Model Explorer
+ // //
+ private final ToEditorSaveable toEditorSaveable = new ToEditorSaveable(null, this);
+
+ private final Saveable[] toEditorSaveableArray = new Saveable[]{ toEditorSaveable };
+
+ /**
+ * Make the synchronization between the editor and the model explorer active by default.
+ */
+ @Override
+ public void init(IViewSite aSite, IMemento aMemento) throws PartInitException {
+ super.init(aSite, aMemento);
+ // fjcano #288599# :: linking enabled by default
+ if(memento != null) {
+ Integer linkingEnabledInteger = memento.getInteger(LINKING_ENABLED);
+ setLinkingEnabled(((linkingEnabledInteger != null) ? linkingEnabledInteger.intValue() == 1 : true));
+ } else {
+ // fjcano :: linking is enabled by default.
+ setLinkingEnabled(true);
+ }
+ }
+
+ private ToEditorSaveable getToEditorSaveable() {
+ // fjcano #290424 :: allow saving from the Model Explorer
+ return toEditorSaveable;
+ }
+
+ /**
+ * Due to the NavigatorSaveablesService not updating correctly the Saveables available via the
+ * ContentProviders, a new and direct way of getting the Saveables is implemented here.
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ */
+ @Override
+ public Saveable[] getSaveables() {
+ // fjcano #290424 :: allow saving from the Model Explorer
+ // return a Saveable that targets the doSave action to the Active
+ // Editor.
+ return toEditorSaveableArray;
+ }
+
+ /**
+ * Due to the NavigatorSaveablesService not updating correctly the Saveables available via the
+ * ContentProviders, a new and direct way of getting the Saveables is implemented here.
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ */
+ @Override
+ public Saveable[] getActiveSaveables() {
+ // fjcano #290424 :: allow saving from the Model Explorer
+ // return a Saveable that targets the doSave action to the Active
+ // Editor.
+ return toEditorSaveableArray;
+ }
+
+ /**
+ * Method to perform all necessary updates.
+ */
+ private void doUpdate() {
+ // fjcano #290424 :: allow saving from the Model Explorer
+ if(getToEditorSaveable() != null) {
+ getToEditorSaveable().setEditor(editorPart);
+ }
+ }
+
+ /**
+ * Sets the grouping of children by type. Fires a property change that makes the model explorer
+ * to refresh.
+ *
+ * @param toGroupChilds
+ */
+ public final void setGroupChildsEnabled(boolean toGroupChilds) {
+ // fjcano :: #290422
+ isGroupingChildsEnabled = toGroupChilds;
+ firePropertyChange(IS_GROUPINGCHILDS_ENABLED_PROPERTY);
+ ISelection sel = this.getCommonViewer().getSelection();
+ if(sel instanceof ITreeSelection && ((ITreeSelection)sel).getFirstElement() != null) {
+ IStructuredSelection s = new StructuredSelection(((ITreeSelection)sel).getFirstElement());
+ this.getCommonViewer().setSelection(s, true);
+ }
+ this.refreshViewer();
+ }
+
+ /**
+ * Retrieves the value of the grouping children flag.
+ *
+ * @return
+ */
+ public boolean isGroupingChildsEnabled() {
+ // fjcano :: #290422
+ return this.isGroupingChildsEnabled;
+ }
+
+ /**
+ * Retrieves the grouping of children action.
+ *
+ * @return
+ */
+ private IAction getGroupChildrenAction() {
+ // fjcano :: #290422
+ IAction groupChildsAction = new GroupChildrenAction(this);
+ ImageDescriptor folderIcon = PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJ_FOLDER);
+ groupChildsAction.setImageDescriptor(folderIcon);
+ groupChildsAction.setHoverImageDescriptor(folderIcon);
+ return groupChildsAction;
+ }
+
+ /**
+ * Set the isRemovePrefixTypeEnabled to the given value and fire a property change event.
+ *
+ * @param isRemovePrefixTypeEnabled
+ */
+ public void setRemovePrefixTypeEnabled(boolean isRemovePrefixTypeEnabled) {
+ // fjcano #291192
+ this.isRemovePrefixTypeEnabled = isRemovePrefixTypeEnabled;
+ firePropertyChange(IS_REMOVEPREFIXTYPE_ENABLED_PROPERTY);
+ refreshViewer();
+ }
+
+ /**
+ * Gets whether the removal of prefix types is enabled or not.
+ *
+ * @return
+ */
+ public boolean isRemovePrefixTypeEnabled() {
+ // fjcano #291192
+ return isRemovePrefixTypeEnabled;
+ }
+
+ private IAction getRemoveTypesPrefixAction() {
+ // fjcano #291192
+ IAction removeTypesPrefixAction = new RemoveTypePrefixAction(this);
+ ImageDescriptor clearIcon = PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ELCL_REMOVE);
+ removeTypesPrefixAction.setImageDescriptor(clearIcon);
+ removeTypesPrefixAction.setHoverImageDescriptor(clearIcon);
+ return removeTypesPrefixAction;
+ }
+
+ private IAction getSearchAction() {
+ // fjcano #290425 :: add search element action to model navigator
+ IAction searchAction = new SearchElementAction(this);
+ ImageDescriptor magnifyingGlassIcon = Activator.getImageDescriptor("icons/etool16/search.gif");
+ searchAction.setImageDescriptor(magnifyingGlassIcon);
+ searchAction.setHoverImageDescriptor(magnifyingGlassIcon);
+ return searchAction;
+ }
+
+ /**
+ * Add the "Group children" action.
+ */
+ @Override
+ public void createPartControl(Composite aParent) {
+ super.createPartControl(aParent);
+ // fjcano #290422 :: add "Group children" action
+ getViewSite().getActionBars().getToolBarManager().add(getGroupChildrenAction());
+ // fjcano #291192
+ getViewSite().getActionBars().getToolBarManager().add(getRemoveTypesPrefixAction());
+ // fjcano #290425 :: add search action to model navigator
+ getViewSite().getActionBars().getToolBarManager().add(getSearchAction());
+ }
+
+ private void handleResourceSetChanged(ResourceSetChangeEvent event) {
+ // Notify all content providers
+ List<Notification> notifications = event.getNotifications();
+ int i = 0;
+ boolean finish = false;
+ while(!finish && i < notifications.size()) {
+ Object n = notifications.get(i);
+ if(n instanceof Notification) {
+ Notification notification = (Notification)n;
+ Iterator<?> it = getNavigatorContentService().findRootContentExtensions(notification.getNotifier()).iterator();
+ while(it.hasNext()) {
+ Object obj = it.next();
+ finish = true;
+ if(obj instanceof INavigatorContentExtension) {
+ INavigatorContentExtension nce = (INavigatorContentExtension)obj;
+ if(nce.getContentProvider() instanceof IContentProvider) {
+ IContentProvider provider = (IContentProvider)nce.getContentProvider();
+ provider.resourceSetChanged(event);
+ }
+ }
+ }
+ }
+ i++;
+ }
+ }
+
+ /**
+ * A new {@link IWorkbenchPart} has been activated, refresh.
+ *
+ * @param partRef
+ */
+ private void handlePartActivated(IWorkbenchPartReference partRef) {
+ IWorkbenchPart part = partRef.getPart(false);
+ if(part instanceof IEditorPart) {
+ activate();
+ }
+ }
+
+ /**
+ * An {@link IWorkbenchPart} has been deactivated, refresh.
+ *
+ * @param partRef
+ */
+ private void handlePartDeactivated(IWorkbenchPartReference partRef) {
+ IWorkbenchPart part = partRef.getPart(false);
+ if(editorPart != null && editorPart.equals(part)) {
+ deactivate();
+ }
+ }
+
+ /**
+ * Activate the Model Explorer.
+ */
+ private void activate() {
+ this.editorPart = EditorUtils.getMultiDiagramEditor();
+ this.editingDomain = EditorUtils.getTransactionalEditingDomain();
+ if(editingDomain != null) {
+ editingDomain.addResourceSetListener(resourceSetListener);
+ }
+ refreshViewer();
+ // fjcano #290424 :: allow saving from the Model Explorer
+ doUpdate();
+ }
+
+ /**
+ * Deactivate the Model Explorer.
+ */
+ private void deactivate() {
+ editorPart = null;
+ if(editingDomain != null) {
+ editingDomain.removeResourceSetListener(resourceSetListener);
+ }
+ // if (propertySheet != null) {
+ // propertySheet.dispose();
+ // }
+ refreshViewer();
+ // fjcano #290424 :: allow saving from the Model Explorer
+ doUpdate();
+ }
+
+ /**
+ * Adapts to {@link IPropertySheetPage}. Other adaptations are handled by superclasses.
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public Object getAdapter(Class adapter) {
+ if(IPropertySheetPage.class.equals(adapter)) {
+ return getPropertySheetPage();
+ }
+ return super.getAdapter(adapter);
+ }
+
+ /**
+ * Forces the viewer to be refreshed.
+ */
+ private void refreshViewer() {
+ CommonViewer viewer = getCommonViewer();
+ if(viewer != null && viewer.getTree().isDisposed() == false) {
+ viewer.refresh();
+ }
+ }
+
+ /**
+ * Adds an {@link IPartListener2} and an {@link ISelectionListener}.
+ */
+ @Override
+ public void init(IViewSite site) throws PartInitException {
+ super.init(site);
+ page = site.getPage();
+ // IPartListener to listen to IWorkbenchParts' life cycle.
+ page.addPartListener(new IPartListener2() {
+
+ public void partActivated(IWorkbenchPartReference partRef) {
+ handlePartActivated(partRef);
+ }
+
+ public void partBroughtToTop(IWorkbenchPartReference partRef) {
+ }
+
+ public void partClosed(IWorkbenchPartReference partRef) {
+ handlePartDeactivated(partRef);
+ }
+
+ public void partDeactivated(IWorkbenchPartReference partRef) {
+ }
+
+ public void partHidden(IWorkbenchPartReference partRef) {
+ }
+
+ public void partInputChanged(IWorkbenchPartReference partRef) {
+ handlePartActivated(partRef);
+ }
+
+ public void partOpened(IWorkbenchPartReference partRef) {
+ handlePartActivated(partRef);
+ }
+
+ public void partVisible(IWorkbenchPartReference partRef) {
+ handlePartActivated(partRef);
+ }
+
+ });
+ // an ISelectionListener to react to workbench selection changes.
+ page.addSelectionListener(new ISelectionListener() {
+
+ public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+ handleSelectionChangedFromDiagramEditor(part, selection);
+ }
+ });
+ activate();
+ }
+
+ /**
+ * Retrieves the {@link IPropertySheetPage} that his Model Explorer uses.
+ *
+ * @return
+ */
+ private IPropertySheetPage getPropertySheetPage() {
+ final IMultiDiagramEditor multiDiagramEditor = EditorUtils.getMultiDiagramEditor();
+ if(multiDiagramEditor != null) {
+ if(propertySheetPage == null) {
+ // An 'EEF' properties view
+ if(multiDiagramEditor instanceof ITabbedPropertySheetPageContributor) {
+ ITabbedPropertySheetPageContributor contributor = (ITabbedPropertySheetPageContributor)multiDiagramEditor;
+ this.propertySheetPage = new TabbedPropertySheetPage(contributor);
+ }
+ }
+ return propertySheetPage;
+ }
+ return null;
+ }
+
+ /**
+ * Adds an {@link ISelectionChangedListener} to this Model Explorer's viewer to react to
+ * selection changes in the Model Explorer.
+ */
+ @Override
+ protected CommonViewer createCommonViewer(Composite parent) {
+ CommonViewer commonViewer = super.createCommonViewer(parent);
+ commonViewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+
+ public void selectionChanged(SelectionChangedEvent event) {
+ handleSelectionChangedFromCommonViewer(event);
+ }
+ });
+ return commonViewer;
+ }
+
+ /**
+ * Handle a selection change in the editor.
+ *
+ * @param part
+ * @param selection
+ */
+ private void handleSelectionChangedFromDiagramEditor(IWorkbenchPart part, ISelection selection) {
+ // Handle selection from diagram editor
+ if(isLinkingEnabled() && !handlingSelectionChanged) {
+ this.handlingSelectionChanged = true;
+ if(part instanceof IEditorPart) {
+ ISelection unwrappedSelection = NavigatorUtils.unwrapSelection(selection);
+ if(!unwrappedSelection.isEmpty() && unwrappedSelection instanceof StructuredSelection) {
+ // forward the selection to the stereotyped element if needed
+ EObject firstElement = (EObject)((StructuredSelection)unwrappedSelection).getFirstElement();
+ if(firstElement != null && firstElement.eContainer() == null) {
+ unwrappedSelection = StereotypeApplicationUtils.unwrapStereotypedSelection(unwrappedSelection);
+ }
+ getCommonViewer().setSelection(unwrappedSelection, true);
+ }
+ }
+ this.handlingSelectionChanged = false;
+ }
+ }
+
+ /**
+ * Handle a selection change in the Model Explorer's viewer.
+ *
+ * @param event
+ */
+ private void handleSelectionChangedFromCommonViewer(SelectionChangedEvent event) {
+ // Handle selection from common viewer
+ if(isLinkingEnabled() && !handlingSelectionChanged) {
+ this.handlingSelectionChanged = true;
+ DiagramEditor editor = EditorUtils.lookupActiveDiagramEditor();
+ if(editor != null) {
+ // set editor selection and select the EditParts
+ IDiagramGraphicalViewer diagramGraphicalViewer = editor.getDiagramGraphicalViewer();
+ List<?> editPartsToSelect = NavigatorUtils.getEditPartsFromSelection(event.getSelection(), diagramGraphicalViewer);
+ if(editPartsToSelect.isEmpty()) {
+ // forward the selection to the stereotype application
+ editPartsToSelect = NavigatorUtils.getEditPartsFromSelection(StereotypeApplicationUtils.getStereotypedSelectionFromCommonViewer(event.getSelection()), diagramGraphicalViewer);
+ }
+ StructuredSelection selectedEditParts = new StructuredSelection(editPartsToSelect);
+ diagramGraphicalViewer.setSelection(selectedEditParts);
+ if(!selectedEditParts.isEmpty()) {
+ EditPart editPart = (EditPart)selectedEditParts.getFirstElement();
+ diagramGraphicalViewer.reveal(editPart);
+ }
+ }
+ this.handlingSelectionChanged = false;
+ }
+ }
+
+ /**
+ * Handle a double click on an element in the Model Explorer
+ */
+ @Override
+ protected void handleDoubleClick(DoubleClickEvent anEvent) {
+ if(log.isDebugEnabled()) {
+ log.debug("Model Navigator got a double click");
+ }
+ IAction openHandler = getViewSite().getActionBars().getGlobalActionHandler(ICommonActionConstants.OPEN);
+ if(openHandler != null) {
+ openHandler.run();
+ } else {
+ IStructuredSelection selection = (IStructuredSelection)anEvent.getSelection();
+ Object element = selection.getFirstElement();
+ if(element instanceof Diagram) {
+ // fjcano #287943 :: handle a double click on a papyrus Diagram
+ handleDoubleClickOnDiagram((Diagram)element);
+ } else if(element instanceof org.eclipse.gmf.runtime.notation.Diagram) {
+ // fjcano #287943 :: handle a double click on a gmf Diagram
+ handleDoubleClickOnDiagram((org.eclipse.gmf.runtime.notation.Diagram)element);
+ } else if(element instanceof EObject) {
+ // Open SWT EEF Properties UI
+ NavigatorUtils.openPropertySheetsView();
+ } else {
+ super.handleDoubleClick(anEvent);
+ }
+ }
+ }
+
+ /**
+ * Handle double click on a GMF Diagram.
+ *
+ * @param diagram
+ */
+ private void handleDoubleClickOnDiagram(Diagram diagram) {
+ // fjcano #287943 :: handle double click on a gmf diagram
+ if(log.isDebugEnabled()) {
+ log.debug("#ModelNavigator-> handleDoubleClickOnDiagram : " + diagram);
+ }
+ if(!EditorUtils.getIPageMngr().isOpen(diagram)) {
+ // open the diagram if not already open
+ EditorUtils.getIPageMngr().openPage(diagram);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @return the EditingDomain used by the properties view
+ */
+ public EditingDomain getEditingDomain() {
+ return editingDomain;
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/AbstractCommonActionProvider.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/AbstractCommonActionProvider.java
new file mode 100644
index 00000000000..9f9023df310
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/AbstractCommonActionProvider.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana, Obeo . 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:
+ * Francisco Javier Cano Muñoz (Prodevelop) – Initial API implementation.
+ * Obeo
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.papyrus.navigator.internal.utils.NavigatorUtils;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * Specialization of <CommonActionProvider> to be used as Papyrus action provider.
+ *
+ * @author fjcano
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public abstract class AbstractCommonActionProvider extends CommonActionProvider {
+
+ /**
+ * Gets the ID of the <CommonViewer> this <MOSKittCommonActionProvider> is associated to.
+ *
+ * @return the viewer id
+ */
+ // @unused
+ protected String getViewerID() {
+ return getActionSite().getViewSite().getId();
+ }
+
+ /**
+ * Gets the <MOSKittCommonNavigator> this <MOSKittCommonActionProvider> is associated with, via
+ * the viewerID.
+ *
+ * @return the common navigator
+ */
+ protected CommonNavigator getCommonNavigator() {
+ IViewPart part = NavigatorUtils.findViewPart(getViewerID());
+ if(part instanceof CommonNavigator) {
+ return ((CommonNavigator)part);
+ }
+ return null;
+ }
+
+ /**
+ * Gets the current context's selection.
+ *
+ * @return the selection
+ */
+ // @unused
+ protected ISelection getSelection() {
+ ActionContext context = getContext();
+ return (context != null) ? context.getSelection() : null;
+ }
+
+ /**
+ * Gets the first element of the current context's selection.
+ *
+ * @return the first selected element
+ */
+ protected Object getFirstSelectedElement() {
+ ISelection selection = getSelection();
+ if(selection instanceof StructuredSelection) {
+ return ((StructuredSelection)selection).getFirstElement();
+ }
+ return null;
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/AbstractSubmenuActionProvider.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/AbstractSubmenuActionProvider.java
new file mode 100644
index 00000000000..60e357744dc
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/AbstractSubmenuActionProvider.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana, Obeo. 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:
+ * Francisco Javier Cano Muñoz (Prodevelop) – Initial API implementation.
+ * Obeo
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.MenuManager;
+
+/**
+ * Specialization of <AbstractCommonActionProvider> to be used in menu and submenu contributions.
+ *
+ * @author fjcano
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public abstract class AbstractSubmenuActionProvider extends AbstractCommonActionProvider {
+
+ /**
+ * Organizes the given <Collection> of <IActions>.
+ *
+ * @param createActions
+ * <Collection> of <IActions> to organize
+ * @param token
+ * <String> that the <StringTokenizer> will use to trim each <IAction>'s text.
+ *
+ * @return a <Map> associating <String>s to <Collection>s of <IAction>s.
+ */
+ protected Map<String, Collection<IAction>> extractSubmenuActions(Collection<IAction> createActions, String token) {
+ Map<String, Collection<IAction>> createSubmenuActions = new LinkedHashMap<String, Collection<IAction>>();
+ if(createActions != null) {
+ for(Iterator<IAction> actions = createActions.iterator(); actions.hasNext();) {
+ IAction action = actions.next();
+ StringTokenizer st = new StringTokenizer(action.getText(), token);
+ if(st.countTokens() == 2) {
+ String text = st.nextToken().trim();
+ Collection<IAction> submenuActions = createSubmenuActions.get(text);
+ if(submenuActions == null) {
+ createSubmenuActions.put(text, submenuActions = new ArrayList<IAction>());
+ }
+ action.setText(st.nextToken().trim());
+ submenuActions.add(action);
+ actions.remove();
+ }
+ }
+ }
+ return createSubmenuActions;
+ }
+
+ /**
+ * Fills a <IContributionManager> with the given <Collection> of <IActions>.
+ *
+ * @param manager
+ * the manager
+ * @param actions
+ * the actions
+ * @param contributionID
+ * the contribution id
+ */
+ protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+ if(actions != null) {
+ for(IAction action : actions) {
+ if(contributionID != null) {
+ manager.insertBefore(contributionID, action);
+ } else {
+ manager.add(action);
+ }
+ }
+ }
+ }
+
+ /**
+ * Fills a <IContributionManager> with two levels of menus, as specified by the <Map> of
+ * <String>s to <Collection>s of <IAction>s.
+ *
+ * @param manager
+ * the manager
+ * @param submenuActions
+ * the submenu actions
+ * @param contributionID
+ * the contribution id
+ */
+ protected void populateManager(IContributionManager manager, Map<String, Collection<IAction>> submenuActions, String contributionID) {
+ if(submenuActions != null) {
+ for(Map.Entry<String, Collection<IAction>> entry : submenuActions.entrySet()) {
+ MenuManager submenuManager = new MenuManager(entry.getKey());
+ if(contributionID != null) {
+ manager.insertBefore(contributionID, submenuManager);
+ } else {
+ manager.add(submenuManager);
+ }
+ populateManager(submenuManager, entry.getValue(), null);
+ }
+ }
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CloseAllDiagramsAction.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CloseAllDiagramsAction.java
new file mode 100644
index 00000000000..631c89e6dd5
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CloseAllDiagramsAction.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) - Initial implementation
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Action used to close all open diagrams.
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ * @see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=287948">Bug #287948</a>
+ */
+public class CloseAllDiagramsAction extends Action {
+
+ IPageMngr pageMngr;
+
+ protected IPageMngr getPageMngr() {
+ return pageMngr;
+ }
+
+ public CloseAllDiagramsAction(IPageMngr pageMngr) {
+ if(pageMngr == null) {
+ throw new IllegalArgumentException("An IPageMngr must be specified");
+ }
+ this.pageMngr = pageMngr;
+ ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages();
+ setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_CUT));
+ setText("Close all diagrams");
+ // this action is enabled when there is at least one diagram open.
+ boolean aDiagramIsOpen = false;
+ for(Object identifier : pageMngr.allPages()) {
+ if(pageMngr.isOpen(identifier)) {
+ aDiagramIsOpen = true;
+ }
+ }
+ setEnabled(aDiagramIsOpen);
+ }
+
+ /**
+ * Delete the given diagram
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ // close all open diagrams
+ for(Object identifier : pageMngr.allPages()) {
+ if(getPageMngr().isOpen(identifier)) {
+ getPageMngr().closePage(identifier);
+ }
+ }
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CloseDiagramAction.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CloseDiagramAction.java
new file mode 100644
index 00000000000..f20cc69466d
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CloseDiagramAction.java
@@ -0,0 +1,44 @@
+/**
+ *
+ */
+
+package org.eclipse.papyrus.navigator.actions;
+
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.action.Action;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Action used to open the given diagram
+ *
+ * @author cedric dumoulin
+ */
+public class CloseDiagramAction extends Action {
+
+ Diagram diagram;
+
+ IPageMngr pageMngr;
+
+ public CloseDiagramAction(IPageMngr pageMngr, Diagram diagram) {
+ this.diagram = diagram;
+ this.pageMngr = pageMngr;
+
+ ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages();
+ setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_CUT));
+ setText("Close");
+ setEnabled(pageMngr.isOpen(diagram));
+ }
+
+ /**
+ * Delete the given diagram
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+
+ pageMngr.closePage(diagram);
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CreateChildActionProvider.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CreateChildActionProvider.java
new file mode 100644
index 00000000000..ab372d69e51
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CreateChildActionProvider.java
@@ -0,0 +1,125 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.edit.command.CommandParameter;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+
+/**
+ * The Class CreateChildActions.
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class CreateChildActionProvider extends AbstractSubmenuActionProvider {
+
+ protected Collection<IAction> createChildActions;
+
+ protected Map<String, Collection<IAction>> createChildSubmenuActions;
+
+ // @unused
+ protected IMenuManager createChildMenuManager;
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void init(ICommonActionExtensionSite site) {
+ super.init(site);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void fillContextMenu(IMenuManager menu) {
+ super.fillContextMenu(menu);
+ ISelection selection = getContext().getSelection();
+ Collection<?> newChildDescriptors = null;
+ Object selectedElement = null;
+ if(selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+ selectedElement = ((IStructuredSelection)selection).getFirstElement();
+
+ TransactionalEditingDomain domain = EditorUtils.getTransactionalEditingDomain();
+ if(domain == null) {
+ return;
+ }
+ newChildDescriptors = domain.getNewChildDescriptors(selectedElement, null);
+ }
+
+ createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+ createChildSubmenuActions = extractSubmenuActions(createChildActions, "|");
+ MenuManager submenuManager = new MenuManager("New Child");
+ populateManager(submenuManager, createChildSubmenuActions, null);
+ populateManager(submenuManager, createChildActions, null);
+ menu.add(submenuManager);
+ }
+
+ /**
+ * Generate create child actions.
+ *
+ * @param descriptors
+ * the descriptors
+ * @param selection
+ * the selection
+ *
+ * @return the collection< i action>
+ */
+ protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+ List<IAction> createChildActions = (List<IAction>)generateCreateChildActionsGen(descriptors, selection);
+
+ Collections.<IAction> sort(createChildActions, new Comparator<IAction>() {
+
+ public int compare(IAction a1, IAction a2) {
+ return a1.getText().compareTo(a2.getText());
+ }
+ });
+
+ return createChildActions;
+ }
+
+ /**
+ * Generate create child actions gen.
+ *
+ * @param descriptors
+ * the descriptors
+ * @param selection
+ * the selection
+ *
+ * @return the collection< i action>
+ */
+ protected Collection<IAction> generateCreateChildActionsGen(Collection<?> descriptors, ISelection selection) {
+ Collection<IAction> actions = new ArrayList<IAction>();
+ if(descriptors != null) {
+ for(Object descriptor : descriptors) {
+ if(descriptor instanceof CommandParameter) {
+ actions.add(new CreateChildAction(EditorUtils.getTransactionalEditingDomain(), selection, descriptor));
+ }
+ }
+ }
+ return actions;
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CreateDiagramAction.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CreateDiagramAction.java
new file mode 100644
index 00000000000..5aa59176931
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CreateDiagramAction.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import static org.eclipse.papyrus.navigator.internal.Activator.log;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.action.Action;
+import org.eclipse.papyrus.infra.core.extension.NotFoundException;
+import org.eclipse.papyrus.infra.core.extension.commands.CreationCommandDescriptor;
+import org.eclipse.papyrus.infra.core.extension.commands.CreationCommandRegistry;
+import org.eclipse.papyrus.infra.core.extension.commands.ICreationCommand;
+import org.eclipse.papyrus.infra.core.extension.commands.ICreationCommandRegistry;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+
+/**
+ * Action used to create a new diagram for given type
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class CreateDiagramAction extends Action {
+
+ private final EObject container;
+
+ private final CreationCommandDescriptor commandDescriptor;
+
+ /**
+ * Constructor
+ *
+ * @param selectedObject
+ * the selected Element on which the diagram is to be associated
+ */
+ public CreateDiagramAction(EObject selectedElement, CreationCommandDescriptor commandDescriptor) {
+ this.container = selectedElement;
+ this.commandDescriptor = commandDescriptor;
+ setText(commandDescriptor.getLabel());
+ setImageDescriptor(commandDescriptor.getIcon());
+ }
+
+ /**
+ * @see org.eclipse.jface.action.Action#isEnabled()
+ */
+ @Override
+ public boolean isEnabled() {
+ return container != null;
+ }
+
+ /**
+ * This methods creates a new Diagram to be associated with the given domain element
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+
+ // Start LOG
+ if(log.isDebugEnabled()) {
+ log.debug("Start - CreateDiagramAction#run"); //$NON-NLS-1$
+ }
+
+ try {
+ ICreationCommand creationCommand = getCreationCommandRegistry().getCommand(commandDescriptor.getCommandId());
+ creationCommand.createDiagram(EditorUtils.getDiResourceSet(), container, null);
+ } catch (NotFoundException e) {
+ log.error(e);
+ }
+
+ // END LOG
+ if(log.isDebugEnabled()) {
+ log.debug("End - CreateDiagramAction#run"); //$NON-NLS-1$
+ }
+ }
+
+ private ICreationCommandRegistry getCreationCommandRegistry() {
+ return CreationCommandRegistry.getInstance(org.eclipse.papyrus.infra.core.Activator.PLUGIN_ID);
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CreateDiagramActionProvider.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CreateDiagramActionProvider.java
new file mode 100644
index 00000000000..72d30be62f9
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/CreateDiagramActionProvider.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ * Tristan Faure (Atos Origin) tristan.faure@atosorigin.com - add condition to the create command (task #296902)
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.papyrus.infra.core.extension.commands.CreationCommandDescriptor;
+import org.eclipse.papyrus.infra.core.extension.commands.CreationCommandRegistry;
+import org.eclipse.papyrus.infra.core.extension.commands.ICreationCommandRegistry;
+
+/**
+ * Provider used to create a new diagram actions
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class CreateDiagramActionProvider extends AbstractSubmenuActionProvider {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void fillContextMenu(IMenuManager menu) {
+ Object selectedElement = getFirstSelectedElement();
+ if(selectedElement instanceof EObject) {
+ EObject eObject = (EObject)selectedElement;
+ MenuManager newDiagramMenu = new MenuManager("New Diagram");
+ menu.add(newDiagramMenu);
+ for(CreationCommandDescriptor desc : getCreationCommandRegistry().getCommandDescriptors()) {
+ if(desc.getCondition() == null || desc.getCondition().create(eObject)) {
+ CreateDiagramAction createDiagramAction = new CreateDiagramAction(eObject, desc);
+ newDiagramMenu.add(createDiagramAction);
+ }
+ }
+ }
+ }
+
+ private ICreationCommandRegistry getCreationCommandRegistry() {
+ return CreationCommandRegistry.getInstance(org.eclipse.papyrus.infra.core.Activator.PLUGIN_ID);
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/DeleteDiagramAction.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/DeleteDiagramAction.java
new file mode 100644
index 00000000000..78527c5b4bc
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/DeleteDiagramAction.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.command.RemoveCommand;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.action.Action;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Action used to delete the given diagram
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ * @author cedric dumoulin
+ */
+public class DeleteDiagramAction extends Action {
+
+ Diagram diagram;
+
+ IPageMngr pageMngr;
+
+ public DeleteDiagramAction(IPageMngr pageMngr, Diagram diagram) {
+ this.diagram = diagram;
+ this.pageMngr = pageMngr;
+
+ ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages();
+ setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
+ setText("Delete");
+ setEnabled(true);
+ }
+
+ /**
+ * Delete the given diagram
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ TransactionalEditingDomain editingDomain = EditorUtils.getTransactionalEditingDomain();
+ if(editingDomain != null) {
+
+ // Create a compound command containing removing of the sash and removing from GMF
+ // resource.
+ CompoundCommand command = new CompoundCommand();
+ Command sashRemoveComd = new RecordingCommand(editingDomain) {
+
+ @Override
+ protected void doExecute() {
+ pageMngr.removePage(diagram);
+ }
+ };
+
+ EList<EObject> diagrams = diagram.eResource().getContents();
+ // TODO : synchronize with Cedric
+ command.append(sashRemoveComd);
+ command.append(new RemoveCommand(editingDomain, diagrams, diagram));
+ editingDomain.getCommandStack().execute(command);
+ }
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/DiagramActionProvider.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/DiagramActionProvider.java
new file mode 100644
index 00000000000..684c834cc04
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/DiagramActionProvider.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+
+/**
+ * Provider used to create actions applicable on diagrams
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class DiagramActionProvider extends AbstractSubmenuActionProvider {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void fillContextMenu(IMenuManager menu) {
+ Object selectedElement = getFirstSelectedElement();
+
+ if(selectedElement instanceof Diagram) {
+ Diagram diagram = (Diagram)selectedElement;
+ // Get the Editor IPageMngr. It should be Transactional.
+ IPageMngr pageMngr = EditorUtils.getIPageMngr();
+
+ // Create Rename Diagram action
+ RenameDiagramAction renameDiagramAction = new RenameDiagramAction(diagram);
+ menu.add(renameDiagramAction);
+
+ // Create Delete Diagram action
+ OpenDiagramAction openDiagramAction = new OpenDiagramAction(pageMngr, diagram);
+ menu.add(openDiagramAction);
+
+ // Create Delete Diagram action
+ CloseDiagramAction closeDiagramAction = new CloseDiagramAction(pageMngr, diagram);
+ menu.add(closeDiagramAction);
+
+ // Create Close all diagrams action
+ // fjcano #287948 :: close all diagrams action
+ CloseAllDiagramsAction closeAllDiagramsAction = new CloseAllDiagramsAction(pageMngr);
+ menu.add(closeAllDiagramsAction);
+
+ // Create Delete Diagram action
+ DeleteDiagramAction deleteDiagramAction = new DeleteDiagramAction(pageMngr, diagram);
+ menu.add(deleteDiagramAction);
+
+ // Create Duplicate Diagram action
+ DuplicateDiagramAction duplicateDiagramAction = new DuplicateDiagramAction(pageMngr, diagram);
+ menu.add(duplicateDiagramAction);
+ }
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/DuplicateDiagramAction.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/DuplicateDiagramAction.java
new file mode 100644
index 00000000000..c7321906772
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/DuplicateDiagramAction.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.command.AddCommand;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.action.Action;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.papyrus.navigator.internal.Activator;
+
+/**
+ * Action used to duplicate the given diagram
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class DuplicateDiagramAction extends Action {
+
+ Diagram diagram;
+
+ IPageMngr pageMngr;
+
+ public DuplicateDiagramAction(IPageMngr pageMngr, Diagram diagram) {
+ this.diagram = diagram;
+ this.pageMngr = pageMngr;
+
+ setImageDescriptor(Activator.getImageDescriptor("icons/etool16/duplicate.png"));
+ setText("Duplicate");
+ setEnabled(true);
+ }
+
+ /**
+ * Duplicate the given diagram
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ TransactionalEditingDomain editingDomain = EditorUtils.getTransactionalEditingDomain();
+ if(editingDomain != null) {
+
+ // Create a compound command containing removing of the sash and removing from GMF
+ // resource.
+ CompoundCommand command = new CompoundCommand();
+
+ // Clone the current diagram
+ final Diagram newDiagram = (Diagram)EcoreUtil.copy(diagram);
+ // Give a new name
+ newDiagram.setName("Copy of " + diagram.getName());
+
+ Command addGmfDiagramCmd = new AddCommand(editingDomain, diagram.eResource().getContents(), newDiagram);
+ // EMFCommandOperation operation = new EMFCommandOperation(editingDomain,
+ // addGmfDiagramCmd);
+
+ Command sashOpenComd = new RecordingCommand(editingDomain) {
+
+ @Override
+ protected void doExecute() {
+ pageMngr.openPage(newDiagram);
+ }
+ };
+
+ // TODO : synchronize with Cedric
+ // command.append(operation.getCommand());
+ command.append(addGmfDiagramCmd);
+ command.append(sashOpenComd);
+ // Execute changes through a Command so that Undo/Redo is supported
+ editingDomain.getCommandStack().execute(command);
+
+ }
+
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/EditingDomainActionProvider.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/EditingDomainActionProvider.java
new file mode 100644
index 00000000000..962722b4446
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/EditingDomainActionProvider.java
@@ -0,0 +1,255 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ * Emilien Perico - use extension point to define dynamically registered actions
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.papyrus.navigator.factory.IActionHandlerFactory;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+
+/**
+ * Provider used to create actions applicable on semantic elements
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ * @author Emilien Perico - see extension point org.eclipse.papyrus.navigator.actionHandler to add
+ * specific action
+ */
+public class EditingDomainActionProvider extends AbstractSubmenuActionProvider {
+
+ public static final String ACTION_HANDLER_EXTENSION_POINT_ID = "org.eclipse.papyrus.navigator.actionHandler";
+
+ protected CommonNavigator activeViewPart;
+
+ protected Map<IActionHandlerFactory, ActionProperties> actionsFactoriesMap;
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void init(ICommonActionExtensionSite site) {
+ super.init(site);
+
+ this.activeViewPart = getCommonNavigator();
+ this.actionsFactoriesMap = new HashMap<IActionHandlerFactory, ActionProperties>();
+ TransactionalEditingDomain editingDomain = EditorUtils.getTransactionalEditingDomain();
+
+ IConfigurationElement[] registry = Platform.getExtensionRegistry().getConfigurationElementsFor(ACTION_HANDLER_EXTENSION_POINT_ID);
+ for(IConfigurationElement elt : registry) {
+ try {
+ final String actionId = elt.getAttribute("actionId");
+ final String afterAction = elt.getAttribute("afterAction");
+ boolean needSeparator = Boolean.valueOf(elt.getAttribute("needSeparator"));
+ ActionProperties properties = new ActionProperties(actionId, afterAction, needSeparator);
+
+ IActionHandlerFactory factory = (IActionHandlerFactory)elt.createExecutableExtension("actionHandler");
+ // create registered actions
+ factory.createActions(editingDomain);
+
+ actionsFactoriesMap.put(factory, properties);
+ } catch (CoreException exception) {
+ exception.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void fillActionBars(IActionBars actionBars) {
+ super.fillActionBars(actionBars);
+ for(IActionHandlerFactory factory : actionsFactoriesMap.keySet()) {
+ factory.fillActionBars(actionBars);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void fillContextMenu(IMenuManager menu) {
+ update();
+ // sort factories from "afterAction" property
+ List<IActionHandlerFactory> sortedFactories = sortFactories(actionsFactoriesMap);
+
+ // Add the edit menu actions
+ for(IActionHandlerFactory factory : sortedFactories) {
+ ActionProperties actionProperties = actionsFactoriesMap.get(factory);
+ if(actionProperties != null && actionProperties.isNeedSeparator()) {
+ menu.add(new Separator());
+ }
+ for(Action action : factory.getActions()) {
+ menu.add(new ActionContributionItem(action));
+ }
+ }
+ activate();
+ }
+
+ /**
+ * Update actions
+ */
+ public void update() {
+ ISelection selection = getCommonNavigator().getCommonViewer().getSelection();
+ IStructuredSelection structuredSelection = StructuredSelection.EMPTY;
+ if(selection instanceof IStructuredSelection) {
+ structuredSelection = (IStructuredSelection)selection;
+ }
+
+ for(IActionHandlerFactory factory : actionsFactoriesMap.keySet()) {
+ factory.update(structuredSelection);
+ }
+ }
+
+ /**
+ * Activate actions
+ */
+ public void activate() {
+ for(IActionHandlerFactory factory : actionsFactoriesMap.keySet()) {
+ factory.activate(activeViewPart);
+ }
+ update();
+ }
+
+ /**
+ * Deactivate actions
+ */
+ // @unused
+ public void deactivate() {
+ for(IActionHandlerFactory factory : actionsFactoriesMap.keySet()) {
+ factory.deactivate(activeViewPart);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void updateActionBars() {
+ super.updateActionBars();
+ activate();
+ update();
+ }
+
+ /**
+ * Sort factories.
+ *
+ * @param actionsFactoriesMap
+ * the actions factories map
+ *
+ * @return the sorted list of factories
+ */
+ private List<IActionHandlerFactory> sortFactories(final Map<IActionHandlerFactory, ActionProperties> actionsFactoriesMap) {
+
+ List<IActionHandlerFactory> factories = new ArrayList<IActionHandlerFactory>(actionsFactoriesMap.keySet());
+
+ Collections.sort(factories, new Comparator<IActionHandlerFactory>() {
+
+ public int compare(IActionHandlerFactory factory1, IActionHandlerFactory factory2) {
+
+ ActionProperties properties1 = getDefaultForNull(actionsFactoriesMap.get(factory1));
+ ActionProperties properties2 = getDefaultForNull(actionsFactoriesMap.get(factory2));
+ String after1 = properties1.getAfterAction();
+ String after2 = properties2.getAfterAction();
+
+ if(properties1.getActionId().equals(properties2.getActionId())) {
+ return 0;
+ } else if(properties1.getActionId().equals(after2)) {
+ return -1;
+ } else if(properties2.getActionId().equals(after1)) {
+ return 1;
+ } else if(after1 == null) {
+ return -1;
+ } else if(after2 == null) {
+ return 1;
+ }
+ return 0;
+ }
+
+ private ActionProperties getDefaultForNull(ActionProperties actionProperties) {
+ if(actionProperties == null) {
+ actionProperties = new ActionProperties("", "", false);
+ }
+ return actionProperties;
+ }
+ });
+
+ return factories;
+ }
+
+ /**
+ * The Class ActionProperties to store properties for a registered action from extension point
+ * org.eclipse.papyrus.navigator.actionHandler
+ */
+ private class ActionProperties {
+
+ private final String actionId;
+
+ private final String afterAction;
+
+ private final boolean needSeparator;
+
+ /**
+ * @param actionId
+ * @param afterAction
+ * @param needSeparator
+ */
+ // @unused
+ public ActionProperties(String actionId, String afterAction, boolean needSeparator) {
+ super();
+ this.actionId = actionId;
+ this.afterAction = afterAction;
+ this.needSeparator = needSeparator;
+ }
+
+ /**
+ * @return the actionId
+ */
+ public String getActionId() {
+ return actionId;
+ }
+
+ /**
+ * @return the afterAction
+ */
+ public String getAfterAction() {
+ return afterAction;
+ }
+
+ /**
+ * @return the needSeparator
+ */
+ public boolean isNeedSeparator() {
+ return needSeparator;
+ }
+
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GenericTransformAction.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GenericTransformAction.java
new file mode 100644
index 00000000000..c987ab706cc
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GenericTransformAction.java
@@ -0,0 +1,101 @@
+/***************************************************
+ * Copyright (c) 2010 Atos Origin.
+
+ *
+ * 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:
+ * Atos Origin - Initial API and implementation
+ *
+ ****************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.navigator.dialog.InformationDialog;
+import org.eclipse.papyrus.navigator.internal.Activator;
+import org.eclipse.papyrus.navigator.preferences.INavigatorPreferenceConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * GenericTransformAction is an action which transforms and EObject by changing its eclass.
+ */
+public class GenericTransformAction extends Action {
+
+ /** title of error dialog */
+ private static final String ERROR_TITLE = "Impossible to continue transformation.";
+
+ /** message in error dialog */
+ private static final String ERROR_MESSAGE = "The transformation can not continue.\n" + "Some objects referencing your selection could not be able to reference the result of the transformation.\n" + "For UML and SysML, applied stereotypes could not be applicable on the result of the transformation.\n" + "Before performing the transformation please delete or unapply the elements listed bellow.";
+
+ /** title of error dialog */
+ private static final String WARNING_TITLE = "Warning: transformation command";
+
+ /** WARNING_MESSAGE for transform command execution */
+ private static final String WARNING_MESSAGE = "You are trying to transform an element typed %s into %s.\nThis operation will copy all the common elements between the two eclasses.\nDo you want to continue ?";
+
+ /** The EClass to transform into. */
+ private EClass targetEClass = null;
+
+ /** The element to transform. */
+ private EObject element;
+
+ /**
+ * Constructor for a new action.
+ *
+ * @param transformationEClass
+ * the eclass element must be transformed into
+ * @param adapterFactory
+ * the adapter factory for providing label image
+ * @param elementToTransform
+ * the element to transform
+ */
+ public GenericTransformAction(EClass transformationEClass, AdapterFactory adapterFactory, EObject elementToTransform) {
+ super(transformationEClass.getName());
+ targetEClass = transformationEClass;
+ element = elementToTransform;
+
+ if(adapterFactory != null) {
+ EObject tmpEobject = transformationEClass.getEPackage().getEFactoryInstance().create(transformationEClass);
+ IItemLabelProvider provider = (IItemLabelProvider)adapterFactory.adapt(tmpEobject, IItemLabelProvider.class);
+ setImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(provider.getImage(tmpEobject)));
+ }
+ }
+
+ /**
+ * Transform the element and update referencing diagrams.
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ GenericTransformer transformer = new GenericTransformer(element);
+ MultiStatus messages = transformer.isTransformationPossible(targetEClass);
+ if(messages != null && messages.getChildren().length == 0) {
+ String message = String.format(WARNING_MESSAGE, this.element.eClass().getName(), targetEClass.getName());
+ InformationDialog dialog = new InformationDialog(Display.getDefault().getActiveShell(), WARNING_TITLE, message, Activator.getDefault().getPreferenceStore(), INavigatorPreferenceConstants.PREF_NAVIGATOR_TRANSFORM_INTO_SHOW_POPUP, SWT.YES | SWT.NO, MessageDialog.INFORMATION, new String[]{ IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL });
+ int result = dialog.open();
+ if(result == SWT.YES || result == Window.OK) {
+ transformer.transform(targetEClass);
+ }
+ } else {
+ ErrorDialog errorDialog = new ErrorDialog(Display.getDefault().getActiveShell(), ERROR_TITLE, ERROR_MESSAGE, messages, IStatus.WARNING);
+ errorDialog.open();
+ }
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GenericTransformActionProvider.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GenericTransformActionProvider.java
new file mode 100644
index 00000000000..dab4b79a71f
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GenericTransformActionProvider.java
@@ -0,0 +1,187 @@
+/***************************************************
+ * Copyright (c) 2010 Atos Origin.
+
+ *
+ * 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:
+ * Atos Origin - Initial API and implementation
+ *
+ ****************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.converter.util.ConverterUtil;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+/**
+ * GenericTransformActionProvider class provides GenericTransformAction actions available for a given element.
+ */
+public class GenericTransformActionProvider extends AbstractSubmenuActionProvider {
+
+ /** Group label */
+ private static final String TRANSFORM_INTO_LABEL = "Transform into";
+
+ /** The factories of appropriate EClass */
+ private Map<String, AdapterFactory> factories = new HashMap<String, AdapterFactory>();
+
+ /** The appropriate EClass for element's transformation */
+ private Set<EClassifier> eClassifiers = new HashSet<EClassifier>();
+
+ /**
+ * Adds all actions to transform an EObject
+ */
+ @Override
+ public void fillContextMenu(IMenuManager menu) {
+ super.fillContextMenu(menu);
+ ISelection selection = getContext().getSelection();
+ if(selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+ Object selectedElement = ((IStructuredSelection)selection).getFirstElement();
+ if(selectedElement instanceof EObject) {
+ fillEClassifiers((EObject)selectedElement);
+ }
+ }
+
+ Collection<IAction> genericTransformActions = generateTransformActions(selection);
+ MenuManager submenuManager = new MenuManager(TRANSFORM_INTO_LABEL);
+ populateManager(submenuManager, genericTransformActions, null);
+ menu.add(submenuManager);
+ }
+
+ /**
+ * From an EObject we get the epackage corresponding to the resource extension of the file
+ * and get the imported epackage correspondant
+ *
+ * @param selectionEObject
+ */
+ private void fillEClassifiers(EObject selectionEObject) {
+ Resource r = selectionEObject.eResource();
+ URI uri = r.getURI();
+ String extension = uri.fileExtension();
+ for(Object p : EPackage.Registry.INSTANCE.values()) {
+ if(p instanceof EPackage) {
+ EPackage pack = (EPackage)p;
+ if(pack.getNsPrefix() != null && extension.toLowerCase().equals(pack.getNsPrefix().toLowerCase())) {
+ addClassifiers(pack, eClassifiers);
+ factories.put(pack.getNsURI(), GenericTransformer.getFactory(pack.getNsURI()));
+ List<EPackage> packages = ConverterUtil.computeRequiredPackages(pack);
+ for(EPackage pTmp : packages) {
+ addClassifiers(pTmp, eClassifiers);
+ factories.put(pTmp.getNsURI(), GenericTransformer.getFactory(pTmp.getNsURI()));
+ }
+ break;
+ }
+ }
+ }
+
+ }
+
+ /**
+ * Register all classifiers contained in the package
+ *
+ * @param pack
+ * the package
+ * @param result
+ * results at which classifiers must be added
+ */
+ private void addClassifiers(EPackage pack, Set<EClassifier> result) {
+ for(EClassifier c : pack.getEClassifiers()) {
+ result.add(c);
+ }
+ }
+
+ /**
+ * Generate the sorted list of transformation actions.
+ *
+ * @param descriptors
+ * the descriptors
+ * @param selection
+ * the selection
+ *
+ * @return the collection< i action>
+ */
+ protected Collection<IAction> generateTransformActions(ISelection selection) {
+ List<IAction> transformActions = (List<IAction>)generateTransformActionsCore(selection);
+
+ Collections.<IAction> sort(transformActions, new Comparator<IAction>() {
+
+ public int compare(IAction a1, IAction a2) {
+ return a1.getText().compareTo(a2.getText());
+ }
+ });
+
+ return transformActions;
+ }
+
+ /**
+ * Generate transformation actions.
+ *
+ * @param descriptors
+ * the descriptors
+ * @param selection
+ * the selection
+ *
+ * @return the collection< i action>
+ */
+ protected Collection<IAction> generateTransformActionsCore(ISelection selection) {
+ Collection<IAction> actions = new ArrayList<IAction>();
+ if(eClassifiers != null) {
+ for(EClassifier descriptor : eClassifiers) {
+ Object selected = ((IStructuredSelection)selection).getFirstElement();
+ if(selected instanceof EObject) {
+ final EObject selectedElement = (EObject)selected;
+ if(descriptor instanceof EClass && selectedElement.eContainingFeature() != null) {
+ final EClass eclass = (EClass)descriptor;
+ EStructuralFeature containingFeature = selectedElement.eContainingFeature();
+ // to be candidate an eclass has to have a common parent, to not be the selection
+ // and to not be abstract
+ EClass containgType = (EClass)containingFeature.getEType();
+ if((GenericTransformer.getAllSuperTypes(eclass).contains(containgType) || EcoreUtil.equals(eclass, containgType)) && !eclass.equals(selectedElement.eClass()) && !eclass.isAbstract()) {
+ if(selection instanceof IStructuredSelection && ((IStructuredSelection)selection).size() == 1) {
+
+ AdapterFactory adapterFactory = factories.get(eclass.getEPackage().getNsURI());
+ Action transformAction = new GenericTransformAction(eclass, adapterFactory, selectedElement);
+ actions.add(transformAction);
+ if(adapterFactory != null) {
+ EObject tmpEobject = eclass.getEPackage().getEFactoryInstance().create(eclass);
+ IItemLabelProvider provider = (IItemLabelProvider)adapterFactory.adapt(tmpEobject, IItemLabelProvider.class);
+ transformAction.setImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(provider.getImage(tmpEobject)));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return actions;
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GenericTransformer.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GenericTransformer.java
new file mode 100644
index 00000000000..21d50454651
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GenericTransformer.java
@@ -0,0 +1,437 @@
+/***************************************************
+ * Copyright (c) 2010 Atos Origin.
+
+ *
+ * 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:
+ * Atos Origin - Initial API and implementation
+ *
+ ****************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EStructuralFeature.Setting;
+import org.eclipse.emf.ecore.util.ECrossReferenceAdapter;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.commands.CommandStack;
+import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
+import org.eclipse.gef.requests.GroupRequest;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.common.core.command.CompositeCommand;
+import org.eclipse.gmf.runtime.common.ui.services.editor.EditorService;
+import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewRefactorHelper;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramEditDomain;
+import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart;
+import org.eclipse.gmf.runtime.diagram.ui.requests.DropObjectsRequest;
+import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest.ViewDescriptor;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.core.util.EMFCoreUtil;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.LayoutConstraint;
+import org.eclipse.gmf.runtime.notation.Location;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.papyrus.infra.core.utils.PapyrusEcoreUtils;
+import org.eclipse.papyrus.navigator.commands.EObjectInheritanceCopyCommand;
+import org.eclipse.papyrus.navigator.internal.Activator;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * The Class GenericTransformer. Permits to transform an eobject of eclass to another eclass
+ */
+public class GenericTransformer {
+
+ /** The factories to create eObjects */
+ private static HashMap<String, AdapterFactory> factories = new HashMap<String, AdapterFactory>();
+
+ /** extension to recover factories */
+ private static final String EXT_FACTORIES = "org.eclipse.emf.edit.itemProviderAdapterFactories";
+
+ /** title of the warning dialog */
+ private static final String WARNING_TITLE = "Problems during transformation";
+
+ /** message of the warning dialog */
+ private static final String WARNING_MSG = "It seems the transformation you want to perform can't be executed";
+
+ /** command to execute the whole transformation */
+ private CompositeCommand globalCommand;
+
+ /** element to transform */
+ private EObject element;
+
+ /** views referencing the element */
+ private Set<View> referencingViews = new HashSet<View>();
+
+ /** command to execute the model transformation */
+ private EObjectInheritanceCopyCommand commandModel;
+
+ /** whether the graphical edit parts must also be transformed */
+ private boolean graphCopy = true;
+
+ /** the command to import new graphical edit parts */
+ private ImporterCommand importerCommand;
+
+ /**
+ * Instantiates a new generic transformer.
+ *
+ * @param currentNode
+ * the current node
+ */
+ public GenericTransformer(AbstractGraphicalEditPart currentNode) {
+ this(currentNode, true);
+ }
+
+ /**
+ * Instantiates a new generic transformer. and specify if we have to perform graphical copy
+ *
+ * @param currentNode
+ * the current node
+ * @param graphCopy
+ * the graph copy
+ */
+ public GenericTransformer(AbstractGraphicalEditPart currentNode, boolean graphCopy) {
+ this.graphCopy = graphCopy;
+ if(currentNode != null) {
+ Object model = currentNode.getModel();
+ if(model instanceof View) {
+ this.element = ((View)model).getElement();
+ }
+ }
+ }
+
+ /**
+ * Instantiates a new generic transformer.
+ *
+ * @param currentEobject
+ * the current eobject
+ */
+ public GenericTransformer(EObject currentEobject) {
+ this.element = currentEobject;
+ }
+
+ /**
+ * Transform the element to the given eclass.
+ *
+ * @param eclass
+ * the targeted eclass
+ */
+ public void transform(EClass eclass) {
+
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ IEditorPart editor = page.getActiveEditor();
+ CommandStack stack = (CommandStack)editor.getAdapter(CommandStack.class);
+ globalCommand = new CompositeCommand("Generic Transformation");
+
+ if(graphCopy) {
+ if(element != null) {
+ EReference[] features = { NotationPackage.eINSTANCE.getView_Element() };
+ Collection<?> views = EMFCoreUtil.getReferencers(element, features);
+ for(Object view : views) {
+ if(view instanceof View) {
+ referencingViews.add((View)view);
+ }
+ }
+ }
+ }
+ if(stack != null) {
+ // maybe extension point for stereotypes
+ EObject model = (EObject)AdapterFactoryEditingDomain.unwrap(element);
+ // get mixed editing domain to do transaction
+ TransactionalEditingDomain domain = EditorUtils.getTransactionalEditingDomain();
+ commandModel = new EObjectInheritanceCopyCommand(model, eclass, domain);
+ globalCommand.add(commandModel);
+ if(graphCopy) {
+ importerCommand = new ImporterCommand(domain);
+ if(importerCommand.canExecute()) {
+ globalCommand.add(importerCommand);
+ }
+
+ }
+ if(globalCommand.canExecute()) {
+ try {
+ // drop caches about input element
+ ECrossReferenceAdapter cross = ECrossReferenceAdapter.getCrossReferenceAdapter(element);
+ if(cross != null) {
+ cross.unsetTarget(element);
+ }
+ stack.execute(new ICommandProxy(globalCommand));
+ } catch (Exception e) {
+ MessageDialog.openWarning(Display.getDefault().getActiveShell(), WARNING_TITLE, WARNING_MSG);
+ e.printStackTrace();
+ }
+ } else {
+ MessageDialog.openWarning(Display.getDefault().getActiveShell(), WARNING_TITLE, WARNING_MSG);
+ }
+ }
+ }
+
+ /**
+ * The Class ImporterCommand. permits to add the importer in the compound command
+ */
+ private class ImporterCommand extends AbstractTransactionalCommand {
+
+ /**
+ * Constructor.
+ *
+ * @param domain
+ * transactional editing domain
+ */
+ public ImporterCommand(TransactionalEditingDomain domain) {
+ super(domain, "Import graphical nodes", null);
+ }
+
+ /**
+ * Execute the command
+ *
+ * @param monitor
+ * progress monitor
+ * @param info
+ * the info
+ * @return the command result
+ * @throws ExecutionException
+ */
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ graphCopy(null, commandModel.getResultEobject());
+ return CommandResult.newOKCommandResult();
+ }
+
+ /**
+ * Graph copy, make a drag and drop of the new object on all diagrams
+ *
+ * @param diagramDomain
+ * the mixed domain
+ * @param target
+ * the target
+ * @param globalCommand2
+ * @param graphElement
+ * the graph element
+ * @param oldLocation
+ * the old location
+ * @param editpart
+ * the editpart
+ */
+ private void graphCopy(IDiagramEditDomain domain, EObject target) {
+ for(View graphElement : referencingViews) {
+ View parent = ViewUtil.getContainerView(graphElement);
+ if(parent == null || graphElement.getDiagram() == null) {
+ // this is an orphaned view. Skip it
+ continue;
+ }
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ // Get the edit part of the diagram containing the view.
+ DiagramEditPart diagramEditPart = null;
+ IEditorPart activeEditorPart = page.getActiveEditor();
+ if(activeEditorPart instanceof IDiagramWorkbenchPart) {
+ if(graphElement.getDiagram().equals(((IDiagramWorkbenchPart)activeEditorPart).getDiagram())) {
+ diagramEditPart = ((IDiagramWorkbenchPart)activeEditorPart).getDiagramEditPart();
+ }
+ }
+ if(diagramEditPart == null) {
+ // search in other editor parts than the active one
+ List<?> editorParts = EditorService.getInstance().getRegisteredEditorParts();
+ for(Object editorPart : editorParts) {
+ if(editorPart instanceof IDiagramWorkbenchPart) {
+ if(graphElement.getDiagram().equals(((IDiagramWorkbenchPart)editorPart).getDiagram())) {
+ diagramEditPart = ((IDiagramWorkbenchPart)editorPart).getDiagramEditPart();
+ }
+ }
+ }
+ }
+
+ if(diagramEditPart != null) {
+ EditPart containerPart = (EditPart)diagramEditPart.getViewer().getEditPartRegistry().get(parent);
+ // create the new transformed view
+ DropObjectsRequest req = new DropObjectsRequest();
+ req.setObjects(Collections.singletonList(target));
+ if(graphElement instanceof Node) {
+ LayoutConstraint constraint = ((Node)graphElement).getLayoutConstraint();
+ if(constraint instanceof Location) {
+ Location location = (Location)constraint;
+ req.setLocation(new Point(location.getX(), location.getY()));
+ }
+ }
+ if(req.getLocation() == null) {
+ req.setLocation(new Point());
+ }
+ Command partCreationCmd = containerPart.getCommand(req);
+ partCreationCmd.execute();
+ View newView = null;
+ if(partCreationCmd instanceof ICommandProxy) {
+ CommandResult res = ((ICommandProxy)partCreationCmd).getICommand().getCommandResult();
+ Object newValue = res.getReturnValue();
+ if(newValue instanceof Collection<?>) {
+ for(Object value : (Collection<?>)newValue) {
+ if(value instanceof ViewDescriptor) {
+ newView = (View)((ViewDescriptor)value).getAdapter(View.class);
+ }
+ }
+ } else if(newValue instanceof ViewDescriptor) {
+ newView = (View)((ViewDescriptor)newValue).getAdapter(View.class);
+ }
+ }
+ //with ViewRefactorHelper, copy view properties on the old one
+ if(newView != null) {
+ ViewTransformerHelper helper = new ViewTransformerHelper(diagramEditPart.getDiagramPreferencesHint());
+ helper.copyMixedViewFeatures(graphElement, newView);
+ }
+ // delete the old view
+ GroupRequest deleteReq = new GroupRequest(RequestConstants.REQ_DELETE);
+ EditPart oldPart = (EditPart)diagramEditPart.getViewer().getEditPartRegistry().get(graphElement);
+ Command partDeletionCmd = oldPart.getCommand(deleteReq);
+ partDeletionCmd.execute();
+ }
+ }
+
+ }
+
+ }
+
+ /**
+ * ViewTransformerHelper allow to refactor a view to copy properties from another view
+ */
+ private static class ViewTransformerHelper extends ViewRefactorHelper {
+
+ /**
+ * Constructor.
+ *
+ * @param preferencesHint
+ * the diagram preferences hint
+ */
+ public ViewTransformerHelper(PreferencesHint preferencesHint) {
+ super(preferencesHint);
+ }
+
+ /**
+ * Copy common features from a view to another
+ *
+ * @param oldView
+ * the old view to copy from
+ * @param newView
+ * the new view to copy to
+ */
+ public void copyMixedViewFeatures(View oldView, View newView) {
+ if(oldView instanceof Diagram && newView instanceof Diagram) {
+ copyDiagramFeatures((Diagram)oldView, (Diagram)newView);
+ } else if(oldView instanceof Node && newView instanceof Node) {
+ copyNodeFeatures((Node)oldView, (Node)newView);
+ } else if(oldView instanceof Edge && newView instanceof Edge) {
+ copyEdgeFeatures((Edge)oldView, (Edge)newView);
+ } else {
+ copyViewFeatures(oldView, newView);
+ }
+ }
+
+ }
+
+ /**
+ * Gets all the super types.
+ *
+ * @param class1
+ * the class
+ *
+ * @return super types
+ */
+ public static HashSet<EClass> getAllSuperTypes(EClass class1) {
+ HashSet<EClass> results = new HashSet<EClass>();
+ results.addAll(class1.getEAllSuperTypes());
+ return results;
+ }
+
+ /**
+ * Gets the factory from uri.
+ *
+ * @param uri
+ * the uri
+ *
+ * @return the factory
+ */
+ public static AdapterFactory getFactory(String uri) {
+ AdapterFactory factory = factories.get(uri);
+ if(factory == null) {
+ IConfigurationElement[] extensions = Platform.getExtensionRegistry().getConfigurationElementsFor(EXT_FACTORIES);
+ for(IConfigurationElement e : extensions) {
+ if(uri.equals(e.getAttribute("uri"))) {
+ try {
+ factory = (AdapterFactory)e.createExecutableExtension("class");
+ if(factory != null) {
+ factories.put(uri, factory);
+ }
+ } catch (CoreException e1) {
+ // do nothing
+ }
+ }
+ }
+ }
+ return factory;
+ }
+
+ /**
+ * Checks if a transformation is possible.
+ *
+ * @param eclass
+ * the eclass
+ *
+ * @return the multi status
+ */
+ public MultiStatus isTransformationPossible(EClass eclass) {
+ MultiStatus result = new MultiStatus(Activator.PLUGIN_ID, 0, "Type incompatibility", null);
+ if(element != null) {
+ Collection<Setting> usages = PapyrusEcoreUtils.getUsages(element);
+ if(usages != null) {
+ for(EStructuralFeature.Setting nonNavigableInverseReference : usages) {
+ EStructuralFeature structuralFeature = nonNavigableInverseReference.getEStructuralFeature();
+ if(!(nonNavigableInverseReference.getEObject() instanceof View)) {
+ boolean compatible = EObjectInheritanceCopyCommand.isCompatible(structuralFeature.getEType(), eclass);
+ if(!compatible) {
+ String econtainer = structuralFeature.eContainer() instanceof EClassifier ? ((EClassifier)structuralFeature.eContainer()).getName() + " ( " + nonNavigableInverseReference.getEObject().toString() + " )" : structuralFeature.eContainer().toString();
+ Status s = new Status(Status.WARNING, Activator.PLUGIN_ID, String.format("an element typed %s references your selection, we can not assign instead of your selection an object typed %s", econtainer, eclass.getName()));
+ result.add(s);
+ }
+ }
+ }
+ }
+ }
+ return result;
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GroupChildrenAction.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GroupChildrenAction.java
new file mode 100644
index 00000000000..176619a9335
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/GroupChildrenAction.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) - Initial implementation
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.papyrus.navigator.ModelNavigator;
+import org.eclipse.ui.IPropertyListener;
+
+/**
+ * Action that toggles the grouping of children by type in the Model Explorer.
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ * @see <a href=https://bugs.eclipse.org/bugs/show_bug.cgi?id=290422>Bug #290422</a>
+ */
+public class GroupChildrenAction extends Action implements IPropertyListener {
+
+ private final ModelNavigator navigator;
+
+ public GroupChildrenAction(ModelNavigator commonNavigator) {
+ super("Group Childs");
+ this.navigator = commonNavigator;
+ this.setToolTipText("Group Childs");
+ init();
+ }
+
+ private void init() {
+
+ updateGroupingChildsProperty(navigator.isGroupingChildsEnabled());
+ navigator.addPropertyListener(this);
+ }
+
+ @Override
+ public void run() {
+ navigator.setGroupChildsEnabled(!navigator.isGroupingChildsEnabled());
+ }
+
+ public void propertyChanged(Object source, int propId) {
+ switch(propId) {
+ case ModelNavigator.IS_GROUPINGCHILDS_ENABLED_PROPERTY:
+ updateGroupingChildsProperty(((ModelNavigator)source).isGroupingChildsEnabled());
+ }
+
+ }
+
+ private void updateGroupingChildsProperty(boolean groupingChildsEnabled) {
+ setChecked(groupingChildsEnabled);
+
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/OpenDiagramAction.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/OpenDiagramAction.java
new file mode 100644
index 00000000000..950f08f4739
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/OpenDiagramAction.java
@@ -0,0 +1,62 @@
+/**
+ *
+ */
+
+package org.eclipse.papyrus.navigator.actions;
+
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.action.Action;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Action used to open the given diagram. The diagram is open in a new tab, even if it is already
+ * open.
+ *
+ * @author cedric dumoulin
+ */
+public class OpenDiagramAction extends Action {
+
+ private final Diagram diagram;
+
+ private final IPageMngr pageMngr;
+
+ public OpenDiagramAction(IPageMngr pageMngr, Diagram diagram) {
+ this.diagram = diagram;
+ this.pageMngr = pageMngr;
+
+ ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages();
+ if(pageMngr.isOpen(diagram)) {
+ setText("Open in New Tab");
+ setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_FORWARD));
+ } else {
+ setText("Open");
+ setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_BACK));
+ }
+
+ setEnabled(true);
+ }
+
+ /**
+ * Delete the given diagram
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+
+ pageMngr.openPage(diagram);
+ // TransactionalEditingDomain editingDomain =
+ // NavigatorUtils.getTransactionalEditingDomain();
+ // if (editingDomain != null) {
+ //
+ //
+ // EList<EObject> diagrams = diagram.eResource().getContents();
+ // //TODO : synchronize with Cedric
+ // Command command = new RemoveCommand(editingDomain, diagrams,
+ // diagram);
+ // editingDomain.getCommandStack().execute(command);
+ // }
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/RemoveTypePrefixAction.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/RemoveTypePrefixAction.java
new file mode 100644
index 00000000000..f83b547db9e
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/RemoveTypePrefixAction.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) – Initial API
+ * implementation.
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.papyrus.navigator.ModelNavigator;
+import org.eclipse.ui.IPropertyListener;
+
+/**
+ * Action that removes the prefix that shows the type of the element.
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ *
+ */
+// fjcano #291192
+public class RemoveTypePrefixAction extends Action implements IPropertyListener {
+
+ /**
+ * The {@link MOSKittModelNavigator} this action is attached to.
+ */
+ private final ModelNavigator navigator;
+
+ /**
+ * Constructor with {@link MOSKittModelNavigator} parameter.
+ *
+ * @param commonNavigator
+ */
+ public RemoveTypePrefixAction(ModelNavigator commonNavigator) {
+ super("Remove type prefix");
+ this.navigator = commonNavigator;
+ this.setToolTipText("Remove type name prefix");
+ init();
+ }
+
+ /**
+ * Initializing means setting the initial state of the {@link Action} and adding the action as
+ * an {@link IPropertyListener} to the {@link MOSKittModelNavigator}.
+ */
+ private void init() {
+ updateRemovePrefixTypesProperty(navigator.isRemovePrefixTypeEnabled());
+ navigator.addPropertyListener(this);
+ }
+
+ /**
+ * Sets the navigator property to remove the prefix of the types.
+ */
+ @Override
+ public void run() {
+ navigator.setRemovePrefixTypeEnabled(!navigator.isRemovePrefixTypeEnabled());
+ }
+
+ /**
+ * Upon a MOSKittModelNavigator.IS_REMOVEPREFIXTYPE_ENABLED_PROPERTY property change, update the
+ * model explorer.
+ */
+ public void propertyChanged(Object source, int propId) {
+ switch(propId) {
+ case ModelNavigator.IS_REMOVEPREFIXTYPE_ENABLED_PROPERTY:
+ updateRemovePrefixTypesProperty(((ModelNavigator)source).isRemovePrefixTypeEnabled());
+ }
+ }
+
+ /**
+ * Update this model explorer.
+ *
+ * @param removePrefixTypesEnabled
+ */
+ private void updateRemovePrefixTypesProperty(boolean removePrefixTypesEnabled) {
+ setChecked(removePrefixTypesEnabled);
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/RenameDiagramAction.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/RenameDiagramAction.java
new file mode 100644
index 00000000000..c75cbcc7053
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/RenameDiagramAction.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.papyrus.navigator.internal.Activator;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * Action used to rename the given diagram
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class RenameDiagramAction extends Action {
+
+ Diagram diagram;
+
+ public RenameDiagramAction(Diagram diagram) {
+ this.diagram = diagram;
+ setImageDescriptor(Activator.getImageDescriptor("icons/etool16/rename.gif"));
+ setText("Rename...");
+ }
+
+ /**
+ * Rename the given diagram
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ TransactionalEditingDomain editingDomain = EditorUtils.getTransactionalEditingDomain();
+ if(editingDomain != null) {
+ InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Rename an existing diagram", "New name:", diagram.getName(), null);
+ if(dialog.open() == Window.OK) {
+ final String name = dialog.getValue();
+ if(name != null && name.length() > 0) {
+
+ Command command = new RecordingCommand(editingDomain) {
+
+ @Override
+ protected void doExecute() {
+ diagram.setName(name);
+ }
+ };
+
+ editingDomain.getCommandStack().execute(command);
+ }
+ }
+ }
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/RenameNamedElementAction.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/RenameNamedElementAction.java
new file mode 100644
index 00000000000..5fa285e5a3c
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/RenameNamedElementAction.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) - Initial implementation
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+import org.eclipse.emf.edit.ui.action.CommandActionHandler;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.navigator.internal.utils.NavigatorUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.uml2.uml.NamedElement;
+
+/**
+ * Action to rename a {@link NamedElement} in the Model Explorer. This action is binded to the "F2"
+ * key.
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ * @see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290514">Bug #290514</a>
+ */
+public class RenameNamedElementAction extends CommandActionHandler {
+
+ /**
+ * Constructor binds this action to the "F2" key.
+ *
+ * @param editingDomain
+ */
+ public RenameNamedElementAction(EditingDomain editingDomain) {
+ super(editingDomain, "Rename...");
+ setAccelerator(SWT.F2);
+ }
+
+ /**
+ * The selected {@link NamedElement}.
+ */
+ private NamedElement selectedNamedElement = null;
+
+ /**
+ * Get the selected {@link NamedElement}.
+ *
+ * @return
+ */
+ protected NamedElement getSelectedNamedElement() {
+ return selectedNamedElement;
+ }
+
+ /**
+ * Set the selected {@link NamedElement}.
+ *
+ * @param selectedNamedElement
+ */
+ // @notused
+ protected void setSelectedNamedElement(NamedElement selectedNamedElement) {
+ this.selectedNamedElement = selectedNamedElement;
+ }
+
+ /**
+ * Update the selection.
+ *
+ * @return true if this {@link Action} is still enabled after the new selection.
+ */
+ @Override
+ public boolean updateSelection(IStructuredSelection selection) {
+ ISelection unwrappedselection = NavigatorUtils.unwrapSelection(selection);
+ if(unwrappedselection instanceof StructuredSelection) {
+ StructuredSelection structuredSelection = (StructuredSelection)unwrappedselection;
+ if(structuredSelection.size() == 1) {
+ Object selectedObject = structuredSelection.getFirstElement();
+ if(selectedObject instanceof NamedElement) {
+ setSelectedNamedElement((NamedElement)selectedObject);
+ return super.updateSelection(selection);
+ }
+ }
+ }
+ setSelectedNamedElement(null);
+ return super.updateSelection(selection);
+ }
+
+ /**
+ * Create the {@link Command} to execute when this {@link Action} is run.
+ */
+ @Override
+ public Command createCommand(Collection<?> selection) {
+ TransactionalEditingDomain domain = getTransactionalEditingDomain();
+ if(domain == null) {
+ return null;
+ }
+ return new RecordingCommand(domain) {
+
+ @Override
+ protected void doExecute() {
+ InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Rename an existing diagram", "New name:", getSelectedNamedElement().getName(), null);
+ if(dialog.open() == Window.OK) {
+ final String name = dialog.getValue();
+ getSelectedNamedElement().setName(name);
+ }
+ }
+ };
+ }
+
+ /**
+ * Get the {@link EditingDomain} as a {@link TransactionalEditingDomain}.
+ *
+ * @return
+ */
+ protected TransactionalEditingDomain getTransactionalEditingDomain() {
+ if(getEditingDomain() instanceof TransactionalEditingDomain) {
+ return (TransactionalEditingDomain)getEditingDomain();
+ }
+ return null;
+ }
+
+ /**
+ * Update the active {@link IWorkbenchPart} and the active {@link EditingDomain}.
+ *
+ * @param workbenchPart
+ */
+ public void setActiveWorkbenchPart(IWorkbenchPart workbenchPart) {
+ if(workbenchPart instanceof IEditingDomainProvider) {
+ domain = ((IEditingDomainProvider)workbenchPart).getEditingDomain();
+ }
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/SearchElementAction.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/SearchElementAction.java
new file mode 100644
index 00000000000..c4ca60bf718
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/actions/SearchElementAction.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) - initial api implementation
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.papyrus.navigator.ModelNavigator;
+import org.eclipse.papyrus.navigator.dialog.NavigatorSearchDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * An {@link Action} that allows searching elements in the {@link ModelNavigator} by their name.
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es>Francisco Javier Cano Muñoz</a>
+ *
+ */
+public class SearchElementAction extends Action {
+
+ private final CommonNavigator navigator;
+
+ public SearchElementAction(CommonNavigator commonNavigator) {
+ super("Search elements");
+ this.navigator = commonNavigator;
+ this.setToolTipText("Search elements");
+ init();
+ }
+
+ private void init() {
+ }
+
+ @Override
+ public void run() {
+ Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+ NavigatorSearchDialog dialog = new NavigatorSearchDialog(shell, navigator);
+ dialog.open();
+
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/commands/EObjectInheritanceCopyCommand.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/commands/EObjectInheritanceCopyCommand.java
new file mode 100644
index 00000000000..516a4025208
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/commands/EObjectInheritanceCopyCommand.java
@@ -0,0 +1,391 @@
+/***************************************************
+ * Copyright (c) 2010 Atos Origin.
+
+ *
+ * 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:
+ * Atos Origin - Initial API and implementation
+ *
+ ****************************************************/
+package org.eclipse.papyrus.navigator.commands;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.common.core.command.CompositeCommand;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.commands.SetValueCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.core.utils.PapyrusEcoreUtils;
+
+/**
+ * The Class EObjectInheritanceCopyCommand. it takes an eobject in parameter and copy all the elements contained in the
+ * source to the target and adds the target to the container of the source
+ */
+public class EObjectInheritanceCopyCommand extends CompositeCommand {
+
+ private final EObject sourceEObject;
+
+ private final EObject targetEObject;
+
+ private final TransactionalEditingDomain editingDomain;
+
+ private Collection<Object> alreadyManaged = new LinkedList<Object>();
+
+ public EObjectInheritanceCopyCommand(EObject source, EClass target, TransactionalEditingDomain adapterFactoryEditingDomain) {
+ super("Inheritance copy");
+ this.sourceEObject = source;
+ this.targetEObject = target.getEPackage().getEFactoryInstance().create(target);
+ this.editingDomain = adapterFactoryEditingDomain;
+ if(sourceEObject == null || targetEObject == null || editingDomain == null) {
+ throw new IllegalArgumentException("Please provide non null arguments");
+ }
+ init();
+ if(sourceEObject.eContainingFeature().isMany()) {
+ replace(sourceEObject.eContainer(), sourceEObject, targetEObject, sourceEObject.eContainingFeature());
+ } else {
+ add(new CustomSetCommand(editingDomain, sourceEObject.eContainer(), sourceEObject.eContainingFeature(), targetEObject, sourceEObject, sourceEObject.eContainingFeature()));
+ add(new DestroyElementCommand(new DestroyElementRequest(editingDomain, sourceEObject, false)));
+ }
+ }
+
+ private void init() {
+ modelCopy(sourceEObject, targetEObject);
+ crossReference(sourceEObject, targetEObject);
+ }
+
+ /**
+ * Model copy, copy the eobject source attributes to target's
+ *
+ * @param mixedDomain
+ * the mixed domain
+ * @param source
+ * the source
+ * @param target
+ * the target
+ */
+ private void modelCopy(EObject source, EObject target) {
+ EClass eclass = source.eClass();
+ if(eclass != null) {
+ EList<EStructuralFeature> eAllStructuralFeatures = eclass.getEAllStructuralFeatures();
+ for(EStructuralFeature e : eAllStructuralFeatures) {
+ if(contains(target.eClass(), e) && isCompatible(e.getEType(), target.eClass().getEStructuralFeature(e.getName()).getEType())) {
+ manageFeature(source, target, e);
+ }
+ }
+ }
+ }
+
+ /**
+ * Contains. check if the target eclass contains a estructuralfeature with the same name less rigorous can work for
+ * many cases
+ *
+ * @param target
+ * the target
+ * @param e
+ * the e
+ *
+ * @return true, if successful
+ */
+ private boolean contains(EClass target, EStructuralFeature e) {
+ EList<EStructuralFeature> features = target.getEAllStructuralFeatures();
+ for(EStructuralFeature f : features) {
+ if(f.getName().equals(e.getName())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Manage feature for cross.
+ *
+ * @param mixedDomain
+ * the mixed domain
+ * @param theObjectWithCross
+ * the the object with cross
+ * @param source
+ * the source
+ * @param target
+ * the target
+ * @param structuralFeature
+ * the structural feature
+ */
+ private void manageFeatureForCross(EObject theObjectWithCross, EObject source, EObject target, EStructuralFeature structuralFeature) {
+ boolean compatible = isCompatible(structuralFeature.getEType(), target.eClass());
+
+ if(compatible && structuralFeature.isChangeable() && !structuralFeature.isDerived()) {
+ if(structuralFeature.isMany()) {
+ replace(theObjectWithCross, source, target, structuralFeature);
+ } else {
+ add(new SetValueCommand(new SetRequest(editingDomain, theObjectWithCross, structuralFeature, target)));
+ }
+ } else if(!compatible) {
+ if(structuralFeature.isMany()) {
+ remove(theObjectWithCross, source, structuralFeature);
+ } else {
+ add(new SetValueCommand(new SetRequest(editingDomain, theObjectWithCross, structuralFeature, null)));
+ }
+ }
+
+ }
+
+ private void remove(EObject owner, Object source, EStructuralFeature structuralFeature) {
+ if(!alreadyManaged.contains(source)) {
+
+ if(owner == null && structuralFeature == null) {
+ if(source instanceof EObject) {
+ add(new DestroyElementCommand(new DestroyElementRequest(editingDomain, (EObject)source, false)));
+ }
+ } else {
+ Object value = owner.eGet(structuralFeature);
+ if(value instanceof Collection<?>) {
+ List<Object> newList = new ArrayList<Object>((Collection<?>)value);
+ newList.remove(source);
+ add(new SetValueCommand(new SetRequest(editingDomain, owner, structuralFeature, newList)));
+ } else if(source.equals(value)) {
+ add(new SetValueCommand(new SetRequest(editingDomain, owner, structuralFeature, null)));
+ } else {
+ add(new SetValueCommand(new SetRequest(editingDomain, owner, structuralFeature, null)));
+ }
+ }
+ alreadyManaged.add(source);
+ }
+ }
+
+ private void replace(EObject owner, Object source, Object target, EStructuralFeature structuralFeature) {
+ if(!alreadyManaged.contains(source)) {
+
+ if(owner == null && structuralFeature == null) {
+ if(source instanceof EObject) {
+ add(new DestroyElementCommand(new DestroyElementRequest(editingDomain, (EObject)source, false)));
+ }
+ } else {
+ Object value = owner.eGet(structuralFeature);
+ if(value instanceof Collection<?>) {
+ List<Object> newList = new ArrayList<Object>((Collection<?>)value);
+ int index = newList.indexOf(source);
+ if(index >= 0) {
+ newList.remove(index);
+ newList.add(index, target);
+ add(new SetValueCommand(new SetRequest(editingDomain, owner, structuralFeature, newList)));
+ }
+ } else if(source.equals(value)) {
+ add(new SetValueCommand(new SetRequest(editingDomain, owner, structuralFeature, target)));
+ } else {
+ add(new SetValueCommand(new SetRequest(editingDomain, owner, structuralFeature, target)));
+ }
+ }
+ alreadyManaged.add(source);
+ }
+ }
+
+ @Override
+ public IStatus undo(IProgressMonitor progressMonitor, IAdaptable info) throws ExecutionException {
+ return super.undo(progressMonitor, info);
+ }
+
+ /**
+ * Cross reference. Manage eobjects referencing the source eobject
+ *
+ * @param mixedDomain
+ * the mixed domain
+ * @param source
+ * the source eobject
+ * @param target
+ * the target eobject
+ */
+ private void crossReference(EObject source, EObject target) {
+ Collection<EStructuralFeature.Setting> collection = PapyrusEcoreUtils.getUsages(source);
+ if(collection != null) {
+ for(EStructuralFeature.Setting nonNavigableInverseReference : collection) {
+ EStructuralFeature structuralFeature = nonNavigableInverseReference.getEStructuralFeature();
+ if(!(nonNavigableInverseReference.getEObject() instanceof View)) {
+ manageFeatureForCross(nonNavigableInverseReference.getEObject(), source, target, structuralFeature);
+ } else if(nonNavigableInverseReference.getEObject() instanceof Diagram) {
+ Diagram di = (Diagram)nonNavigableInverseReference.getEObject();
+ remove(null, di, null);
+ }
+ }
+ }
+ }
+
+ /**
+ * Checks if a type is compatible to another.
+ *
+ * @param type
+ * the type
+ * @param target
+ * the target
+ *
+ * @return true, if is compatible
+ */
+ public static boolean isCompatible(EClassifier type, EClassifier target) {
+ Collection<EClassifier> types = new LinkedList<EClassifier>();
+ if(target instanceof EClass) {
+ EClass eclass = (EClass)target;
+ types.addAll(eclass.getEAllSuperTypes());
+ }
+ if(!types.contains(target)) {
+ types.add(target);
+ }
+ return types.contains(type);
+ }
+
+ /**
+ * Manage a feature for the attribute's copy.
+ *
+ * @param mixedDomain
+ * the mixed domain
+ * @param source
+ * the source
+ * @param target
+ * the target
+ * @param feature
+ * the e
+ */
+ @SuppressWarnings("unchecked")
+ private void manageFeature(EObject source, EObject target, EStructuralFeature feature) {
+ EStructuralFeature targetFeature = getFeature(target, feature.getName());
+
+ if(feature.getUpperBound() <= targetFeature.getUpperBound() && feature.getLowerBound() >= targetFeature.getLowerBound()) {
+ if(feature.isChangeable() && !feature.isDerived()) {
+ Object value = source.eGet(feature);
+ if(feature.isMany() && targetFeature.isMany()) {
+ Collection<EObject> list = (Collection<EObject>)value;
+ if(list != null && !list.isEmpty()) {
+ Collection<EObject> newList = new LinkedList<EObject>();
+ newList.addAll(list);
+ if(feature instanceof EReference && !((EReference)feature).isContainment()) {
+ add(new SetValueCommand(new SetRequest(editingDomain, target, targetFeature, newList)));
+ } else if(feature instanceof EReference && ((EReference)feature).isContainment()) {
+ Collection<Object> toTreat = new LinkedList<Object>();
+ for(Object o : newList) {
+ if(!alreadyManaged.contains(o)) {
+ toTreat.add(o);
+ alreadyManaged.add(o);
+ }
+ }
+ add(new CustomAddCommand(editingDomain, target, targetFeature, newList, source, feature));
+ }
+ }
+ } else if(!feature.isMany() && !targetFeature.isMany()) {
+ if(value != null) {
+ if(!alreadyManaged.contains(value)) {
+ alreadyManaged.add(value);
+ add(new CustomSetCommand(editingDomain, target, targetFeature, value, source, feature));
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+ /**
+ * Gets a feature from a name
+ *
+ * @param eobject
+ * the eobject
+ * @param name
+ * the name
+ *
+ * @return the feature
+ */
+ private EStructuralFeature getFeature(EObject eobject, String name) {
+ return eobject.eClass().getEStructuralFeature(name);
+ }
+
+ /**
+ * Gets the result eobject.
+ *
+ * @return the result eobject
+ */
+ public EObject getResultEobject() {
+ return targetEObject;
+ }
+
+ /**
+ * The Class CustomSetCommand. permits to change a value from an eobject to eanother
+ */
+ private class CustomSetCommand extends SetValueCommand {
+
+ private EObject oldObject = null;
+
+ private EStructuralFeature oldFeature = null;
+
+ private Object oldValue = null;
+
+ public CustomSetCommand(TransactionalEditingDomain domain, EObject owner, EStructuralFeature feature, Object value, EObject old, EStructuralFeature structuralFeature) {
+ super(new SetRequest(domain, owner, feature, value));
+ oldObject = old;
+ oldFeature = structuralFeature;
+ oldValue = value;
+ }
+
+ @Override
+ protected IStatus doUndo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ IStatus result = super.doUndo(monitor, info);
+ oldObject.eSet(oldFeature, oldValue);
+ return result;
+ }
+
+ }
+
+ /**
+ * The Class CustomSetCommand. permits to change a value from an eobject to eanother
+ */
+ private class CustomAddCommand extends SetValueCommand {
+
+ private EObject oldObject = null;
+
+ private EStructuralFeature oldFeature;
+
+ private EStructuralFeature newFeature;
+
+ public CustomAddCommand(TransactionalEditingDomain editingDomain, EObject target, EStructuralFeature targetFeature, Collection<EObject> newList, EObject source, EStructuralFeature e) {
+ super(new SetRequest(editingDomain, target, targetFeature, newList));
+ oldObject = source;
+ oldFeature = e;
+ newFeature = targetFeature;
+ }
+
+ @Override
+ protected IStatus doUndo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ Object values = getElementToEdit().eGet(newFeature);
+ IStatus result = super.doUndo(monitor, info);
+ // this test permit to avoid modification from other command
+ // if getOwner list is empty it will perform error we avoid it
+ if(values instanceof Collection<?> && !((Collection<?>)values).isEmpty()) {
+ Collection<?> collection = (Collection<?>)values;
+ Collection<Object> collecOldObject = (Collection)oldObject.eGet(oldFeature);
+ for(Object o : collection) {
+ if(!collecOldObject.contains(o)) {
+ collecOldObject.add(o);
+ }
+ }
+ }
+ return result;
+ }
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dialog/InformationDialog.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dialog/InformationDialog.java
new file mode 100644
index 00000000000..868b4310bda
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dialog/InformationDialog.java
@@ -0,0 +1,124 @@
+/*****************************************************************************
+ * Copyright (c) 2010 Atos Origin.
+ *
+ *
+ * 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:
+ * Emilien Perico (Atos Origin) emilien.perico@atosorigin.com - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.dialog;
+
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * A JFace dialog used to show information to the end user.<br>
+ * This dialog is able to store the user choice into a preference store.<br>
+ *
+ */
+public class InformationDialog extends MessageDialog {
+
+ private IPreferenceStore ps;
+
+ private String preference;
+
+ private Button rememberChoice;
+
+ /**
+ * The Constructor.
+ *
+ * @param parentShell
+ * the parent shell
+ * @param dialogTitle
+ * the dialog title
+ * @param message
+ * the message
+ * @param pso
+ * the preference store
+ * @param preference
+ * the preference
+ */
+ public InformationDialog(Shell parentShell, String dialogTitle, String message, IPreferenceStore ps, String preference) {
+ this(parentShell, dialogTitle, message, ps, preference, SWT.OK, MessageDialog.INFORMATION, new String[]{ IDialogConstants.OK_LABEL });
+ }
+
+ /**
+ * The Constructor.
+ *
+ * @param parentShell
+ * the parent shell
+ * @param dialogTitle
+ * the dialog title
+ * @param message
+ * the message
+ * @param ps
+ * the ps the preference store
+ * @param preference
+ * the preference string to store the choice
+ * @param style
+ * the style for buttons : SWT.OK, SWT.YES
+ * @param messageDialogType
+ * : MessageDialog.INFORMATION, MessageDialog.WARNING
+ * @param labels
+ * the labels, for example IDialogConstants.OK_LABEL
+ */
+ public InformationDialog(Shell parentShell, String dialogTitle, String message, IPreferenceStore ps, String preference, int style, int messageDialogType, String[] labels) {
+ super(parentShell, dialogTitle, null, message, messageDialogType, labels, style);
+ this.ps = ps;
+ this.preference = preference;
+ }
+
+ /**
+ * @see org.eclipse.jface.dialogs.MessageDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+ */
+ protected Control createDialogArea(Composite parent) {
+ Composite container = (Composite)super.createDialogArea(parent);
+
+ if(ps != null && preference != null && preference.length() > 0) {
+ rememberChoice = new Button(container, SWT.CHECK);
+ rememberChoice.setText("Do not show again");
+ }
+ return container;
+ }
+
+ /**
+ * @see org.eclipse.jface.window.Window#open()
+ * return Window.OK if it's valid
+ */
+ public int open() {
+ // Do not open the dialog if the preference is true
+ if(ps != null && preference != null && preference.length() > 0) {
+ if(ps.getBoolean(preference)) {
+ return Window.OK;
+ }
+ }
+ return super.open();
+ }
+
+ /**
+ * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
+ */
+ protected void buttonPressed(int buttonId) {
+ // OK pressed
+ if(buttonId == Window.OK && rememberChoice.getSelection()) {
+ if(ps != null && preference != null && preference.length() > 0) {
+ // Store the preference
+ ps.setValue(preference, true);
+ }
+ }
+ super.buttonPressed(buttonId);
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dialog/NavigatorSearchDialog.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dialog/NavigatorSearchDialog.java
new file mode 100644
index 00000000000..67d28b937ed
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dialog/NavigatorSearchDialog.java
@@ -0,0 +1,274 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) - initial api contribution
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.dialog;
+
+import java.util.ArrayList;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * A dialog that allows searching elements in the Model navigator by name.
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ */
+public class NavigatorSearchDialog extends TrayDialog {
+
+ private ITreeContentProvider contentProvider = null;
+
+ private ILabelProvider labelProvider = null;
+
+ private Object root = null;
+
+ private Viewer viewer = null;
+
+ private List<Object> matchedObjects = Collections.emptyList();
+
+ private Label matchesLabel;
+
+ private Text searchText;
+
+ private Button backButton;
+
+ private Button nextButton;
+
+ private Button caseButton;
+
+ public NavigatorSearchDialog(Shell shell, CommonNavigator modelNavigator) {
+ super(shell);
+ IContentProvider cprovider = modelNavigator.getCommonViewer().getContentProvider();
+ if(cprovider instanceof ITreeContentProvider) {
+ contentProvider = (ITreeContentProvider)cprovider;
+ }
+ root = modelNavigator.getCommonViewer().getInput();
+ viewer = modelNavigator.getCommonViewer();
+ labelProvider = (ILabelProvider)modelNavigator.getCommonViewer().getLabelProvider();
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets .Composite)
+ */
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ Composite background = new Composite(parent, SWT.None);
+ GridData bgData = new GridData(GridData.FILL_BOTH);
+ bgData.minimumWidth = 300;
+ background.setLayoutData(bgData);
+ GridLayout bgLayout = new GridLayout();
+ bgLayout.numColumns = 2;
+ background.setLayout(bgLayout);
+
+ createSearchTextComposite(background);
+ return background;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse
+ * .swt.widgets.Composite)
+ */
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+
+ backButton = createButton(parent, IDialogConstants.BACK_ID, IDialogConstants.BACK_LABEL, false);
+ nextButton = createButton(parent, IDialogConstants.NEXT_ID, IDialogConstants.NEXT_LABEL, false);
+ createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
+
+ backButton.setEnabled(false);
+ nextButton.setEnabled(false);
+
+ nextButton.addSelectionListener(new SelectionListener() {
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ ISelection sel = viewer.getSelection();
+ if(!(sel instanceof StructuredSelection)) {
+ return;
+ }
+ StructuredSelection ssel = (StructuredSelection)sel;
+
+ int index = matchedObjects.lastIndexOf(ssel.getFirstElement());
+ if(index == matchedObjects.size() - 1) {
+ index = -1;
+ }
+ index++;
+ viewer.setSelection(new StructuredSelection(matchedObjects.get(index)), true);
+ }
+
+ });
+
+ backButton.addSelectionListener(new SelectionListener() {
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ ISelection sel = viewer.getSelection();
+ if(!(sel instanceof StructuredSelection)) {
+ return;
+ }
+ StructuredSelection ssel = (StructuredSelection)sel;
+
+ int index = matchedObjects.lastIndexOf(ssel.getFirstElement());
+ if(index == 0) {
+ index = matchedObjects.size() - 1;
+ }
+ index--;
+ viewer.setSelection(new StructuredSelection(matchedObjects.get(index)), true);
+ }
+
+ });
+ }
+
+ private void createSearchTextComposite(Composite background) {
+ Label searchLabel = new Label(background, SWT.None);
+ searchLabel.setText("Search:");
+ searchLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+
+ searchText = new Text(background, SWT.SEARCH);
+ searchText.setFocus();
+ searchText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ searchText.addKeyListener(getKeyListener());
+
+ caseButton = new Button(background, SWT.CHECK);
+ caseButton.setText("Case sensitive?");
+ GridData caseButtonData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+ caseButtonData.horizontalSpan = 2;
+ caseButton.setSelection(false);
+ caseButton.setLayoutData(caseButtonData);
+ caseButton.addSelectionListener(new SelectionListener() {
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ updateMatches();
+ }
+
+ });
+
+ Label resultsLabel = new Label(background, SWT.None);
+ resultsLabel.setText("Results:");
+ resultsLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+
+ matchesLabel = new Label(background, SWT.None);
+ matchesLabel.setText("No matchings.");
+ matchesLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL));
+
+ }
+
+ private void updateMatches() {
+ if(contentProvider == null && labelProvider == null) {
+ return;
+ }
+
+ String pattern = searchText.getText();
+ if(pattern.length() == 0) {
+ matchedObjects = Collections.emptyList();
+ backButton.setEnabled(false);
+ nextButton.setEnabled(false);
+ matchesLabel.setText("No matchings.");
+ return;
+ }
+
+ if(!caseButton.getSelection()) {
+ pattern = pattern.toUpperCase();
+ }
+
+ matchedObjects = searchPattern(pattern, Arrays.asList(contentProvider.getElements(root)));
+
+ // Update matches label
+ matchesLabel.setText(matchedObjects.size() + " matches found");
+
+ // Select first match and update buttons
+ if(!matchedObjects.isEmpty()) {
+ viewer.setSelection(new StructuredSelection(matchedObjects.get(0)), true);
+ nextButton.setEnabled(true);
+ backButton.setEnabled(true);
+ } else {
+ nextButton.setEnabled(false);
+ backButton.setEnabled(false);
+ }
+
+ }
+
+ private List<Object> searchPattern(String pattern, List<Object> objects) {
+ List<Object> matches = new ArrayList<Object>();
+
+ List<Object> childs = new ArrayList<Object>();
+ String objectLabel;
+ boolean caseSensitive = caseButton.getSelection();
+ for(Object o : objects) {
+ // Search matches in this level
+ objectLabel = caseSensitive ? labelProvider.getText(o) : labelProvider.getText(o).toUpperCase();
+
+ if(objectLabel.contains(pattern)) {
+ matches.add(o);
+ }
+
+ // Find childs
+ childs.addAll(Arrays.asList(contentProvider.getChildren(o)));
+ }
+
+ if(!childs.isEmpty()) {
+ matches.addAll(searchPattern(pattern, childs));
+ }
+
+ return matches;
+ }
+
+ protected KeyListener getKeyListener() {
+ return new KeyListener() {
+
+ public void keyPressed(KeyEvent e) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void keyReleased(KeyEvent e) {
+ updateMatches();
+
+ }
+
+ };
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dnd/CommonDragAdapterAssistant.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dnd/CommonDragAdapterAssistant.java
new file mode 100644
index 00000000000..c24af5a46f7
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dnd/CommonDragAdapterAssistant.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.dnd;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.ui.views.navigator.LocalSelectionTransfer;
+import org.eclipse.uml2.uml.PackageableElement;
+
+/**
+ * This class handle Drag events in ModelExplorer view.
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class CommonDragAdapterAssistant extends org.eclipse.ui.navigator.CommonDragAdapterAssistant {
+
+ public CommonDragAdapterAssistant() {
+ }
+
+ @Override
+ public Transfer[] getSupportedTransferTypes() {
+ Transfer[] transfer = new Transfer[]{ LocalSelectionTransfer.getInstance() };
+ return transfer;
+ }
+
+ @Override
+ public boolean setDragData(DragSourceEvent anEvent, IStructuredSelection selection) {
+ Object o = selection.getFirstElement();
+ if(o instanceof PackageableElement) {
+ anEvent.data = o;
+ return true;
+ }
+ return false;
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dnd/CommonDropAdapterAssistant.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dnd/CommonDropAdapterAssistant.java
new file mode 100644
index 00000000000..f8a17f5850a
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/dnd/CommonDropAdapterAssistant.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.dnd;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DropTargetEvent;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.navigator.CommonDropAdapter;
+import org.eclipse.ui.views.navigator.LocalSelectionTransfer;
+import org.eclipse.uml2.common.edit.command.ChangeCommand;
+import org.eclipse.uml2.uml.Namespace;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.PackageableElement;
+
+/**
+ * This class handle Drop events in ModelExplorer view.
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class CommonDropAdapterAssistant extends org.eclipse.ui.navigator.CommonDropAdapterAssistant {
+
+ public CommonDropAdapterAssistant() {
+ }
+
+ @Override
+ public IStatus handleDrop(CommonDropAdapter dropAdapter, DropTargetEvent dropTargetEvent, Object dropTarget) {
+ Package targetElement = (Package)dropTarget;
+ if(LocalSelectionTransfer.getInstance().isSupportedType(dropAdapter.getCurrentTransfer())) {
+ switch(dropAdapter.getCurrentOperation()) {
+ case DND.DROP_MOVE:
+ handleDropMove(targetElement);
+ break;
+ // case DND.DROP_COPY:
+ // break;
+ }
+
+ }
+ return null;
+ }
+
+ @Override
+ public IStatus validateDrop(Object target, int operation, TransferData transferType) {
+ if(target instanceof Package) {
+ return Status.OK_STATUS;
+ }
+ return Status.CANCEL_STATUS;
+ }
+
+ private void handleDropMove(final Package target) {
+ ISelection s = LocalSelectionTransfer.getInstance().getSelection();
+ if(s instanceof IStructuredSelection) {
+ List<?> selectedElements = ((IStructuredSelection)s).toList();
+ for(Object o : selectedElements) {
+ if(o instanceof PackageableElement) {
+ PackageableElement element = (PackageableElement)o;
+ moveElementTo(element, target);
+ }
+ }
+ }
+ }
+
+ private void moveElementTo(final PackageableElement element, final Package target) {
+ TransactionalEditingDomain editingDomain = getEditingDomain();
+ if(editingDomain != null && (element.getNamespace() instanceof Package)) {
+ ChangeCommand changeCommand = new ChangeCommand(editingDomain, new Runnable() {
+
+ public void run() {
+ Namespace oldOwner = element.getNamespace();
+ if(oldOwner instanceof Package) {
+ // Remove from the old package
+ Package pkg = (Package)oldOwner;
+ pkg.getPackagedElements().remove(element);
+
+ // Add to the new package
+ target.getPackagedElements().add(element);
+ }
+ }
+ }, "Move " + element.getName() + " to " + target.getName());
+
+ if(changeCommand.canExecute()) {
+ editingDomain.getCommandStack().execute(changeCommand);
+ }
+ }
+ }
+
+ private TransactionalEditingDomain getEditingDomain() {
+ return EditorUtils.getTransactionalEditingDomain();
+ }
+
+ private IMultiDiagramEditor getMultiDiagramEditor() {
+ IEditorPart editorPart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+ if(editorPart instanceof IMultiDiagramEditor) {
+ return (IMultiDiagramEditor)editorPart;
+ }
+ return null;
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/DefaultEMFActionsFactory.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/DefaultEMFActionsFactory.java
new file mode 100644
index 00000000000..58075317f4f
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/DefaultEMFActionsFactory.java
@@ -0,0 +1,180 @@
+/*****************************************************************************
+ * Copyright (c) 2009 Atos Origin.
+ *
+ *
+ * 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:
+ * Emilien Perico (Atos Origin) emilien.perico@atosorigin.com - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.factory;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.ui.action.CopyAction;
+import org.eclipse.emf.edit.ui.action.CutAction;
+import org.eclipse.emf.edit.ui.action.DeleteAction;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.PasteAction;
+import org.eclipse.emf.edit.ui.action.RedoAction;
+import org.eclipse.emf.edit.ui.action.UndoAction;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * The Class DefaultEMFActionsFactory for creating a default action from EMF. Undefined actions are
+ * not still in use or might be overridden
+ *
+ * @author Emilien Perico
+ */
+public class DefaultEMFActionsFactory implements IActionHandlerFactory {
+
+ protected List<Action> actions = new LinkedList<Action>();
+
+ protected DeleteAction deleteAction;
+
+ protected CutAction cutAction;
+
+ protected CopyAction copyAction;
+
+ protected PasteAction pasteAction;
+
+ protected UndoAction undoAction;
+
+ protected RedoAction redoAction;
+
+ protected LoadResourceAction loadResourceAction;
+
+ // protected ValidateAction validateAction;
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<Action> createActions(EditingDomain editingDomain) {
+ ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages();
+
+ // Create Cut action
+ this.cutAction = new CutAction(editingDomain);
+ this.cutAction.setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_CUT));
+ actions.add(cutAction);
+
+ // Create Copy action
+ this.copyAction = new CopyAction(editingDomain);
+ this.copyAction.setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_COPY));
+ actions.add(copyAction);
+
+ // Create Paste action
+ this.pasteAction = new PasteAction(editingDomain);
+ this.pasteAction.setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE));
+ actions.add(pasteAction);
+
+ // Create Delete action
+ this.deleteAction = new DeleteAction(editingDomain, true);
+ this.deleteAction.setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
+ this.deleteAction.setDisabledImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE_DISABLED));
+ actions.add(deleteAction);
+
+ // Undo action
+ this.undoAction = new UndoAction();
+ this.undoAction.setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_UNDO));
+ actions.add(undoAction);
+
+ // Redo action
+ this.redoAction = new RedoAction();
+ this.redoAction.setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_REDO));
+ actions.add(redoAction);
+
+ // Load Resource action
+ this.loadResourceAction = new LoadResourceAction(editingDomain);
+ actions.add(loadResourceAction);
+
+ return actions;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void activate(CommonNavigator activeViewPart) {
+ deleteAction.setActiveWorkbenchPart(activeViewPart);
+ cutAction.setActiveWorkbenchPart(activeViewPart);
+ copyAction.setActiveWorkbenchPart(activeViewPart);
+ pasteAction.setActiveWorkbenchPart(activeViewPart);
+ undoAction.setActiveWorkbenchPart(activeViewPart);
+ redoAction.setActiveWorkbenchPart(activeViewPart);
+ loadResourceAction.setActiveWorkbenchPart(activeViewPart);
+
+ ISelectionProvider selectionProvider = null;
+ if(activeViewPart.getCommonViewer() instanceof ISelectionProvider) {
+ selectionProvider = activeViewPart.getCommonViewer();
+ selectionProvider.addSelectionChangedListener(deleteAction);
+ selectionProvider.addSelectionChangedListener(cutAction);
+ selectionProvider.addSelectionChangedListener(copyAction);
+ selectionProvider.addSelectionChangedListener(pasteAction);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void deactivate(CommonNavigator activeViewPart) {
+ deleteAction.setActiveWorkbenchPart(null);
+ cutAction.setActiveWorkbenchPart(null);
+ copyAction.setActiveWorkbenchPart(null);
+ pasteAction.setActiveWorkbenchPart(null);
+ undoAction.setActiveWorkbenchPart(null);
+ redoAction.setActiveWorkbenchPart(null);
+ loadResourceAction.setActiveWorkbenchPart(null);
+
+ ISelectionProvider selectionProvider = null;
+ if(activeViewPart.getCommonViewer() instanceof ISelectionProvider) {
+ selectionProvider = activeViewPart.getCommonViewer();
+ selectionProvider.removeSelectionChangedListener(deleteAction);
+ selectionProvider.removeSelectionChangedListener(cutAction);
+ selectionProvider.removeSelectionChangedListener(copyAction);
+ selectionProvider.removeSelectionChangedListener(pasteAction);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void fillActionBars(IActionBars actionBars) {
+ actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), deleteAction);
+ actionBars.setGlobalActionHandler(ActionFactory.CUT.getId(), cutAction);
+ actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(), copyAction);
+ actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), pasteAction);
+ actionBars.setGlobalActionHandler(ActionFactory.UNDO.getId(), undoAction);
+ actionBars.setGlobalActionHandler(ActionFactory.REDO.getId(), redoAction);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void update(IStructuredSelection structuredSelection) {
+ deleteAction.updateSelection(structuredSelection);
+ cutAction.updateSelection(structuredSelection);
+ copyAction.updateSelection(structuredSelection);
+ pasteAction.updateSelection(structuredSelection);
+ loadResourceAction.update();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<Action> getActions() {
+ return actions;
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/GroupableAdapterFactory.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/GroupableAdapterFactory.java
new file mode 100644
index 00000000000..1b73e0b8fbc
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/GroupableAdapterFactory.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana . 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: Javier Muñoz (Integranova) - Initial implementation
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.factory;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.navigator.providers.GroupableTreeArrayContentProvider;
+import org.eclipse.papyrus.navigator.providers.PackagingNode;
+
+/**
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ */
+public class GroupableAdapterFactory extends AdapterFactoryImpl {
+
+ /** The supported types. */
+ private final Collection<Object> supportedTypes = new ArrayList<Object>();
+
+ private final AdapterFactory wrappedAdapterFactory;
+
+ public GroupableAdapterFactory(AdapterFactory factory) {
+ wrappedAdapterFactory = factory;
+ supportedTypes.add(IStructuredItemContentProvider.class);
+ supportedTypes.add(ITreeItemContentProvider.class);
+ supportedTypes.add(IItemPropertySource.class);
+ supportedTypes.add(IEditingDomainItemProvider.class);
+ supportedTypes.add(IItemLabelProvider.class);
+ supportedTypes.add(ITableItemLabelProvider.class);
+ }
+
+ @Override
+ public Object adapt(Object target, Object type) {
+ if((target instanceof EObject) || (target instanceof PackagingNode)) {
+ return new GroupableTreeArrayContentProvider(this, wrappedAdapterFactory);
+ } else {
+ return this.wrappedAdapterFactory.adapt(target, type);
+ }
+ }
+
+ @Override
+ public Adapter adapt(Notifier target, Object type) {
+
+ return (Adapter)adapt((Object)target, type);
+ }
+
+ @Override
+ public boolean isFactoryForType(Object type) {
+ return (((type instanceof EObject) || (type instanceof PackagingNode) || supportedTypes.contains(type)) && (!(type instanceof View))) || this.wrappedAdapterFactory.isFactoryForType(type);
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/IActionHandlerFactory.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/IActionHandlerFactory.java
new file mode 100644
index 00000000000..ab6f0610e5c
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/IActionHandlerFactory.java
@@ -0,0 +1,82 @@
+/*****************************************************************************
+ * Copyright (c) 2009 Atos Origin.
+ *
+ *
+ * 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:
+ * Emilien Perico (Atos Origin) emilien.perico@atosorigin.com - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.factory;
+
+import java.util.List;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * A factory for creating Action objects from org.eclipse.jface.action
+ */
+public interface IActionHandlerFactory {
+
+ /**
+ * Creates a new IActionHandler object.
+ *
+ * @param editingDomain
+ * the editing domain
+ *
+ * @return the list of created actions
+ */
+ List<Action> createActions(EditingDomain editingDomain);
+
+ /**
+ * Gets the actions.
+ *
+ * @return the actions list
+ */
+ List<Action> getActions();
+
+ /**
+ * Activate the action.
+ *
+ * @param activeViewPart
+ * the active view part
+ */
+ void activate(CommonNavigator activeViewPart);
+
+ /**
+ * Deactivate the action.
+ *
+ * @param activeViewPart
+ * the active view part
+ */
+ void deactivate(CommonNavigator activeViewPart);
+
+ /**
+ * Update action from the selection
+ *
+ * @param structuredSelection
+ * the structured selection
+ */
+ void update(IStructuredSelection structuredSelection);
+
+ /**
+ * Adds the applicable actions to a part's action bars, including setting any global action
+ * handlers.
+ * <p>
+ * The default implementation does nothing.
+ * </p>
+ *
+ * @param actionBars
+ * the part's action bars
+ */
+ void fillActionBars(IActionBars actionBars);
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/RenameActionFactory.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/RenameActionFactory.java
new file mode 100644
index 00000000000..4531ebb3b01
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/factory/RenameActionFactory.java
@@ -0,0 +1,100 @@
+/*****************************************************************************
+ * Copyright (c) 2009 Atos Origin.
+ *
+ *
+ * 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:
+ * Emilien Perico (Atos Origin) emilien.perico@atosorigin.com - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.factory;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.papyrus.navigator.actions.RenameNamedElementAction;
+import org.eclipse.papyrus.navigator.internal.Activator;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.navigator.CommonNavigator;
+
+/**
+ * The Class RenameActionFactory for creating a rename action for named element
+ *
+ * @author Emilien Perico
+ */
+public class RenameActionFactory implements IActionHandlerFactory {
+
+ protected List<Action> actions = new LinkedList<Action>();
+
+ protected RenameNamedElementAction renameNamedElementAction;
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<Action> createActions(EditingDomain editingDomain) {
+ // Rename NamedElement action
+ // fjcano #290514 :: command to rename elements in the model explorer
+ this.renameNamedElementAction = new RenameNamedElementAction(editingDomain);
+ this.renameNamedElementAction.setImageDescriptor(Activator.getImageDescriptor("icons/etool16/rename.gif"));
+ actions.add(renameNamedElementAction);
+
+ return actions;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void activate(CommonNavigator activeViewPart) {
+ this.renameNamedElementAction.setActiveWorkbenchPart(activeViewPart);
+
+ ISelectionProvider selectionProvider = null;
+ if(activeViewPart.getCommonViewer() instanceof ISelectionProvider) {
+ selectionProvider = activeViewPart.getCommonViewer();
+ selectionProvider.addSelectionChangedListener(renameNamedElementAction);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void deactivate(CommonNavigator activeViewPart) {
+ this.renameNamedElementAction.setActiveWorkbenchPart(null);
+
+ ISelectionProvider selectionProvider = null;
+ if(activeViewPart.getCommonViewer() instanceof ISelectionProvider) {
+ selectionProvider = activeViewPart.getCommonViewer();
+ selectionProvider.removeSelectionChangedListener(renameNamedElementAction);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void fillActionBars(IActionBars actionBars) {
+ actionBars.setGlobalActionHandler(ActionFactory.RENAME.getId(), renameNamedElementAction);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void update(IStructuredSelection structuredSelection) {
+ this.renameNamedElementAction.updateSelection(structuredSelection);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<Action> getActions() {
+ return actions;
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/DiResourceFilter.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/DiResourceFilter.java
new file mode 100644
index 00000000000..171f5a9bc01
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/DiResourceFilter.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Atos Origin.
+ * 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:
+ * Atos Origin - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.filters;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.papyrus.infra.core.resource.notation.NotationModel;
+import org.eclipse.papyrus.infra.core.resource.sasheditor.DiModel;
+import org.eclipse.papyrus.infra.core.utils.DiResourceSet;
+
+/**
+ * Filter that hides/shows the di/uml/notation.
+ *
+ * @author <a href="mailto:thomas.szadel@atosorigin.com">Thomas Szadel</a>
+ */
+public class DiResourceFilter extends ViewerFilter {
+
+ /**
+ * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if(element instanceof IFile) {
+ IFile file = ((IFile)element);
+ String ext = file.getFileExtension();
+ if(NotationModel.NOTATION_FILE_EXTENSION.equalsIgnoreCase(ext)) {
+ // Let see if the .di exists
+ String name = file.getName().substring(0, file.getName().lastIndexOf('.'));
+ if(file.getParent().findMember(name + "." + DiModel.DI_FILE_EXTENSION) != null) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideAdditionalResourcesViewerFilter.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideAdditionalResourcesViewerFilter.java
new file mode 100644
index 00000000000..46c7f128f19
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideAdditionalResourcesViewerFilter.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.filters;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.papyrus.navigator.internal.AdditionalResources;
+
+/**
+ * Filter Additional Resources in navigator in order to hide.
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class HideAdditionalResourcesViewerFilter extends ViewerFilter {
+
+ /**
+ * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if(element instanceof AdditionalResources) {
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideDiagramsViewerFilter.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideDiagramsViewerFilter.java
new file mode 100644
index 00000000000..54e626b5ae6
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideDiagramsViewerFilter.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.filters;
+
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+/**
+ * Filter diagrams elements in navigator in order to hide.
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class HideDiagramsViewerFilter extends ViewerFilter {
+
+ /**
+ * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if(element instanceof Diagram) {
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideEAnnotationsViewerFilter.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideEAnnotationsViewerFilter.java
new file mode 100644
index 00000000000..43d8ad6e963
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideEAnnotationsViewerFilter.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.filters;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+/**
+ * Filter EAnnotation elements in navigator in order to hide.
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class HideEAnnotationsViewerFilter extends ViewerFilter {
+
+ /**
+ * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if(element instanceof EAnnotation) {
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideProfileApplicationsViewerFilter.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideProfileApplicationsViewerFilter.java
new file mode 100644
index 00000000000..8ae30164b33
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/filters/HideProfileApplicationsViewerFilter.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.filters;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.uml2.uml.ProfileApplication;
+
+/**
+ * Filter Profile Application elements in navigator in order to hide.
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class HideProfileApplicationsViewerFilter extends ViewerFilter {
+
+ /**
+ * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if(element instanceof ProfileApplication) {
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/Activator.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/Activator.java
new file mode 100644
index 00000000000..8d50db27444
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/Activator.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.internal;
+
+import java.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.navigator";
+
+ // The shared instance
+ private static Activator plugin;
+
+ /** The shared log helper. */
+ public static LogHelper log;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ log = new LogHelper(plugin);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+ /**
+ * get the image descriptor from a string path
+ *
+ * @param pathString
+ * path of the image
+ * @return the image descriptor
+ */
+ public static ImageDescriptor getImageDescriptor(String pathString) {
+
+ IPath path = new Path(pathString);
+ URL uri = FileLocator.find(Activator.plugin.getBundle(), path, null);
+ if(uri == null) {
+ return null;
+ }
+ return ImageDescriptor.createFromURL(uri);
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/AdditionalResources.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/AdditionalResources.java
new file mode 100644
index 00000000000..d64cb69a56a
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/AdditionalResources.java
@@ -0,0 +1,51 @@
+/***********************************************************************
+ * Copyright (c) 2007-2009 Anyware Technologies, Obeo
+ *
+ * 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:
+ * Anyware Technologies - initial API and implementation
+ * Obeo
+ *
+ **********************************************************************/
+package org.eclipse.papyrus.navigator.internal;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.papyrus.infra.core.utils.DiResourceSet;
+
+/**
+ * This object computes all the loaded resources from a resource set. <br>
+ *
+ * @author <a href="mailto:david.sciamma@anyware-tech.com">David Sciamma</a>
+ * @author <a href="mailto:jacques.lescot@anyware-tech.com">Jacques Lescot</a>
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ * @author <a href="mailto:thomas.szadel@atosorigin.com">Thomas Szadel</a>
+ */
+public class AdditionalResources {
+
+ private DiResourceSet diResourceSet;
+
+ /**
+ * Constructor
+ *
+ * @param rSet
+ * the ResourceSet to be used to load these Additional Resources
+ */
+ public AdditionalResources(DiResourceSet diResourceSet) {
+ this.diResourceSet = diResourceSet;
+ }
+
+ /**
+ * Returns all the resources without the DI and the domain resources
+ *
+ * @return the list of additional resources
+ */
+ public List<Resource> getResources() {
+ return diResourceSet.getAdditionalResources();
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/DeleteModelParticipant.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/DeleteModelParticipant.java
new file mode 100644
index 00000000000..e054c1390c5
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/DeleteModelParticipant.java
@@ -0,0 +1,143 @@
+/*****************************************************************************
+ * Copyright (c) 2009 Atos Origin.
+ *
+ *
+ * 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:
+ * <a href="mailto:thomas.szadel@atosorigin.com">Thomas Szadel</a> - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.internal.ltk;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.NullChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.DeleteParticipant;
+import org.eclipse.ltk.core.refactoring.resource.DeleteResourceChange;
+
+/**
+ * The participant that is aware of file deletion.
+ *
+ * @author <a href="mailto:thomas.szadel@atosorigin.com">Thomas Szadel</a>
+ *
+ */
+public class DeleteModelParticipant extends DeleteParticipant {
+
+ private Set<IResource> filesToRemove;
+
+ /**
+ * Overrides checkConditions.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#checkConditions(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
+ */
+ @Override
+ public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) throws OperationCanceledException {
+ return new RefactoringStatus();
+ }
+
+ /**
+ * Overrides createChange.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#createChange(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
+ List<Change> changes = new ArrayList<Change>(filesToRemove.size());
+ for(IResource file : filesToRemove) {
+ if(file.exists()) {
+ changes.add(new InternalDeleteResourceChange(file.getFullPath(), true));
+ }
+ }
+ if(changes.isEmpty()) {
+ return new NullChange();
+ } else {
+ return new CompositeChange(getName(), changes.toArray(new Change[changes.size()]));
+ }
+ }
+
+ /**
+ * Overrides getName.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#getName()
+ */
+ @Override
+ public String getName() {
+ return "Papyrus Model Deletion";
+ }
+
+ /**
+ * Overrides initialize.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#initialize(java.lang.Object)
+ */
+ @Override
+ protected boolean initialize(Object element) {
+ if(!(element instanceof IFile)) {
+ return false;
+ }
+ IFile file = (IFile)element;
+
+ filesToRemove = ModelParticipantHelpers.getRelatedFiles(file);
+ return filesToRemove.size() > 0;
+ }
+
+
+
+ private class InternalDeleteResourceChange extends DeleteResourceChange {
+
+ /**
+ * Constructor.
+ *
+ * @param resourcePath
+ * The file to delete.
+ * @param forceOutOfSync
+ * Delete even if out of sync
+ */
+ public InternalDeleteResourceChange(IPath resourcePath, boolean forceOutOfSync) {
+ super(resourcePath, forceOutOfSync);
+ }
+
+ /**
+ * @see org.eclipse.ltk.core.refactoring.resource.DeleteResourceChange#perform(org.eclipse.core.runtime.IProgressMonitor)
+ *
+ * @param pm
+ * @return
+ * @throws CoreException
+ */
+
+ @Override
+ public Change perform(IProgressMonitor pm) throws CoreException {
+ IResource resource = getModifiedResource();
+ // If the user selects the 3 resources, the delete fails.
+ if(resource == null || !resource.exists()) {
+ return new NullChange();
+ }
+ return super.perform(pm);
+ }
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/DirtyEditorChange.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/DirtyEditorChange.java
new file mode 100644
index 00000000000..2c6e66f72ae
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/DirtyEditorChange.java
@@ -0,0 +1,146 @@
+/*****************************************************************************
+ * Copyright (c) 2009 Atos Origin.
+ *
+ *
+ * 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:
+ * <a href="mailto:thomas.szadel@atosorigin.com">Thomas Szadel</a> - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.internal.ltk;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.swt.widgets.Display;
+
+
+/**
+ * A change that checks if an editor is actually editing the model and if it must be save.
+ *
+ * @author tszadel
+ *
+ */
+public class DirtyEditorChange extends Change {
+
+ private final IFile oldFile;
+
+ private final IFile newFile;
+
+ /**
+ * Constructor.
+ *
+ * @param resourceSet
+ * The resource set being changed.
+ * @param oldFile
+ * The old file.
+ * @param newFile
+ * The new file.
+ */
+ public DirtyEditorChange(IFile oldFile, IFile newFile) {
+ this.oldFile = oldFile;
+ this.newFile = newFile;
+ }
+
+ /**
+ * @see org.eclipse.ltk.core.refactoring.Change#getModifiedElement()
+ *
+ * @return
+ */
+
+ @Override
+ public Object getModifiedElement() {
+ return oldFile;
+ }
+
+ /**
+ * @see org.eclipse.ltk.core.refactoring.Change#getName()
+ *
+ * @return
+ */
+
+ @Override
+ public String getName() {
+ return "Check opened editors";
+ }
+
+ /**
+ * @see org.eclipse.ltk.core.refactoring.Change#initializeValidationData(org.eclipse.core.runtime.IProgressMonitor)
+ *
+ * @param pm
+ */
+
+ @Override
+ public void initializeValidationData(IProgressMonitor pm) {
+ // Nothing
+ }
+
+
+ private boolean hasDirtyEditors() {
+ IMultiDiagramEditor[] list = EditorUtils.getRelatedEditors(oldFile);
+ if(list != null && list.length > 0) {
+ for(IMultiDiagramEditor editor : list) {
+ if(editor.isDirty()) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @see org.eclipse.ltk.core.refactoring.Change#isValid(org.eclipse.core.runtime.IProgressMonitor)
+ *
+ * @param pm
+ * The progress monitor.
+ * @return The status.
+ * @throws CoreException
+ * Error.
+ * @throws OperationCanceledException
+ * Operation canceled.
+ */
+
+ @Override
+ public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException, OperationCanceledException {
+ final RefactoringStatus status = new RefactoringStatus();
+ // We need to get the current workbench... so we have to use the UI-Thread!
+ Display.getDefault().syncExec(new Runnable() {
+
+ public void run() {
+ if(hasDirtyEditors()) {
+ if(!MessageDialog.openConfirm(Display.getDefault().getActiveShell(), "Confirm saving", "The related editor(s) must be saved to continue.")) {
+ status.addFatalError("User doesn't want to save the related editor(s)");
+ }
+ }
+ }
+ });
+
+ return status;
+ }
+
+ /**
+ * @see org.eclipse.ltk.core.refactoring.Change#perform(org.eclipse.core.runtime.IProgressMonitor)
+ *
+ * @param pm
+ * The progress monitor.
+ * @return The change used to undo.
+ * @throws CoreException
+ * Error.
+ */
+
+ @Override
+ public Change perform(IProgressMonitor pm) throws CoreException {
+ // Nothing to do
+ return new DirtyEditorChange(newFile, oldFile);
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/ModelParticipantHelpers.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/ModelParticipantHelpers.java
new file mode 100644
index 00000000000..af604365233
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/ModelParticipantHelpers.java
@@ -0,0 +1,128 @@
+/*****************************************************************************
+ * Copyright (c) 2010 Atos Origin.
+ *
+ *
+ * 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:
+ * <a href="mailto:thomas.szadel@atosorigin.com">Thomas Szadel</a> - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.internal.ltk;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.papyrus.infra.core.resource.notation.NotationModel;
+import org.eclipse.papyrus.infra.core.resource.sasheditor.DiModel;
+import org.eclipse.papyrus.infra.core.utils.DiResourceSet;
+
+public class ModelParticipantHelpers {
+
+ /**
+ * get the files related the initialFile which need to be modified/deleted
+ * if initialFile is modified/deleted
+ *
+ * @param initialFile
+ * @return a list of related files. Does not include initialFile.
+ */
+ public static Set<IResource> getRelatedFiles(IFile initialFile) {
+
+ Set<IResource> relatedFiles = new HashSet<IResource>();
+
+ IContainer parent = initialFile.getParent();
+ IPath initialPath = initialFile.getFullPath();
+
+ IPath diPath = null;
+
+ if(DiModel.DI_FILE_EXTENSION.equalsIgnoreCase(initialPath.getFileExtension())) {
+ diPath = initialPath;
+ } else {
+ // try to find a di file with the same name
+ try {
+ for(IResource r : parent.members()) {
+ IPath p = r.getFullPath();
+ if(DiModel.DI_FILE_EXTENSION.equalsIgnoreCase(p.getFileExtension()) && p.removeFileExtension().equals(initialPath.removeFileExtension())) {
+ diPath = p;
+ break;
+ }
+ }
+ } catch (CoreException e) {
+ }
+ }
+
+ if(diPath != null) {
+ IFile diFile = parent.getFile(diPath.makeRelativeTo(parent.getFullPath()));
+
+ if(diFile.exists()) {
+ relatedFiles.add(diFile);
+
+ // add the notation file
+ IPath notationPath = initialPath.removeFileExtension().addFileExtension(NotationModel.NOTATION_FILE_EXTENSION);
+ IFile notationFile = parent.getFile(notationPath.makeRelativeTo(parent.getFullPath()));
+
+ if(notationFile.exists()) {
+ relatedFiles.add(notationFile);
+
+ // find the related model files referenced in the notation file
+ URI notationURI = URI.createPlatformResourceURI(notationPath.toString(), true);
+ ResourceSet rs = new ResourceSetImpl();
+ Resource notationResource = rs.getResource(notationURI, true);
+
+ if(notationResource != null) {
+ relatedFiles.addAll(getModelFilesFromNotationResource(notationResource));
+ }
+ }
+ }
+ }
+
+ // If the initialFile is contained in the list, we remove it
+ if(relatedFiles.contains(initialFile)) {
+ relatedFiles.remove(initialFile);
+ }
+
+ return relatedFiles;
+ }
+
+ private static List<IResource> getModelFilesFromNotationResource(Resource notationResource) {
+ List<IResource> modelFiles = new ArrayList<IResource>();
+
+ // look for a model associated with a diagram in notation
+ for(EObject eObject : notationResource.getContents()) {
+ if(eObject instanceof Diagram) {
+ Diagram diagram = (Diagram)eObject;
+ InternalEObject element = (InternalEObject)diagram.eGet(NotationPackage.Literals.VIEW__ELEMENT, false);
+ if(element != null && element.eIsProxy()) {
+ URI modelURI = element.eProxyURI().trimFragment();
+ if(modelURI.isPlatform()) {
+ IResource modelFile = ResourcesPlugin.getWorkspace().getRoot().findMember(modelURI.toPlatformString(true));
+ if(modelFile != null) {
+ modelFiles.add(modelFile);
+ }
+ }
+ }
+ }
+ }
+
+ return modelFiles;
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/MoveModelParticipant.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/MoveModelParticipant.java
new file mode 100644
index 00000000000..950297318d8
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/MoveModelParticipant.java
@@ -0,0 +1,112 @@
+/*****************************************************************************
+ * Copyright (c) 2009 Atos Origin.
+ *
+ *
+ * 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:
+ * <a href="mailto:thomas.szadel@atosorigin.com">Thomas Szadel</a> - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.internal.ltk;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.NullChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.MoveParticipant;
+import org.eclipse.ltk.core.refactoring.resource.MoveResourceChange;
+
+/**
+ * Participant that is aware of model deletion.
+ *
+ * @author <a href="mailto:thomas.szadel@atosorigin.com">Thomas Szadel</a>
+ *
+ */
+public class MoveModelParticipant extends MoveParticipant {
+
+ private Set<IResource> filesToMove = new HashSet<IResource>();
+
+ private IContainer destination;
+
+ /**
+ * Overrides checkConditions.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#checkConditions(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
+ */
+ @Override
+ public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) throws OperationCanceledException {
+ return new RefactoringStatus();
+ }
+
+ /**
+ * Overrides createChange.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#createChange(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
+ List<Change> changes = new ArrayList<Change>(filesToMove.size());
+
+ for(IResource path : filesToMove) {
+ if(path.exists()) {
+ changes.add(new MoveResourceChange(path, destination));
+ }
+ }
+ if(changes.isEmpty()) {
+ return new NullChange();
+ } else {
+ return new CompositeChange(getName(), changes.toArray(new Change[changes.size()]));
+ }
+ }
+
+ /**
+ * Overrides getName.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#getName()
+ */
+ @Override
+ public String getName() {
+ return "Papyrus Model Move";
+ }
+
+ /**
+ * Overrides initialize.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#initialize(java.lang.Object)
+ */
+ @Override
+ protected boolean initialize(Object element) {
+ if(!(element instanceof IFile)) {
+ return false;
+ }
+ IFile file = (IFile)element;
+
+ filesToMove = ModelParticipantHelpers.getRelatedFiles(file);
+ return filesToMove.size() > 0;
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/RenameModelChange.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/RenameModelChange.java
new file mode 100644
index 00000000000..b7150018632
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/RenameModelChange.java
@@ -0,0 +1,272 @@
+/*****************************************************************************
+ * Copyright (c) 2009 Atos Origin.
+ *
+ *
+ * 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:
+ * <a href="mailto:thomas.szadel@atosorigin.com">Thomas Szadel</a> - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.internal.ltk;
+
+import static org.eclipse.papyrus.navigator.internal.Activator.log;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.resource.RenameResourceChange;
+import org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor;
+import org.eclipse.papyrus.infra.core.resource.sasheditor.DiModelUtils;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.core.utils.DiResourceSet;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.part.FileEditorInput;
+
+/**
+ * Rename the model.<BR>
+ * <b>Note</b>: That change should be called inside a rename operation as it assumes that a {@link RenameResourceChange} occured.
+ *
+ * @author tszadel
+ *
+ */
+public class RenameModelChange extends Change {
+
+ private final Map<URI, URI> uriMap = new HashMap<URI, URI>();
+
+ private final IFile oldFile;
+
+ private final IFile newFile;
+
+ private final Set<IResource> relatedFiles;
+
+ /**
+ * Constructor.
+ *
+ * @param resourceSet
+ * The resource set being changed.
+ * @param oldFile
+ * The old file.
+ * @param newFile
+ * The new file.
+ */
+ public RenameModelChange(IFile oldFile, IFile newFile) {
+ this.oldFile = oldFile;
+ this.newFile = newFile;
+
+ IPath newPathWithoutExt = newFile.getFullPath().removeFileExtension();
+
+ // Create the map of URI that are being modified in the resource set
+ relatedFiles = ModelParticipantHelpers.getRelatedFiles(oldFile);
+ relatedFiles.add(oldFile);
+ for(IResource file : relatedFiles) {
+ IPath path = file.getFullPath();
+ URI oldURI = getPlatformURI(path);
+ URI newURI = getPlatformURI(newPathWithoutExt.addFileExtension(path.getFileExtension()));
+ uriMap.put(oldURI, newURI);
+ }
+ }
+
+ /**
+ * Overrides getModifiedElement.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.Change#getModifiedElement()
+ */
+ @Override
+ public Object getModifiedElement() {
+ return oldFile;
+ }
+
+ /**
+ * Overrides getName.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.Change#getName()
+ */
+ @Override
+ public String getName() {
+ return "Update all resources related to " + oldFile.getName();
+ }
+
+ /**
+ * Overrides initializeValidationData.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.Change#initializeValidationData(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public void initializeValidationData(IProgressMonitor pm) {
+ // Nothing
+ }
+
+ /**
+ * Overrides isValid.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.Change#isValid(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException, OperationCanceledException {
+ return new RefactoringStatus();
+ }
+
+ /**
+ * Get a platform resource URI of the given path
+ *
+ * @param path
+ * the path
+ * @return the uri
+ */
+ private URI getPlatformURI(IPath path) {
+ return URI.createPlatformResourceURI(path.toString(), true);
+ }
+
+
+ /**
+ * Overrides perform.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.Change#perform(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public Change perform(IProgressMonitor pm) throws CoreException {
+ String lMsg = "Rename " + oldFile.getName() + " to " + newFile.getName();
+ log.info(lMsg);
+ pm.beginTask(lMsg, 30);
+ try {
+ // That change assumes that the model resource has already been renamed
+ // So, the first thing to do is to get the new file, to restore it in order
+ // to change all the resources.
+ pm.subTask("Loading EMF model into memory");
+
+ boolean isUndoOperation = oldFile.exists() && !newFile.exists();
+ if(!isUndoOperation) {
+ newFile.move(oldFile.getFullPath(), true, new SubProgressMonitor(pm, 1));
+ }
+
+ pm.subTask("Saving dirty editors");
+ // We need to get the current workbench... so we have to use the UI-Thread!
+ final List<IMultiDiagramEditor> openedEditors = new ArrayList<IMultiDiagramEditor>();
+ Display.getDefault().syncExec(new Runnable() {
+
+ public void run() {
+ IMultiDiagramEditor[] multiEditors = EditorUtils.getRelatedEditors(oldFile);
+ if(multiEditors != null) {
+ for(IMultiDiagramEditor editor : multiEditors) {
+ if(editor.isDirty()) {
+ editor.doSave(new NullProgressMonitor());
+ }
+ openedEditors.add(editor);
+ }
+ }
+ }
+ });
+ pm.worked(10);
+
+ // Then, we can load the resource set as the file structure is now correct
+ DiResourceSet resourceSet = new DiResourceSet();
+ resourceSet.loadResources(oldFile);
+ // Force EMF resolve and load all the resources
+ EcoreUtil.resolveAll(resourceSet);
+ pm.worked(4);
+
+ // Change the URIs of modified resources
+ pm.subTask("Modifying resources' URI");
+ for(Resource res : resourceSet.getResources()) {
+ URI newURI = uriMap.get(res.getURI());
+ if(newURI != null) {
+ if(log.isDebugEnabled()) {
+ log.debug("Changing URI " + res.getURI() + " into " + newURI);
+ }
+ res.setURI(newURI);
+ }
+ }
+ pm.worked(5);
+
+ // Now, save all the resources
+ pm.subTask("Saving resources");
+ for(Resource res : resourceSet.getResources()) {
+ try {
+ res.save(null);
+ } catch (IOException e) {
+ log.error("Error while loading resource " + res.getURI(), e);
+ }
+ }
+ pm.worked(5);
+
+ // Do not forget to unload all the resources to avoid memory leak
+ pm.subTask("Unloading model");
+ resourceSet.unload();
+ pm.worked(1);
+
+ // Now, notify the editor of the change
+ if(!openedEditors.isEmpty()) {
+ Display.getDefault().syncExec(new Runnable() {
+
+ public void run() {
+ // Get the DI file as the rename could occur on any model's file.
+ IFile newDiFile = DiModelUtils.getRelatedDiFile(newFile);
+ for(IMultiDiagramEditor editor : openedEditors) {
+ try {
+ DiResourceSet diRes = editor.getServicesRegistry().getService(DiResourceSet.class);
+ if(diRes != null) {
+ diRes.saveAs(newFile.getFullPath());
+ }
+ editor.setEditorInput(new FileEditorInput(newDiFile));
+
+ } catch (ServiceException e) {
+ log.error(e);
+ } catch (IOException e) {
+ log.error(e);
+ }
+ }
+ }
+ });
+ }
+
+ // Then, remove the old model files
+ pm.subTask("Removing old files");
+ for(IResource file : relatedFiles) {
+ if(file.exists()) {
+ file.delete(true, new NullProgressMonitor());
+ }
+ }
+ pm.worked(4);
+
+ if(isUndoOperation) {
+ newFile.move(oldFile.getFullPath(), true, new SubProgressMonitor(pm, 1));
+ }
+
+ return new RenameModelChange(newFile, oldFile);
+ } finally {
+ pm.done();
+ }
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/RenameModelParticipant.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/RenameModelParticipant.java
new file mode 100644
index 00000000000..40bb076bcb8
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/ltk/RenameModelParticipant.java
@@ -0,0 +1,137 @@
+/*****************************************************************************
+ * Copyright (c) 2009 Atos Origin.
+ *
+ *
+ * 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:
+ * <a href="mailto:thomas.szadel@atosorigin.com">Thomas Szadel</a> - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.internal.ltk;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.RenameParticipant;
+
+/**
+ * Participant that is aware of the renaming of a model.
+ *
+ * @author <a href="mailto:thomas.szadel@atosorigin.com">Thomas Szadel</a>
+ *
+ */
+public class RenameModelParticipant extends RenameParticipant {
+
+ private IFile fileToRename;
+
+ private IFile newFile;
+
+ /**
+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#createPreChange(org.eclipse.core.runtime.IProgressMonitor)
+ *
+ * @param pm
+ * The progress monitor.
+ * @return The change.
+ * @throws CoreException
+ * @throws OperationCanceledException
+ */
+
+ @Override
+ public Change createPreChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
+ return new DirtyEditorChange(fileToRename, newFile);
+ }
+
+ /**
+ * Overrides checkConditions.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#checkConditions(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext)
+ */
+ @Override
+ public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) throws OperationCanceledException {
+ return new RefactoringStatus();
+ }
+
+ /**
+ * Overrides createChange.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#createChange(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ @Override
+ public Change createChange(IProgressMonitor pm) throws CoreException, OperationCanceledException {
+ return new RenameModelChange(fileToRename, newFile);
+ }
+
+ /**
+ * Overrides getName.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#getName()
+ */
+ @Override
+ public String getName() {
+ return "Papyrus Model Renaming";
+ }
+
+ /**
+ * Overrides initialize.
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#initialize(java.lang.Object)
+ */
+ @Override
+ protected boolean initialize(Object element) {
+ if(!(element instanceof IFile)) {
+ return false;
+ }
+ fileToRename = (IFile)element;
+ String ext = fileToRename.getFileExtension();
+
+ IContainer parent = fileToRename.getParent();
+ String newName = getArguments().getNewName();
+ int idx = newName.lastIndexOf('.');
+ if(idx > 0) {
+ newName = newName.substring(0, idx);
+ } else {
+ newName = newName + '.' + ext; // Always append the extension
+ }
+
+ boolean otherFiles = false;
+ for(IResource file : ModelParticipantHelpers.getRelatedFiles(fileToRename)) {
+ IPath path = file.getFullPath();
+ // Only add the change if the resource exists
+ IFile renFile = parent.getFile(path.makeRelativeTo(parent.getFullPath()));
+ if(!path.equals(fileToRename.getFullPath()) && renFile.exists()) {
+ otherFiles = true;
+ break;
+ }
+ }
+ if(otherFiles) {
+ // Get the new file
+ IPath newDiPath = fileToRename.getFullPath().removeLastSegments(1);
+ newDiPath = newDiPath.append(newName).addFileExtension(ext);
+ newFile = parent.getFile(newDiPath.makeRelativeTo(parent.getFullPath()));
+ return true;
+ } else {
+ return false;
+ }
+
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/utils/NavigatorUtils.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/utils/NavigatorUtils.java
new file mode 100644
index 00000000000..f87140becce
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/utils/NavigatorUtils.java
@@ -0,0 +1,262 @@
+package org.eclipse.papyrus.navigator.internal.utils;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramGraphicalViewer;
+import org.eclipse.gmf.runtime.emf.core.util.EMFCoreUtil;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IViewReference;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Utility method for Model Navigator.
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ * @author <a href="mailto:thomas.szadel@atosorigin.com">Thomas Szadel</a>: Remove Backbone
+ * dependency
+ **/
+public class NavigatorUtils {
+
+ /**
+ * Find a <IViewPart> by it's id string.
+ *
+ * @param viewID
+ * the view id
+ *
+ * @return the i view part
+ */
+ public static IViewPart findViewPart(String viewID) {
+ IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+ if(page == null) {
+ return null;
+ }
+ IViewReference reference = page.findViewReference(viewID);
+ if(reference == null) {
+ return null;
+ }
+ IWorkbenchPart part = reference.getPart(false);
+ if(part instanceof IViewPart) {
+ return (IViewPart)part;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Unwraps selection. Gets <EObject>s from <EditPart>s, from <View>s or from <EObject>s
+ *
+ * @param selection
+ * the selection
+ *
+ * @return the i selection
+ */
+ public static ISelection unwrapSelection(ISelection selection) {
+ if(selection instanceof StructuredSelection && !selection.isEmpty()) {
+ List<EObject> selectionList = new ArrayList<EObject>();
+ StructuredSelection structuredSelection = (StructuredSelection)selection;
+ for(Iterator<?> iterator = structuredSelection.iterator(); iterator.hasNext();) {
+ Object next = iterator.next();
+ if(next instanceof EditPart) {
+ Object model = ((EditPart)next).getModel();
+ EObject element = null;
+ if(model instanceof View) {
+ element = ((View)model).getElement();
+ } else if(model instanceof EObject) {
+ element = (EObject)model;
+ }
+ if(element != null) {
+ selectionList.add(element);
+ }
+ } else if(next instanceof View) {
+ EObject element = ((View)next).getElement();
+ if(element != null) {
+ selectionList.add(element);
+ }
+ } else if(next instanceof EObject) {
+ selectionList.add((EObject)next);
+ }
+ }
+ return new StructuredSelection(selectionList);
+ } else {
+ return selection;
+ }
+ }
+
+ /**
+ * Finds the <EditPart>s for the <EObject>s in the selection.
+ *
+ * @param selection
+ * the selection
+ * @param viewer
+ * the viewer
+ *
+ * @return the edits the parts from selection
+ */
+ public static List<EditPart> getEditPartsFromSelection(ISelection selection, IDiagramGraphicalViewer viewer) {
+ if(selection instanceof StructuredSelection && !selection.isEmpty()) {
+ StructuredSelection structuredSelection = (StructuredSelection)selection;
+ // look for Views of the EObjects in the selection
+ List<View> views = new ArrayList<View>();
+ for(Object o : structuredSelection.toList()) {
+ if(o instanceof EObject) {
+ List<Object> referencerViews = getEObjectViews((EObject)o);
+ for(Object ro : referencerViews) {
+ if(ro instanceof View) {
+ views.add((View)ro);
+ }
+ }
+ }
+ }
+ if(!views.isEmpty()) {
+ List<EditPart> editParts = new ArrayList<EditPart>();
+ for(View view : views) {
+ Object ep = viewer.getEditPartRegistry().get(view);
+ if(ep instanceof EditPart) {
+ editParts.add((EditPart)ep);
+ }
+ }
+ if(!editParts.isEmpty()) {
+ return editParts;
+ }
+ }
+ }
+ return Collections.emptyList();
+ }
+
+ /**
+ * Gets the given <EObject> views.
+ *
+ * @param element
+ * the element
+ *
+ * @return the e object views
+ */
+ // @unused
+ public static List<Object> getEObjectViews(EObject element) {
+ List<Object> views = new ArrayList<Object>();
+ if(element != null) {
+ EReference[] features = { NotationPackage.eINSTANCE.getView_Element() };
+ Collection<?> referencers = EMFCoreUtil.getReferencers(element, features);
+ views.addAll(referencers);
+ }
+ return views;
+ }
+
+ // //
+ // get an object name
+ // //
+
+ /**
+ * Gets the object name or empty string.
+ *
+ * @param object
+ * the object
+ *
+ * @return the object name or empty string
+ */
+ // @unused
+ public static String getObjectNameOrEmptyString(Object object) {
+ String name = getObjectName(object);
+ return name == null ? "" : name;
+ }
+
+ /** The Constant getNameNames. */
+ private static final String[] getNameNames = { "getName", "getname" };
+
+ /**
+ * Gets the object name.
+ *
+ * @param object
+ * the object
+ *
+ * @return the object name
+ */
+ // @unused
+ public static String getObjectName(Object object) {
+ if(object == null) {
+ return null;
+ }
+ Method method = null;
+ Object o = null;
+ for(String methodName : getNameNames) {
+ try {
+ method = object.getClass().getMethod(methodName, (Class[])null);
+ } catch (NoSuchMethodException e) {
+ method = null;
+ }
+ if(method != null) {
+ break;
+ }
+ }
+ if(method != null) {
+ try {
+ o = method.invoke(object, (Object[])null);
+ } catch (IllegalAccessException ex) {
+ return null;
+ } catch (InvocationTargetException ex) {
+ return null;
+ }
+ if(o instanceof String) {
+ return (String)o;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Opens a {@link Diagram} in the sash editor.
+ *
+ * @param diagram
+ */
+ // @unused
+ public static void openDiagram(Diagram diagram) {
+ IPageMngr pageManager = EditorUtils.getIPageMngr();
+ if(pageManager != null) {
+ pageManager.openPage(diagram);
+ }
+ }
+
+ /**
+ * Opens a view part in the workbench with the specified ID.
+ *
+ * @param viewPartID
+ */
+ // @unused
+ public static void openViewPart(String viewPartID) {
+ if(viewPartID == null) {
+ return;
+ }
+ try {
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(viewPartID);
+ } catch (PartInitException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Opens the property sheets view.
+ */
+ public static void openPropertySheetsView() {
+ openViewPart("org.eclipse.ui.views.PropertySheet");
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/utils/StereotypeApplicationUtils.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/utils/StereotypeApplicationUtils.java
new file mode 100644
index 00000000000..13475430434
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/internal/utils/StereotypeApplicationUtils.java
@@ -0,0 +1,128 @@
+/*****************************************************************************
+ * Copyright (c) 2009 Atos Origin.
+ *
+ *
+ * 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:
+ * Emilien Perico (Atos Origin) emilien.perico@atosorigin.com - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.internal.utils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.EStructuralFeature.Setting;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.uml2.common.util.CacheAdapter;
+
+/**
+ * Class that manages stereotyped element between model explorer and diagram for profile diagram
+ * based
+ */
+public class StereotypeApplicationUtils {
+
+ /**
+ * Unwraps selection. Gets base element from EObject
+ *
+ * @param selection
+ * the selection
+ *
+ * @return the i selection
+ */
+ public static ISelection unwrapStereotypedSelection(ISelection selection) {
+ if(selection instanceof StructuredSelection && !selection.isEmpty()) {
+ StructuredSelection structuredSelection = (StructuredSelection)selection;
+ List<EObject> selectionList = new ArrayList<EObject>();
+ for(Iterator<?> iterator = structuredSelection.iterator(); iterator.hasNext();) {
+ Object next = iterator.next();
+ if(next instanceof EObject) {
+ EObject element = getBaseElement((EObject)next);
+ if(element != null) {
+ selectionList.add(element);
+ }
+ }
+ }
+ if(!selectionList.isEmpty()) {
+ return new StructuredSelection(selectionList);
+ }
+ }
+ return selection;
+ }
+
+ /**
+ * Gets the stereotype application selection of a stereotyped element from common viewer.
+ *
+ * @param selection
+ * the selection
+ *
+ * @return the stereotype application selection
+ */
+ public static ISelection getStereotypedSelectionFromCommonViewer(ISelection selection) {
+ if(selection instanceof TreeSelection) {
+ TreeSelection treeSelectionEvent = (TreeSelection)selection;
+ Object firstElement = treeSelectionEvent.getFirstElement();
+ if(firstElement instanceof EObject) {
+ List<EObject> stereotypedApplications = StereotypeApplicationUtils.getStereotypedApplications((EObject)firstElement);
+ return new StructuredSelection(stereotypedApplications);
+ }
+ }
+ return selection;
+ }
+
+ /**
+ * Gets the stereotyped applications for an eObject
+ *
+ * @param eObject
+ * the eObject
+ *
+ * @return the stereotyped applications
+ */
+ public static List<EObject> getStereotypedApplications(EObject eObject) {
+ List<EObject> references = new ArrayList<EObject>();
+ if(eObject != null) {
+ Collection<Setting> inverseReferences = CacheAdapter.INSTANCE.getNonNavigableInverseReferences(eObject);
+ for(Setting ref : inverseReferences) {
+ EObject extension = ref.getEObject();
+ EObject baseElement = getBaseElement(extension);
+ if(eObject.equals(baseElement)) {
+ references.add(extension);
+ }
+ }
+ }
+ return references;
+ }
+
+ /**
+ * Gets the base element of an eObject
+ *
+ * @param eObject
+ * the eObject
+ *
+ * @return the base element
+ */
+ private static EObject getBaseElement(EObject eObject) {
+ if(eObject != null) {
+ for(EStructuralFeature f : eObject.eClass().getEAllStructuralFeatures()) {
+ if(f.getName().startsWith("base_")) {
+ Object b = eObject.eGet(f);
+ if(b instanceof EObject && b != null) {
+ return (EObject)b;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/INavigatorPreferenceConstants.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/INavigatorPreferenceConstants.java
new file mode 100644
index 00000000000..6e44dd018a2
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/INavigatorPreferenceConstants.java
@@ -0,0 +1,27 @@
+/*****************************************************************************
+ * Copyright (c) 2010 Atos Origin.
+ *
+ *
+ * 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:
+ * Emilien Perico (Atos Origin) emilien.perico@atosorigin.com - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.preferences;
+
+/**
+ * Defines specific preference constants for papyrus navigator.
+ *
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface INavigatorPreferenceConstants {
+
+ /**
+ * the preference for displaying the warning popup when element will be transform into another one
+ */
+ public static final String PREF_NAVIGATOR_TRANSFORM_INTO_SHOW_POPUP = "org.eclipse.papyrus.navigator.TransformInto.showPopupDialog"; //$NON-NLS-1$
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/NavigatorPreferenceInitializer.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/NavigatorPreferenceInitializer.java
new file mode 100644
index 00000000000..57af0e3e7a8
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/NavigatorPreferenceInitializer.java
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ * Copyright (c) 2010 Atos Origin.
+ *
+ *
+ * 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:
+ * Emilien Perico (Atos Origin) emilien.perico@atosorigin.com - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.preferences;
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.navigator.internal.Activator;
+
+/**
+ * This preference initializer initializes diagram preferences specific to the activity diagram.
+ */
+public class NavigatorPreferenceInitializer extends AbstractPreferenceInitializer {
+
+ /**
+ * Initialize default preferences specific to the activity diagram
+ */
+ public void initializeDefaultPreferences() {
+ IPreferenceStore store = getPreferenceStore();
+
+ // preference for showing popup dialog when transform element command is performed
+ store.setDefault(INavigatorPreferenceConstants.PREF_NAVIGATOR_TRANSFORM_INTO_SHOW_POPUP, false);
+ }
+
+ /**
+ * Get the preference store
+ */
+ protected IPreferenceStore getPreferenceStore() {
+ return Activator.getDefault().getPreferenceStore();
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/NavigatorPreferencePage.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/NavigatorPreferencePage.java
new file mode 100644
index 00000000000..71b49416688
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/NavigatorPreferencePage.java
@@ -0,0 +1,57 @@
+/*****************************************************************************
+ * Copyright (c) 2010 Atos Origin.
+ *
+ *
+ * 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:
+ * Emilien Perico (Atos Origin) emilien.perico@atosorigin.com - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.preferences;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusNodePreferencePage;
+import org.eclipse.papyrus.navigator.internal.Activator;
+import org.eclipse.swt.widgets.Composite;
+
+
+public class NavigatorPreferencePage extends AbstractPapyrusNodePreferencePage {
+
+ /**
+ * @generated
+ */
+ @Override
+ protected String getBundleId() {
+ return Activator.PLUGIN_ID;
+ }
+
+ /**
+ * @generated
+ */
+ public static void initDefaults(IPreferenceStore store) {
+
+ // String elementName = "Model Explorer";
+ // PreferenceConverter.setDefault(store, PreferenceConstantHelper.getElementConstant(elementName, PreferenceConstantHelper.COLOR_FILL), new org.eclipse.swt.graphics.RGB(255, 255, 255));
+ // PreferenceConverter.setDefault(store, PreferenceConstantHelper.getElementConstant(elementName, PreferenceConstantHelper.COLOR_LINE), new org.eclipse.swt.graphics.RGB(0, 0, 0));
+ //
+ // // Set the default for the gradient
+ // store.setDefault(PreferenceConstantHelper.getElementConstant(elementName, PreferenceConstantHelper.GRADIENT_POLICY), false);
+ // GradientPreferenceConverter gradientPreferenceConverter = new GradientPreferenceConverter(new org.eclipse.swt.graphics.RGB(255, 255, 255), new org.eclipse.swt.graphics.RGB(0, 0, 0), 0, 0);
+ // store.setDefault(PreferenceConstantHelper.getElementConstant(elementName, PreferenceConstantHelper.COLOR_GRADIENT), gradientPreferenceConverter.getPreferenceValue());
+
+ }
+
+ @Override
+ protected void createPageContents(Composite parent) {
+ //super.createPageContents(parent);
+
+ // show popup dialog
+ TransformCommandShowPopupDialogGroup groupComposite = new TransformCommandShowPopupDialogGroup(parent, getTitle(), this);
+ addAbstractGroup(groupComposite);
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/TransformCommandShowPopupDialogGroup.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/TransformCommandShowPopupDialogGroup.java
new file mode 100644
index 00000000000..0511eff786d
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/preferences/TransformCommandShowPopupDialogGroup.java
@@ -0,0 +1,67 @@
+/*****************************************************************************
+ * Copyright (c) 2010 Atos Origin.
+ *
+ *
+ * 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:
+ * Emilien Perico (Atos Origin) emilien.perico@atosorigin.com - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.preferences;
+
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.papyrus.infra.gmfdiag.preferences.ui.AbstractGroup;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+
+
+public class TransformCommandShowPopupDialogGroup extends AbstractGroup {
+
+ private static final String SHOW_POPUP_DIALOG_GROUP_TITLE = "Transform into Action";
+
+ private static final String SHOW_POPUP_DIALOG_GROUP_MESSAGE = "Do not show popup dialog when transform command is performed";
+
+ /** Editor for deciding to show the warning popup */
+ private BooleanFieldEditor showPopupDialogBooleanFieldEditor;
+
+ /**
+ * Creation of an ActivityEdgeLabelVisibilityGroup Composite.
+ *
+ * @param parent
+ * the parent of the composite
+ * @param dialogPage
+ * to set the page in field editor
+ * @param title
+ * the title
+ */
+ public TransformCommandShowPopupDialogGroup(Composite parent, String title, DialogPage dialogPage) {
+ super(parent, title, dialogPage);
+ createContent(parent);
+ }
+
+ /**
+ * Creates the content.
+ *
+ * @param parent
+ * the parent
+ */
+ public void createContent(Composite parent) {
+ Group visibilityGroup = new Group(parent, SWT.SCROLL_PAGE);
+ visibilityGroup.setLayout(new GridLayout());
+ visibilityGroup.setText(SHOW_POPUP_DIALOG_GROUP_TITLE);
+
+ // field for name label visibility
+ showPopupDialogBooleanFieldEditor = new BooleanFieldEditor(INavigatorPreferenceConstants.PREF_NAVIGATOR_TRANSFORM_INTO_SHOW_POPUP, SHOW_POPUP_DIALOG_GROUP_MESSAGE, visibilityGroup);
+ showPopupDialogBooleanFieldEditor.setPage(dialogPage);
+
+ addFieldEditor(showPopupDialogBooleanFieldEditor);
+
+ }
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/EObjectPackagingNode.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/EObjectPackagingNode.java
new file mode 100644
index 00000000000..34b6740b962
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/EObjectPackagingNode.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) - Initial implementation
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.providers;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.uml2.uml.PackageImport;
+import org.eclipse.uml2.uml.PackageableElement;
+
+/**
+ * A {@link PackagingNode} for {@link EObject}s. Children are obtained by
+ * looking {@link EObject}'s contents and selecting those elements that match
+ * the {@link EClass}
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ * @see <a href=https://bugs.eclipse.org/bugs/show_bug.cgi?id=290422>Bug
+ * #290422</a>
+ *
+ */
+public class EObjectPackagingNode extends PackagingNode {
+
+ /**
+ * {@link EClass} to filter children element in contents.
+ */
+ private final EClass eClass;
+
+ public EObjectPackagingNode(EClass eClass, EObject parent) {
+ super(eClass.getName(), parent);
+ if(eClass == null || parent == null) {
+ throw new IllegalArgumentException("No EClass or EObject provided");
+ }
+ this.eClass = eClass;
+ }
+
+ /**
+ * Parent as {@link EObject}.
+ *
+ * @return
+ */
+ public EObject getEObjectParent() {
+ if(getParent() instanceof EObject) {
+ return (EObject)getParent();
+ }
+ return null;
+ }
+
+ /**
+ * The {@link EClass} to filter contents.
+ *
+ * @return
+ */
+ public EClass getEClass() {
+ return eClass;
+ }
+
+ /**
+ * Adds an element to the contained collection.
+ */
+ @Override
+ public void addContainedNode(Object o) {
+ super.getContainedNodes().add(o);
+ }
+
+ @Override
+ public Collection<Object> getContainedNodes() {
+ Collection<Object> elements = findContainedEClassElements();
+ elements.addAll(super.getContainedNodes());
+ return elements;
+ }
+
+ private Collection<Object> findContainedEClassElements() {
+ EObject parent = getEObjectParent();
+ if(parent == null) {
+ return Collections.EMPTY_SET;
+ }
+ Collection<Object> elements = new ArrayList<Object>();
+ List<EObject> contents = null;
+ if(parent instanceof PackageImport) {
+ // fjcano #297372 : show PackageImport's imported Package's children
+ contents = new ArrayList<EObject>();
+ for(PackageableElement element : ((PackageImport)parent).getImportedPackage().getPackagedElements()) {
+ contents.add(element);
+ }
+ } else {
+ contents = parent.eContents();
+ }
+ for(EObject content : contents) {
+ if(content != null && content.eClass() != null && content.eClass().getName() != null) {
+ if(content.eClass().getName().equals(getEClass().getName())) {
+ elements.add(content);
+ }
+ }
+ }
+ return elements;
+ }
+
+ /**
+ * True if parent and eClass match.
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if(obj instanceof EObjectPackagingNode) {
+ EObjectPackagingNode other = (EObjectPackagingNode)obj;
+ if(other.getEClass() != null && other.getEClass().equals(getEClass()) && other.getEObjectParent() != null && other.getEObjectParent().equals(getEObjectParent())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/GroupableLabelProvider.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/GroupableLabelProvider.java
new file mode 100644
index 00000000000..4282502539b
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/GroupableLabelProvider.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) - Initial implementation
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.providers;
+
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ * @see <a href=https://bugs.eclipse.org/bugs/show_bug.cgi?id=290422>Bug #290422</a>
+ */
+public class GroupableLabelProvider extends LabelProvider {
+
+ @Override
+ public Image getImage(Object element) {
+ if(element instanceof PackagingNode) {
+ return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
+ }
+ return super.getImage(element);
+ }
+
+ @Override
+ public String getText(Object element) {
+ if(element instanceof PackagingNode) {
+ return "<" + ((PackagingNode)element).getName() + ">";
+ }
+ return super.getText(element);
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/GroupableTreeArrayContentProvider.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/GroupableTreeArrayContentProvider.java
new file mode 100644
index 00000000000..ed5983ee2b1
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/GroupableTreeArrayContentProvider.java
@@ -0,0 +1,278 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) - initial api implementation
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.providers;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.provider.EObjectItemProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.uml2.uml.PackageImport;
+
+/**
+ * A provider that takes envelopes children in groups by type. EObjecs are
+ * grouped by their {@link EClass}. {@link Object}s are grouped by their first
+ * Interface.
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ * @see <a href=https://bugs.eclipse.org/bugs/show_bug.cgi?id=290422>Bug
+ * #290422</a>
+ *
+ */
+public class GroupableTreeArrayContentProvider extends EObjectItemProvider {
+
+ /**
+ * A <Map> from <Object> to containing <PackagingNode>.
+ */
+ private static Map<Object, PackagingNode> parentNodes = null;
+
+ /**
+ * A <Map> from <Object> to contained <PackagingNodes>.
+ */
+ private static Map<Object, Collection<?>> virtualSuperNodes = null;
+
+ synchronized protected static Map<Object, PackagingNode> getParentNodes() {
+ if(parentNodes == null) {
+ parentNodes = new HashMap<Object, PackagingNode>();
+ }
+ return parentNodes;
+ }
+
+ synchronized protected static Map<Object, Collection<?>> getVirtualSuperNodes() {
+ if(virtualSuperNodes == null) {
+ virtualSuperNodes = new HashMap<Object, Collection<?>>();
+ }
+ return virtualSuperNodes;
+ }
+
+ AdapterFactory helperAdapterFactory;
+
+ public GroupableTreeArrayContentProvider(AdapterFactory adapterFactory, AdapterFactory helper) {
+ super(adapterFactory);
+ helperAdapterFactory = helper;
+ }
+
+ @Override
+ public Collection<?> getChildren(Object parentElement) {
+ if(parentElement instanceof PackagingNode) {
+ return ((PackagingNode)parentElement).getContainedNodes();
+ } else if(getVirtualSuperNodes().containsKey(parentElement)) {
+ updateElementChildren(parentElement);
+ return getVirtualSuperNodes().get(parentElement);
+ } else {
+ Collection<?> children = getVirtualSupernodes(parentElement);
+ getVirtualSuperNodes().put(parentElement, children);
+ return children;
+ }
+ }
+
+ public Object getParent(Object element) {
+ if(element instanceof PackagingNode) {
+ return ((PackagingNode)element).getParent();
+ } else if(getParentNodes().containsKey(element)) {
+ return getParentNodes().get(element);
+ } else if(element instanceof EObject && element instanceof View == false) {
+ createVirtualSuperNodesTilParent((EObject)element);
+ if(getParentNodes().containsKey(element)) {
+ return getParentNodes().get(element);
+ }
+ }
+ Object adapter = helperAdapterFactory.adapt(element, ITreeItemContentProvider.class);
+ if(adapter instanceof ITreeItemContentProvider) {
+ return ((ITreeItemContentProvider)adapter).getParent(element);
+ } else
+ return null;
+ }
+
+ public boolean hasChildren(Object element) {
+ if(element instanceof PackagingNode) {
+ return true;
+ } else {
+ if(element instanceof PackageImport) {
+ return ((PackageImport)element).getImportedPackage().getPackagedElements().size() > 0;
+ }
+ Object adapter = helperAdapterFactory.adapt(element, ITreeItemContentProvider.class);
+ if(adapter instanceof ITreeItemContentProvider) {
+ return ((ITreeItemContentProvider)adapter).hasChildren(element);
+ } else
+ return false;
+ }
+ }
+
+ @Override
+ public Collection<?> getElements(Object inputElement) {
+
+ return getVirtualSupernodes(inputElement);
+ }
+
+ private String getKey(Object o) {
+ if(o instanceof EObject) {
+ return ((EObject)o).eClass().getName();
+ } else {
+ return o.getClass().getInterfaces()[0].getSimpleName();
+ }
+ }
+
+ private Collection<?> getVirtualSupernodes(Collection<?> node) {
+ Object[] nodes = node != null ? node.toArray(new Object[node.size()]) : new Object[0];
+ return getVirtualSupernodes(nodes);
+ }
+
+ private Collection<?> getVirtualSupernodes(Object[] node) {
+ Map<String, Object> superNodes = new HashMap<String, Object>();
+ Object[] nodeList = node != null ? node : new Object[0];
+
+ for(int i = 0; i < nodeList.length; i++) {
+ if(nodeList[i] instanceof View) {
+ superNodes.put(nodeList[i].toString(), nodeList[i]);
+ } else {
+ String key = getKey(nodeList[i]);
+ PackagingNode ghostNode = null;
+ if(!superNodes.containsKey(key)) {
+ ghostNode = new PackagingNode(key, super.getParent(nodeList[i]));
+ superNodes.put(key, ghostNode);
+ } else {
+ ghostNode = superNodes.get(key) instanceof PackagingNode ? (PackagingNode)superNodes.get(key) : null;
+ }
+ if(ghostNode != null) {
+ ghostNode.getContainedNodes().add(nodeList[i]);
+ getParentNodes().put(nodeList[i], ghostNode);
+ }
+ }
+ }
+ return superNodes.values();
+ }
+
+ private Collection<?> getVirtualSupernodes(Object parent) {
+ Collection<?> children = null;
+ if(parent instanceof PackageImport) {
+ // fjcano #297372 : show PackageImport's imported Package's children
+ children = ((PackageImport)parent).getImportedPackage().getPackagedElements();
+ } else {
+ Object adapter = helperAdapterFactory.adapt(parent, ITreeItemContentProvider.class);
+ if(adapter instanceof ITreeItemContentProvider) {
+ children = ((ITreeItemContentProvider)adapter).getChildren(parent);
+ }
+ }
+ if(parent instanceof EObject && children != null) {
+ // Map<Object, Collection<?>> superNodes = getVirtualSuperNodes();
+ // collection of EClass nodes to create
+ Collection<EClass> eClasses = new ArrayList<EClass>();
+ // collection of other elements to add as children
+ Collection<Object> othersToAdd = new ArrayList<Object>();
+ for(Object child : children) {
+ if(child instanceof EObject && !(child instanceof Diagram || child instanceof EAnnotation)) {
+ // for each child EObject we'll find its EClass and add it
+ // as a node to create
+ EClass eClass = ((EObject)child).eClass();
+ if(!eClasses.contains(eClass)) {
+ eClasses.add(eClass);
+ }
+ } else {
+ // if not an EObject it will be added as a child as is
+ othersToAdd.add(child);
+ }
+ }
+ // final collection of actual children to show in the tree for this
+ // parent element
+ Collection<Object> superNodes = new ArrayList<Object>();
+ // EObjectPackagingNodes for EObjects
+ for(EClass eClass : eClasses) {
+ EObjectPackagingNode node = new EObjectPackagingNode(eClass, (EObject)parent);
+ superNodes.add(node);
+ // add to the parentNodes collection these newly created
+ // elements
+ for(Object o : node.getContainedNodes()) {
+ getParentNodes().put(o, node);
+ }
+ }
+ // other Objects that are children
+ for(Object object : othersToAdd) {
+ superNodes.add(object);
+ }
+ return superNodes;
+ } else {
+ return getVirtualSupernodes(children);
+ }
+ }
+
+ protected void updateElementChildren(Object parent) {
+ if(getVirtualSuperNodes().containsKey(parent)) {
+ Collection<Object> oldCollection = (Collection<Object>)getVirtualSuperNodes().get(parent);
+ Collection<Object> newCollection = (Collection<Object>)getVirtualSupernodes(parent);
+ mergeCollections(oldCollection, newCollection);
+ } else {
+ return;
+ }
+ }
+
+ /**
+ * Adds to oldC the new elements in newC. Removes from oldC the elements
+ * that don't appear in newC.
+ *
+ * @param oldC
+ * @param newC
+ */
+ protected void mergeCollections(Collection<Object> oldC, Collection<Object> newC) {
+ if(oldC == null || newC == null || (oldC.size() == 0 && newC.size() == 0)) {
+ return;
+ }
+ // elements to remove from oldC
+ Collection<Object> toRemove = new ArrayList<Object>();
+ for(Object o : oldC) {
+ if(!newC.contains(o)) {
+ toRemove.add(o);
+ }
+ }
+ // elements to add to oldC
+ Collection<Object> toAdd = new ArrayList<Object>();
+ for(Object o : newC) {
+ if(!oldC.contains(o)) {
+ toAdd.add(o);
+ }
+ }
+ // remove elements
+ for(Object o : toRemove) {
+ oldC.remove(o);
+ }
+ // add elements
+ for(Object o : toAdd) {
+ oldC.add(o);
+ }
+ }
+
+ protected void createVirtualSuperNodesTilParent(EObject element) {
+ if(getVirtualSuperNodes().containsKey(element)) {
+ return;
+ }
+ if(element.eContainer() != null) {
+ createVirtualSuperNodesTilParent(element.eContainer());
+ }
+ getChildren(element);
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ // TODO Auto-generated method stub
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/IContentProvider.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/IContentProvider.java
new file mode 100644
index 00000000000..f847eea32b3
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/IContentProvider.java
@@ -0,0 +1,12 @@
+package org.eclipse.papyrus.navigator.providers;
+
+import org.eclipse.emf.transaction.ResourceSetChangeEvent;
+import org.eclipse.ui.navigator.ICommonContentProvider;
+
+/**
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ **/
+public interface IContentProvider extends ICommonContentProvider {
+
+ public void resourceSetChanged(ResourceSetChangeEvent event);
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/NavigatorComposedAdapterFactory.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/NavigatorComposedAdapterFactory.java
new file mode 100644
index 00000000000..828d5f65f49
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/NavigatorComposedAdapterFactory.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.providers;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+import org.eclipse.papyrus.infra.core.Activator;
+import org.eclipse.papyrus.infra.core.extension.ExtensionException;
+
+/**
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ */
+public class NavigatorComposedAdapterFactory extends ComposedAdapterFactory {
+
+ /** ID of the editor extension (schema filename) */
+ private static final String ID = "providerAdapterFactory";
+
+
+ /** Namespace where to look for the extension points. */
+ private static final String NAMESPACE = "org.eclipse.papyrus.navigator";
+
+ private static ComposedAdapterFactory navCompAdapterFactory;
+
+ public final static ComposedAdapterFactory getAdapterFactory() {
+ if(navCompAdapterFactory == null)
+ navCompAdapterFactory = new ComposedAdapterFactory(createFactoryList());
+ return navCompAdapterFactory;
+ }
+
+ private NavigatorComposedAdapterFactory() {
+ super(createFactoryList());
+ }
+
+ private final static ArrayList<AdapterFactory> createFactoryList() {
+ // Common factories
+ ArrayList<AdapterFactory> factories = new ArrayList<AdapterFactory>();
+ factories.add(new ResourceItemProviderAdapterFactory());
+ factories.add(new EcoreItemProviderAdapterFactory());
+
+ IConfigurationElement[] configElements = Platform.getExtensionRegistry().getConfigurationElementsFor(NAMESPACE, ID);
+ ProviderAdapterFactoryReader adapterFactoryReader = new ProviderAdapterFactoryReader();
+
+ for(IConfigurationElement ele : configElements) {
+ try {
+ factories.add(adapterFactoryReader.createProviderAdapterFactory(ele));
+ } catch (ExtensionException e) {
+ Activator.getDefault().getLog().log(new Status(IStatus.WARNING, Activator.PLUGIN_ID, e.getMessage(), e));
+ }
+
+ }
+
+ return factories;
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/NoTypePrefixLabelDecorator.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/NoTypePrefixLabelDecorator.java
new file mode 100644
index 00000000000..129b736977a
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/NoTypePrefixLabelDecorator.java
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) – Initial API
+ * implementation.
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.providers;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.viewers.IDecorationContext;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.LabelDecorator;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * A {@link LabelDecorator} that removes the type prefix that appears with some label providers.
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ *
+ */
+// fjcano #291192
+public class NoTypePrefixLabelDecorator extends LabelDecorator {
+
+ @Override
+ public Image decorateImage(Image image, Object element, IDecorationContext context) {
+ return image;
+ }
+
+ @Override
+ public String decorateText(String text, Object element, IDecorationContext context) {
+ return removeTypeName(element, text);
+ }
+
+ private static String prefixTypeReplacement = "";
+
+ protected String removeTypeName(Object element, String label) {
+ if(element != null && label != null) {
+ String typePrefix = getTypePrefix(element);
+ if(typePrefix != null) {
+ label = label.replaceAll(typePrefix, prefixTypeReplacement);
+ label = label.trim();
+ }
+ }
+ return label;
+ }
+
+ protected String getTypePrefix(Object element) {
+ String typeName = getTypeName(element);
+ return typeName != null ? "<" + typeName + ">" : null;
+ }
+
+ protected String getTypeName(Object element) {
+ if(element instanceof EObject) {
+ EObject eObject = (EObject)element;
+ if(eObject.eClass() != null) {
+ if(eObject.eClass().getName() != null) {
+ return convertNameToDisplayName(eObject.eClass().getName());
+ }
+ }
+ }
+ return null;
+ }
+
+ protected String convertNameToDisplayName(String name) {
+ if(name == null) {
+ return name;
+ }
+ StringBuilder displayNameBuilder = new StringBuilder(name.length() + 5);
+ char character = 'a';
+ for(int index = 0; index < name.length(); index++) {
+ character = name.charAt(index);
+ if(Character.isUpperCase(character) && index > 0) {
+ displayNameBuilder.append(" ");
+ displayNameBuilder.append(character);
+ } else {
+ displayNameBuilder.append(character);
+ }
+ }
+ return displayNameBuilder.toString();
+ }
+
+ @Override
+ public boolean prepareDecoration(Object element, String originalText, IDecorationContext context) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public Image decorateImage(Image image, Object element) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String decorateText(String text, Object element) {
+ return removeTypeName(element, text);
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void dispose() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/PackagingNode.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/PackagingNode.java
new file mode 100644
index 00000000000..294b80fc996
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/PackagingNode.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Conselleria de Infraestructuras y Transporte, Generalitat
+ * de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) - initial api implementation
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.providers;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * An intermediate node for children grouping by type.
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ * @see <a href=https://bugs.eclipse.org/bugs/show_bug.cgi?id=290422>Bug #290422</a>
+ */
+public class PackagingNode {
+
+ private String name;
+
+ private Object parent;
+
+ private Collection<Object> containedNodes = null;
+
+ public PackagingNode(String key, Object parent) {
+ this.name = key;
+ this.parent = parent;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void addContainedNode(Object o) {
+ getContainedNodes().add(o);
+ }
+
+ public Collection<Object> getContainedNodes() {
+ if(containedNodes == null) {
+ containedNodes = new ArrayList<Object>();
+ }
+ return containedNodes;
+ }
+
+ public Object getParent() {
+ return parent;
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/ProviderAdapterFactoryReader.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/ProviderAdapterFactoryReader.java
new file mode 100644
index 00000000000..5520d68a93c
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/ProviderAdapterFactoryReader.java
@@ -0,0 +1,57 @@
+/*****************************************************************************
+ * Copyright (c) 2010 Atos Origin
+ *
+ *
+ * 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:
+ * Atos Origin - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.navigator.providers;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.papyrus.infra.core.extension.ExtensionException;
+import org.eclipse.papyrus.infra.core.extension.ExtensionUtils;
+
+public class ProviderAdapterFactoryReader extends ExtensionUtils {
+
+ /** singleton eINSTANCE of this class */
+ public final static ProviderAdapterFactoryReader eINSTANCE = new ProviderAdapterFactoryReader();
+
+ public final static String PROVIDER_ADAPTER_FACTORY_EXTENSIONPOINT = "providerAdapterFactory";
+
+ public final static String ADAPTER_FACTORY_CLASS_ATTR = "adapterFactoryClass";
+
+ /**
+ * @return the eINSTANCE
+ */
+ public static ProviderAdapterFactoryReader getInstance() {
+ return eINSTANCE;
+ }
+
+ /**
+ * Create a factory instance corresponding to the ConfigurationElement.
+ *
+ * @param element
+ * an {@link IConfigurationElement} see eclipse extension point
+ * @return an instance of the factory
+ * @throws ExtensionException
+ **/
+ @SuppressWarnings("unchecked")
+ public AdapterFactory createProviderAdapterFactory(IConfigurationElement element) throws ExtensionException {
+ checkTagName(element, PROVIDER_ADAPTER_FACTORY_EXTENSIONPOINT);
+
+ Class<AdapterFactory> adapterFactoryClass = (Class<AdapterFactory>)parseClass(element, ADAPTER_FACTORY_CLASS_ATTR,
+ PROVIDER_ADAPTER_FACTORY_EXTENSIONPOINT);
+ try {
+ return adapterFactoryClass.newInstance();
+ } catch (Exception e) {
+ throw new ExtensionException(e.getLocalizedMessage());
+ }
+ }
+} \ No newline at end of file
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/ToEditorSaveable.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/ToEditorSaveable.java
new file mode 100644
index 00000000000..ccfd1e5124e
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/ToEditorSaveable.java
@@ -0,0 +1,116 @@
+/***************************************************************************
+
+ * Copyright (c) 2008 Conselleria de Infraestructuras y Transporte,
+ * Generalitat de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) – initial api implementation
+ *
+ ******************************************************************************/
+package org.eclipse.papyrus.navigator.providers;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.Saveable;
+
+/**
+ * A {@link Saveable} that targets the {@link Saveable#doSave(IProgressMonitor)} action to the
+ * active {@link IEditorPart}.
+ *
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ * @see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=290424">Bug 290424</a>
+ *
+ */
+public class ToEditorSaveable extends Saveable {
+
+ private IEditorPart editor = null;
+
+ private IWorkbenchPart part = null;
+
+ public ToEditorSaveable(IEditorPart editor, IWorkbenchPart part) {
+ this.editor = editor;
+ this.part = part;
+ }
+
+ @Override
+ public void doSave(IProgressMonitor monitor) throws CoreException {
+ if(editor != null) {
+ editor.doSave(monitor);
+ }
+ }
+
+ public IEditorPart getEditor() {
+ return editor;
+ }
+
+ public void setEditor(IEditorPart editor) {
+ this.editor = editor;
+ }
+
+ public IWorkbenchPart getPart() {
+ return part;
+ }
+
+ protected IEditorInput getEditorInput() {
+ if(getEditor() != null && getEditor().getEditorInput() != null) {
+ return getEditor().getEditorInput();
+ }
+ return null;
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if(this == object) {
+ return true;
+ }
+ if(getPart() != null && object instanceof ToEditorSaveable) {
+ return getPart().equals(((ToEditorSaveable)object).getPart());
+ }
+ return false;
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getName() {
+ if(getEditor() != null) {
+ return getEditor().getEditorInput().getName();
+ }
+ return null;
+ }
+
+ @Override
+ public String getToolTipText() {
+ if(getEditor() != null) {
+ return "Save " + getName() + " contents";
+ }
+ return null;
+ }
+
+ @Override
+ public int hashCode() {
+ if(getPart() != null) {
+ return part.hashCode();
+ }
+ return 0x0;
+ }
+
+ @Override
+ public boolean isDirty() {
+ if(getEditor() != null) {
+ return getEditor().isDirty();
+ }
+ return false;
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/UMLContentProvider.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/UMLContentProvider.java
new file mode 100644
index 00000000000..8198584e1e2
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/UMLContentProvider.java
@@ -0,0 +1,271 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ * Francisco Javier Cano Muñoz (Prodevelop) - solve bug #290422
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.providers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.IWrapperItemProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.transaction.ResourceSetChangeEvent;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.papyrus.infra.core.utils.DiResourceSet;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.papyrus.navigator.ModelNavigator;
+import org.eclipse.papyrus.navigator.factory.GroupableAdapterFactory;
+import org.eclipse.papyrus.navigator.internal.AdditionalResources;
+import org.eclipse.papyrus.navigator.internal.utils.NavigatorUtils;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.uml2.uml.PackageImport;
+
+/**
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ * @see <a href=https://bugs.eclipse.org/bugs/show_bug.cgi?id=290422>Bug #290422</a>
+ */
+public class UMLContentProvider extends AdapterFactoryContentProvider implements IContentProvider {
+
+ private static final Object[] EMPTY_ARRAY = new Object[0];
+
+ protected DiResourceSet diResourceSet;
+
+ /** The list of open pages (diagrams) */
+ protected IPageMngr pageMngr;
+
+ /** {@link ICommonContentExtensionSite} as given in initialization. */
+ protected ICommonContentExtensionSite contentExtensionSite = null;
+
+ /**
+ * {@link ComposedAdapterFactory} used to get the adapters to content providers.
+ */
+ protected static ComposedAdapterFactory umlComposedAdapterFactory = NavigatorComposedAdapterFactory.getAdapterFactory();
+
+ /**
+ * Factory to adapt children grouping elements
+ */
+ protected static GroupableAdapterFactory groupableFactory = new GroupableAdapterFactory(umlComposedAdapterFactory);
+
+ public UMLContentProvider() {
+ super(umlComposedAdapterFactory);
+ }
+
+ public void init(ICommonContentExtensionSite config) {
+ this.contentExtensionSite = config;
+ }
+
+ public void restoreState(IMemento memento) {
+ // TODO
+ }
+
+ public void saveState(IMemento memento) {
+ // TODO
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean hasChildren(Object element) {
+ if(element instanceof Diagram) {
+ return false;
+ }
+ if(element instanceof PackageImport) {
+ return ((PackageImport)element).getImportedPackage().getPackagedElements().size() > 0;
+
+ }
+ return getChildren(element).length > 0;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Object[] getChildren(Object parentElement) {
+ // Only display diagram (no graphNodes or graphEdges)
+ if(parentElement instanceof Diagram) {
+ return EMPTY_ARRAY;
+ }
+ if(parentElement instanceof AdditionalResources) {
+ return ((AdditionalResources)parentElement).getResources().toArray();
+ }
+
+ // fjcano #290422 :: add "Group children" action.
+ // if grouping is enabled, return the children in a folder organization
+ if(getModelNavigator() != null && getModelNavigator().isGroupingChildsEnabled() && groupableFactory.isFactoryForType(ITreeItemContentProvider.class)) {
+ ITreeItemContentProvider provider = (ITreeItemContentProvider)groupableFactory.adapt(parentElement, ITreeItemContentProvider.class);
+ return provider == null ? null : provider.getChildren(parentElement).toArray();
+ }
+
+ // In the case of a domain element :
+ List<Object> children = new ArrayList<Object>();
+
+ // 1. Retrieve children elements
+ Object[] modelChildren = super.getChildren(parentElement);
+ for(Object child : modelChildren) {
+ children.add(child);
+ }
+ if(parentElement instanceof PackageImport) {
+ Object[] importedChildren = super.getChildren(((PackageImport)parentElement).getImportedPackage());
+ for(Object child : importedChildren) {
+ children.add(child);
+ }
+ }
+
+ // 2. and associated diagrams
+ if(parentElement instanceof EObject || parentElement instanceof IWrapperItemProvider || parentElement instanceof FeatureMap.Entry) {
+ Object object = AdapterFactoryEditingDomain.unwrap(parentElement);
+ if(object instanceof EObject) {
+ EObject owner = (EObject)object;
+ if(owner != null) {
+ children.addAll(findAllExistingDiagrams(owner));
+ }
+ }
+ }
+ return children.toArray();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Object getParent(Object element) {
+ /*
+ * if (object instanceof IFile) return ((IResource) object).getParent(); return
+ * super.getParent(object);
+ */
+ if(getModelNavigator() != null && getModelNavigator().isGroupingChildsEnabled() && groupableFactory.isFactoryForType(ITreeItemContentProvider.class)) {
+ ITreeItemContentProvider provider = (ITreeItemContentProvider)groupableFactory.adapt(element, ITreeItemContentProvider.class);
+ return provider == null ? null : provider.getParent(element);
+ }
+
+ // Delegates
+ if(element instanceof IWrapperItemProvider || element instanceof FeatureMap.Entry || element instanceof EObject) {
+ return super.getParent(element);
+ }
+
+ return null;
+ }
+
+ @Override
+ public Object[] getElements(Object object) {
+
+ if(canPopulateModelNavigator()) {
+ this.diResourceSet = getDiResourceSet();
+ pageMngr = EditorUtils.getIPageMngr(diResourceSet.getDiResource());
+
+ Resource modelResource = diResourceSet.getModelResource();
+ List<Object> children = new ArrayList<Object>(modelResource.getContents());
+ AdditionalResources resources = new AdditionalResources(diResourceSet);
+ children.add(resources);
+ // hookListeners();
+ return children.toArray();
+ }
+ // TODO check //WorkspaceRoot for physical representation
+ return EMPTY_ARRAY;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void dispose() {
+ // Dispose objects
+ super.dispose();
+ }
+
+ /**
+ * @param owner
+ * the owner of the diagrams
+ * @return the list of diagrams contained by the given owner
+ */
+ private List<Diagram> findAllExistingDiagrams(EObject owner) {
+ ArrayList<Diagram> diagrams = new ArrayList<Diagram>();
+
+ // Walk on page (Diagram) references
+ for(Object page : pageMngr.allPages()) {
+ if(!(page instanceof Diagram)) {
+ continue;
+ }
+ // We have a GMF Diagram
+ Diagram diagram = (Diagram)page;
+ if(diagram.getElement()!=null){
+ if(owner.equals(diagram.getElement())) {
+ diagrams.add(diagram);
+ }
+ }
+ }
+
+ return diagrams;
+ }
+
+ private boolean canPopulateModelNavigator() {
+ return (EditorUtils.getMultiDiagramEditor() != null);
+ }
+
+ private DiResourceSet getDiResourceSet() {
+ return EditorUtils.getDiResourceSet();
+ }
+
+ /**
+ * Override this method if you want to execute additional actions when the resource is modified
+ *
+ * @param event
+ */
+ public void resourceSetChanged(ResourceSetChangeEvent event) {
+ for(Object o : event.getNotifications()) {
+ if(o instanceof Notification) {
+ Notification n = (Notification)o;
+ if(n.getEventType() == Notification.ADD) {
+ if(getCommonNavigator() != null) {
+ getCommonNavigator().getCommonViewer().setSelection(new StructuredSelection(n.getNewValue()));
+ }
+ }
+ }
+
+ }
+ }
+
+ /**
+ * Gets the <CommonNavigator>. This content provider is associated to, via the viewer ID.
+ *
+ * @return the common navigator
+ */
+ protected CommonNavigator getCommonNavigator() {
+ IViewPart part = NavigatorUtils.findViewPart(getViewerID());
+ if(part instanceof CommonNavigator) {
+ return ((CommonNavigator)part);
+ }
+ return null;
+ }
+
+ protected ModelNavigator getModelNavigator() {
+ CommonNavigator nav = getCommonNavigator();
+ return nav instanceof ModelNavigator ? (ModelNavigator)nav : null;
+ }
+
+ protected String getViewerID() {
+ return contentExtensionSite.getExtensionStateModel().getViewerId();
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/UMLLabelProvider.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/UMLLabelProvider.java
new file mode 100644
index 00000000000..40dc8712de0
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/providers/UMLLabelProvider.java
@@ -0,0 +1,227 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ * Francisco Javier Cano Muñoz (Prodevelop) - bug #290422
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.providers;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.viewers.ILabelDecorator;
+import org.eclipse.papyrus.infra.core.editorsfactory.IPageIconsRegistry;
+import org.eclipse.papyrus.infra.core.editorsfactory.PageIconsRegistry;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.core.utils.EditorUtils;
+import org.eclipse.papyrus.navigator.ModelNavigator;
+import org.eclipse.papyrus.navigator.internal.AdditionalResources;
+import org.eclipse.papyrus.navigator.internal.utils.NavigatorUtils;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
+
+/**
+ * An {@link ICommonLabelProvider} for the Papyrus Model Explorer-
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ * @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
+ * @see <a href=https://bugs.eclipse.org/bugs/show_bug.cgi?id=290422>Bug #290422</a>
+ */
+public class UMLLabelProvider extends AdapterFactoryLabelProvider implements ICommonLabelProvider/*
+ * ,
+ * IFontProvider
+ */{
+
+ /** Registry to store editor factories */
+ private IPageIconsRegistry editorRegistry;
+
+ /** <ICommonContentExtensionSite> as given in initialization. */
+ protected ICommonContentExtensionSite contentExtensionSite = null;
+
+ // private Font diagramFont = null;
+
+ protected ILabelDecorator removePrefixLabelDecorator = null;
+
+ protected ILabelDecorator getRemovePrefixLabelDecorator() {
+ if(removePrefixLabelDecorator == null) {
+ removePrefixLabelDecorator = new NoTypePrefixLabelDecorator();
+ }
+ return removePrefixLabelDecorator;
+ }
+
+ public UMLLabelProvider() {
+ super(NavigatorComposedAdapterFactory.getAdapterFactory());
+ }
+
+ public void init(ICommonContentExtensionSite config) {
+ this.contentExtensionSite = config;
+ }
+
+ public void restoreState(IMemento memento) {
+ // TODO Auto-generated method stub
+ }
+
+ public void saveState(IMemento memento) {
+ // TODO Auto-generated method stub
+ }
+
+ public String getDescription(Object anElement) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /**
+ * Returns the platform icon for a file. You can replace with your own icon If not a IFile, then
+ * passes to the regular EMF.Edit providers
+ *
+ * {@inheritDoc}
+ */
+ @Override
+ public Image getImage(Object element) {
+ if(element instanceof Diagram) {
+ return getEditorRegistry().getEditorIcon(element);
+ }
+ // fjcano #290422 :: grouping of children by type
+ if(element instanceof PackagingNode) {
+ return new GroupableLabelProvider().getImage(element);
+ }
+ return super.getImage(element);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getText(Object element) {
+ String text = null;
+ if(element instanceof AdditionalResources) {
+ text = "Additional Resources";
+ }
+
+ // if (object instanceof IFile)
+ // return ((IFile) object).getName();
+
+ else if(element instanceof Diagram) {
+ Diagram diagram = (Diagram)element;
+ text = super.getText(diagram);
+
+ // if (diagram.getSemanticModel() instanceof
+ // CoreSemanticModelBridge) {
+ // CoreSemanticModelBridge coreSemanticModelBridge =
+ // (CoreSemanticModelBridge)
+ // diagram.getSemanticModel();
+ // return super.getText(coreSemanticModelBridge.getElement());
+ // }
+ }
+
+ // fjcano #290422 :: grouping of children by type
+ else if(element instanceof PackagingNode) {
+ text = new GroupableLabelProvider().getText(element);
+ }
+
+ else {
+ text = super.getText(element);
+ }
+
+ if(getModelNavigator() != null && getModelNavigator().isRemovePrefixTypeEnabled()) {
+ text = getRemovePrefixLabelDecorator().decorateText(text, element);
+ }
+
+ return text;
+ }
+
+ /**
+ * Get the EditorRegistry used to create editor instances. This default implementation return
+ * the singleton eINSTANCE. This method can be subclassed to return another registry.
+ *
+ * @return the singleton eINSTANCE of editor registry
+ * @throws ServiceException
+ */
+ protected IPageIconsRegistry getEditorRegistry() {
+ if(editorRegistry == null) {
+ editorRegistry = createEditorRegistry();
+ }
+ return editorRegistry;
+ }
+
+ /**
+ * Return the EditorRegistry for nested editor descriptors. Subclass should implements this
+ * method in order to return the registry associated to the extension point namespace.
+ *
+ * @return the EditorRegistry for nested editor descriptors
+ * @throws ServiceException
+ */
+ protected IPageIconsRegistry createEditorRegistry() {
+ try {
+ return EditorUtils.getServiceRegistry().getService(IPageIconsRegistry.class);
+ } catch (ServiceException e) {
+ // Not found, return an empty one which return null for each request.
+ return new PageIconsRegistry();
+ }
+ }
+
+ // @Override
+ // public Font getFont(Object element) {
+ // if (element instanceof Diagram) {
+ // return getDiagramFont();
+ // }
+ // return JFaceResources.getFontRegistry().defaultFont();
+ // //return null;
+ // }
+ // private Font getDiagramFont()
+ // {
+ // if (this.diagramFont == null){
+ // //Display display = getSite().getShell().getDisplay();
+ // //Display display = Display.getCurrent();
+ // //FontData[] datas =
+ // currentViewer.getControl().getFont().getFontData().clone();
+ // //FontData[] datas = getDefaultFont().getFontData().clone();
+ // //datas[0].setStyle(SWT.BOLD);
+ // //this.diagramFont = new Font(display, datas);
+ // this.diagramFont =
+ // JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT);
+ // }
+ // return this.diagramFont;
+ // }
+ //
+ //
+ // @Override
+ // public void dispose() {
+ // if(diagramFont!=null){
+ // diagramFont.dispose();
+ // diagramFont=null;
+ // }
+ // super.dispose();
+ // }
+
+ /**
+ * Gets the <CommonNavigator>. This content provider is associated to, via the viewer ID.
+ *
+ * @return the common navigator
+ */
+ protected CommonNavigator getCommonNavigator() {
+ IViewPart part = NavigatorUtils.findViewPart(getViewerID());
+ if(part instanceof CommonNavigator) {
+ return ((CommonNavigator)part);
+ }
+ return null;
+ }
+
+ protected ModelNavigator getModelNavigator() {
+ CommonNavigator nav = getCommonNavigator();
+ return nav instanceof ModelNavigator ? (ModelNavigator)nav : null;
+ }
+
+ protected String getViewerID() {
+ return contentExtensionSite.getExtensionStateModel().getViewerId();
+ }
+
+}
diff --git a/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/sorters/UMLViewerSorter.java b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/sorters/UMLViewerSorter.java
new file mode 100644
index 00000000000..b7d971796a1
--- /dev/null
+++ b/deprecated/org.eclipse.papyrus.navigator/src/org/eclipse/papyrus/navigator/sorters/UMLViewerSorter.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.navigator.sorters;
+
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+
+/**
+ * This class sort elements in Model Navigator.
+ *
+ * @author <a href="mailto:jerome.benois@obeo.fr">Jerome Benois</a>
+ **/
+public class UMLViewerSorter extends ViewerSorter {
+
+ @Override
+ public int compare(Viewer viewer, Object e1, Object e2) {
+ // Add diagram at first position
+ if(e1 instanceof Diagram || e2 instanceof Diagram) {
+ if(e1 instanceof Diagram && e2 instanceof Diagram) {
+ return super.compare(viewer, e1, e2);
+ } else {
+ return 1;
+ }
+ }
+ return super.compare(viewer, e1, e2);
+ }
+
+}

Back to the top