basic diagram capabilities (to be updated as a Sirius-based modeller
soon)
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/.classpath b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/.classpath
new file mode 100755
index 0000000..ed2bc12
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/.gitignore b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/.options b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/.options
new file mode 100755
index 0000000..8fa9bc9
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/.options
@@ -0,0 +1,7 @@
+# Tracing options for the org.eclipse.soa.mangrove.diagram plug-in
+
+# Common issues
+org.eclipse.soa.mangrove.diagram/debug=false
+
+# Visual IDs
+org.eclipse.soa.mangrove.diagram/debug/visualID=false
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/.project b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/.project
new file mode 100755
index 0000000..6eff61b
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.soa.mangrove.diagram</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.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/META-INF/MANIFEST.MF b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..8c4abe6
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/META-INF/MANIFEST.MF
@@ -0,0 +1,41 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.soa.mangrove.diagram; singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.soa.mangrove.diagram.edit.parts,
+ org.eclipse.soa.mangrove.diagram.part,
+ org.eclipse.soa.mangrove.diagram.providers
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.core.expressions,
+ org.eclipse.jface,
+ org.eclipse.ui.ide,
+ org.eclipse.ui.views,
+ org.eclipse.ui.navigator,
+ org.eclipse.ui.navigator.resources,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.ecore.xmi,
+ org.eclipse.emf.edit.ui,
+ org.eclipse.gmf.runtime.emf.core,
+ org.eclipse.gmf.runtime.emf.commands.core,
+ org.eclipse.gmf.runtime.emf.ui.properties,
+ org.eclipse.gmf.runtime.diagram.ui,
+ org.eclipse.gmf.runtime.diagram.ui.properties,
+ org.eclipse.gmf.runtime.diagram.ui.providers,
+ org.eclipse.gmf.runtime.diagram.ui.providers.ide,
+ org.eclipse.gmf.runtime.diagram.ui.render,
+ org.eclipse.gmf.runtime.diagram.ui.resources.editor,
+ org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide,
+ org.eclipse.gmf.tooling.runtime;visibility:=reexport,
+ org.eclipse.draw2d;visibility:=reexport,
+ org.eclipse.gmf.runtime.draw2d.ui;visibility:=reexport,
+ org.eclipse.soa.mangrove;visibility:=reexport,
+ org.eclipse.soa.mangrove.edit;visibility:=reexport,
+ org.eclipse.gef;visibility:=reexport
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/build.properties b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/build.properties
new file mode 100755
index 0000000..162d13a
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/build.properties
@@ -0,0 +1,10 @@
+bin.includes = .,\
+ icons/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties,\
+ messages.properties,\
+ .options
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/incomingLinksNavigatorGroup.gif b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/incomingLinksNavigatorGroup.gif
new file mode 100755
index 0000000..fca9c53
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/incomingLinksNavigatorGroup.gif
Binary files differ
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/linkSourceNavigatorGroup.gif b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/linkSourceNavigatorGroup.gif
new file mode 100755
index 0000000..fca9c53
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/linkSourceNavigatorGroup.gif
Binary files differ
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/linkTargetNavigatorGroup.gif b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/linkTargetNavigatorGroup.gif
new file mode 100755
index 0000000..fca9c53
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/linkTargetNavigatorGroup.gif
Binary files differ
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/linksNavigatorGroup.gif b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/linksNavigatorGroup.gif
new file mode 100755
index 0000000..fca9c53
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/linksNavigatorGroup.gif
Binary files differ
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/obj16/ImDiagramFile.gif b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/obj16/ImDiagramFile.gif
new file mode 100755
index 0000000..4a83950
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/obj16/ImDiagramFile.gif
Binary files differ
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/outgoingLinksNavigatorGroup.gif b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/outgoingLinksNavigatorGroup.gif
new file mode 100755
index 0000000..fca9c53
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/outgoingLinksNavigatorGroup.gif
Binary files differ
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/wizban/NewImWizard.gif b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/wizban/NewImWizard.gif
new file mode 100755
index 0000000..60e58d1
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/icons/wizban/NewImWizard.gif
Binary files differ
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/messages.properties b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/messages.properties
new file mode 100755
index 0000000..71d091d
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/messages.properties
@@ -0,0 +1,96 @@
+
+# TODO: manually put keys and values
+IntermediateModelCreationWizardTitle=New IntermediateModel Diagram
+IntermediateModelCreationWizard_DiagramModelFilePageTitle=Create IntermediateModel Diagram
+IntermediateModelCreationWizard_DiagramModelFilePageDescription=Select file that will contain diagram model.
+IntermediateModelCreationWizard_DomainModelFilePageTitle=Create IntermediateModel Domain Model
+IntermediateModelCreationWizard_DomainModelFilePageDescription=Select file that will contain domain model.
+IntermediateModelCreationWizardOpenEditorError=Error opening diagram editor
+IntermediateModelCreationWizardCreationError=Creation Problems
+IntermediateModelCreationWizardPageExtensionError=File name should have {0} extension.
+IntermediateModelDiagramEditorUtil_OpenModelResourceErrorDialogTitle=Error
+IntermediateModelDiagramEditorUtil_OpenModelResourceErrorDialogMessage=Failed to load model file {0}
+IntermediateModelDiagramEditorUtil_CreateDiagramProgressTask=Creating diagram and model files
+IntermediateModelDiagramEditorUtil_CreateDiagramCommandLabel=Creating diagram and model
+IntermediateModelDocumentProvider_isModifiable=Updating cache failed
+IntermediateModelDocumentProvider_handleElementContentChanged=Failed to refresh hierarchy for changed resource
+IntermediateModelDocumentProvider_IncorrectInputError={1}
+IntermediateModelDocumentProvider_NoDiagramInResourceError=Diagram is not present in resource
+IntermediateModelDocumentProvider_DiagramLoadingError=Error loading diagram
+IntermediateModelDocumentProvider_UnsynchronizedFileSaveError=The file has been changed on the file system
+IntermediateModelDocumentProvider_SaveDiagramTask=Saving diagram
+IntermediateModelDocumentProvider_SaveNextResourceTask=Saving {0}
+IntermediateModelDocumentProvider_SaveAsOperation=Saving {0} diagram as
+InitDiagramFile_ResourceErrorDialogTitle=Error
+InitDiagramFile_ResourceErrorDialogMessage=Model file loading failed
+InitDiagramFile_WizardTitle=Initialize new {0} diagram file
+InitDiagramFile_OpenModelFileDialogTitle=Select domain model
+IntermediateModelNewDiagramFileWizard_CreationPageName=Initialize new diagram file
+IntermediateModelNewDiagramFileWizard_CreationPageTitle=Diagram file
+IntermediateModelNewDiagramFileWizard_CreationPageDescription=Create new diagram based on {0} model content
+IntermediateModelNewDiagramFileWizard_RootSelectionPageName=Select diagram root element
+IntermediateModelNewDiagramFileWizard_RootSelectionPageTitle=Diagram root element
+IntermediateModelNewDiagramFileWizard_RootSelectionPageDescription=Select semantic model element to be depicted on diagram
+IntermediateModelNewDiagramFileWizard_RootSelectionPageSelectionTitle=Select diagram root element:
+IntermediateModelNewDiagramFileWizard_RootSelectionPageNoSelectionMessage=Diagram root element is not selected
+IntermediateModelNewDiagramFileWizard_RootSelectionPageInvalidSelectionMessage=Invalid diagram root element is selected
+IntermediateModelNewDiagramFileWizard_InitDiagramCommand=Initializing diagram contents
+IntermediateModelNewDiagramFileWizard_IncorrectRootError=Incorrect model object stored as a root resource object
+IntermediateModelDiagramEditor_SavingDeletedFile=The original file "{0}" has been deleted.
+IntermediateModelDiagramEditor_SaveAsErrorTitle=Problem During Save As...
+IntermediateModelDiagramEditor_SaveAsErrorMessage=Save could not be completed. Target file is already open in another editor.
+IntermediateModelDiagramEditor_SaveErrorTitle=Save Problems
+IntermediateModelDiagramEditor_SaveErrorMessage=Could not save file.
+IntermediateModelElementChooserDialog_SelectModelElementTitle=Select model element
+ModelElementSelectionPageMessage=Select model element:
+ValidateActionMessage=Validate
+Mangrove1Group_title=mangrove
+Mangrove1Group_desc=
+TravelServices2Group_title=Travel Services
+FinancialServices3Group_title=Financial Services
+FinancialServices3Group_desc=
+StandardToolsTool_title=StandardTools
+ProcessCollection3CreationTool_title=Process Collection
+ProcessCollection3CreationTool_desc=Create new Process Collection
+Process4CreationTool_title=Process
+Process4CreationTool_desc=Create new Process
+Step5CreationTool_title=Step
+Step5CreationTool_desc=Create new Step
+Transition6CreationTool_title=Transition
+Transition6CreationTool_desc=Create new Transition
+ServiceCollection8CreationTool_title=Service Collection
+ServiceCollection8CreationTool_desc=Create new Service Collection
+Service9CreationTool_title=Service
+Service9CreationTool_desc=Create new Service
+ServiceService10CreationTool_title=Service <-> Service
+ServiceService10CreationTool_desc=Service dependency to another service
+StepServiceConnection12CreationTool_title=Step <-> Service Connection
+StepServiceConnection12CreationTool_desc=Create connection with a Service
+Hotel1CreationTool_title=Hotel
+Weather2CreationTool_title=Weather
+Weather2CreationTool_desc=http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl
+CreditCard1CreationTool_title=Credit Card
+ShoppingCart2CreationTool_title=Shopping Cart
+
+CommandName_OpenDiagram=Open Diagram
+NavigatorGroupName_StpIntermediateModel_1000_links=links
+NavigatorGroupName_Transition_4009_target=target
+NavigatorGroupName_Transition_4009_source=source
+NavigatorGroupName_Service_3009_incominglinks=incoming links
+NavigatorGroupName_Service_3009_outgoinglinks=outgoing links
+NavigatorGroupName_ServiceNeeds_4011_target=target
+NavigatorGroupName_ServiceNeeds_4011_source=source
+NavigatorGroupName_StepServiceModel_4010_target=target
+NavigatorGroupName_StepServiceModel_4010_source=source
+NavigatorGroupName_Step_3008_incominglinks=incoming links
+NavigatorGroupName_Step_3008_outgoinglinks=outgoing links
+NavigatorGroupName_Process_3007_incominglinks=incoming links
+NavigatorGroupName_Process_3007_outgoinglinks=outgoing links
+NavigatorActionProvider_OpenDiagramActionName=Open Diagram
+AbstractParser_UnexpectedValueType=Value of type {0} is expected
+AbstractParser_WrongStringConversion=String value does not convert to {0} value
+AbstractParser_UnknownLiteral=Unknown literal: {0}
+
+MessageFormatParser_InvalidInputError=Invalid input at {0}
+IntermediateModelModelingAssistantProviderTitle=Select domain model element
+IntermediateModelModelingAssistantProviderMessage=Available domain model elements:
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/plugin.properties b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/plugin.properties
new file mode 100755
index 0000000..81eba13
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/plugin.properties
@@ -0,0 +1,46 @@
+pluginName=IntermediateModel Plugin
+providerName=Sample Plugin Provider, Inc
+
+editorName=IntermediateModel Diagram Editing
+context.description=IntermediateModel Diagram Editing
+context.name=In IntermediateModel Diagram Editor
+newWizardName=IntermediateModel Diagram
+newWizardDesc=Creates IntermediateModel diagram.
+
+initDiagramActionLabel=Initialize mangrove_diagram diagram file
+
+
+navigatorContentName=*.mangrove_diagram diagram contents
+domainNavigatorContentName=*.mangrove model contents
+update.diagram.name=Update IntermediateModel diagram
+update.diagram.description=Perform IntermediateModel diagram update
+
+
+# Property Sheet
+tab.appearance=Appearance
+tab.diagram=Rulers & Grid
+tab.domain=Core
+
+# Preferences
+prefpage.org.eclipse.soa.mangrove.diagram.general=IntermediateModel Diagram
+prefpage.org.eclipse.soa.mangrove.diagram.appearance=Appearance
+prefpage.org.eclipse.soa.mangrove.diagram.connections=Connections
+prefpage.org.eclipse.soa.mangrove.diagram.printing=Printing
+prefpage.org.eclipse.soa.mangrove.diagram.rulersAndGrid=Rulers And Grid
+
+
+# Providers
+metatype.name.StpIntermediateModel_1000=Undefined
+metatype.name.ProcessCollection_2005=ProcessCollection
+metatype.name.ServiceCollection_2006=ServiceCollection
+metatype.name.Process_3007=Process
+metatype.name.Step_3008=Step
+metatype.name.Service_3009=Service
+metatype.name.Transition_4009=Transition
+metatype.name.StepServiceModel_4010=Undefined
+metatype.name.ServiceNeeds_4011=Undefined
+
+# Commands and menu actions
+cmdcategory.name=IntermediateModel Editor Commands
+cmdcategory.desc=IntermediateModel Editor Commands
+
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/plugin.xml b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/plugin.xml
new file mode 100755
index 0000000..d527d20
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/plugin.xml
@@ -0,0 +1,556 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+
+ <extension point="org.eclipse.team.core.fileTypes" id="repo-ftype">
+ <?gmfgen generated="true"?>
+ <fileTypes type="text" extension="mangrove_diagram"/>
+ </extension>
+
+ <extension point="org.eclipse.emf.ecore.extension_parser" id="resource-factory">
+ <?gmfgen generated="true"?>
+ <parser
+ type="mangrove_diagram"
+ class="org.eclipse.gmf.runtime.emf.core.resources.GMFResourceFactory">
+ </parser>
+ </extension>
+
+ <extension point="org.eclipse.ui.editors" id="gmf-editor">
+ <?gmfgen generated="true"?>
+ <editor
+ id="org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorID"
+ name="%editorName"
+ icon="icons/obj16/ImDiagramFile.gif"
+ extensions="mangrove_diagram"
+ default="true"
+ class="org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditor"
+ matchingStrategy="org.eclipse.soa.mangrove.diagram.part.IntermediateModelMatchingStrategy"
+ contributorClass="org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramActionBarContributor">
+ </editor>
+ </extension>
+
+ <extension point="org.eclipse.ui.contexts" id="ui-context">
+ <?gmfgen generated="true"?>
+ <context
+ description="%context.description"
+ id="org.eclipse.soa.mangrove.diagram.ui.diagramContext"
+ name="%context.name"
+ parentId="org.eclipse.gmf.runtime.diagram.ui.diagramContext">
+ </context>
+ </extension>
+
+ <extension point="org.eclipse.ui.newWizards" id="creation-wizard">
+ <?gmfgen generated="true"?>
+ <wizard
+ name="%newWizardName"
+ icon="icons/obj16/ImDiagramFile.gif"
+ category="org.eclipse.ui.Examples"
+ class="org.eclipse.soa.mangrove.diagram.part.IntermediateModelCreationWizard"
+ id="org.eclipse.soa.mangrove.diagram.part.IntermediateModelCreationWizardID">
+ <description>%newWizardDesc</description>
+ </wizard>
+ </extension>
+
+ <extension point="org.eclipse.ui.popupMenus" id="init-diagram-action">
+ <?gmfgen generated="true"?>
+ <objectContribution
+ id="org.eclipse.soa.mangrove.diagram.InitDiagram"
+ nameFilter="*.mangrove"
+ objectClass="org.eclipse.core.resources.IFile">
+ <action
+ label="%initDiagramActionLabel"
+ class="org.eclipse.soa.mangrove.diagram.part.IntermediateModelInitDiagramFileAction"
+ menubarPath="additions"
+ enablesFor="1"
+ id="org.eclipse.soa.mangrove.diagram.InitDiagramAction">
+ </action>
+ </objectContribution>
+ </extension>
+
+ <extension point="org.eclipse.gmf.runtime.common.ui.services.action.globalActionHandlerProviders" id="global-actions">
+ <?gmfgen generated="true"?>
+ <GlobalActionHandlerProvider
+ class="org.eclipse.gmf.runtime.diagram.ui.providers.DiagramGlobalActionHandlerProvider"
+ id="IntermediateModelPresentation">
+ <Priority name="Lowest"/>
+ <ViewId id="org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorID">
+ <ElementType class="org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart">
+ <GlobalActionId actionId="delete"/>
+ </ElementType>
+ <ElementType class="org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart">
+ <GlobalActionId actionId="save"/>
+ </ElementType>
+ <ElementType class="org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart">
+ <GlobalActionId actionId="save">
+ </GlobalActionId>
+ </ElementType>
+ </ViewId>
+ </GlobalActionHandlerProvider>
+ <GlobalActionHandlerProvider
+ class="org.eclipse.gmf.runtime.diagram.ui.providers.ide.providers.DiagramIDEGlobalActionHandlerProvider"
+ id="IntermediateModelPresentationIDE">
+ <Priority name="Lowest"/>
+ <ViewId id="org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorID">
+ <ElementType class="org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart">
+ <GlobalActionId actionId="bookmark"/>
+ </ElementType>
+ </ViewId>
+ </GlobalActionHandlerProvider>
+ <GlobalActionHandlerProvider
+ class="org.eclipse.gmf.runtime.diagram.ui.render.providers.DiagramUIRenderGlobalActionHandlerProvider"
+ id="IntermediateModelRender">
+ <Priority name="Lowest"/>
+ <ViewId id="org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorID">
+ <ElementType class="org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart">
+ <GlobalActionId actionId="cut"/>
+ <GlobalActionId actionId="copy"/>
+ <GlobalActionId actionId="paste"/>
+ </ElementType>
+ </ViewId>
+ </GlobalActionHandlerProvider>
+ </extension>
+
+
+ <extension point="org.eclipse.core.runtime.preferences" id="prefs">
+ <?gmfgen generated="true"?>
+ <initializer class="org.eclipse.soa.mangrove.diagram.preferences.DiagramPreferenceInitializer"/>
+ </extension>
+
+ <extension point="org.eclipse.ui.preferencePages" id="prefpages">
+ <?gmfgen generated="true"?>
+ <page
+ id="org.eclipse.soa.mangrove.diagram.general"
+ name="%prefpage.org.eclipse.soa.mangrove.diagram.general"
+ class="org.eclipse.soa.mangrove.diagram.preferences.DiagramGeneralPreferencePage">
+ </page>
+ <page
+ id="org.eclipse.soa.mangrove.diagram.appearance"
+ name="%prefpage.org.eclipse.soa.mangrove.diagram.appearance"
+ category="org.eclipse.soa.mangrove.diagram.general"
+ class="org.eclipse.soa.mangrove.diagram.preferences.DiagramAppearancePreferencePage">
+ </page>
+ <page
+ id="org.eclipse.soa.mangrove.diagram.connections"
+ name="%prefpage.org.eclipse.soa.mangrove.diagram.connections"
+ category="org.eclipse.soa.mangrove.diagram.general"
+ class="org.eclipse.soa.mangrove.diagram.preferences.DiagramConnectionsPreferencePage">
+ </page>
+ <page
+ id="org.eclipse.soa.mangrove.diagram.printing"
+ name="%prefpage.org.eclipse.soa.mangrove.diagram.printing"
+ category="org.eclipse.soa.mangrove.diagram.general"
+ class="org.eclipse.soa.mangrove.diagram.preferences.DiagramPrintingPreferencePage">
+ </page>
+ <page
+ id="org.eclipse.soa.mangrove.diagram.rulersAndGrid"
+ name="%prefpage.org.eclipse.soa.mangrove.diagram.rulersAndGrid"
+ category="org.eclipse.soa.mangrove.diagram.general"
+ class="org.eclipse.soa.mangrove.diagram.preferences.DiagramRulersAndGridPreferencePage">
+ </page>
+ </extension>
+
+ <extension point="org.eclipse.ui.views.properties.tabbed.propertyContributor" id="prop-contrib">
+ <?gmfgen generated="true"?>
+ <propertyContributor
+ contributorId="org.eclipse.soa.mangrove.diagram"
+ labelProvider="org.eclipse.soa.mangrove.diagram.sheet.IntermediateModelSheetLabelProvider">
+ <propertyCategory category="domain"/>
+ <propertyCategory category="visual"/>
+ <propertyCategory category="extra"/>
+ </propertyContributor>
+ </extension>
+
+ <extension point="org.eclipse.ui.views.properties.tabbed.propertyTabs" id="proptabs">
+ <?gmfgen generated="true"?>
+ <propertyTabs contributorId="org.eclipse.soa.mangrove.diagram">
+ <propertyTab
+ category="visual"
+ id="property.tab.AppearancePropertySection"
+ label="%tab.appearance"/>
+ <propertyTab
+ category="visual"
+ id="property.tab.DiagramPropertySection"
+ label="%tab.diagram"/>
+ <propertyTab
+ category="domain"
+ id="property.tab.domain"
+ label="%tab.domain"/>
+ </propertyTabs>
+ </extension>
+
+ <extension point="org.eclipse.ui.views.properties.tabbed.propertySections" id="propsections">
+ <?gmfgen generated="true"?>
+ <propertySections contributorId="org.eclipse.soa.mangrove.diagram">
+ <propertySection id="property.section.ConnectorAppearancePropertySection"
+ filter="org.eclipse.gmf.runtime.diagram.ui.properties.filters.ConnectionEditPartPropertySectionFilter"
+ class="org.eclipse.gmf.runtime.diagram.ui.properties.sections.appearance.ConnectionAppearancePropertySection"
+ tab="property.tab.AppearancePropertySection">
+ </propertySection>
+ <propertySection id="property.section.ShapeColorAndFontPropertySection"
+ filter="org.eclipse.gmf.runtime.diagram.ui.properties.filters.ShapeEditPartPropertySectionFilter"
+ class="org.eclipse.gmf.runtime.diagram.ui.properties.sections.appearance.ShapeColorsAndFontsPropertySection"
+ tab="property.tab.AppearancePropertySection">
+ </propertySection>
+ <propertySection id="property.section.DiagramColorsAndFontsPropertySection"
+ filter="org.eclipse.gmf.runtime.diagram.ui.properties.filters.DiagramEditPartPropertySectionFilter"
+ class="org.eclipse.gmf.runtime.diagram.ui.properties.sections.appearance.DiagramColorsAndFontsPropertySection"
+ tab="property.tab.AppearancePropertySection">
+ </propertySection>
+ <propertySection id="property.section.RulerGridPropertySection"
+ filter="org.eclipse.gmf.runtime.diagram.ui.properties.filters.DiagramEditPartPropertySectionFilter"
+ class="org.eclipse.gmf.runtime.diagram.ui.properties.sections.grid.RulerGridPropertySection"
+ tab="property.tab.DiagramPropertySection">
+ </propertySection>
+ <propertySection
+ id="property.section.domain"
+ tab="property.tab.domain"
+ class="org.eclipse.soa.mangrove.diagram.sheet.IntermediateModelPropertySection">
+ <input type="org.eclipse.gmf.runtime.notation.View"/>
+ <input type="org.eclipse.gef.EditPart"/>
+ <input type="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelAbstractNavigatorItem"/>
+ </propertySection>
+ </propertySections>
+ </extension>
+
+ <extension point="org.eclipse.gmf.runtime.diagram.core.viewProviders" id="view-provider">
+ <?gmfgen generated="true"?>
+ <viewProvider class="org.eclipse.soa.mangrove.diagram.providers.IntermediateModelViewProvider">
+ <Priority name="Lowest"/>
+ <context viewClass="org.eclipse.gmf.runtime.notation.Diagram" semanticHints="IntermediateModel"/>
+ <context viewClass="org.eclipse.gmf.runtime.notation.Node" semanticHints="2005,2006,3007,3008,3009"/>
+ <context viewClass="org.eclipse.gmf.runtime.notation.Edge" semanticHints="4009,4010,4011"/>
+ </viewProvider>
+ </extension>
+
+ <extension point="org.eclipse.gmf.runtime.diagram.ui.editpartProviders" id="ep-provider">
+ <?gmfgen generated="true"?>
+ <editpartProvider class="org.eclipse.soa.mangrove.diagram.providers.IntermediateModelEditPartProvider">
+ <Priority name="Lowest"/>
+ <object class="org.eclipse.gmf.runtime.notation.Diagram" id="generated-diagram">
+ <method name="getType()" value="IntermediateModel"/>
+ </object>
+ <object class="org.eclipse.gmf.runtime.notation.Node" id="generated-nodes">
+ <method name="getType()" value="2005,2006,3007,3008,3009"/>
+ </object>
+ <object class="org.eclipse.gmf.runtime.notation.Edge" id="generated-links">
+ <method name="getType()" value="4009,4010,4011"/>
+ </object>
+ <object class="org.eclipse.gmf.runtime.notation.Node" id="generated-labels">
+ <method name="getType()" value="5011,5010,5009,5012"/>
+ </object>
+ <object class="org.eclipse.gmf.runtime.notation.Node" id="generated-compartments">
+ <method name="getType()" value=""/>
+ </object>
+ <context views="generated-diagram,generated-nodes,generated-links,generated-labels,generated-compartments"/>
+ </editpartProvider>
+ </extension>
+
+ <extension point="org.eclipse.gmf.runtime.emf.ui.modelingAssistantProviders" id="modelassist-provider">
+ <?gmfgen generated="true"?>
+ <modelingAssistantProvider class="org.eclipse.soa.mangrove.diagram.providers.IntermediateModelModelingAssistantProvider">
+ <Priority name="Lowest"/>
+ <object class="org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart" id="StpIntermediateModel_1000"/>
+ <object class="org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionEditPart" id="ProcessCollection_2005"/>
+ <object class="org.eclipse.soa.mangrove.diagram.edit.parts.ServiceCollectionEditPart" id="ServiceCollection_2006"/>
+ <object class="org.eclipse.soa.mangrove.diagram.edit.parts.ProcessEditPart" id="Process_3007"/>
+ <object class="org.eclipse.soa.mangrove.diagram.edit.parts.StepEditPart" id="Step_3008"/>
+ <object class="org.eclipse.soa.mangrove.diagram.edit.parts.ServiceEditPart" id="Service_3009"/>
+ <context elements="StpIntermediateModel_1000,ProcessCollection_2005,ServiceCollection_2006,Process_3007,Step_3008,Service_3009"/>
+ </modelingAssistantProvider>
+ </extension>
+
+ <extension point="org.eclipse.gmf.runtime.common.ui.services.iconProviders" id="icon-provider">
+ <?gmfgen generated="true"?>
+ <IconProvider class="org.eclipse.soa.mangrove.diagram.providers.IntermediateModelIconProvider">
+ <Priority name="Low"/>
+ </IconProvider>
+ </extension>
+
+ <extension point="org.eclipse.gmf.runtime.common.ui.services.parserProviders" id="parser-provider">
+ <?gmfgen generated="true"?>
+ <ParserProvider class="org.eclipse.soa.mangrove.diagram.providers.IntermediateModelParserProvider">
+ <Priority name="Lowest"/>
+ </ParserProvider>
+ </extension>
+
+ <extension point="org.eclipse.gmf.runtime.emf.type.core.elementTypes" id="element-types">
+ <?gmfgen generated="true"?>
+ <metamodel nsURI="http://eclipse.org/soa/mangrove">
+ <metamodelType
+ id="org.eclipse.soa.mangrove.diagram.StpIntermediateModel_1000"
+ name="%metatype.name.StpIntermediateModel_1000"
+ kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
+ eclass="StpIntermediateModel"
+ edithelper="org.eclipse.soa.mangrove.diagram.edit.helpers.StpIntermediateModelEditHelper">
+ <param name="semanticHint" value="1000"/>
+ </metamodelType>
+ </metamodel>
+ <metamodel nsURI="http://eclipse.org/soa/mangrove">
+ <metamodelType
+ id="org.eclipse.soa.mangrove.diagram.ProcessCollection_2005"
+ name="%metatype.name.ProcessCollection_2005"
+ kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
+ eclass="ProcessCollection"
+ edithelper="org.eclipse.soa.mangrove.diagram.edit.helpers.ProcessCollectionEditHelper">
+ <param name="semanticHint" value="2005"/>
+ </metamodelType>
+ </metamodel>
+ <metamodel nsURI="http://eclipse.org/soa/mangrove">
+ <metamodelType
+ id="org.eclipse.soa.mangrove.diagram.ServiceCollection_2006"
+ name="%metatype.name.ServiceCollection_2006"
+ kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
+ eclass="ServiceCollection"
+ edithelper="org.eclipse.soa.mangrove.diagram.edit.helpers.ServiceCollectionEditHelper">
+ <param name="semanticHint" value="2006"/>
+ </metamodelType>
+ </metamodel>
+ <metamodel nsURI="http://eclipse.org/soa/mangrove">
+ <metamodelType
+ id="org.eclipse.soa.mangrove.diagram.Process_3007"
+ name="%metatype.name.Process_3007"
+ kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
+ eclass="Process"
+ edithelper="org.eclipse.soa.mangrove.diagram.edit.helpers.ProcessEditHelper">
+ <param name="semanticHint" value="3007"/>
+ </metamodelType>
+ </metamodel>
+ <metamodel nsURI="http://eclipse.org/soa/mangrove">
+ <metamodelType
+ id="org.eclipse.soa.mangrove.diagram.Step_3008"
+ name="%metatype.name.Step_3008"
+ kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
+ eclass="Step"
+ edithelper="org.eclipse.soa.mangrove.diagram.edit.helpers.StepEditHelper">
+ <param name="semanticHint" value="3008"/>
+ </metamodelType>
+ </metamodel>
+ <metamodel nsURI="http://eclipse.org/soa/mangrove">
+ <metamodelType
+ id="org.eclipse.soa.mangrove.diagram.Service_3009"
+ name="%metatype.name.Service_3009"
+ kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
+ eclass="Service"
+ edithelper="org.eclipse.soa.mangrove.diagram.edit.helpers.ServiceEditHelper">
+ <param name="semanticHint" value="3009"/>
+ </metamodelType>
+ </metamodel>
+ <metamodel nsURI="http://eclipse.org/soa/mangrove">
+ <metamodelType
+ id="org.eclipse.soa.mangrove.diagram.Transition_4009"
+ name="%metatype.name.Transition_4009"
+ kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"
+ eclass="Transition"
+ edithelper="org.eclipse.soa.mangrove.diagram.edit.helpers.TransitionEditHelper">
+ <param name="semanticHint" value="4009"/>
+ </metamodelType>
+ </metamodel>
+ <metamodel nsURI="http://eclipse.org/soa/mangrove">
+ <specializationType
+ id="org.eclipse.soa.mangrove.diagram.StepServiceModel_4010"
+ name="%metatype.name.StepServiceModel_4010"
+ kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType">
+ <specializes id="org.eclipse.gmf.runtime.emf.type.core.null"/>
+ <param name="semanticHint" value="4010"/>
+ </specializationType>
+ </metamodel>
+ <metamodel nsURI="http://eclipse.org/soa/mangrove">
+ <specializationType
+ id="org.eclipse.soa.mangrove.diagram.ServiceNeeds_4011"
+ name="%metatype.name.ServiceNeeds_4011"
+ kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType">
+ <specializes id="org.eclipse.gmf.runtime.emf.type.core.null"/>
+ <param name="semanticHint" value="4011"/>
+ </specializationType>
+ </metamodel>
+ </extension>
+
+ <extension point="org.eclipse.gmf.runtime.emf.type.core.elementTypeBindings" id="element-types-bindings">
+ <?gmfgen generated="true"?>
+ <clientContext id="org.eclipse.soa.mangrove.diagram.TypeContext">
+ <enablement>
+ <test
+ property="org.eclipse.gmf.runtime.emf.core.editingDomain"
+ value="org.eclipse.soa.mangrove.diagram.EditingDomain"/>
+ </enablement>
+ </clientContext>
+ <binding context="org.eclipse.soa.mangrove.diagram.TypeContext">
+ <elementType ref="org.eclipse.soa.mangrove.diagram.StpIntermediateModel_1000"/>
+ <elementType ref="org.eclipse.soa.mangrove.diagram.ProcessCollection_2005"/>
+ <elementType ref="org.eclipse.soa.mangrove.diagram.ServiceCollection_2006"/>
+ <elementType ref="org.eclipse.soa.mangrove.diagram.Process_3007"/>
+ <elementType ref="org.eclipse.soa.mangrove.diagram.Step_3008"/>
+ <elementType ref="org.eclipse.soa.mangrove.diagram.Service_3009"/>
+ <elementType ref="org.eclipse.soa.mangrove.diagram.Transition_4009"/>
+ <elementType ref="org.eclipse.soa.mangrove.diagram.StepServiceModel_4010"/>
+ <elementType ref="org.eclipse.soa.mangrove.diagram.ServiceNeeds_4011"/>
+ <advice ref="org.eclipse.gmf.runtime.diagram.core.advice.notationDepdendents"/>
+ </binding>
+ </extension>
+ <extension point="org.eclipse.core.expressions.propertyTesters" id="navigator-proptest.isURIEditorInput">
+ <?gmfgen generated="true"?>
+ <propertyTester
+ id="org.eclipse.soa.mangrove.diagram.URIEditorInputPropertyTester"
+ type="org.eclipse.emf.common.ui.URIEditorInput"
+ namespace="org.eclipse.soa.mangrove.diagram"
+ properties="isURIEditorInput"
+ class="org.eclipse.soa.mangrove.diagram.part.IntermediateModelUriEditorInputTester">
+ </propertyTester>
+ </extension>
+
+ <extension point="org.eclipse.ui.navigator.viewer" id="navigator-viewbinding">
+ <?gmfgen generated="true"?>
+ <viewerContentBinding viewerId="org.eclipse.ui.navigator.ProjectExplorer">
+ <includes>
+ <contentExtension pattern="org.eclipse.soa.mangrove.diagram.resourceContent"/>
+ <contentExtension pattern="org.eclipse.soa.mangrove.diagram.domainResourceContent"/>
+ <contentExtension pattern="org.eclipse.soa.mangrove.diagram.navigatorLinkHelper"/>
+ </includes>
+ </viewerContentBinding>
+ <viewerActionBinding viewerId="org.eclipse.ui.navigator.ProjectExplorer">
+ <includes>
+ <actionExtension pattern="org.eclipse.soa.mangrove.diagram.navigatorActionProvider"/>
+ </includes>
+ </viewerActionBinding>
+ </extension>
+
+ <extension point="org.eclipse.ui.navigator.navigatorContent" id="navigator-content">
+ <?gmfgen generated="true"?>
+ <navigatorContent
+ id="org.eclipse.soa.mangrove.diagram.resourceContent"
+ name="%navigatorContentName"
+ priority="normal"
+ contentProvider="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorContentProvider"
+ labelProvider="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorLabelProvider"
+ icon="icons/obj16/ImDiagramFile.gif"
+ activeByDefault="true">
+ <triggerPoints>
+ <or>
+ <and>
+ <instanceof value="org.eclipse.core.resources.IFile"/>
+ <test property="org.eclipse.core.resources.extension" value="mangrove_diagram"/>
+ </and>
+ <instanceof value="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelAbstractNavigatorItem"/>
+ </or>
+ </triggerPoints>
+ <possibleChildren>
+ <or>
+ <instanceof value="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelAbstractNavigatorItem"/>
+ </or>
+ </possibleChildren>
+ <commonSorter
+ id="org.eclipse.soa.mangrove.diagram.navigatorSorter"
+ class="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorSorter">
+ <parentExpression>
+ <or>
+ <and>
+ <instanceof value="org.eclipse.core.resources.IFile"/>
+ <test property="org.eclipse.core.resources.extension" value="mangrove_diagram"/>
+ </and>
+ <instanceof value="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelAbstractNavigatorItem"/>
+ </or>
+ </parentExpression>
+ </commonSorter>
+ </navigatorContent>
+ <navigatorContent
+ id="org.eclipse.soa.mangrove.diagram.domainResourceContent"
+ name="%domainNavigatorContentName"
+ priority="normal"
+ contentProvider="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelDomainNavigatorContentProvider"
+ labelProvider="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelDomainNavigatorLabelProvider"
+ icon="icons/obj16/ImDiagramFile.gif"
+ activeByDefault="true">
+ <triggerPoints>
+ <or>
+ <and>
+ <instanceof value="org.eclipse.core.resources.IFile"/>
+ <test property="org.eclipse.core.resources.extension" value="mangrove"/>
+ </and>
+ <instanceof value="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelDomainNavigatorItem"/>
+ </or>
+ </triggerPoints>
+ <possibleChildren>
+ <instanceof value="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelDomainNavigatorItem"/>
+ </possibleChildren>
+ </navigatorContent>
+ <actionProvider
+ id="org.eclipse.soa.mangrove.diagram.navigatorActionProvider"
+ class="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorActionProvider">
+ <enablement>
+ <or>
+ <instanceof value="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelAbstractNavigatorItem"/>
+ </or>
+ </enablement>
+ </actionProvider>
+ </extension>
+
+ <extension point="org.eclipse.ui.navigator.linkHelper" id="navigator-linkhelper">
+ <?gmfgen generated="true"?>
+ <linkHelper
+ id="org.eclipse.soa.mangrove.diagram.navigatorLinkHelper"
+ class="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorLinkHelper">
+ <editorInputEnablement>
+ <and>
+ <instanceof value="org.eclipse.emf.common.ui.URIEditorInput"/>
+ <test property="org.eclipse.soa.mangrove.diagram.isURIEditorInput"/>
+ </and>
+ </editorInputEnablement>
+ <selectionEnablement>
+ <instanceof value="org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelAbstractNavigatorItem"/>
+ </selectionEnablement>
+ </linkHelper>
+ </extension>
+ <extension point="org.eclipse.ui.commands" id="update-cmd">
+ <?gmfgen generated="true"?>
+ <command
+ categoryId="org.eclipse.ui.category.edit"
+ defaultHandler="org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramUpdateCommand"
+ description="%update.diagram.description"
+ id="org.eclipse.soa.mangrove.diagram.updateDiagram"
+ name="%update.diagram.name"/>
+ </extension>
+
+ <extension point="org.eclipse.ui.bindings" id="update-cmd-binding">
+ <?gmfgen generated="true"?>
+ <key
+ commandId="org.eclipse.soa.mangrove.diagram.updateDiagram"
+ contextId="org.eclipse.soa.mangrove.diagram.ui.diagramContext"
+ schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+ sequence="F5"/>
+ </extension>
+
+ <extension point="org.eclipse.ui.menus" id="context-menus">
+ <?gmfgen generated="true"?>
+ <!-- menuContribution locationURI="menu:org.eclipse.ui.main.menu?after=">
+ </menuContribution>
+ <menuContribution locationURI="toolbar:org.eclipse.ui.main.toolbar?after=">
+ </menuContribution -->
+ <menuContribution locationURI="popup:org.eclipse.gmf.runtime.diagram.ui.DiagramEditorContextMenu">
+ <command commandId="org.eclipse.soa.mangrove.diagram.LoadResourceAction">
+ <visibleWhen>
+ <and>
+ <with variable="activePartId"><equals value="org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorID"/></with>
+ <with variable="selection"><iterate ifEmpty="false">
+ <instanceof value="org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart"/>
+ </iterate></with>
+ </and>
+ </visibleWhen>
+ </command>
+ </menuContribution>
+ </extension>
+
+ <extension point="org.eclipse.ui.commands" id="menu-commands">
+ <?gmfgen generated="true"?>
+ <category id="org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorID" name="%cmdcategory.name" description="%cmdcategory.desc"/>
+ <command id="org.eclipse.soa.mangrove.diagram.LoadResourceAction"
+ name="Load Resource"
+ categoryId="org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorID"
+ defaultHandler="org.eclipse.soa.mangrove.diagram.part.LoadResourceAction"/>
+ </extension>
+
+ <extension point="org.eclipse.ui.handlers" id="menu-handlers">
+ <?gmfgen generated="true"?>
+ </extension>
+
+ <!-- optionally, specify keybindings -->
+</plugin>
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ProcessCollectionCreateCommand.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ProcessCollectionCreateCommand.java
new file mode 100755
index 0000000..472533b
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ProcessCollectionCreateCommand.java
@@ -0,0 +1,92 @@
+package org.eclipse.soa.mangrove.diagram.edit.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.ImFactory;
+import org.eclipse.soa.mangrove.ProcessCollection;
+import org.eclipse.soa.mangrove.StpIntermediateModel;
+
+/**
+ * @generated
+ */
+public class ProcessCollectionCreateCommand extends EditElementCommand {
+
+ /**
+ * @generated
+ */
+ public ProcessCollectionCreateCommand(CreateElementRequest req) {
+ super(req.getLabel(), null, req);
+ }
+
+ /**
+ * FIXME: replace with setElementToEdit()
+ * @generated
+ */
+ protected EObject getElementToEdit() {
+ EObject container = ((CreateElementRequest) getRequest())
+ .getContainer();
+ if (container instanceof View) {
+ container = ((View) container).getElement();
+ }
+ return container;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExecute() {
+ StpIntermediateModel container = (StpIntermediateModel) getElementToEdit();
+ if (container.getProcessCollection() != null) {
+ return false;
+ }
+ return true;
+
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ ProcessCollection newElement = ImFactory.eINSTANCE
+ .createProcessCollection();
+
+ StpIntermediateModel owner = (StpIntermediateModel) getElementToEdit();
+ owner.setProcessCollection(newElement);
+
+ doConfigure(newElement, monitor, info);
+
+ ((CreateElementRequest) getRequest()).setNewElement(newElement);
+ return CommandResult.newOKCommandResult(newElement);
+ }
+
+ /**
+ * @generated
+ */
+ protected void doConfigure(ProcessCollection newElement,
+ IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ IElementType elementType = ((CreateElementRequest) getRequest())
+ .getElementType();
+ ConfigureRequest configureRequest = new ConfigureRequest(
+ getEditingDomain(), newElement, elementType);
+ configureRequest.setClientContext(((CreateElementRequest) getRequest())
+ .getClientContext());
+ configureRequest.addParameters(getRequest().getParameters());
+ ICommand configureCommand = elementType
+ .getEditCommand(configureRequest);
+ if (configureCommand != null && configureCommand.canExecute()) {
+ configureCommand.execute(monitor, info);
+ }
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ProcessCreateCommand.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ProcessCreateCommand.java
new file mode 100755
index 0000000..ae21451
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ProcessCreateCommand.java
@@ -0,0 +1,86 @@
+package org.eclipse.soa.mangrove.diagram.edit.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.ImFactory;
+import org.eclipse.soa.mangrove.Process;
+import org.eclipse.soa.mangrove.ProcessCollection;
+
+/**
+ * @generated
+ */
+public class ProcessCreateCommand extends EditElementCommand {
+
+ /**
+ * @generated
+ */
+ public ProcessCreateCommand(CreateElementRequest req) {
+ super(req.getLabel(), null, req);
+ }
+
+ /**
+ * FIXME: replace with setElementToEdit()
+ * @generated
+ */
+ protected EObject getElementToEdit() {
+ EObject container = ((CreateElementRequest) getRequest())
+ .getContainer();
+ if (container instanceof View) {
+ container = ((View) container).getElement();
+ }
+ return container;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExecute() {
+ return true;
+
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ Process newElement = ImFactory.eINSTANCE.createProcess();
+
+ ProcessCollection owner = (ProcessCollection) getElementToEdit();
+ owner.getProcesses().add(newElement);
+
+ doConfigure(newElement, monitor, info);
+
+ ((CreateElementRequest) getRequest()).setNewElement(newElement);
+ return CommandResult.newOKCommandResult(newElement);
+ }
+
+ /**
+ * @generated
+ */
+ protected void doConfigure(Process newElement, IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ IElementType elementType = ((CreateElementRequest) getRequest())
+ .getElementType();
+ ConfigureRequest configureRequest = new ConfigureRequest(
+ getEditingDomain(), newElement, elementType);
+ configureRequest.setClientContext(((CreateElementRequest) getRequest())
+ .getClientContext());
+ configureRequest.addParameters(getRequest().getParameters());
+ ICommand configureCommand = elementType
+ .getEditCommand(configureRequest);
+ if (configureCommand != null && configureCommand.canExecute()) {
+ configureCommand.execute(monitor, info);
+ }
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ServiceCollectionCreateCommand.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ServiceCollectionCreateCommand.java
new file mode 100755
index 0000000..b964c60
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ServiceCollectionCreateCommand.java
@@ -0,0 +1,92 @@
+package org.eclipse.soa.mangrove.diagram.edit.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.ImFactory;
+import org.eclipse.soa.mangrove.ServiceCollection;
+import org.eclipse.soa.mangrove.StpIntermediateModel;
+
+/**
+ * @generated
+ */
+public class ServiceCollectionCreateCommand extends EditElementCommand {
+
+ /**
+ * @generated
+ */
+ public ServiceCollectionCreateCommand(CreateElementRequest req) {
+ super(req.getLabel(), null, req);
+ }
+
+ /**
+ * FIXME: replace with setElementToEdit()
+ * @generated
+ */
+ protected EObject getElementToEdit() {
+ EObject container = ((CreateElementRequest) getRequest())
+ .getContainer();
+ if (container instanceof View) {
+ container = ((View) container).getElement();
+ }
+ return container;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExecute() {
+ StpIntermediateModel container = (StpIntermediateModel) getElementToEdit();
+ if (container.getServiceCollection() != null) {
+ return false;
+ }
+ return true;
+
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ ServiceCollection newElement = ImFactory.eINSTANCE
+ .createServiceCollection();
+
+ StpIntermediateModel owner = (StpIntermediateModel) getElementToEdit();
+ owner.setServiceCollection(newElement);
+
+ doConfigure(newElement, monitor, info);
+
+ ((CreateElementRequest) getRequest()).setNewElement(newElement);
+ return CommandResult.newOKCommandResult(newElement);
+ }
+
+ /**
+ * @generated
+ */
+ protected void doConfigure(ServiceCollection newElement,
+ IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ IElementType elementType = ((CreateElementRequest) getRequest())
+ .getElementType();
+ ConfigureRequest configureRequest = new ConfigureRequest(
+ getEditingDomain(), newElement, elementType);
+ configureRequest.setClientContext(((CreateElementRequest) getRequest())
+ .getClientContext());
+ configureRequest.addParameters(getRequest().getParameters());
+ ICommand configureCommand = elementType
+ .getEditCommand(configureRequest);
+ if (configureCommand != null && configureCommand.canExecute()) {
+ configureCommand.execute(monitor, info);
+ }
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ServiceCreateCommand.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ServiceCreateCommand.java
new file mode 100755
index 0000000..397349f
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ServiceCreateCommand.java
@@ -0,0 +1,86 @@
+package org.eclipse.soa.mangrove.diagram.edit.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.ImFactory;
+import org.eclipse.soa.mangrove.Service;
+import org.eclipse.soa.mangrove.ServiceCollection;
+
+/**
+ * @generated
+ */
+public class ServiceCreateCommand extends EditElementCommand {
+
+ /**
+ * @generated
+ */
+ public ServiceCreateCommand(CreateElementRequest req) {
+ super(req.getLabel(), null, req);
+ }
+
+ /**
+ * FIXME: replace with setElementToEdit()
+ * @generated
+ */
+ protected EObject getElementToEdit() {
+ EObject container = ((CreateElementRequest) getRequest())
+ .getContainer();
+ if (container instanceof View) {
+ container = ((View) container).getElement();
+ }
+ return container;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExecute() {
+ return true;
+
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ Service newElement = ImFactory.eINSTANCE.createService();
+
+ ServiceCollection owner = (ServiceCollection) getElementToEdit();
+ owner.getServices().add(newElement);
+
+ doConfigure(newElement, monitor, info);
+
+ ((CreateElementRequest) getRequest()).setNewElement(newElement);
+ return CommandResult.newOKCommandResult(newElement);
+ }
+
+ /**
+ * @generated
+ */
+ protected void doConfigure(Service newElement, IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ IElementType elementType = ((CreateElementRequest) getRequest())
+ .getElementType();
+ ConfigureRequest configureRequest = new ConfigureRequest(
+ getEditingDomain(), newElement, elementType);
+ configureRequest.setClientContext(((CreateElementRequest) getRequest())
+ .getClientContext());
+ configureRequest.addParameters(getRequest().getParameters());
+ ICommand configureCommand = elementType
+ .getEditCommand(configureRequest);
+ if (configureCommand != null && configureCommand.canExecute()) {
+ configureCommand.execute(monitor, info);
+ }
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ServiceNeedsCreateCommand.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ServiceNeedsCreateCommand.java
new file mode 100755
index 0000000..8a1a5f0
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ServiceNeedsCreateCommand.java
@@ -0,0 +1,96 @@
+package org.eclipse.soa.mangrove.diagram.edit.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest;
+import org.eclipse.soa.mangrove.Service;
+import org.eclipse.soa.mangrove.diagram.edit.policies.IntermediateModelBaseItemSemanticEditPolicy;
+
+/**
+ * @generated
+ */
+public class ServiceNeedsCreateCommand extends EditElementCommand {
+
+ /**
+ * @generated
+ */
+ private final EObject source;
+
+ /**
+ * @generated
+ */
+ private final EObject target;
+
+ /**
+ * @generated
+ */
+ public ServiceNeedsCreateCommand(CreateRelationshipRequest request,
+ EObject source, EObject target) {
+ super(request.getLabel(), null, request);
+ this.source = source;
+ this.target = target;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExecute() {
+ if (source == null && target == null) {
+ return false;
+ }
+ if (source != null && false == source instanceof Service) {
+ return false;
+ }
+ if (target != null && false == target instanceof Service) {
+ return false;
+ }
+ if (getSource() == null) {
+ return true; // link creation is in progress; source is not defined yet
+ }
+ // target may be null here but it's possible to check constraint
+ return IntermediateModelBaseItemSemanticEditPolicy.getLinkConstraints()
+ .canCreateServiceNeeds_4011(getSource(), getTarget());
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ if (!canExecute()) {
+ throw new ExecutionException(
+ "Invalid arguments in create link command"); //$NON-NLS-1$
+ }
+
+ if (getSource() != null && getTarget() != null) {
+ getSource().getNeeds().add(getTarget());
+ }
+ return CommandResult.newOKCommandResult();
+
+ }
+
+ /**
+ * @generated
+ */
+ protected void setElementToEdit(EObject element) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @generated
+ */
+ protected Service getSource() {
+ return (Service) source;
+ }
+
+ /**
+ * @generated
+ */
+ protected Service getTarget() {
+ return (Service) target;
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ServiceNeedsReorientCommand.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ServiceNeedsReorientCommand.java
new file mode 100755
index 0000000..cb57bb4
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/ServiceNeedsReorientCommand.java
@@ -0,0 +1,152 @@
+package org.eclipse.soa.mangrove.diagram.edit.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRelationshipRequest;
+import org.eclipse.soa.mangrove.Service;
+import org.eclipse.soa.mangrove.diagram.edit.policies.IntermediateModelBaseItemSemanticEditPolicy;
+
+/**
+ * @generated
+ */
+public class ServiceNeedsReorientCommand extends EditElementCommand {
+
+ /**
+ * @generated
+ */
+ private final int reorientDirection;
+
+ /**
+ * @generated
+ */
+ private final EObject referenceOwner;
+
+ /**
+ * @generated
+ */
+ private final EObject oldEnd;
+
+ /**
+ * @generated
+ */
+ private final EObject newEnd;
+
+ /**
+ * @generated
+ */
+ public ServiceNeedsReorientCommand(
+ ReorientReferenceRelationshipRequest request) {
+ super(request.getLabel(), null, request);
+ reorientDirection = request.getDirection();
+ referenceOwner = request.getReferenceOwner();
+ oldEnd = request.getOldRelationshipEnd();
+ newEnd = request.getNewRelationshipEnd();
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExecute() {
+ if (false == referenceOwner instanceof Service) {
+ return false;
+ }
+ if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) {
+ return canReorientSource();
+ }
+ if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) {
+ return canReorientTarget();
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean canReorientSource() {
+ if (!(oldEnd instanceof Service && newEnd instanceof Service)) {
+ return false;
+ }
+ return IntermediateModelBaseItemSemanticEditPolicy.getLinkConstraints()
+ .canExistServiceNeeds_4011(getNewSource(), getOldTarget());
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean canReorientTarget() {
+ if (!(oldEnd instanceof Service && newEnd instanceof Service)) {
+ return false;
+ }
+ return IntermediateModelBaseItemSemanticEditPolicy.getLinkConstraints()
+ .canExistServiceNeeds_4011(getOldSource(), getNewTarget());
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ if (!canExecute()) {
+ throw new ExecutionException(
+ "Invalid arguments in reorient link command"); //$NON-NLS-1$
+ }
+ if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) {
+ return reorientSource();
+ }
+ if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) {
+ return reorientTarget();
+ }
+ throw new IllegalStateException();
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult reorientSource() throws ExecutionException {
+ getOldSource().getNeeds().remove(getOldTarget());
+ getNewSource().getNeeds().add(getOldTarget());
+ return CommandResult.newOKCommandResult(referenceOwner);
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult reorientTarget() throws ExecutionException {
+ getOldSource().getNeeds().remove(getOldTarget());
+ getOldSource().getNeeds().add(getNewTarget());
+ return CommandResult.newOKCommandResult(referenceOwner);
+ }
+
+ /**
+ * @generated
+ */
+ protected Service getOldSource() {
+ return (Service) referenceOwner;
+ }
+
+ /**
+ * @generated
+ */
+ protected Service getNewSource() {
+ return (Service) newEnd;
+ }
+
+ /**
+ * @generated
+ */
+ protected Service getOldTarget() {
+ return (Service) oldEnd;
+ }
+
+ /**
+ * @generated
+ */
+ protected Service getNewTarget() {
+ return (Service) newEnd;
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/StepCreateCommand.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/StepCreateCommand.java
new file mode 100755
index 0000000..2fffb9c
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/StepCreateCommand.java
@@ -0,0 +1,86 @@
+package org.eclipse.soa.mangrove.diagram.edit.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.ImFactory;
+import org.eclipse.soa.mangrove.Process;
+import org.eclipse.soa.mangrove.Step;
+
+/**
+ * @generated
+ */
+public class StepCreateCommand extends EditElementCommand {
+
+ /**
+ * @generated
+ */
+ public StepCreateCommand(CreateElementRequest req) {
+ super(req.getLabel(), null, req);
+ }
+
+ /**
+ * FIXME: replace with setElementToEdit()
+ * @generated
+ */
+ protected EObject getElementToEdit() {
+ EObject container = ((CreateElementRequest) getRequest())
+ .getContainer();
+ if (container instanceof View) {
+ container = ((View) container).getElement();
+ }
+ return container;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExecute() {
+ return true;
+
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ Step newElement = ImFactory.eINSTANCE.createStep();
+
+ Process owner = (Process) getElementToEdit();
+ owner.getSteps().add(newElement);
+
+ doConfigure(newElement, monitor, info);
+
+ ((CreateElementRequest) getRequest()).setNewElement(newElement);
+ return CommandResult.newOKCommandResult(newElement);
+ }
+
+ /**
+ * @generated
+ */
+ protected void doConfigure(Step newElement, IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ IElementType elementType = ((CreateElementRequest) getRequest())
+ .getElementType();
+ ConfigureRequest configureRequest = new ConfigureRequest(
+ getEditingDomain(), newElement, elementType);
+ configureRequest.setClientContext(((CreateElementRequest) getRequest())
+ .getClientContext());
+ configureRequest.addParameters(getRequest().getParameters());
+ ICommand configureCommand = elementType
+ .getEditCommand(configureRequest);
+ if (configureCommand != null && configureCommand.canExecute()) {
+ configureCommand.execute(monitor, info);
+ }
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/StepServiceModelCreateCommand.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/StepServiceModelCreateCommand.java
new file mode 100755
index 0000000..fd1d228
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/StepServiceModelCreateCommand.java
@@ -0,0 +1,97 @@
+package org.eclipse.soa.mangrove.diagram.edit.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest;
+import org.eclipse.soa.mangrove.Service;
+import org.eclipse.soa.mangrove.Step;
+import org.eclipse.soa.mangrove.diagram.edit.policies.IntermediateModelBaseItemSemanticEditPolicy;
+
+/**
+ * @generated
+ */
+public class StepServiceModelCreateCommand extends EditElementCommand {
+
+ /**
+ * @generated
+ */
+ private final EObject source;
+
+ /**
+ * @generated
+ */
+ private final EObject target;
+
+ /**
+ * @generated
+ */
+ public StepServiceModelCreateCommand(CreateRelationshipRequest request,
+ EObject source, EObject target) {
+ super(request.getLabel(), null, request);
+ this.source = source;
+ this.target = target;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExecute() {
+ if (source == null && target == null) {
+ return false;
+ }
+ if (source != null && false == source instanceof Step) {
+ return false;
+ }
+ if (target != null && false == target instanceof Service) {
+ return false;
+ }
+ if (getSource() == null) {
+ return true; // link creation is in progress; source is not defined yet
+ }
+ // target may be null here but it's possible to check constraint
+ return IntermediateModelBaseItemSemanticEditPolicy.getLinkConstraints()
+ .canCreateStepServiceModel_4010(getSource(), getTarget());
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ if (!canExecute()) {
+ throw new ExecutionException(
+ "Invalid arguments in create link command"); //$NON-NLS-1$
+ }
+
+ if (getSource() != null && getTarget() != null) {
+ getSource().setServiceModel(getTarget());
+ }
+ return CommandResult.newOKCommandResult();
+
+ }
+
+ /**
+ * @generated
+ */
+ protected void setElementToEdit(EObject element) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @generated
+ */
+ protected Step getSource() {
+ return (Step) source;
+ }
+
+ /**
+ * @generated
+ */
+ protected Service getTarget() {
+ return (Service) target;
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/StepServiceModelReorientCommand.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/StepServiceModelReorientCommand.java
new file mode 100755
index 0000000..99b395d
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/StepServiceModelReorientCommand.java
@@ -0,0 +1,152 @@
+package org.eclipse.soa.mangrove.diagram.edit.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRelationshipRequest;
+import org.eclipse.soa.mangrove.Service;
+import org.eclipse.soa.mangrove.Step;
+import org.eclipse.soa.mangrove.diagram.edit.policies.IntermediateModelBaseItemSemanticEditPolicy;
+
+/**
+ * @generated
+ */
+public class StepServiceModelReorientCommand extends EditElementCommand {
+
+ /**
+ * @generated
+ */
+ private final int reorientDirection;
+
+ /**
+ * @generated
+ */
+ private final EObject referenceOwner;
+
+ /**
+ * @generated
+ */
+ private final EObject oldEnd;
+
+ /**
+ * @generated
+ */
+ private final EObject newEnd;
+
+ /**
+ * @generated
+ */
+ public StepServiceModelReorientCommand(
+ ReorientReferenceRelationshipRequest request) {
+ super(request.getLabel(), null, request);
+ reorientDirection = request.getDirection();
+ referenceOwner = request.getReferenceOwner();
+ oldEnd = request.getOldRelationshipEnd();
+ newEnd = request.getNewRelationshipEnd();
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExecute() {
+ if (false == referenceOwner instanceof Step) {
+ return false;
+ }
+ if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) {
+ return canReorientSource();
+ }
+ if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) {
+ return canReorientTarget();
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean canReorientSource() {
+ if (!(oldEnd instanceof Service && newEnd instanceof Step)) {
+ return false;
+ }
+ return IntermediateModelBaseItemSemanticEditPolicy.getLinkConstraints()
+ .canExistStepServiceModel_4010(getNewSource(), getOldTarget());
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean canReorientTarget() {
+ if (!(oldEnd instanceof Service && newEnd instanceof Service)) {
+ return false;
+ }
+ return IntermediateModelBaseItemSemanticEditPolicy.getLinkConstraints()
+ .canExistStepServiceModel_4010(getOldSource(), getNewTarget());
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ if (!canExecute()) {
+ throw new ExecutionException(
+ "Invalid arguments in reorient link command"); //$NON-NLS-1$
+ }
+ if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) {
+ return reorientSource();
+ }
+ if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) {
+ return reorientTarget();
+ }
+ throw new IllegalStateException();
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult reorientSource() throws ExecutionException {
+ getOldSource().setServiceModel(null);
+ getNewSource().setServiceModel(getOldTarget());
+ return CommandResult.newOKCommandResult(referenceOwner);
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult reorientTarget() throws ExecutionException {
+ getOldSource().setServiceModel(getNewTarget());
+ return CommandResult.newOKCommandResult(referenceOwner);
+ }
+
+ /**
+ * @generated
+ */
+ protected Step getOldSource() {
+ return (Step) referenceOwner;
+ }
+
+ /**
+ * @generated
+ */
+ protected Step getNewSource() {
+ return (Step) newEnd;
+ }
+
+ /**
+ * @generated
+ */
+ protected Service getOldTarget() {
+ return (Service) oldEnd;
+ }
+
+ /**
+ * @generated
+ */
+ protected Service getNewTarget() {
+ return (Service) newEnd;
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/TransitionCreateCommand.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/TransitionCreateCommand.java
new file mode 100755
index 0000000..32581b0
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/TransitionCreateCommand.java
@@ -0,0 +1,165 @@
+package org.eclipse.soa.mangrove.diagram.edit.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest;
+import org.eclipse.soa.mangrove.ImFactory;
+import org.eclipse.soa.mangrove.Process;
+import org.eclipse.soa.mangrove.Step;
+import org.eclipse.soa.mangrove.Transition;
+import org.eclipse.soa.mangrove.diagram.edit.policies.IntermediateModelBaseItemSemanticEditPolicy;
+
+/**
+ * @generated
+ */
+public class TransitionCreateCommand extends EditElementCommand {
+
+ /**
+ * @generated
+ */
+ private final EObject source;
+
+ /**
+ * @generated
+ */
+ private final EObject target;
+
+ /**
+ * @generated
+ */
+ private final Process container;
+
+ /**
+ * @generated
+ */
+ public TransitionCreateCommand(CreateRelationshipRequest request,
+ EObject source, EObject target) {
+ super(request.getLabel(), null, request);
+ this.source = source;
+ this.target = target;
+ container = deduceContainer(source, target);
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExecute() {
+ if (source == null && target == null) {
+ return false;
+ }
+ if (source != null && false == source instanceof Step) {
+ return false;
+ }
+ if (target != null && false == target instanceof Step) {
+ return false;
+ }
+ if (getSource() == null) {
+ return true; // link creation is in progress; source is not defined yet
+ }
+ // target may be null here but it's possible to check constraint
+ if (getContainer() == null) {
+ return false;
+ }
+ return IntermediateModelBaseItemSemanticEditPolicy.getLinkConstraints()
+ .canCreateTransition_4009(getContainer(), getSource(),
+ getTarget());
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ if (!canExecute()) {
+ throw new ExecutionException(
+ "Invalid arguments in create link command"); //$NON-NLS-1$
+ }
+
+ Transition newElement = ImFactory.eINSTANCE.createTransition();
+ getContainer().getTransitions().add(newElement);
+ newElement.setSource(getSource());
+ newElement.setTarget(getTarget());
+ doConfigure(newElement, monitor, info);
+ ((CreateElementRequest) getRequest()).setNewElement(newElement);
+ return CommandResult.newOKCommandResult(newElement);
+
+ }
+
+ /**
+ * @generated
+ */
+ protected void doConfigure(Transition newElement, IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ IElementType elementType = ((CreateElementRequest) getRequest())
+ .getElementType();
+ ConfigureRequest configureRequest = new ConfigureRequest(
+ getEditingDomain(), newElement, elementType);
+ configureRequest.setClientContext(((CreateElementRequest) getRequest())
+ .getClientContext());
+ configureRequest.addParameters(getRequest().getParameters());
+ configureRequest.setParameter(CreateRelationshipRequest.SOURCE,
+ getSource());
+ configureRequest.setParameter(CreateRelationshipRequest.TARGET,
+ getTarget());
+ ICommand configureCommand = elementType
+ .getEditCommand(configureRequest);
+ if (configureCommand != null && configureCommand.canExecute()) {
+ configureCommand.execute(monitor, info);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setElementToEdit(EObject element) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @generated
+ */
+ protected Step getSource() {
+ return (Step) source;
+ }
+
+ /**
+ * @generated
+ */
+ protected Step getTarget() {
+ return (Step) target;
+ }
+
+ /**
+ * @generated
+ */
+ public Process getContainer() {
+ return container;
+ }
+
+ /**
+ * Default approach is to traverse ancestors of the source to find instance of container.
+ * Modify with appropriate logic.
+ * @generated
+ */
+ private static Process deduceContainer(EObject source, EObject target) {
+ // Find container element for the new link.
+ // Climb up by containment hierarchy starting from the source
+ // and return the first element that is instance of the container class.
+ for (EObject element = source; element != null; element = element
+ .eContainer()) {
+ if (element instanceof Process) {
+ return (Process) element;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/TransitionReorientCommand.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/TransitionReorientCommand.java
new file mode 100755
index 0000000..be18a1e
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/commands/TransitionReorientCommand.java
@@ -0,0 +1,163 @@
+package org.eclipse.soa.mangrove.diagram.edit.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.emf.type.core.commands.EditElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRelationshipRequest;
+import org.eclipse.soa.mangrove.Process;
+import org.eclipse.soa.mangrove.Step;
+import org.eclipse.soa.mangrove.Transition;
+import org.eclipse.soa.mangrove.diagram.edit.policies.IntermediateModelBaseItemSemanticEditPolicy;
+
+/**
+ * @generated
+ */
+public class TransitionReorientCommand extends EditElementCommand {
+
+ /**
+ * @generated
+ */
+ private final int reorientDirection;
+
+ /**
+ * @generated
+ */
+ private final EObject oldEnd;
+
+ /**
+ * @generated
+ */
+ private final EObject newEnd;
+
+ /**
+ * @generated
+ */
+ public TransitionReorientCommand(ReorientRelationshipRequest request) {
+ super(request.getLabel(), request.getRelationship(), request);
+ reorientDirection = request.getDirection();
+ oldEnd = request.getOldRelationshipEnd();
+ newEnd = request.getNewRelationshipEnd();
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExecute() {
+ if (false == getElementToEdit() instanceof Transition) {
+ return false;
+ }
+ if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) {
+ return canReorientSource();
+ }
+ if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) {
+ return canReorientTarget();
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean canReorientSource() {
+ if (!(oldEnd instanceof Step && newEnd instanceof Step)) {
+ return false;
+ }
+ Step target = getLink().getTarget();
+ if (!(getLink().eContainer() instanceof Process)) {
+ return false;
+ }
+ Process container = (Process) getLink().eContainer();
+ return IntermediateModelBaseItemSemanticEditPolicy.getLinkConstraints()
+ .canExistTransition_4009(container, getLink(), getNewSource(),
+ target);
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean canReorientTarget() {
+ if (!(oldEnd instanceof Step && newEnd instanceof Step)) {
+ return false;
+ }
+ Step source = getLink().getSource();
+ if (!(getLink().eContainer() instanceof Process)) {
+ return false;
+ }
+ Process container = (Process) getLink().eContainer();
+ return IntermediateModelBaseItemSemanticEditPolicy.getLinkConstraints()
+ .canExistTransition_4009(container, getLink(), source,
+ getNewTarget());
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor,
+ IAdaptable info) throws ExecutionException {
+ if (!canExecute()) {
+ throw new ExecutionException(
+ "Invalid arguments in reorient link command"); //$NON-NLS-1$
+ }
+ if (reorientDirection == ReorientRelationshipRequest.REORIENT_SOURCE) {
+ return reorientSource();
+ }
+ if (reorientDirection == ReorientRelationshipRequest.REORIENT_TARGET) {
+ return reorientTarget();
+ }
+ throw new IllegalStateException();
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult reorientSource() throws ExecutionException {
+ getLink().setSource(getNewSource());
+ return CommandResult.newOKCommandResult(getLink());
+ }
+
+ /**
+ * @generated
+ */
+ protected CommandResult reorientTarget() throws ExecutionException {
+ getLink().setTarget(getNewTarget());
+ return CommandResult.newOKCommandResult(getLink());
+ }
+
+ /**
+ * @generated
+ */
+ protected Transition getLink() {
+ return (Transition) getElementToEdit();
+ }
+
+ /**
+ * @generated
+ */
+ protected Step getOldSource() {
+ return (Step) oldEnd;
+ }
+
+ /**
+ * @generated
+ */
+ protected Step getNewSource() {
+ return (Step) newEnd;
+ }
+
+ /**
+ * @generated
+ */
+ protected Step getOldTarget() {
+ return (Step) oldEnd;
+ }
+
+ /**
+ * @generated
+ */
+ protected Step getNewTarget() {
+ return (Step) newEnd;
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/IntermediateModelBaseEditHelper.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/IntermediateModelBaseEditHelper.java
new file mode 100755
index 0000000..683b2ad
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/IntermediateModelBaseEditHelper.java
@@ -0,0 +1,10 @@
+package org.eclipse.soa.mangrove.diagram.edit.helpers;
+
+import org.eclipse.gmf.tooling.runtime.edit.helpers.GeneratedEditHelperBase;
+
+/**
+ * @generated
+ */
+public class IntermediateModelBaseEditHelper extends GeneratedEditHelperBase {
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/ProcessCollectionEditHelper.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/ProcessCollectionEditHelper.java
new file mode 100755
index 0000000..51d9a5c
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/ProcessCollectionEditHelper.java
@@ -0,0 +1,8 @@
+package org.eclipse.soa.mangrove.diagram.edit.helpers;
+
+/**
+ * @generated
+ */
+public class ProcessCollectionEditHelper extends
+ IntermediateModelBaseEditHelper {
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/ProcessEditHelper.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/ProcessEditHelper.java
new file mode 100755
index 0000000..413597c
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/ProcessEditHelper.java
@@ -0,0 +1,7 @@
+package org.eclipse.soa.mangrove.diagram.edit.helpers;
+
+/**
+ * @generated
+ */
+public class ProcessEditHelper extends IntermediateModelBaseEditHelper {
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/ServiceCollectionEditHelper.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/ServiceCollectionEditHelper.java
new file mode 100755
index 0000000..580fcc2
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/ServiceCollectionEditHelper.java
@@ -0,0 +1,8 @@
+package org.eclipse.soa.mangrove.diagram.edit.helpers;
+
+/**
+ * @generated
+ */
+public class ServiceCollectionEditHelper extends
+ IntermediateModelBaseEditHelper {
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/ServiceEditHelper.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/ServiceEditHelper.java
new file mode 100755
index 0000000..c0f32da
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/ServiceEditHelper.java
@@ -0,0 +1,7 @@
+package org.eclipse.soa.mangrove.diagram.edit.helpers;
+
+/**
+ * @generated
+ */
+public class ServiceEditHelper extends IntermediateModelBaseEditHelper {
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/StepEditHelper.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/StepEditHelper.java
new file mode 100755
index 0000000..464ea03
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/StepEditHelper.java
@@ -0,0 +1,7 @@
+package org.eclipse.soa.mangrove.diagram.edit.helpers;
+
+/**
+ * @generated
+ */
+public class StepEditHelper extends IntermediateModelBaseEditHelper {
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/StpIntermediateModelEditHelper.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/StpIntermediateModelEditHelper.java
new file mode 100755
index 0000000..44fdafe
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/StpIntermediateModelEditHelper.java
@@ -0,0 +1,8 @@
+package org.eclipse.soa.mangrove.diagram.edit.helpers;
+
+/**
+ * @generated
+ */
+public class StpIntermediateModelEditHelper extends
+ IntermediateModelBaseEditHelper {
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/TransitionEditHelper.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/TransitionEditHelper.java
new file mode 100755
index 0000000..878b4a1
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/helpers/TransitionEditHelper.java
@@ -0,0 +1,7 @@
+package org.eclipse.soa.mangrove.diagram.edit.helpers;
+
+/**
+ * @generated
+ */
+public class TransitionEditHelper extends IntermediateModelBaseEditHelper {
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/IntermediateModelEditPartFactory.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/IntermediateModelEditPartFactory.java
new file mode 100755
index 0000000..dbc6a01
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/IntermediateModelEditPartFactory.java
@@ -0,0 +1,85 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPartFactory;
+import org.eclipse.gef.tools.CellEditorLocator;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.directedit.locator.CellEditorLocatorAccess;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+
+/**
+ * @generated
+ */
+public class IntermediateModelEditPartFactory implements EditPartFactory {
+
+ /**
+ * @generated
+ */
+ public EditPart createEditPart(EditPart context, Object model) {
+ if (model instanceof View) {
+ View view = (View) model;
+ switch (IntermediateModelVisualIDRegistry.getVisualID(view)) {
+
+ case StpIntermediateModelEditPart.VISUAL_ID:
+ return new StpIntermediateModelEditPart(view);
+
+ case ProcessCollectionEditPart.VISUAL_ID:
+ return new ProcessCollectionEditPart(view);
+
+ case ProcessCollectionPoolNameEditPart.VISUAL_ID:
+ return new ProcessCollectionPoolNameEditPart(view);
+
+ case ServiceCollectionEditPart.VISUAL_ID:
+ return new ServiceCollectionEditPart(view);
+
+ case ProcessEditPart.VISUAL_ID:
+ return new ProcessEditPart(view);
+
+ case ProcessNameEditPart.VISUAL_ID:
+ return new ProcessNameEditPart(view);
+
+ case StepEditPart.VISUAL_ID:
+ return new StepEditPart(view);
+
+ case StepNameEditPart.VISUAL_ID:
+ return new StepNameEditPart(view);
+
+ case ServiceEditPart.VISUAL_ID:
+ return new ServiceEditPart(view);
+
+ case ServiceServiceNameEditPart.VISUAL_ID:
+ return new ServiceServiceNameEditPart(view);
+
+ case TransitionEditPart.VISUAL_ID:
+ return new TransitionEditPart(view);
+
+ case StepServiceModelEditPart.VISUAL_ID:
+ return new StepServiceModelEditPart(view);
+
+ case ServiceNeedsEditPart.VISUAL_ID:
+ return new ServiceNeedsEditPart(view);
+
+ }
+ }
+ return createUnrecognizedEditPart(context, model);
+ }
+
+ /**
+ * @generated
+ */
+ private EditPart createUnrecognizedEditPart(EditPart context, Object model) {
+ // Handle creation of unrecognized child node EditParts here
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ public static CellEditorLocator getTextCellEditorLocator(
+ ITextAwareEditPart source) {
+ return CellEditorLocatorAccess.INSTANCE
+ .getTextCellEditorLocator(source);
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ProcessCollectionEditPart.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ProcessCollectionEditPart.java
new file mode 100755
index 0000000..0d83b0a
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ProcessCollectionEditPart.java
@@ -0,0 +1,309 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.RectangleFigure;
+import org.eclipse.draw2d.Shape;
+import org.eclipse.draw2d.StackLayout;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.editpolicies.LayoutEditPolicy;
+import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
+import org.eclipse.gef.requests.CreateRequest;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DragDropEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
+import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.edit.policies.reparent.CreationEditPolicyWithCustomReparent;
+import org.eclipse.soa.mangrove.diagram.edit.policies.ProcessCollectionCanonicalEditPolicy;
+import org.eclipse.soa.mangrove.diagram.edit.policies.ProcessCollectionItemSemanticEditPolicy;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.swt.graphics.Color;
+
+/**
+ * @generated
+ */
+public class ProcessCollectionEditPart extends ShapeNodeEditPart {
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 2005;
+
+ /**
+ * @generated
+ */
+ protected IFigure contentPane;
+
+ /**
+ * @generated
+ */
+ protected IFigure primaryShape;
+
+ /**
+ * @generated
+ */
+ public ProcessCollectionEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ installEditPolicy(EditPolicyRoles.CREATION_ROLE,
+ new CreationEditPolicyWithCustomReparent(
+ IntermediateModelVisualIDRegistry.TYPED_INSTANCE));
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
+ new ProcessCollectionItemSemanticEditPolicy());
+ installEditPolicy(EditPolicyRoles.DRAG_DROP_ROLE,
+ new DragDropEditPolicy());
+ installEditPolicy(EditPolicyRoles.CANONICAL_ROLE,
+ new ProcessCollectionCanonicalEditPolicy());
+ installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy());
+ // XXX need an SCR to runtime to have another abstract superclass that would let children add reasonable editpolicies
+ // removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.CONNECTION_HANDLES_ROLE);
+ }
+
+ /**
+ * @generated
+ */
+ protected LayoutEditPolicy createLayoutEditPolicy() {
+ org.eclipse.gmf.runtime.diagram.ui.editpolicies.LayoutEditPolicy lep = new org.eclipse.gmf.runtime.diagram.ui.editpolicies.LayoutEditPolicy() {
+
+ protected EditPolicy createChildEditPolicy(EditPart child) {
+ EditPolicy result = child
+ .getEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
+ if (result == null) {
+ result = new NonResizableEditPolicy();
+ }
+ return result;
+ }
+
+ protected Command getMoveChildrenCommand(Request request) {
+ return null;
+ }
+
+ protected Command getCreateCommand(CreateRequest request) {
+ return null;
+ }
+ };
+ return lep;
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createNodeShape() {
+ return primaryShape = new ProcessCollectionFigure();
+ }
+
+ /**
+ * @generated
+ */
+ public ProcessCollectionFigure getPrimaryShape() {
+ return (ProcessCollectionFigure) primaryShape;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean addFixedChild(EditPart childEditPart) {
+ if (childEditPart instanceof ProcessCollectionPoolNameEditPart) {
+ ((ProcessCollectionPoolNameEditPart) childEditPart)
+ .setLabel(getPrimaryShape()
+ .getFigureProcessCollectionPoolNameFigure());
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean removeFixedChild(EditPart childEditPart) {
+ if (childEditPart instanceof ProcessCollectionPoolNameEditPart) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ protected void addChildVisual(EditPart childEditPart, int index) {
+ if (addFixedChild(childEditPart)) {
+ return;
+ }
+ super.addChildVisual(childEditPart, -1);
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeChildVisual(EditPart childEditPart) {
+ if (removeFixedChild(childEditPart)) {
+ return;
+ }
+ super.removeChildVisual(childEditPart);
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure getContentPaneFor(IGraphicalEditPart editPart) {
+ return getContentPane();
+ }
+
+ /**
+ * @generated
+ */
+ protected NodeFigure createNodePlate() {
+ DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(40, 40);
+ return result;
+ }
+
+ /**
+ * Creates figure for this edit part.
+ *
+ * Body of this method does not depend on settings in generation model
+ * so you may safely remove <i>generated</i> tag and modify it.
+ *
+ * @generated
+ */
+ protected NodeFigure createNodeFigure() {
+ NodeFigure figure = createNodePlate();
+ figure.setLayoutManager(new StackLayout());
+ IFigure shape = createNodeShape();
+ figure.add(shape);
+ contentPane = setupContentPane(shape);
+ return figure;
+ }
+
+ /**
+ * Default implementation treats passed figure as content pane.
+ * Respects layout one may have set for generated figure.
+ * @param nodeShape instance of generated figure class
+ * @generated
+ */
+ protected IFigure setupContentPane(IFigure nodeShape) {
+ if (nodeShape.getLayoutManager() == null) {
+ ConstrainedToolbarLayout layout = new ConstrainedToolbarLayout();
+ layout.setSpacing(5);
+ nodeShape.setLayoutManager(layout);
+ }
+ return nodeShape; // use nodeShape itself as contentPane
+ }
+
+ /**
+ * @generated
+ */
+ public IFigure getContentPane() {
+ if (contentPane != null) {
+ return contentPane;
+ }
+ return super.getContentPane();
+ }
+
+ /**
+ * @generated
+ */
+ protected void setForegroundColor(Color color) {
+ if (primaryShape != null) {
+ primaryShape.setForegroundColor(color);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setBackgroundColor(Color color) {
+ if (primaryShape != null) {
+ primaryShape.setBackgroundColor(color);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLineWidth(int width) {
+ if (primaryShape instanceof Shape) {
+ ((Shape) primaryShape).setLineWidth(width);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLineType(int style) {
+ if (primaryShape instanceof Shape) {
+ ((Shape) primaryShape).setLineStyle(style);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public EditPart getPrimaryChildEditPart() {
+ return getChildBySemanticHint(IntermediateModelVisualIDRegistry
+ .getType(ProcessCollectionPoolNameEditPart.VISUAL_ID));
+ }
+
+ /**
+ * @generated
+ */
+ public class ProcessCollectionFigure extends RectangleFigure {
+
+ /**
+ * @generated
+ */
+ private WrappingLabel fFigureProcessCollectionPoolNameFigure;
+
+ /**
+ * @generated
+ */
+ public ProcessCollectionFigure() {
+ this.setBackgroundColor(THIS_BACK);
+ this.setBorder(new MarginBorder(getMapMode().DPtoLP(10),
+ getMapMode().DPtoLP(10), getMapMode().DPtoLP(10),
+ getMapMode().DPtoLP(10)));
+ createContents();
+ }
+
+ /**
+ * @generated
+ */
+ private void createContents() {
+
+ fFigureProcessCollectionPoolNameFigure = new WrappingLabel();
+
+ fFigureProcessCollectionPoolNameFigure
+ .setText("Process Collection");
+
+ this.add(fFigureProcessCollectionPoolNameFigure);
+
+ }
+
+ /**
+ * @generated
+ */
+ public WrappingLabel getFigureProcessCollectionPoolNameFigure() {
+ return fFigureProcessCollectionPoolNameFigure;
+ }
+
+ }
+
+ /**
+ * @generated
+ */
+ static final Color THIS_BACK = new Color(null, 253, 222, 166);
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ProcessCollectionPoolNameEditPart.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ProcessCollectionPoolNameEditPart.java
new file mode 100755
index 0000000..5fc7ee4
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ProcessCollectionPoolNameEditPart.java
@@ -0,0 +1,630 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RunnableWithResult;
+import org.eclipse.gef.AccessibleEditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.requests.DirectEditRequest;
+import org.eclipse.gef.tools.DirectEditManager;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParser;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.LabelDirectEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry;
+import org.eclipse.gmf.runtime.diagram.ui.label.ILabelDelegate;
+import org.eclipse.gmf.runtime.diagram.ui.label.WrappingLabelDelegate;
+import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
+import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser;
+import org.eclipse.gmf.runtime.notation.FontStyle;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.directedit.TextDirectEditManager2;
+import org.eclipse.gmf.tooling.runtime.draw2d.labels.SimpleLabelDelegate;
+import org.eclipse.gmf.tooling.runtime.edit.policies.labels.IRefreshableFeedbackEditPolicy;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.viewers.ICellEditorValidator;
+import org.eclipse.soa.mangrove.diagram.edit.policies.IntermediateModelTextSelectionEditPolicy;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelParserProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @generated
+ */
+public class ProcessCollectionPoolNameEditPart extends CompartmentEditPart
+ implements ITextAwareEditPart {
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 5011;
+
+ /**
+ * @generated
+ */
+ private DirectEditManager manager;
+
+ /**
+ * @generated
+ */
+ private IParser parser;
+
+ /**
+ * @generated
+ */
+ private List<?> parserElements;
+
+ /**
+ * @generated
+ */
+ private String defaultText;
+
+ /**
+ * @generated
+ */
+ private ILabelDelegate labelDelegate;
+
+ /**
+ * @generated
+ */
+ public ProcessCollectionPoolNameEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE,
+ new IntermediateModelTextSelectionEditPolicy());
+ installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE,
+ new LabelDirectEditPolicy());
+ installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE,
+ new StpIntermediateModelEditPart.NodeLabelDragPolicy());
+ }
+
+ /**
+ * @generated
+ */
+ protected String getLabelTextHelper(IFigure figure) {
+ if (figure instanceof WrappingLabel) {
+ return ((WrappingLabel) figure).getText();
+ } else if (figure instanceof Label) {
+ return ((Label) figure).getText();
+ } else {
+ return getLabelDelegate().getText();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLabelTextHelper(IFigure figure, String text) {
+ if (figure instanceof WrappingLabel) {
+ ((WrappingLabel) figure).setText(text);
+ } else if (figure instanceof Label) {
+ ((Label) figure).setText(text);
+ } else {
+ getLabelDelegate().setText(text);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected Image getLabelIconHelper(IFigure figure) {
+ if (figure instanceof WrappingLabel) {
+ return ((WrappingLabel) figure).getIcon();
+ } else if (figure instanceof Label) {
+ return ((Label) figure).getIcon();
+ } else {
+ return getLabelDelegate().getIcon(0);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLabelIconHelper(IFigure figure, Image icon) {
+ if (figure instanceof WrappingLabel) {
+ ((WrappingLabel) figure).setIcon(icon);
+ return;
+ } else if (figure instanceof Label) {
+ ((Label) figure).setIcon(icon);
+ return;
+ } else {
+ getLabelDelegate().setIcon(icon, 0);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public void setLabel(WrappingLabel figure) {
+ unregisterVisuals();
+ setFigure(figure);
+ defaultText = getLabelTextHelper(figure);
+ registerVisuals();
+ refreshVisuals();
+ }
+
+ /**
+ * @generated
+ */
+ @SuppressWarnings("rawtypes")
+ protected List getModelChildren() {
+ return Collections.EMPTY_LIST;
+ }
+
+ /**
+ * @generated
+ */
+ public IGraphicalEditPart getChildBySemanticHint(String semanticHint) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected EObject getParserElement() {
+ return resolveSemanticElement();
+ }
+
+ /**
+ * @generated
+ */
+ protected Image getLabelIcon() {
+ EObject parserElement = getParserElement();
+ if (parserElement == null) {
+ return null;
+ }
+ return IntermediateModelElementTypes.getImage(parserElement.eClass());
+ }
+
+ /**
+ * @generated
+ */
+ protected String getLabelText() {
+ String text = null;
+ EObject parserElement = getParserElement();
+ if (parserElement != null && getParser() != null) {
+ text = getParser().getPrintString(
+ new EObjectAdapter(parserElement),
+ getParserOptions().intValue());
+ }
+ if (text == null || text.length() == 0) {
+ text = defaultText;
+ }
+ return text;
+ }
+
+ /**
+ * @generated
+ */
+ public void setLabelText(String text) {
+ setLabelTextHelper(getFigure(), text);
+ refreshSelectionFeedback();
+ }
+
+ /**
+ * @generated
+ */
+ public String getEditText() {
+ if (getParserElement() == null || getParser() == null) {
+ return ""; //$NON-NLS-1$
+ }
+ return getParser().getEditString(
+ new EObjectAdapter(getParserElement()),
+ getParserOptions().intValue());
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean isEditable() {
+ return getParser() != null;
+ }
+
+ /**
+ * @generated
+ */
+ public ICellEditorValidator getEditTextValidator() {
+ return new ICellEditorValidator() {
+
+ public String isValid(final Object value) {
+ if (value instanceof String) {
+ final EObject element = getParserElement();
+ final IParser parser = getParser();
+ try {
+ IParserEditStatus valid = (IParserEditStatus) getEditingDomain()
+ .runExclusive(
+ new RunnableWithResult.Impl<IParserEditStatus>() {
+
+ public void run() {
+ setResult(parser
+ .isValidEditString(
+ new EObjectAdapter(
+ element),
+ (String) value));
+ }
+ });
+ return valid.getCode() == ParserEditStatus.EDITABLE ? null
+ : valid.getMessage();
+ } catch (InterruptedException ie) {
+ ie.printStackTrace();
+ }
+ }
+
+ // shouldn't get here
+ return null;
+ }
+ };
+ }
+
+ /**
+ * @generated
+ */
+ public IContentAssistProcessor getCompletionProcessor() {
+ if (getParserElement() == null || getParser() == null) {
+ return null;
+ }
+ return getParser().getCompletionProcessor(
+ new EObjectAdapter(getParserElement()));
+ }
+
+ /**
+ * @generated
+ */
+ public ParserOptions getParserOptions() {
+ return ParserOptions.NONE;
+ }
+
+ /**
+ * @generated
+ */
+ public IParser getParser() {
+ if (parser == null) {
+ parser = IntermediateModelParserProvider
+ .getParser(
+ IntermediateModelElementTypes.ProcessCollection_2005,
+ getParserElement(),
+ IntermediateModelVisualIDRegistry
+ .getType(org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionPoolNameEditPart.VISUAL_ID));
+ }
+ return parser;
+ }
+
+ /**
+ * @generated
+ */
+ protected DirectEditManager getManager() {
+ if (manager == null) {
+ setManager(new TextDirectEditManager2(this, null,
+ IntermediateModelEditPartFactory
+ .getTextCellEditorLocator(this)));
+ }
+ return manager;
+ }
+
+ /**
+ * @generated
+ */
+ protected void setManager(DirectEditManager manager) {
+ this.manager = manager;
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEdit() {
+ getManager().show();
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEdit(Point eventLocation) {
+ if (getManager().getClass() == TextDirectEditManager2.class) {
+ ((TextDirectEditManager2) getManager()).show(eventLocation
+ .getSWTPoint());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private void performDirectEdit(char initialCharacter) {
+ if (getManager() instanceof TextDirectEditManager) {
+ ((TextDirectEditManager) getManager()).show(initialCharacter);
+ } else //
+ if (getManager() instanceof TextDirectEditManager2) {
+ ((TextDirectEditManager2) getManager()).show(initialCharacter);
+ } else //
+ {
+ performDirectEdit();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEditRequest(Request request) {
+ final Request theRequest = request;
+ try {
+ getEditingDomain().runExclusive(new Runnable() {
+
+ public void run() {
+ if (isActive() && isEditable()) {
+ if (theRequest
+ .getExtendedData()
+ .get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) {
+ Character initialChar = (Character) theRequest
+ .getExtendedData()
+ .get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR);
+ performDirectEdit(initialChar.charValue());
+ } else if ((theRequest instanceof DirectEditRequest)
+ && (getEditText().equals(getLabelText()))) {
+ DirectEditRequest editRequest = (DirectEditRequest) theRequest;
+ performDirectEdit(editRequest.getLocation());
+ } else {
+ performDirectEdit();
+ }
+ }
+ }
+ });
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshVisuals() {
+ super.refreshVisuals();
+ refreshLabel();
+ refreshFont();
+ refreshFontColor();
+ refreshUnderline();
+ refreshStrikeThrough();
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshLabel() {
+ setLabelTextHelper(getFigure(), getLabelText());
+ setLabelIconHelper(getFigure(), getLabelIcon());
+ refreshSelectionFeedback();
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshUnderline() {
+ FontStyle style = (FontStyle) getFontStyleOwnerView().getStyle(
+ NotationPackage.eINSTANCE.getFontStyle());
+ if (style != null && getFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getFigure()).setTextUnderline(style.isUnderline());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshStrikeThrough() {
+ FontStyle style = (FontStyle) getFontStyleOwnerView().getStyle(
+ NotationPackage.eINSTANCE.getFontStyle());
+ if (style != null && getFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getFigure()).setTextStrikeThrough(style
+ .isStrikeThrough());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshFont() {
+ FontStyle style = (FontStyle) getFontStyleOwnerView().getStyle(
+ NotationPackage.eINSTANCE.getFontStyle());
+ if (style != null) {
+ FontData fontData = new FontData(style.getFontName(),
+ style.getFontHeight(), (style.isBold() ? SWT.BOLD
+ : SWT.NORMAL)
+ | (style.isItalic() ? SWT.ITALIC : SWT.NORMAL));
+ setFont(fontData);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private void refreshSelectionFeedback() {
+ requestEditPolicyFeedbackRefresh(EditPolicy.PRIMARY_DRAG_ROLE);
+ requestEditPolicyFeedbackRefresh(EditPolicy.SELECTION_FEEDBACK_ROLE);
+ }
+
+ /**
+ * @generated
+ */
+ private void requestEditPolicyFeedbackRefresh(String editPolicyKey) {
+ Object editPolicy = getEditPolicy(editPolicyKey);
+ if (editPolicy instanceof IRefreshableFeedbackEditPolicy) {
+ ((IRefreshableFeedbackEditPolicy) editPolicy).refreshFeedback();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setFontColor(Color color) {
+ getFigure().setForegroundColor(color);
+ }
+
+ /**
+ * @generated
+ */
+ protected void addSemanticListeners() {
+ if (getParser() instanceof ISemanticParser) {
+ EObject element = resolveSemanticElement();
+ parserElements = ((ISemanticParser) getParser())
+ .getSemanticElementsBeingParsed(element);
+ for (int i = 0; i < parserElements.size(); i++) {
+ addListenerFilter(
+ "SemanticModel" + i, this, (EObject) parserElements.get(i)); //$NON-NLS-1$
+ }
+ } else {
+ super.addSemanticListeners();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeSemanticListeners() {
+ if (parserElements != null) {
+ for (int i = 0; i < parserElements.size(); i++) {
+ removeListenerFilter("SemanticModel" + i); //$NON-NLS-1$
+ }
+ } else {
+ super.removeSemanticListeners();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected AccessibleEditPart getAccessibleEditPart() {
+ if (accessibleEP == null) {
+ accessibleEP = new AccessibleGraphicalEditPart() {
+
+ public void getName(AccessibleEvent e) {
+ e.result = getLabelTextHelper(getFigure());
+ }
+ };
+ }
+ return accessibleEP;
+ }
+
+ /**
+ * @generated
+ */
+ private View getFontStyleOwnerView() {
+ return getPrimaryView();
+ }
+
+ /**
+ * @generated
+ */
+ private ILabelDelegate getLabelDelegate() {
+ if (labelDelegate == null) {
+ IFigure label = getFigure();
+ if (label instanceof WrappingLabel) {
+ labelDelegate = new WrappingLabelDelegate((WrappingLabel) label);
+ } else {
+ labelDelegate = new SimpleLabelDelegate((Label) label);
+ }
+ }
+ return labelDelegate;
+ }
+
+ /**
+ * @generated
+ */
+ @Override
+ public Object getAdapter(Class key) {
+ if (ILabelDelegate.class.equals(key)) {
+ return getLabelDelegate();
+ }
+ return super.getAdapter(key);
+ }
+
+ /**
+ * @generated
+ */
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ addListenerFilter("PrimaryView", this, getPrimaryView()); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("PrimaryView"); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ protected void handleNotificationEvent(Notification event) {
+ Object feature = event.getFeature();
+ if (NotationPackage.eINSTANCE.getFontStyle_FontColor().equals(feature)) {
+ Integer c = (Integer) event.getNewValue();
+ setFontColor(DiagramColorRegistry.getInstance().getColor(c));
+ } else if (NotationPackage.eINSTANCE.getFontStyle_Underline().equals(
+ feature)) {
+ refreshUnderline();
+ } else if (NotationPackage.eINSTANCE.getFontStyle_StrikeThrough()
+ .equals(feature)) {
+ refreshStrikeThrough();
+ } else if (NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(
+ feature)
+ || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(
+ feature)
+ || NotationPackage.eINSTANCE.getFontStyle_Bold()
+ .equals(feature)
+ || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(
+ feature)) {
+ refreshFont();
+ } else {
+ if (getParser() != null
+ && getParser().isAffectingEvent(event,
+ getParserOptions().intValue())) {
+ refreshLabel();
+ }
+ if (getParser() instanceof ISemanticParser) {
+ ISemanticParser modelParser = (ISemanticParser) getParser();
+ if (modelParser.areSemanticElementsAffected(null, event)) {
+ removeSemanticListeners();
+ if (resolveSemanticElement() != null) {
+ addSemanticListeners();
+ }
+ refreshLabel();
+ }
+ }
+ }
+ super.handleNotificationEvent(event);
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createFigure() {
+ // Parent should assign one using setLabel() method
+ return null;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ProcessEditPart.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ProcessEditPart.java
new file mode 100755
index 0000000..1ed5a63
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ProcessEditPart.java
@@ -0,0 +1,370 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.draw2d.FreeformLayout;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.RectangleFigure;
+import org.eclipse.draw2d.Shape;
+import org.eclipse.draw2d.StackLayout;
+import org.eclipse.draw2d.XYLayout;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.editpolicies.LayoutEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DragDropEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ResizableShapeEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.XYLayoutEditPolicy;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
+import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.edit.policies.reparent.CreationEditPolicyWithCustomReparent;
+import org.eclipse.soa.mangrove.diagram.edit.policies.ProcessCanonicalEditPolicy;
+import org.eclipse.soa.mangrove.diagram.edit.policies.ProcessItemSemanticEditPolicy;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+import org.eclipse.swt.graphics.Color;
+
+/**
+ * @generated
+ */
+public class ProcessEditPart extends ShapeNodeEditPart {
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 3007;
+
+ /**
+ * @generated
+ */
+ protected IFigure contentPane;
+
+ /**
+ * @generated
+ */
+ protected IFigure primaryShape;
+
+ /**
+ * @generated
+ */
+ public ProcessEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ installEditPolicy(EditPolicyRoles.CREATION_ROLE,
+ new CreationEditPolicyWithCustomReparent(
+ IntermediateModelVisualIDRegistry.TYPED_INSTANCE));
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
+ new ProcessItemSemanticEditPolicy());
+ installEditPolicy(EditPolicyRoles.DRAG_DROP_ROLE,
+ new DragDropEditPolicy());
+ installEditPolicy(EditPolicyRoles.CANONICAL_ROLE,
+ new ProcessCanonicalEditPolicy());
+ installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy());
+ // XXX need an SCR to runtime to have another abstract superclass that would let children add reasonable editpolicies
+ // removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.CONNECTION_HANDLES_ROLE);
+ }
+
+ /**
+ * @generated
+ */
+ protected LayoutEditPolicy createLayoutEditPolicy() {
+ XYLayoutEditPolicy lep = new XYLayoutEditPolicy() {
+
+ protected EditPolicy createChildEditPolicy(EditPart child) {
+ EditPolicy result = super.createChildEditPolicy(child);
+ if (result == null) {
+ return new ResizableShapeEditPolicy();
+ }
+ return result;
+ }
+ };
+ return lep;
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createNodeShape() {
+ return primaryShape = new ProcessFigure() {
+ protected boolean useLocalCoordinates() {
+ return true;
+ }
+ };
+ }
+
+ /**
+ * @generated
+ */
+ public ProcessFigure getPrimaryShape() {
+ return (ProcessFigure) primaryShape;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean addFixedChild(EditPart childEditPart) {
+ if (childEditPart instanceof ProcessNameEditPart) {
+ ((ProcessNameEditPart) childEditPart).setLabel(getPrimaryShape()
+ .getFigureProcessNameFigure());
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean removeFixedChild(EditPart childEditPart) {
+ if (childEditPart instanceof ProcessNameEditPart) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ protected void addChildVisual(EditPart childEditPart, int index) {
+ if (addFixedChild(childEditPart)) {
+ return;
+ }
+ super.addChildVisual(childEditPart, -1);
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeChildVisual(EditPart childEditPart) {
+ if (removeFixedChild(childEditPart)) {
+ return;
+ }
+ super.removeChildVisual(childEditPart);
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure getContentPaneFor(IGraphicalEditPart editPart) {
+ return getContentPane();
+ }
+
+ /**
+ * @generated
+ */
+ protected NodeFigure createNodePlate() {
+ DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(40, 40);
+ return result;
+ }
+
+ /**
+ * Creates figure for this edit part.
+ *
+ * Body of this method does not depend on settings in generation model
+ * so you may safely remove <i>generated</i> tag and modify it.
+ *
+ * @generated
+ */
+ protected NodeFigure createNodeFigure() {
+ NodeFigure figure = createNodePlate();
+ figure.setLayoutManager(new StackLayout());
+ IFigure shape = createNodeShape();
+ figure.add(shape);
+ contentPane = setupContentPane(shape);
+ return figure;
+ }
+
+ /**
+ * Default implementation treats passed figure as content pane.
+ * Respects layout one may have set for generated figure.
+ * @param nodeShape instance of generated figure class
+ * @generated
+ */
+ protected IFigure setupContentPane(IFigure nodeShape) {
+ if (nodeShape.getLayoutManager() == null) {
+ nodeShape.setLayoutManager(new FreeformLayout() {
+
+ public Object getConstraint(IFigure figure) {
+ Object result = constraints.get(figure);
+ if (result == null) {
+ result = new Rectangle(0, 0, -1, -1);
+ }
+ return result;
+ }
+ });
+ }
+ return nodeShape; // use nodeShape itself as contentPane
+ }
+
+ /**
+ * @generated
+ */
+ public IFigure getContentPane() {
+ if (contentPane != null) {
+ return contentPane;
+ }
+ return super.getContentPane();
+ }
+
+ /**
+ * @generated
+ */
+ protected void setForegroundColor(Color color) {
+ if (primaryShape != null) {
+ primaryShape.setForegroundColor(color);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setBackgroundColor(Color color) {
+ if (primaryShape != null) {
+ primaryShape.setBackgroundColor(color);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLineWidth(int width) {
+ if (primaryShape instanceof Shape) {
+ ((Shape) primaryShape).setLineWidth(width);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLineType(int style) {
+ if (primaryShape instanceof Shape) {
+ ((Shape) primaryShape).setLineStyle(style);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public EditPart getPrimaryChildEditPart() {
+ return getChildBySemanticHint(IntermediateModelVisualIDRegistry
+ .getType(ProcessNameEditPart.VISUAL_ID));
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMARelTypesOnSource() {
+ ArrayList<IElementType> types = new ArrayList<IElementType>(1);
+ types.add(IntermediateModelElementTypes.ServiceNeeds_4011);
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMARelTypesOnSourceAndTarget(
+ IGraphicalEditPart targetEditPart) {
+ LinkedList<IElementType> types = new LinkedList<IElementType>();
+ if (targetEditPart instanceof org.eclipse.soa.mangrove.diagram.edit.parts.ProcessEditPart) {
+ types.add(IntermediateModelElementTypes.ServiceNeeds_4011);
+ }
+ if (targetEditPart instanceof ServiceEditPart) {
+ types.add(IntermediateModelElementTypes.ServiceNeeds_4011);
+ }
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMATypesForTarget(IElementType relationshipType) {
+ LinkedList<IElementType> types = new LinkedList<IElementType>();
+ if (relationshipType == IntermediateModelElementTypes.ServiceNeeds_4011) {
+ types.add(IntermediateModelElementTypes.Process_3007);
+ types.add(IntermediateModelElementTypes.Service_3009);
+ }
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMARelTypesOnTarget() {
+ ArrayList<IElementType> types = new ArrayList<IElementType>(2);
+ types.add(IntermediateModelElementTypes.StepServiceModel_4010);
+ types.add(IntermediateModelElementTypes.ServiceNeeds_4011);
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMATypesForSource(IElementType relationshipType) {
+ LinkedList<IElementType> types = new LinkedList<IElementType>();
+ if (relationshipType == IntermediateModelElementTypes.StepServiceModel_4010) {
+ types.add(IntermediateModelElementTypes.Step_3008);
+ } else if (relationshipType == IntermediateModelElementTypes.ServiceNeeds_4011) {
+ types.add(IntermediateModelElementTypes.Process_3007);
+ types.add(IntermediateModelElementTypes.Service_3009);
+ }
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public class ProcessFigure extends RectangleFigure {
+
+ /**
+ * @generated
+ */
+ private WrappingLabel fFigureProcessNameFigure;
+
+ /**
+ * @generated
+ */
+ public ProcessFigure() {
+ this.setLayoutManager(new XYLayout());
+ this.setBorder(new MarginBorder(getMapMode().DPtoLP(10),
+ getMapMode().DPtoLP(10), getMapMode().DPtoLP(10),
+ getMapMode().DPtoLP(10)));
+ createContents();
+ }
+
+ /**
+ * @generated
+ */
+ private void createContents() {
+
+ fFigureProcessNameFigure = new WrappingLabel();
+
+ fFigureProcessNameFigure.setText("Process");
+
+ this.add(fFigureProcessNameFigure);
+
+ }
+
+ /**
+ * @generated
+ */
+ public WrappingLabel getFigureProcessNameFigure() {
+ return fFigureProcessNameFigure;
+ }
+
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ProcessNameEditPart.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ProcessNameEditPart.java
new file mode 100755
index 0000000..661a56c
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ProcessNameEditPart.java
@@ -0,0 +1,658 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RunnableWithResult;
+import org.eclipse.gef.AccessibleEditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.requests.DirectEditRequest;
+import org.eclipse.gef.tools.DirectEditManager;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParser;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.LabelDirectEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry;
+import org.eclipse.gmf.runtime.diagram.ui.label.ILabelDelegate;
+import org.eclipse.gmf.runtime.diagram.ui.label.WrappingLabelDelegate;
+import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
+import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser;
+import org.eclipse.gmf.runtime.notation.FontStyle;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.directedit.TextDirectEditManager2;
+import org.eclipse.gmf.tooling.runtime.draw2d.labels.SimpleLabelDelegate;
+import org.eclipse.gmf.tooling.runtime.edit.policies.labels.IRefreshableFeedbackEditPolicy;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.viewers.ICellEditorValidator;
+import org.eclipse.soa.mangrove.diagram.edit.policies.IntermediateModelTextSelectionEditPolicy;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelParserProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @generated
+ */
+public class ProcessNameEditPart extends CompartmentEditPart implements
+ ITextAwareEditPart {
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 5010;
+
+ /**
+ * @generated
+ */
+ private DirectEditManager manager;
+
+ /**
+ * @generated
+ */
+ private IParser parser;
+
+ /**
+ * @generated
+ */
+ private List<?> parserElements;
+
+ /**
+ * @generated
+ */
+ private String defaultText;
+
+ /**
+ * @generated
+ */
+ private ILabelDelegate labelDelegate;
+
+ /**
+ * @generated
+ */
+ public ProcessNameEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE,
+ new IntermediateModelTextSelectionEditPolicy());
+ installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE,
+ new LabelDirectEditPolicy());
+ installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE,
+ new StpIntermediateModelEditPart.NodeLabelDragPolicy());
+ }
+
+ /**
+ * @generated
+ */
+ protected String getLabelTextHelper(IFigure figure) {
+ if (figure instanceof WrappingLabel) {
+ return ((WrappingLabel) figure).getText();
+ } else if (figure instanceof Label) {
+ return ((Label) figure).getText();
+ } else {
+ return getLabelDelegate().getText();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLabelTextHelper(IFigure figure, String text) {
+ if (figure instanceof WrappingLabel) {
+ ((WrappingLabel) figure).setText(text);
+ } else if (figure instanceof Label) {
+ ((Label) figure).setText(text);
+ } else {
+ getLabelDelegate().setText(text);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected Image getLabelIconHelper(IFigure figure) {
+ if (figure instanceof WrappingLabel) {
+ return ((WrappingLabel) figure).getIcon();
+ } else if (figure instanceof Label) {
+ return ((Label) figure).getIcon();
+ } else {
+ return getLabelDelegate().getIcon(0);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLabelIconHelper(IFigure figure, Image icon) {
+ if (figure instanceof WrappingLabel) {
+ ((WrappingLabel) figure).setIcon(icon);
+ return;
+ } else if (figure instanceof Label) {
+ ((Label) figure).setIcon(icon);
+ return;
+ } else {
+ getLabelDelegate().setIcon(icon, 0);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public void setLabel(WrappingLabel figure) {
+ unregisterVisuals();
+ setFigure(figure);
+ defaultText = getLabelTextHelper(figure);
+ registerVisuals();
+ refreshVisuals();
+ }
+
+ /**
+ * @generated
+ */
+ @SuppressWarnings("rawtypes")
+ protected List getModelChildren() {
+ return Collections.EMPTY_LIST;
+ }
+
+ /**
+ * @generated
+ */
+ public IGraphicalEditPart getChildBySemanticHint(String semanticHint) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected EObject getParserElement() {
+ return resolveSemanticElement();
+ }
+
+ /**
+ * @generated
+ */
+ protected Image getLabelIcon() {
+ EObject parserElement = getParserElement();
+ if (parserElement == null) {
+ return null;
+ }
+ return IntermediateModelElementTypes.getImage(parserElement.eClass());
+ }
+
+ /**
+ * @generated
+ */
+ protected String getLabelText() {
+ String text = null;
+ EObject parserElement = getParserElement();
+ if (parserElement != null && getParser() != null) {
+ text = getParser().getPrintString(
+ new EObjectAdapter(parserElement),
+ getParserOptions().intValue());
+ }
+ if (text == null || text.length() == 0) {
+ text = defaultText;
+ }
+ return text;
+ }
+
+ /**
+ * @generated
+ */
+ public void setLabelText(String text) {
+ setLabelTextHelper(getFigure(), text);
+ refreshSelectionFeedback();
+ }
+
+ /**
+ * @generated
+ */
+ public String getEditText() {
+ if (getParserElement() == null || getParser() == null) {
+ return ""; //$NON-NLS-1$
+ }
+ return getParser().getEditString(
+ new EObjectAdapter(getParserElement()),
+ getParserOptions().intValue());
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean isEditable() {
+ return getParser() != null;
+ }
+
+ /**
+ * @generated
+ */
+ public ICellEditorValidator getEditTextValidator() {
+ return new ICellEditorValidator() {
+
+ public String isValid(final Object value) {
+ if (value instanceof String) {
+ final EObject element = getParserElement();
+ final IParser parser = getParser();
+ try {
+ IParserEditStatus valid = (IParserEditStatus) getEditingDomain()
+ .runExclusive(
+ new RunnableWithResult.Impl<IParserEditStatus>() {
+
+ public void run() {
+ setResult(parser
+ .isValidEditString(
+ new EObjectAdapter(
+ element),
+ (String) value));
+ }
+ });
+ return valid.getCode() == ParserEditStatus.EDITABLE ? null
+ : valid.getMessage();
+ } catch (InterruptedException ie) {
+ ie.printStackTrace();
+ }
+ }
+
+ // shouldn't get here
+ return null;
+ }
+ };
+ }
+
+ /**
+ * @generated
+ */
+ public IContentAssistProcessor getCompletionProcessor() {
+ if (getParserElement() == null || getParser() == null) {
+ return null;
+ }
+ return getParser().getCompletionProcessor(
+ new EObjectAdapter(getParserElement()));
+ }
+
+ /**
+ * @generated
+ */
+ public ParserOptions getParserOptions() {
+ return ParserOptions.NONE;
+ }
+
+ /**
+ * @generated
+ */
+ public IParser getParser() {
+ if (parser == null) {
+ parser = IntermediateModelParserProvider
+ .getParser(
+ IntermediateModelElementTypes.Process_3007,
+ getParserElement(),
+ IntermediateModelVisualIDRegistry
+ .getType(org.eclipse.soa.mangrove.diagram.edit.parts.ProcessNameEditPart.VISUAL_ID));
+ }
+ return parser;
+ }
+
+ /**
+ * @generated
+ */
+ protected DirectEditManager getManager() {
+ if (manager == null) {
+ setManager(new TextDirectEditManager2(this, null,
+ IntermediateModelEditPartFactory
+ .getTextCellEditorLocator(this)));
+ }
+ return manager;
+ }
+
+ /**
+ * @generated
+ */
+ protected void setManager(DirectEditManager manager) {
+ this.manager = manager;
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEdit() {
+ getManager().show();
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEdit(Point eventLocation) {
+ if (getManager().getClass() == TextDirectEditManager2.class) {
+ ((TextDirectEditManager2) getManager()).show(eventLocation
+ .getSWTPoint());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private void performDirectEdit(char initialCharacter) {
+ if (getManager() instanceof TextDirectEditManager) {
+ ((TextDirectEditManager) getManager()).show(initialCharacter);
+ } else //
+ if (getManager() instanceof TextDirectEditManager2) {
+ ((TextDirectEditManager2) getManager()).show(initialCharacter);
+ } else //
+ {
+ performDirectEdit();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEditRequest(Request request) {
+ final Request theRequest = request;
+ try {
+ getEditingDomain().runExclusive(new Runnable() {
+
+ public void run() {
+ if (isActive() && isEditable()) {
+ if (theRequest
+ .getExtendedData()
+ .get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) {
+ Character initialChar = (Character) theRequest
+ .getExtendedData()
+ .get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR);
+ performDirectEdit(initialChar.charValue());
+ } else if ((theRequest instanceof DirectEditRequest)
+ && (getEditText().equals(getLabelText()))) {
+ DirectEditRequest editRequest = (DirectEditRequest) theRequest;
+ performDirectEdit(editRequest.getLocation());
+ } else {
+ performDirectEdit();
+ }
+ }
+ }
+ });
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshVisuals() {
+ super.refreshVisuals();
+ refreshLabel();
+ refreshFont();
+ refreshFontColor();
+ refreshUnderline();
+ refreshStrikeThrough();
+ refreshBounds();
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshLabel() {
+ setLabelTextHelper(getFigure(), getLabelText());
+ setLabelIconHelper(getFigure(), getLabelIcon());
+ refreshSelectionFeedback();
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshUnderline() {
+ FontStyle style = (FontStyle) getFontStyleOwnerView().getStyle(
+ NotationPackage.eINSTANCE.getFontStyle());
+ if (style != null && getFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getFigure()).setTextUnderline(style.isUnderline());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshStrikeThrough() {
+ FontStyle style = (FontStyle) getFontStyleOwnerView().getStyle(
+ NotationPackage.eINSTANCE.getFontStyle());
+ if (style != null && getFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getFigure()).setTextStrikeThrough(style
+ .isStrikeThrough());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshFont() {
+ FontStyle style = (FontStyle) getFontStyleOwnerView().getStyle(
+ NotationPackage.eINSTANCE.getFontStyle());
+ if (style != null) {
+ FontData fontData = new FontData(style.getFontName(),
+ style.getFontHeight(), (style.isBold() ? SWT.BOLD
+ : SWT.NORMAL)
+ | (style.isItalic() ? SWT.ITALIC : SWT.NORMAL));
+ setFont(fontData);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private void refreshSelectionFeedback() {
+ requestEditPolicyFeedbackRefresh(EditPolicy.PRIMARY_DRAG_ROLE);
+ requestEditPolicyFeedbackRefresh(EditPolicy.SELECTION_FEEDBACK_ROLE);
+ }
+
+ /**
+ * @generated
+ */
+ private void requestEditPolicyFeedbackRefresh(String editPolicyKey) {
+ Object editPolicy = getEditPolicy(editPolicyKey);
+ if (editPolicy instanceof IRefreshableFeedbackEditPolicy) {
+ ((IRefreshableFeedbackEditPolicy) editPolicy).refreshFeedback();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setFontColor(Color color) {
+ getFigure().setForegroundColor(color);
+ }
+
+ /**
+ * @generated
+ */
+ protected void addSemanticListeners() {
+ if (getParser() instanceof ISemanticParser) {
+ EObject element = resolveSemanticElement();
+ parserElements = ((ISemanticParser) getParser())
+ .getSemanticElementsBeingParsed(element);
+ for (int i = 0; i < parserElements.size(); i++) {
+ addListenerFilter(
+ "SemanticModel" + i, this, (EObject) parserElements.get(i)); //$NON-NLS-1$
+ }
+ } else {
+ super.addSemanticListeners();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeSemanticListeners() {
+ if (parserElements != null) {
+ for (int i = 0; i < parserElements.size(); i++) {
+ removeListenerFilter("SemanticModel" + i); //$NON-NLS-1$
+ }
+ } else {
+ super.removeSemanticListeners();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected AccessibleEditPart getAccessibleEditPart() {
+ if (accessibleEP == null) {
+ accessibleEP = new AccessibleGraphicalEditPart() {
+
+ public void getName(AccessibleEvent e) {
+ e.result = getLabelTextHelper(getFigure());
+ }
+ };
+ }
+ return accessibleEP;
+ }
+
+ /**
+ * @generated
+ */
+ private View getFontStyleOwnerView() {
+ return getPrimaryView();
+ }
+
+ /**
+ * @generated
+ */
+ private ILabelDelegate getLabelDelegate() {
+ if (labelDelegate == null) {
+ IFigure label = getFigure();
+ if (label instanceof WrappingLabel) {
+ labelDelegate = new WrappingLabelDelegate((WrappingLabel) label);
+ } else {
+ labelDelegate = new SimpleLabelDelegate((Label) label);
+ }
+ }
+ return labelDelegate;
+ }
+
+ /**
+ * @generated
+ */
+ @Override
+ public Object getAdapter(Class key) {
+ if (ILabelDelegate.class.equals(key)) {
+ return getLabelDelegate();
+ }
+ return super.getAdapter(key);
+ }
+
+ /**
+ * @generated
+ */
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ addListenerFilter("PrimaryView", this, getPrimaryView()); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("PrimaryView"); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshBounds() {
+ int width = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE
+ .getSize_Width())).intValue();
+ int height = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE
+ .getSize_Height())).intValue();
+ Dimension size = new Dimension(width, height);
+ int x = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE
+ .getLocation_X())).intValue();
+ int y = ((Integer) getStructuralFeatureValue(NotationPackage.eINSTANCE
+ .getLocation_Y())).intValue();
+ Point loc = new Point(x, y);
+ ((GraphicalEditPart) getParent()).setLayoutConstraint(this,
+ getFigure(), new Rectangle(loc, size));
+ }
+
+ /**
+ * @generated
+ */
+ protected void handleNotificationEvent(Notification event) {
+ Object feature = event.getFeature();
+ if (NotationPackage.eINSTANCE.getSize_Width().equals(feature)
+ || NotationPackage.eINSTANCE.getSize_Height().equals(feature)
+ || NotationPackage.eINSTANCE.getLocation_X().equals(feature)
+ || NotationPackage.eINSTANCE.getLocation_Y().equals(feature)) {
+ refreshBounds();
+ }
+ if (NotationPackage.eINSTANCE.getFontStyle_FontColor().equals(feature)) {
+ Integer c = (Integer) event.getNewValue();
+ setFontColor(DiagramColorRegistry.getInstance().getColor(c));
+ } else if (NotationPackage.eINSTANCE.getFontStyle_Underline().equals(
+ feature)) {
+ refreshUnderline();
+ } else if (NotationPackage.eINSTANCE.getFontStyle_StrikeThrough()
+ .equals(feature)) {
+ refreshStrikeThrough();
+ } else if (NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(
+ feature)
+ || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(
+ feature)
+ || NotationPackage.eINSTANCE.getFontStyle_Bold()
+ .equals(feature)
+ || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(
+ feature)) {
+ refreshFont();
+ } else {
+ if (getParser() != null
+ && getParser().isAffectingEvent(event,
+ getParserOptions().intValue())) {
+ refreshLabel();
+ }
+ if (getParser() instanceof ISemanticParser) {
+ ISemanticParser modelParser = (ISemanticParser) getParser();
+ if (modelParser.areSemanticElementsAffected(null, event)) {
+ removeSemanticListeners();
+ if (resolveSemanticElement() != null) {
+ addSemanticListeners();
+ }
+ refreshLabel();
+ }
+ }
+ }
+ super.handleNotificationEvent(event);
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createFigure() {
+ // Parent should assign one using setLabel() method
+ return null;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ServiceCollectionEditPart.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ServiceCollectionEditPart.java
new file mode 100755
index 0000000..9fd5d15
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ServiceCollectionEditPart.java
@@ -0,0 +1,248 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.FlowLayout;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.RectangleFigure;
+import org.eclipse.draw2d.Shape;
+import org.eclipse.draw2d.StackLayout;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.editpolicies.LayoutEditPolicy;
+import org.eclipse.gef.requests.CreateRequest;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DragDropEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.FlowLayoutEditPolicy;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
+import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.edit.policies.reparent.CreationEditPolicyWithCustomReparent;
+import org.eclipse.soa.mangrove.diagram.edit.policies.ServiceCollectionCanonicalEditPolicy;
+import org.eclipse.soa.mangrove.diagram.edit.policies.ServiceCollectionItemSemanticEditPolicy;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.swt.graphics.Color;
+
+/**
+ * @generated
+ */
+public class ServiceCollectionEditPart extends ShapeNodeEditPart {
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 2006;
+
+ /**
+ * @generated
+ */
+ protected IFigure contentPane;
+
+ /**
+ * @generated
+ */
+ protected IFigure primaryShape;
+
+ /**
+ * @generated
+ */
+ public ServiceCollectionEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ installEditPolicy(EditPolicyRoles.CREATION_ROLE,
+ new CreationEditPolicyWithCustomReparent(
+ IntermediateModelVisualIDRegistry.TYPED_INSTANCE));
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
+ new ServiceCollectionItemSemanticEditPolicy());
+ installEditPolicy(EditPolicyRoles.DRAG_DROP_ROLE,
+ new DragDropEditPolicy());
+ installEditPolicy(EditPolicyRoles.CANONICAL_ROLE,
+ new ServiceCollectionCanonicalEditPolicy());
+ installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy());
+ // XXX need an SCR to runtime to have another abstract superclass that would let children add reasonable editpolicies
+ // removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.CONNECTION_HANDLES_ROLE);
+ }
+
+ /**
+ * @generated
+ */
+ protected LayoutEditPolicy createLayoutEditPolicy() {
+
+ FlowLayoutEditPolicy lep = new FlowLayoutEditPolicy() {
+
+ protected Command createAddCommand(EditPart child, EditPart after) {
+ return null;
+ }
+
+ protected Command createMoveChildCommand(EditPart child,
+ EditPart after) {
+ return null;
+ }
+
+ protected Command getCreateCommand(CreateRequest request) {
+ return null;
+ }
+ };
+ return lep;
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createNodeShape() {
+ return primaryShape = new ServiceCollectionFigure();
+ }
+
+ /**
+ * @generated
+ */
+ public ServiceCollectionFigure getPrimaryShape() {
+ return (ServiceCollectionFigure) primaryShape;
+ }
+
+ /**
+ * @generated
+ */
+ protected NodeFigure createNodePlate() {
+ DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(40, 40);
+ return result;
+ }
+
+ /**
+ * Creates figure for this edit part.
+ *
+ * Body of this method does not depend on settings in generation model
+ * so you may safely remove <i>generated</i> tag and modify it.
+ *
+ * @generated
+ */
+ protected NodeFigure createNodeFigure() {
+ NodeFigure figure = createNodePlate();
+ figure.setLayoutManager(new StackLayout());
+ IFigure shape = createNodeShape();
+ figure.add(shape);
+ contentPane = setupContentPane(shape);
+ return figure;
+ }
+
+ /**
+ * Default implementation treats passed figure as content pane.
+ * Respects layout one may have set for generated figure.
+ * @param nodeShape instance of generated figure class
+ * @generated
+ */
+ protected IFigure setupContentPane(IFigure nodeShape) {
+ if (nodeShape.getLayoutManager() == null) {
+ ConstrainedToolbarLayout layout = new ConstrainedToolbarLayout();
+ layout.setSpacing(5);
+ nodeShape.setLayoutManager(layout);
+ }
+ return nodeShape; // use nodeShape itself as contentPane
+ }
+
+ /**
+ * @generated
+ */
+ public IFigure getContentPane() {
+ if (contentPane != null) {
+ return contentPane;
+ }
+ return super.getContentPane();
+ }
+
+ /**
+ * @generated
+ */
+ protected void setForegroundColor(Color color) {
+ if (primaryShape != null) {
+ primaryShape.setForegroundColor(color);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setBackgroundColor(Color color) {
+ if (primaryShape != null) {
+ primaryShape.setBackgroundColor(color);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLineWidth(int width) {
+ if (primaryShape instanceof Shape) {
+ ((Shape) primaryShape).setLineWidth(width);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLineType(int style) {
+ if (primaryShape instanceof Shape) {
+ ((Shape) primaryShape).setLineStyle(style);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public class ServiceCollectionFigure extends RectangleFigure {
+
+ /**
+ * @generated
+ */
+ public ServiceCollectionFigure() {
+
+ FlowLayout layoutThis = new FlowLayout();
+ layoutThis.setStretchMinorAxis(false);
+ layoutThis.setMinorAlignment(FlowLayout.ALIGN_LEFTTOP);
+
+ layoutThis.setMajorAlignment(FlowLayout.ALIGN_LEFTTOP);
+ layoutThis.setMajorSpacing(20);
+ layoutThis.setMinorSpacing(20);
+ layoutThis.setHorizontal(false);
+
+ this.setLayoutManager(layoutThis);
+
+ this.setBackgroundColor(THIS_BACK);
+ this.setBorder(new MarginBorder(getMapMode().DPtoLP(10),
+ getMapMode().DPtoLP(10), getMapMode().DPtoLP(10),
+ getMapMode().DPtoLP(10)));
+ createContents();
+ }
+
+ /**
+ * @generated
+ */
+ private void createContents() {
+
+ WrappingLabel serviceCollection0 = new WrappingLabel();
+
+ serviceCollection0.setText("Service Collection");
+ serviceCollection0.setForegroundColor(ColorConstants.black);
+
+ this.add(serviceCollection0);
+
+ }
+
+ }
+
+ /**
+ * @generated
+ */
+ static final Color THIS_BACK = new Color(null, 176, 220, 255);
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ServiceEditPart.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ServiceEditPart.java
new file mode 100755
index 0000000..0cacc5f
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ServiceEditPart.java
@@ -0,0 +1,371 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.FlowLayout;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.RoundedRectangle;
+import org.eclipse.draw2d.Shape;
+import org.eclipse.draw2d.StackLayout;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.editpolicies.LayoutEditPolicy;
+import org.eclipse.gef.requests.CreateRequest;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.FlowLayoutEditPolicy;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
+import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.diagram.edit.policies.ServiceItemSemanticEditPolicy;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+import org.eclipse.swt.graphics.Color;
+
+/**
+ * @generated
+ */
+public class ServiceEditPart extends ShapeNodeEditPart {
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 3009;
+
+ /**
+ * @generated
+ */
+ protected IFigure contentPane;
+
+ /**
+ * @generated
+ */
+ protected IFigure primaryShape;
+
+ /**
+ * @generated
+ */
+ public ServiceEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
+ new ServiceItemSemanticEditPolicy());
+ installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy());
+ // XXX need an SCR to runtime to have another abstract superclass that would let children add reasonable editpolicies
+ // removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.CONNECTION_HANDLES_ROLE);
+ }
+
+ /**
+ * @generated
+ */
+ protected LayoutEditPolicy createLayoutEditPolicy() {
+
+ FlowLayoutEditPolicy lep = new FlowLayoutEditPolicy() {
+
+ protected Command createAddCommand(EditPart child, EditPart after) {
+ return null;
+ }
+
+ protected Command createMoveChildCommand(EditPart child,
+ EditPart after) {
+ return null;
+ }
+
+ protected Command getCreateCommand(CreateRequest request) {
+ return null;
+ }
+ };
+ return lep;
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createNodeShape() {
+ return primaryShape = new ServiceFigure();
+ }
+
+ /**
+ * @generated
+ */
+ public ServiceFigure getPrimaryShape() {
+ return (ServiceFigure) primaryShape;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean addFixedChild(EditPart childEditPart) {
+ if (childEditPart instanceof ServiceServiceNameEditPart) {
+ ((ServiceServiceNameEditPart) childEditPart)
+ .setLabel(getPrimaryShape().getFigureServiceNameFigure());
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean removeFixedChild(EditPart childEditPart) {
+ if (childEditPart instanceof ServiceServiceNameEditPart) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ protected void addChildVisual(EditPart childEditPart, int index) {
+ if (addFixedChild(childEditPart)) {
+ return;
+ }
+ super.addChildVisual(childEditPart, -1);
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeChildVisual(EditPart childEditPart) {
+ if (removeFixedChild(childEditPart)) {
+ return;
+ }
+ super.removeChildVisual(childEditPart);
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure getContentPaneFor(IGraphicalEditPart editPart) {
+ return getContentPane();
+ }
+
+ /**
+ * @generated
+ */
+ protected NodeFigure createNodePlate() {
+ DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(40, 40);
+ return result;
+ }
+
+ /**
+ * Creates figure for this edit part.
+ *
+ * Body of this method does not depend on settings in generation model
+ * so you may safely remove <i>generated</i> tag and modify it.
+ *
+ * @generated
+ */
+ protected NodeFigure createNodeFigure() {
+ NodeFigure figure = createNodePlate();
+ figure.setLayoutManager(new StackLayout());
+ IFigure shape = createNodeShape();
+ figure.add(shape);
+ contentPane = setupContentPane(shape);
+ return figure;
+ }
+
+ /**
+ * Default implementation treats passed figure as content pane.
+ * Respects layout one may have set for generated figure.
+ * @param nodeShape instance of generated figure class
+ * @generated
+ */
+ protected IFigure setupContentPane(IFigure nodeShape) {
+ if (nodeShape.getLayoutManager() == null) {
+ ConstrainedToolbarLayout layout = new ConstrainedToolbarLayout();
+ layout.setSpacing(5);
+ nodeShape.setLayoutManager(layout);
+ }
+ return nodeShape; // use nodeShape itself as contentPane
+ }
+
+ /**
+ * @generated
+ */
+ public IFigure getContentPane() {
+ if (contentPane != null) {
+ return contentPane;
+ }
+ return super.getContentPane();
+ }
+
+ /**
+ * @generated
+ */
+ protected void setForegroundColor(Color color) {
+ if (primaryShape != null) {
+ primaryShape.setForegroundColor(color);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setBackgroundColor(Color color) {
+ if (primaryShape != null) {
+ primaryShape.setBackgroundColor(color);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLineWidth(int width) {
+ if (primaryShape instanceof Shape) {
+ ((Shape) primaryShape).setLineWidth(width);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLineType(int style) {
+ if (primaryShape instanceof Shape) {
+ ((Shape) primaryShape).setLineStyle(style);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public EditPart getPrimaryChildEditPart() {
+ return getChildBySemanticHint(IntermediateModelVisualIDRegistry
+ .getType(ServiceServiceNameEditPart.VISUAL_ID));
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMARelTypesOnSource() {
+ ArrayList<IElementType> types = new ArrayList<IElementType>(1);
+ types.add(IntermediateModelElementTypes.ServiceNeeds_4011);
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMARelTypesOnSourceAndTarget(
+ IGraphicalEditPart targetEditPart) {
+ LinkedList<IElementType> types = new LinkedList<IElementType>();
+ if (targetEditPart instanceof ProcessEditPart) {
+ types.add(IntermediateModelElementTypes.ServiceNeeds_4011);
+ }
+ if (targetEditPart instanceof org.eclipse.soa.mangrove.diagram.edit.parts.ServiceEditPart) {
+ types.add(IntermediateModelElementTypes.ServiceNeeds_4011);
+ }
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMATypesForTarget(IElementType relationshipType) {
+ LinkedList<IElementType> types = new LinkedList<IElementType>();
+ if (relationshipType == IntermediateModelElementTypes.ServiceNeeds_4011) {
+ types.add(IntermediateModelElementTypes.Process_3007);
+ types.add(IntermediateModelElementTypes.Service_3009);
+ }
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMARelTypesOnTarget() {
+ ArrayList<IElementType> types = new ArrayList<IElementType>(2);
+ types.add(IntermediateModelElementTypes.StepServiceModel_4010);
+ types.add(IntermediateModelElementTypes.ServiceNeeds_4011);
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMATypesForSource(IElementType relationshipType) {
+ LinkedList<IElementType> types = new LinkedList<IElementType>();
+ if (relationshipType == IntermediateModelElementTypes.StepServiceModel_4010) {
+ types.add(IntermediateModelElementTypes.Step_3008);
+ } else if (relationshipType == IntermediateModelElementTypes.ServiceNeeds_4011) {
+ types.add(IntermediateModelElementTypes.Process_3007);
+ types.add(IntermediateModelElementTypes.Service_3009);
+ }
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public class ServiceFigure extends RoundedRectangle {
+
+ /**
+ * @generated
+ */
+ private WrappingLabel fFigureServiceNameFigure;
+
+ /**
+ * @generated
+ */
+ public ServiceFigure() {
+
+ FlowLayout layoutThis = new FlowLayout();
+ layoutThis.setStretchMinorAxis(false);
+ layoutThis.setMinorAlignment(FlowLayout.ALIGN_LEFTTOP);
+
+ layoutThis.setMajorAlignment(FlowLayout.ALIGN_LEFTTOP);
+ layoutThis.setMajorSpacing(5);
+ layoutThis.setMinorSpacing(5);
+ layoutThis.setHorizontal(false);
+
+ this.setLayoutManager(layoutThis);
+
+ this.setCornerDimensions(new Dimension(getMapMode().DPtoLP(8),
+ getMapMode().DPtoLP(8)));
+ this.setBackgroundColor(ColorConstants.lightBlue);
+ this.setBorder(new MarginBorder(getMapMode().DPtoLP(0),
+ getMapMode().DPtoLP(0), getMapMode().DPtoLP(0),
+ getMapMode().DPtoLP(10)));
+ createContents();
+ }
+
+ /**
+ * @generated
+ */
+ private void createContents() {
+
+ fFigureServiceNameFigure = new WrappingLabel();
+
+ fFigureServiceNameFigure.setText("Service Name");
+
+ this.add(fFigureServiceNameFigure);
+
+ }
+
+ /**
+ * @generated
+ */
+ public WrappingLabel getFigureServiceNameFigure() {
+ return fFigureServiceNameFigure;
+ }
+
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ServiceNeedsEditPart.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ServiceNeedsEditPart.java
new file mode 100755
index 0000000..72aa0ea
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ServiceNeedsEditPart.java
@@ -0,0 +1,85 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.Connection;
+import org.eclipse.draw2d.PolylineDecoration;
+import org.eclipse.draw2d.RotatableDecoration;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ITreeBranchEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.PolylineConnectionEx;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.diagram.edit.policies.ServiceNeedsItemSemanticEditPolicy;
+
+/**
+ * @generated
+ */
+public class ServiceNeedsEditPart extends ConnectionNodeEditPart implements
+ ITreeBranchEditPart {
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 4011;
+
+ /**
+ * @generated
+ */
+ public ServiceNeedsEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
+ new ServiceNeedsItemSemanticEditPolicy());
+ }
+
+ /**
+ * Creates figure for this edit part.
+ *
+ * Body of this method does not depend on settings in generation model
+ * so you may safely remove <i>generated</i> tag and modify it.
+ *
+ * @generated
+ */
+
+ protected Connection createConnectionFigure() {
+ return new ServiceNeedsFigure();
+ }
+
+ /**
+ * @generated
+ */
+ public ServiceNeedsFigure getPrimaryShape() {
+ return (ServiceNeedsFigure) getFigure();
+ }
+
+ /**
+ * @generated
+ */
+ public class ServiceNeedsFigure extends PolylineConnectionEx {
+
+ /**
+ * @generated
+ */
+ public ServiceNeedsFigure() {
+ this.setForegroundColor(ColorConstants.black);
+
+ setTargetDecoration(createTargetDecoration());
+ }
+
+ /**
+ * @generated
+ */
+ private RotatableDecoration createTargetDecoration() {
+ PolylineDecoration df = new PolylineDecoration();
+ return df;
+ }
+
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ServiceServiceNameEditPart.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ServiceServiceNameEditPart.java
new file mode 100755
index 0000000..75d3ecc
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/ServiceServiceNameEditPart.java
@@ -0,0 +1,630 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RunnableWithResult;
+import org.eclipse.gef.AccessibleEditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.requests.DirectEditRequest;
+import org.eclipse.gef.tools.DirectEditManager;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParser;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.LabelDirectEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry;
+import org.eclipse.gmf.runtime.diagram.ui.label.ILabelDelegate;
+import org.eclipse.gmf.runtime.diagram.ui.label.WrappingLabelDelegate;
+import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
+import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser;
+import org.eclipse.gmf.runtime.notation.FontStyle;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.directedit.TextDirectEditManager2;
+import org.eclipse.gmf.tooling.runtime.draw2d.labels.SimpleLabelDelegate;
+import org.eclipse.gmf.tooling.runtime.edit.policies.labels.IRefreshableFeedbackEditPolicy;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.viewers.ICellEditorValidator;
+import org.eclipse.soa.mangrove.diagram.edit.policies.IntermediateModelTextSelectionEditPolicy;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelParserProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @generated
+ */
+public class ServiceServiceNameEditPart extends CompartmentEditPart implements
+ ITextAwareEditPart {
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 5012;
+
+ /**
+ * @generated
+ */
+ private DirectEditManager manager;
+
+ /**
+ * @generated
+ */
+ private IParser parser;
+
+ /**
+ * @generated
+ */
+ private List<?> parserElements;
+
+ /**
+ * @generated
+ */
+ private String defaultText;
+
+ /**
+ * @generated
+ */
+ private ILabelDelegate labelDelegate;
+
+ /**
+ * @generated
+ */
+ public ServiceServiceNameEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE,
+ new IntermediateModelTextSelectionEditPolicy());
+ installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE,
+ new LabelDirectEditPolicy());
+ installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE,
+ new StpIntermediateModelEditPart.NodeLabelDragPolicy());
+ }
+
+ /**
+ * @generated
+ */
+ protected String getLabelTextHelper(IFigure figure) {
+ if (figure instanceof WrappingLabel) {
+ return ((WrappingLabel) figure).getText();
+ } else if (figure instanceof Label) {
+ return ((Label) figure).getText();
+ } else {
+ return getLabelDelegate().getText();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLabelTextHelper(IFigure figure, String text) {
+ if (figure instanceof WrappingLabel) {
+ ((WrappingLabel) figure).setText(text);
+ } else if (figure instanceof Label) {
+ ((Label) figure).setText(text);
+ } else {
+ getLabelDelegate().setText(text);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected Image getLabelIconHelper(IFigure figure) {
+ if (figure instanceof WrappingLabel) {
+ return ((WrappingLabel) figure).getIcon();
+ } else if (figure instanceof Label) {
+ return ((Label) figure).getIcon();
+ } else {
+ return getLabelDelegate().getIcon(0);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLabelIconHelper(IFigure figure, Image icon) {
+ if (figure instanceof WrappingLabel) {
+ ((WrappingLabel) figure).setIcon(icon);
+ return;
+ } else if (figure instanceof Label) {
+ ((Label) figure).setIcon(icon);
+ return;
+ } else {
+ getLabelDelegate().setIcon(icon, 0);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public void setLabel(WrappingLabel figure) {
+ unregisterVisuals();
+ setFigure(figure);
+ defaultText = getLabelTextHelper(figure);
+ registerVisuals();
+ refreshVisuals();
+ }
+
+ /**
+ * @generated
+ */
+ @SuppressWarnings("rawtypes")
+ protected List getModelChildren() {
+ return Collections.EMPTY_LIST;
+ }
+
+ /**
+ * @generated
+ */
+ public IGraphicalEditPart getChildBySemanticHint(String semanticHint) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected EObject getParserElement() {
+ return resolveSemanticElement();
+ }
+
+ /**
+ * @generated
+ */
+ protected Image getLabelIcon() {
+ EObject parserElement = getParserElement();
+ if (parserElement == null) {
+ return null;
+ }
+ return IntermediateModelElementTypes.getImage(parserElement.eClass());
+ }
+
+ /**
+ * @generated
+ */
+ protected String getLabelText() {
+ String text = null;
+ EObject parserElement = getParserElement();
+ if (parserElement != null && getParser() != null) {
+ text = getParser().getPrintString(
+ new EObjectAdapter(parserElement),
+ getParserOptions().intValue());
+ }
+ if (text == null || text.length() == 0) {
+ text = defaultText;
+ }
+ return text;
+ }
+
+ /**
+ * @generated
+ */
+ public void setLabelText(String text) {
+ setLabelTextHelper(getFigure(), text);
+ refreshSelectionFeedback();
+ }
+
+ /**
+ * @generated
+ */
+ public String getEditText() {
+ if (getParserElement() == null || getParser() == null) {
+ return ""; //$NON-NLS-1$
+ }
+ return getParser().getEditString(
+ new EObjectAdapter(getParserElement()),
+ getParserOptions().intValue());
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean isEditable() {
+ return getParser() != null;
+ }
+
+ /**
+ * @generated
+ */
+ public ICellEditorValidator getEditTextValidator() {
+ return new ICellEditorValidator() {
+
+ public String isValid(final Object value) {
+ if (value instanceof String) {
+ final EObject element = getParserElement();
+ final IParser parser = getParser();
+ try {
+ IParserEditStatus valid = (IParserEditStatus) getEditingDomain()
+ .runExclusive(
+ new RunnableWithResult.Impl<IParserEditStatus>() {
+
+ public void run() {
+ setResult(parser
+ .isValidEditString(
+ new EObjectAdapter(
+ element),
+ (String) value));
+ }
+ });
+ return valid.getCode() == ParserEditStatus.EDITABLE ? null
+ : valid.getMessage();
+ } catch (InterruptedException ie) {
+ ie.printStackTrace();
+ }
+ }
+
+ // shouldn't get here
+ return null;
+ }
+ };
+ }
+
+ /**
+ * @generated
+ */
+ public IContentAssistProcessor getCompletionProcessor() {
+ if (getParserElement() == null || getParser() == null) {
+ return null;
+ }
+ return getParser().getCompletionProcessor(
+ new EObjectAdapter(getParserElement()));
+ }
+
+ /**
+ * @generated
+ */
+ public ParserOptions getParserOptions() {
+ return ParserOptions.NONE;
+ }
+
+ /**
+ * @generated
+ */
+ public IParser getParser() {
+ if (parser == null) {
+ parser = IntermediateModelParserProvider
+ .getParser(
+ IntermediateModelElementTypes.Service_3009,
+ getParserElement(),
+ IntermediateModelVisualIDRegistry
+ .getType(org.eclipse.soa.mangrove.diagram.edit.parts.ServiceServiceNameEditPart.VISUAL_ID));
+ }
+ return parser;
+ }
+
+ /**
+ * @generated
+ */
+ protected DirectEditManager getManager() {
+ if (manager == null) {
+ setManager(new TextDirectEditManager2(this, null,
+ IntermediateModelEditPartFactory
+ .getTextCellEditorLocator(this)));
+ }
+ return manager;
+ }
+
+ /**
+ * @generated
+ */
+ protected void setManager(DirectEditManager manager) {
+ this.manager = manager;
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEdit() {
+ getManager().show();
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEdit(Point eventLocation) {
+ if (getManager().getClass() == TextDirectEditManager2.class) {
+ ((TextDirectEditManager2) getManager()).show(eventLocation
+ .getSWTPoint());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private void performDirectEdit(char initialCharacter) {
+ if (getManager() instanceof TextDirectEditManager) {
+ ((TextDirectEditManager) getManager()).show(initialCharacter);
+ } else //
+ if (getManager() instanceof TextDirectEditManager2) {
+ ((TextDirectEditManager2) getManager()).show(initialCharacter);
+ } else //
+ {
+ performDirectEdit();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEditRequest(Request request) {
+ final Request theRequest = request;
+ try {
+ getEditingDomain().runExclusive(new Runnable() {
+
+ public void run() {
+ if (isActive() && isEditable()) {
+ if (theRequest
+ .getExtendedData()
+ .get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) {
+ Character initialChar = (Character) theRequest
+ .getExtendedData()
+ .get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR);
+ performDirectEdit(initialChar.charValue());
+ } else if ((theRequest instanceof DirectEditRequest)
+ && (getEditText().equals(getLabelText()))) {
+ DirectEditRequest editRequest = (DirectEditRequest) theRequest;
+ performDirectEdit(editRequest.getLocation());
+ } else {
+ performDirectEdit();
+ }
+ }
+ }
+ });
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshVisuals() {
+ super.refreshVisuals();
+ refreshLabel();
+ refreshFont();
+ refreshFontColor();
+ refreshUnderline();
+ refreshStrikeThrough();
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshLabel() {
+ setLabelTextHelper(getFigure(), getLabelText());
+ setLabelIconHelper(getFigure(), getLabelIcon());
+ refreshSelectionFeedback();
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshUnderline() {
+ FontStyle style = (FontStyle) getFontStyleOwnerView().getStyle(
+ NotationPackage.eINSTANCE.getFontStyle());
+ if (style != null && getFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getFigure()).setTextUnderline(style.isUnderline());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshStrikeThrough() {
+ FontStyle style = (FontStyle) getFontStyleOwnerView().getStyle(
+ NotationPackage.eINSTANCE.getFontStyle());
+ if (style != null && getFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getFigure()).setTextStrikeThrough(style
+ .isStrikeThrough());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshFont() {
+ FontStyle style = (FontStyle) getFontStyleOwnerView().getStyle(
+ NotationPackage.eINSTANCE.getFontStyle());
+ if (style != null) {
+ FontData fontData = new FontData(style.getFontName(),
+ style.getFontHeight(), (style.isBold() ? SWT.BOLD
+ : SWT.NORMAL)
+ | (style.isItalic() ? SWT.ITALIC : SWT.NORMAL));
+ setFont(fontData);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private void refreshSelectionFeedback() {
+ requestEditPolicyFeedbackRefresh(EditPolicy.PRIMARY_DRAG_ROLE);
+ requestEditPolicyFeedbackRefresh(EditPolicy.SELECTION_FEEDBACK_ROLE);
+ }
+
+ /**
+ * @generated
+ */
+ private void requestEditPolicyFeedbackRefresh(String editPolicyKey) {
+ Object editPolicy = getEditPolicy(editPolicyKey);
+ if (editPolicy instanceof IRefreshableFeedbackEditPolicy) {
+ ((IRefreshableFeedbackEditPolicy) editPolicy).refreshFeedback();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setFontColor(Color color) {
+ getFigure().setForegroundColor(color);
+ }
+
+ /**
+ * @generated
+ */
+ protected void addSemanticListeners() {
+ if (getParser() instanceof ISemanticParser) {
+ EObject element = resolveSemanticElement();
+ parserElements = ((ISemanticParser) getParser())
+ .getSemanticElementsBeingParsed(element);
+ for (int i = 0; i < parserElements.size(); i++) {
+ addListenerFilter(
+ "SemanticModel" + i, this, (EObject) parserElements.get(i)); //$NON-NLS-1$
+ }
+ } else {
+ super.addSemanticListeners();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeSemanticListeners() {
+ if (parserElements != null) {
+ for (int i = 0; i < parserElements.size(); i++) {
+ removeListenerFilter("SemanticModel" + i); //$NON-NLS-1$
+ }
+ } else {
+ super.removeSemanticListeners();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected AccessibleEditPart getAccessibleEditPart() {
+ if (accessibleEP == null) {
+ accessibleEP = new AccessibleGraphicalEditPart() {
+
+ public void getName(AccessibleEvent e) {
+ e.result = getLabelTextHelper(getFigure());
+ }
+ };
+ }
+ return accessibleEP;
+ }
+
+ /**
+ * @generated
+ */
+ private View getFontStyleOwnerView() {
+ return getPrimaryView();
+ }
+
+ /**
+ * @generated
+ */
+ private ILabelDelegate getLabelDelegate() {
+ if (labelDelegate == null) {
+ IFigure label = getFigure();
+ if (label instanceof WrappingLabel) {
+ labelDelegate = new WrappingLabelDelegate((WrappingLabel) label);
+ } else {
+ labelDelegate = new SimpleLabelDelegate((Label) label);
+ }
+ }
+ return labelDelegate;
+ }
+
+ /**
+ * @generated
+ */
+ @Override
+ public Object getAdapter(Class key) {
+ if (ILabelDelegate.class.equals(key)) {
+ return getLabelDelegate();
+ }
+ return super.getAdapter(key);
+ }
+
+ /**
+ * @generated
+ */
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ addListenerFilter("PrimaryView", this, getPrimaryView()); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("PrimaryView"); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ protected void handleNotificationEvent(Notification event) {
+ Object feature = event.getFeature();
+ if (NotationPackage.eINSTANCE.getFontStyle_FontColor().equals(feature)) {
+ Integer c = (Integer) event.getNewValue();
+ setFontColor(DiagramColorRegistry.getInstance().getColor(c));
+ } else if (NotationPackage.eINSTANCE.getFontStyle_Underline().equals(
+ feature)) {
+ refreshUnderline();
+ } else if (NotationPackage.eINSTANCE.getFontStyle_StrikeThrough()
+ .equals(feature)) {
+ refreshStrikeThrough();
+ } else if (NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(
+ feature)
+ || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(
+ feature)
+ || NotationPackage.eINSTANCE.getFontStyle_Bold()
+ .equals(feature)
+ || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(
+ feature)) {
+ refreshFont();
+ } else {
+ if (getParser() != null
+ && getParser().isAffectingEvent(event,
+ getParserOptions().intValue())) {
+ refreshLabel();
+ }
+ if (getParser() instanceof ISemanticParser) {
+ ISemanticParser modelParser = (ISemanticParser) getParser();
+ if (modelParser.areSemanticElementsAffected(null, event)) {
+ removeSemanticListeners();
+ if (resolveSemanticElement() != null) {
+ addSemanticListeners();
+ }
+ refreshLabel();
+ }
+ }
+ }
+ super.handleNotificationEvent(event);
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createFigure() {
+ // Parent should assign one using setLabel() method
+ return null;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/StepEditPart.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/StepEditPart.java
new file mode 100755
index 0000000..5b16bd5
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/StepEditPart.java
@@ -0,0 +1,373 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.FlowLayout;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.RoundedRectangle;
+import org.eclipse.draw2d.Shape;
+import org.eclipse.draw2d.StackLayout;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.editpolicies.LayoutEditPolicy;
+import org.eclipse.gef.requests.CreateRequest;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.FlowLayoutEditPolicy;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.ConstrainedToolbarLayout;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure;
+import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.diagram.edit.policies.StepItemSemanticEditPolicy;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+import org.eclipse.swt.graphics.Color;
+
+/**
+ * @generated
+ */
+public class StepEditPart extends ShapeNodeEditPart {
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 3008;
+
+ /**
+ * @generated
+ */
+ protected IFigure contentPane;
+
+ /**
+ * @generated
+ */
+ protected IFigure primaryShape;
+
+ /**
+ * @generated
+ */
+ public StepEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
+ new StepItemSemanticEditPolicy());
+ installEditPolicy(EditPolicy.LAYOUT_ROLE, createLayoutEditPolicy());
+ // XXX need an SCR to runtime to have another abstract superclass that would let children add reasonable editpolicies
+ // removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.CONNECTION_HANDLES_ROLE);
+ }
+
+ /**
+ * @generated
+ */
+ protected LayoutEditPolicy createLayoutEditPolicy() {
+
+ FlowLayoutEditPolicy lep = new FlowLayoutEditPolicy() {
+
+ protected Command createAddCommand(EditPart child, EditPart after) {
+ return null;
+ }
+
+ protected Command createMoveChildCommand(EditPart child,
+ EditPart after) {
+ return null;
+ }
+
+ protected Command getCreateCommand(CreateRequest request) {
+ return null;
+ }
+ };
+ return lep;
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createNodeShape() {
+ return primaryShape = new StepFigure();
+ }
+
+ /**
+ * @generated
+ */
+ public StepFigure getPrimaryShape() {
+ return (StepFigure) primaryShape;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean addFixedChild(EditPart childEditPart) {
+ if (childEditPart instanceof StepNameEditPart) {
+ ((StepNameEditPart) childEditPart).setLabel(getPrimaryShape()
+ .getFigureStepNameFigure());
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean removeFixedChild(EditPart childEditPart) {
+ if (childEditPart instanceof StepNameEditPart) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ protected void addChildVisual(EditPart childEditPart, int index) {
+ if (addFixedChild(childEditPart)) {
+ return;
+ }
+ super.addChildVisual(childEditPart, -1);
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeChildVisual(EditPart childEditPart) {
+ if (removeFixedChild(childEditPart)) {
+ return;
+ }
+ super.removeChildVisual(childEditPart);
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure getContentPaneFor(IGraphicalEditPart editPart) {
+ return getContentPane();
+ }
+
+ /**
+ * @generated
+ */
+ protected NodeFigure createNodePlate() {
+ DefaultSizeNodeFigure result = new DefaultSizeNodeFigure(40, 40);
+ return result;
+ }
+
+ /**
+ * Creates figure for this edit part.
+ *
+ * Body of this method does not depend on settings in generation model
+ * so you may safely remove <i>generated</i> tag and modify it.
+ *
+ * @generated
+ */
+ protected NodeFigure createNodeFigure() {
+ NodeFigure figure = createNodePlate();
+ figure.setLayoutManager(new StackLayout());
+ IFigure shape = createNodeShape();
+ figure.add(shape);
+ contentPane = setupContentPane(shape);
+ return figure;
+ }
+
+ /**
+ * Default implementation treats passed figure as content pane.
+ * Respects layout one may have set for generated figure.
+ * @param nodeShape instance of generated figure class
+ * @generated
+ */
+ protected IFigure setupContentPane(IFigure nodeShape) {
+ if (nodeShape.getLayoutManager() == null) {
+ ConstrainedToolbarLayout layout = new ConstrainedToolbarLayout();
+ layout.setSpacing(5);
+ nodeShape.setLayoutManager(layout);
+ }
+ return nodeShape; // use nodeShape itself as contentPane
+ }
+
+ /**
+ * @generated
+ */
+ public IFigure getContentPane() {
+ if (contentPane != null) {
+ return contentPane;
+ }
+ return super.getContentPane();
+ }
+
+ /**
+ * @generated
+ */
+ protected void setForegroundColor(Color color) {
+ if (primaryShape != null) {
+ primaryShape.setForegroundColor(color);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setBackgroundColor(Color color) {
+ if (primaryShape != null) {
+ primaryShape.setBackgroundColor(color);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLineWidth(int width) {
+ if (primaryShape instanceof Shape) {
+ ((Shape) primaryShape).setLineWidth(width);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLineType(int style) {
+ if (primaryShape instanceof Shape) {
+ ((Shape) primaryShape).setLineStyle(style);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public EditPart getPrimaryChildEditPart() {
+ return getChildBySemanticHint(IntermediateModelVisualIDRegistry
+ .getType(StepNameEditPart.VISUAL_ID));
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMARelTypesOnSource() {
+ ArrayList<IElementType> types = new ArrayList<IElementType>(2);
+ types.add(IntermediateModelElementTypes.Transition_4009);
+ types.add(IntermediateModelElementTypes.StepServiceModel_4010);
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMARelTypesOnSourceAndTarget(
+ IGraphicalEditPart targetEditPart) {
+ LinkedList<IElementType> types = new LinkedList<IElementType>();
+ if (targetEditPart instanceof org.eclipse.soa.mangrove.diagram.edit.parts.StepEditPart) {
+ types.add(IntermediateModelElementTypes.Transition_4009);
+ }
+ if (targetEditPart instanceof ProcessEditPart) {
+ types.add(IntermediateModelElementTypes.StepServiceModel_4010);
+ }
+ if (targetEditPart instanceof ServiceEditPart) {
+ types.add(IntermediateModelElementTypes.StepServiceModel_4010);
+ }
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMATypesForTarget(IElementType relationshipType) {
+ LinkedList<IElementType> types = new LinkedList<IElementType>();
+ if (relationshipType == IntermediateModelElementTypes.Transition_4009) {
+ types.add(IntermediateModelElementTypes.Step_3008);
+ } else if (relationshipType == IntermediateModelElementTypes.StepServiceModel_4010) {
+ types.add(IntermediateModelElementTypes.Process_3007);
+ types.add(IntermediateModelElementTypes.Service_3009);
+ }
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMARelTypesOnTarget() {
+ ArrayList<IElementType> types = new ArrayList<IElementType>(1);
+ types.add(IntermediateModelElementTypes.Transition_4009);
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public List<IElementType> getMATypesForSource(IElementType relationshipType) {
+ LinkedList<IElementType> types = new LinkedList<IElementType>();
+ if (relationshipType == IntermediateModelElementTypes.Transition_4009) {
+ types.add(IntermediateModelElementTypes.Step_3008);
+ }
+ return types;
+ }
+
+ /**
+ * @generated
+ */
+ public class StepFigure extends RoundedRectangle {
+
+ /**
+ * @generated
+ */
+ private WrappingLabel fFigureStepNameFigure;
+
+ /**
+ * @generated
+ */
+ public StepFigure() {
+
+ FlowLayout layoutThis = new FlowLayout();
+ layoutThis.setStretchMinorAxis(false);
+ layoutThis.setMinorAlignment(FlowLayout.ALIGN_LEFTTOP);
+
+ layoutThis.setMajorAlignment(FlowLayout.ALIGN_LEFTTOP);
+ layoutThis.setMajorSpacing(5);
+ layoutThis.setMinorSpacing(5);
+ layoutThis.setHorizontal(true);
+
+ this.setLayoutManager(layoutThis);
+
+ this.setCornerDimensions(new Dimension(getMapMode().DPtoLP(8),
+ getMapMode().DPtoLP(8)));
+ this.setBackgroundColor(ColorConstants.orange);
+ this.setBorder(new MarginBorder(getMapMode().DPtoLP(0),
+ getMapMode().DPtoLP(0), getMapMode().DPtoLP(0),
+ getMapMode().DPtoLP(10)));
+ createContents();
+ }
+
+ /**
+ * @generated
+ */
+ private void createContents() {
+
+ fFigureStepNameFigure = new WrappingLabel();
+
+ fFigureStepNameFigure.setText("step");
+
+ this.add(fFigureStepNameFigure);
+
+ }
+
+ /**
+ * @generated
+ */
+ public WrappingLabel getFigureStepNameFigure() {
+ return fFigureStepNameFigure;
+ }
+
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/StepNameEditPart.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/StepNameEditPart.java
new file mode 100755
index 0000000..79b616a
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/StepNameEditPart.java
@@ -0,0 +1,630 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RunnableWithResult;
+import org.eclipse.gef.AccessibleEditPart;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.requests.DirectEditRequest;
+import org.eclipse.gef.tools.DirectEditManager;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParser;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.LabelDirectEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramColorRegistry;
+import org.eclipse.gmf.runtime.diagram.ui.label.ILabelDelegate;
+import org.eclipse.gmf.runtime.diagram.ui.label.WrappingLabelDelegate;
+import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
+import org.eclipse.gmf.runtime.diagram.ui.tools.TextDirectEditManager;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser;
+import org.eclipse.gmf.runtime.notation.FontStyle;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.directedit.TextDirectEditManager2;
+import org.eclipse.gmf.tooling.runtime.draw2d.labels.SimpleLabelDelegate;
+import org.eclipse.gmf.tooling.runtime.edit.policies.labels.IRefreshableFeedbackEditPolicy;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.viewers.ICellEditorValidator;
+import org.eclipse.soa.mangrove.diagram.edit.policies.IntermediateModelTextSelectionEditPolicy;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelParserProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @generated
+ */
+public class StepNameEditPart extends CompartmentEditPart implements
+ ITextAwareEditPart {
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 5009;
+
+ /**
+ * @generated
+ */
+ private DirectEditManager manager;
+
+ /**
+ * @generated
+ */
+ private IParser parser;
+
+ /**
+ * @generated
+ */
+ private List<?> parserElements;
+
+ /**
+ * @generated
+ */
+ private String defaultText;
+
+ /**
+ * @generated
+ */
+ private ILabelDelegate labelDelegate;
+
+ /**
+ * @generated
+ */
+ public StepNameEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE,
+ new IntermediateModelTextSelectionEditPolicy());
+ installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE,
+ new LabelDirectEditPolicy());
+ installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE,
+ new StpIntermediateModelEditPart.NodeLabelDragPolicy());
+ }
+
+ /**
+ * @generated
+ */
+ protected String getLabelTextHelper(IFigure figure) {
+ if (figure instanceof WrappingLabel) {
+ return ((WrappingLabel) figure).getText();
+ } else if (figure instanceof Label) {
+ return ((Label) figure).getText();
+ } else {
+ return getLabelDelegate().getText();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLabelTextHelper(IFigure figure, String text) {
+ if (figure instanceof WrappingLabel) {
+ ((WrappingLabel) figure).setText(text);
+ } else if (figure instanceof Label) {
+ ((Label) figure).setText(text);
+ } else {
+ getLabelDelegate().setText(text);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected Image getLabelIconHelper(IFigure figure) {
+ if (figure instanceof WrappingLabel) {
+ return ((WrappingLabel) figure).getIcon();
+ } else if (figure instanceof Label) {
+ return ((Label) figure).getIcon();
+ } else {
+ return getLabelDelegate().getIcon(0);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setLabelIconHelper(IFigure figure, Image icon) {
+ if (figure instanceof WrappingLabel) {
+ ((WrappingLabel) figure).setIcon(icon);
+ return;
+ } else if (figure instanceof Label) {
+ ((Label) figure).setIcon(icon);
+ return;
+ } else {
+ getLabelDelegate().setIcon(icon, 0);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public void setLabel(WrappingLabel figure) {
+ unregisterVisuals();
+ setFigure(figure);
+ defaultText = getLabelTextHelper(figure);
+ registerVisuals();
+ refreshVisuals();
+ }
+
+ /**
+ * @generated
+ */
+ @SuppressWarnings("rawtypes")
+ protected List getModelChildren() {
+ return Collections.EMPTY_LIST;
+ }
+
+ /**
+ * @generated
+ */
+ public IGraphicalEditPart getChildBySemanticHint(String semanticHint) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected EObject getParserElement() {
+ return resolveSemanticElement();
+ }
+
+ /**
+ * @generated
+ */
+ protected Image getLabelIcon() {
+ EObject parserElement = getParserElement();
+ if (parserElement == null) {
+ return null;
+ }
+ return IntermediateModelElementTypes.getImage(parserElement.eClass());
+ }
+
+ /**
+ * @generated
+ */
+ protected String getLabelText() {
+ String text = null;
+ EObject parserElement = getParserElement();
+ if (parserElement != null && getParser() != null) {
+ text = getParser().getPrintString(
+ new EObjectAdapter(parserElement),
+ getParserOptions().intValue());
+ }
+ if (text == null || text.length() == 0) {
+ text = defaultText;
+ }
+ return text;
+ }
+
+ /**
+ * @generated
+ */
+ public void setLabelText(String text) {
+ setLabelTextHelper(getFigure(), text);
+ refreshSelectionFeedback();
+ }
+
+ /**
+ * @generated
+ */
+ public String getEditText() {
+ if (getParserElement() == null || getParser() == null) {
+ return ""; //$NON-NLS-1$
+ }
+ return getParser().getEditString(
+ new EObjectAdapter(getParserElement()),
+ getParserOptions().intValue());
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean isEditable() {
+ return getParser() != null;
+ }
+
+ /**
+ * @generated
+ */
+ public ICellEditorValidator getEditTextValidator() {
+ return new ICellEditorValidator() {
+
+ public String isValid(final Object value) {
+ if (value instanceof String) {
+ final EObject element = getParserElement();
+ final IParser parser = getParser();
+ try {
+ IParserEditStatus valid = (IParserEditStatus) getEditingDomain()
+ .runExclusive(
+ new RunnableWithResult.Impl<IParserEditStatus>() {
+
+ public void run() {
+ setResult(parser
+ .isValidEditString(
+ new EObjectAdapter(
+ element),
+ (String) value));
+ }
+ });
+ return valid.getCode() == ParserEditStatus.EDITABLE ? null
+ : valid.getMessage();
+ } catch (InterruptedException ie) {
+ ie.printStackTrace();
+ }
+ }
+
+ // shouldn't get here
+ return null;
+ }
+ };
+ }
+
+ /**
+ * @generated
+ */
+ public IContentAssistProcessor getCompletionProcessor() {
+ if (getParserElement() == null || getParser() == null) {
+ return null;
+ }
+ return getParser().getCompletionProcessor(
+ new EObjectAdapter(getParserElement()));
+ }
+
+ /**
+ * @generated
+ */
+ public ParserOptions getParserOptions() {
+ return ParserOptions.NONE;
+ }
+
+ /**
+ * @generated
+ */
+ public IParser getParser() {
+ if (parser == null) {
+ parser = IntermediateModelParserProvider
+ .getParser(
+ IntermediateModelElementTypes.Step_3008,
+ getParserElement(),
+ IntermediateModelVisualIDRegistry
+ .getType(org.eclipse.soa.mangrove.diagram.edit.parts.StepNameEditPart.VISUAL_ID));
+ }
+ return parser;
+ }
+
+ /**
+ * @generated
+ */
+ protected DirectEditManager getManager() {
+ if (manager == null) {
+ setManager(new TextDirectEditManager2(this, null,
+ IntermediateModelEditPartFactory
+ .getTextCellEditorLocator(this)));
+ }
+ return manager;
+ }
+
+ /**
+ * @generated
+ */
+ protected void setManager(DirectEditManager manager) {
+ this.manager = manager;
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEdit() {
+ getManager().show();
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEdit(Point eventLocation) {
+ if (getManager().getClass() == TextDirectEditManager2.class) {
+ ((TextDirectEditManager2) getManager()).show(eventLocation
+ .getSWTPoint());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private void performDirectEdit(char initialCharacter) {
+ if (getManager() instanceof TextDirectEditManager) {
+ ((TextDirectEditManager) getManager()).show(initialCharacter);
+ } else //
+ if (getManager() instanceof TextDirectEditManager2) {
+ ((TextDirectEditManager2) getManager()).show(initialCharacter);
+ } else //
+ {
+ performDirectEdit();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void performDirectEditRequest(Request request) {
+ final Request theRequest = request;
+ try {
+ getEditingDomain().runExclusive(new Runnable() {
+
+ public void run() {
+ if (isActive() && isEditable()) {
+ if (theRequest
+ .getExtendedData()
+ .get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR) instanceof Character) {
+ Character initialChar = (Character) theRequest
+ .getExtendedData()
+ .get(RequestConstants.REQ_DIRECTEDIT_EXTENDEDDATA_INITIAL_CHAR);
+ performDirectEdit(initialChar.charValue());
+ } else if ((theRequest instanceof DirectEditRequest)
+ && (getEditText().equals(getLabelText()))) {
+ DirectEditRequest editRequest = (DirectEditRequest) theRequest;
+ performDirectEdit(editRequest.getLocation());
+ } else {
+ performDirectEdit();
+ }
+ }
+ }
+ });
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshVisuals() {
+ super.refreshVisuals();
+ refreshLabel();
+ refreshFont();
+ refreshFontColor();
+ refreshUnderline();
+ refreshStrikeThrough();
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshLabel() {
+ setLabelTextHelper(getFigure(), getLabelText());
+ setLabelIconHelper(getFigure(), getLabelIcon());
+ refreshSelectionFeedback();
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshUnderline() {
+ FontStyle style = (FontStyle) getFontStyleOwnerView().getStyle(
+ NotationPackage.eINSTANCE.getFontStyle());
+ if (style != null && getFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getFigure()).setTextUnderline(style.isUnderline());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshStrikeThrough() {
+ FontStyle style = (FontStyle) getFontStyleOwnerView().getStyle(
+ NotationPackage.eINSTANCE.getFontStyle());
+ if (style != null && getFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getFigure()).setTextStrikeThrough(style
+ .isStrikeThrough());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshFont() {
+ FontStyle style = (FontStyle) getFontStyleOwnerView().getStyle(
+ NotationPackage.eINSTANCE.getFontStyle());
+ if (style != null) {
+ FontData fontData = new FontData(style.getFontName(),
+ style.getFontHeight(), (style.isBold() ? SWT.BOLD
+ : SWT.NORMAL)
+ | (style.isItalic() ? SWT.ITALIC : SWT.NORMAL));
+ setFont(fontData);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private void refreshSelectionFeedback() {
+ requestEditPolicyFeedbackRefresh(EditPolicy.PRIMARY_DRAG_ROLE);
+ requestEditPolicyFeedbackRefresh(EditPolicy.SELECTION_FEEDBACK_ROLE);
+ }
+
+ /**
+ * @generated
+ */
+ private void requestEditPolicyFeedbackRefresh(String editPolicyKey) {
+ Object editPolicy = getEditPolicy(editPolicyKey);
+ if (editPolicy instanceof IRefreshableFeedbackEditPolicy) {
+ ((IRefreshableFeedbackEditPolicy) editPolicy).refreshFeedback();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void setFontColor(Color color) {
+ getFigure().setForegroundColor(color);
+ }
+
+ /**
+ * @generated
+ */
+ protected void addSemanticListeners() {
+ if (getParser() instanceof ISemanticParser) {
+ EObject element = resolveSemanticElement();
+ parserElements = ((ISemanticParser) getParser())
+ .getSemanticElementsBeingParsed(element);
+ for (int i = 0; i < parserElements.size(); i++) {
+ addListenerFilter(
+ "SemanticModel" + i, this, (EObject) parserElements.get(i)); //$NON-NLS-1$
+ }
+ } else {
+ super.addSemanticListeners();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeSemanticListeners() {
+ if (parserElements != null) {
+ for (int i = 0; i < parserElements.size(); i++) {
+ removeListenerFilter("SemanticModel" + i); //$NON-NLS-1$
+ }
+ } else {
+ super.removeSemanticListeners();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected AccessibleEditPart getAccessibleEditPart() {
+ if (accessibleEP == null) {
+ accessibleEP = new AccessibleGraphicalEditPart() {
+
+ public void getName(AccessibleEvent e) {
+ e.result = getLabelTextHelper(getFigure());
+ }
+ };
+ }
+ return accessibleEP;
+ }
+
+ /**
+ * @generated
+ */
+ private View getFontStyleOwnerView() {
+ return getPrimaryView();
+ }
+
+ /**
+ * @generated
+ */
+ private ILabelDelegate getLabelDelegate() {
+ if (labelDelegate == null) {
+ IFigure label = getFigure();
+ if (label instanceof WrappingLabel) {
+ labelDelegate = new WrappingLabelDelegate((WrappingLabel) label);
+ } else {
+ labelDelegate = new SimpleLabelDelegate((Label) label);
+ }
+ }
+ return labelDelegate;
+ }
+
+ /**
+ * @generated
+ */
+ @Override
+ public Object getAdapter(Class key) {
+ if (ILabelDelegate.class.equals(key)) {
+ return getLabelDelegate();
+ }
+ return super.getAdapter(key);
+ }
+
+ /**
+ * @generated
+ */
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ addListenerFilter("PrimaryView", this, getPrimaryView()); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("PrimaryView"); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ protected void handleNotificationEvent(Notification event) {
+ Object feature = event.getFeature();
+ if (NotationPackage.eINSTANCE.getFontStyle_FontColor().equals(feature)) {
+ Integer c = (Integer) event.getNewValue();
+ setFontColor(DiagramColorRegistry.getInstance().getColor(c));
+ } else if (NotationPackage.eINSTANCE.getFontStyle_Underline().equals(
+ feature)) {
+ refreshUnderline();
+ } else if (NotationPackage.eINSTANCE.getFontStyle_StrikeThrough()
+ .equals(feature)) {
+ refreshStrikeThrough();
+ } else if (NotationPackage.eINSTANCE.getFontStyle_FontHeight().equals(
+ feature)
+ || NotationPackage.eINSTANCE.getFontStyle_FontName().equals(
+ feature)
+ || NotationPackage.eINSTANCE.getFontStyle_Bold()
+ .equals(feature)
+ || NotationPackage.eINSTANCE.getFontStyle_Italic().equals(
+ feature)) {
+ refreshFont();
+ } else {
+ if (getParser() != null
+ && getParser().isAffectingEvent(event,
+ getParserOptions().intValue())) {
+ refreshLabel();
+ }
+ if (getParser() instanceof ISemanticParser) {
+ ISemanticParser modelParser = (ISemanticParser) getParser();
+ if (modelParser.areSemanticElementsAffected(null, event)) {
+ removeSemanticListeners();
+ if (resolveSemanticElement() != null) {
+ addSemanticListeners();
+ }
+ refreshLabel();
+ }
+ }
+ }
+ super.handleNotificationEvent(event);
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createFigure() {
+ // Parent should assign one using setLabel() method
+ return null;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/StepServiceModelEditPart.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/StepServiceModelEditPart.java
new file mode 100755
index 0000000..207812f
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/StepServiceModelEditPart.java
@@ -0,0 +1,88 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.Connection;
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.PolylineDecoration;
+import org.eclipse.draw2d.RotatableDecoration;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ITreeBranchEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.PolylineConnectionEx;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.diagram.edit.policies.StepServiceModelItemSemanticEditPolicy;
+
+/**
+ * @generated
+ */
+public class StepServiceModelEditPart extends ConnectionNodeEditPart implements
+ ITreeBranchEditPart {
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 4010;
+
+ /**
+ * @generated
+ */
+ public StepServiceModelEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
+ new StepServiceModelItemSemanticEditPolicy());
+ }
+
+ /**
+ * Creates figure for this edit part.
+ *
+ * Body of this method does not depend on settings in generation model
+ * so you may safely remove <i>generated</i> tag and modify it.
+ *
+ * @generated
+ */
+
+ protected Connection createConnectionFigure() {
+ return new StepServiceModelFigure();
+ }
+
+ /**
+ * @generated
+ */
+ public StepServiceModelFigure getPrimaryShape() {
+ return (StepServiceModelFigure) getFigure();
+ }
+
+ /**
+ * @generated
+ */
+ public class StepServiceModelFigure extends PolylineConnectionEx {
+
+ /**
+ * @generated
+ */
+ public StepServiceModelFigure() {
+ this.setLineWidth(2);
+ this.setLineStyle(Graphics.LINE_DASH);
+ this.setForegroundColor(ColorConstants.black);
+
+ setTargetDecoration(createTargetDecoration());
+ }
+
+ /**
+ * @generated
+ */
+ private RotatableDecoration createTargetDecoration() {
+ PolylineDecoration df = new PolylineDecoration();
+ return df;
+ }
+
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/StpIntermediateModelEditPart.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/StpIntermediateModelEditPart.java
new file mode 100755
index 0000000..51b9fc2
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/StpIntermediateModelEditPart.java
@@ -0,0 +1,87 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.editpolicies.NonResizableEditPolicy;
+import org.eclipse.gef.handles.MoveHandle;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.edit.policies.reparent.CreationEditPolicyWithCustomReparent;
+import org.eclipse.soa.mangrove.diagram.edit.policies.StpIntermediateModelCanonicalEditPolicy;
+import org.eclipse.soa.mangrove.diagram.edit.policies.StpIntermediateModelItemSemanticEditPolicy;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+
+/**
+ * @generated
+ */
+public class StpIntermediateModelEditPart extends DiagramEditPart {
+
+ /**
+ * @generated
+ */
+ public final static String MODEL_ID = "IntermediateModel"; //$NON-NLS-1$
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 1000;
+
+ /**
+ * @generated
+ */
+ public StpIntermediateModelEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
+ new StpIntermediateModelItemSemanticEditPolicy());
+ installEditPolicy(EditPolicyRoles.CANONICAL_ROLE,
+ new StpIntermediateModelCanonicalEditPolicy());
+ installEditPolicy(EditPolicyRoles.CREATION_ROLE,
+ new CreationEditPolicyWithCustomReparent(
+ IntermediateModelVisualIDRegistry.TYPED_INSTANCE));
+ // removeEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.POPUPBAR_ROLE);
+ }
+
+ /**
+ * @generated
+ */
+ /*package-local*/static class NodeLabelDragPolicy extends
+ NonResizableEditPolicy {
+
+ /**
+ * @generated
+ */
+ @SuppressWarnings("rawtypes")
+ protected List createSelectionHandles() {
+ MoveHandle h = new MoveHandle((GraphicalEditPart) getHost());
+ h.setBorder(null);
+ return Collections.singletonList(h);
+ }
+
+ /**
+ * @generated
+ */
+ public Command getCommand(Request request) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean understandsRequest(Request request) {
+ return false;
+ }
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/TransitionEditPart.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/TransitionEditPart.java
new file mode 100755
index 0000000..e7d24e6
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/parts/TransitionEditPart.java
@@ -0,0 +1,85 @@
+package org.eclipse.soa.mangrove.diagram.edit.parts;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.Connection;
+import org.eclipse.draw2d.PolylineDecoration;
+import org.eclipse.draw2d.RotatableDecoration;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ITreeBranchEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.PolylineConnectionEx;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.diagram.edit.policies.TransitionItemSemanticEditPolicy;
+
+/**
+ * @generated
+ */
+public class TransitionEditPart extends ConnectionNodeEditPart implements
+ ITreeBranchEditPart {
+
+ /**
+ * @generated
+ */
+ public static final int VISUAL_ID = 4009;
+
+ /**
+ * @generated
+ */
+ public TransitionEditPart(View view) {
+ super(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void createDefaultEditPolicies() {
+ super.createDefaultEditPolicies();
+ installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE,
+ new TransitionItemSemanticEditPolicy());
+ }
+
+ /**
+ * Creates figure for this edit part.
+ *
+ * Body of this method does not depend on settings in generation model
+ * so you may safely remove <i>generated</i> tag and modify it.
+ *
+ * @generated
+ */
+
+ protected Connection createConnectionFigure() {
+ return new TransitionFigure();
+ }
+
+ /**
+ * @generated
+ */
+ public TransitionFigure getPrimaryShape() {
+ return (TransitionFigure) getFigure();
+ }
+
+ /**
+ * @generated
+ */
+ public class TransitionFigure extends PolylineConnectionEx {
+
+ /**
+ * @generated
+ */
+ public TransitionFigure() {
+ this.setForegroundColor(ColorConstants.black);
+
+ setTargetDecoration(createTargetDecoration());
+ }
+
+ /**
+ * @generated
+ */
+ private RotatableDecoration createTargetDecoration() {
+ PolylineDecoration df = new PolylineDecoration();
+ return df;
+ }
+
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/IntermediateModelBaseItemSemanticEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/IntermediateModelBaseItemSemanticEditPolicy.java
new file mode 100755
index 0000000..66fdd46
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/IntermediateModelBaseItemSemanticEditPolicy.java
@@ -0,0 +1,386 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import java.util.Iterator;
+
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.commands.UnexecutableCommand;
+import org.eclipse.gef.requests.ReconnectRequest;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.common.core.command.ICompositeCommand;
+import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand;
+import org.eclipse.gmf.runtime.diagram.ui.commands.CommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.SemanticEditPolicy;
+import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ConfigureRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DuplicateElementsRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.GetEditContextRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.IEditCommandRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.MoveRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRelationshipRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.edit.helpers.GeneratedEditHelperBase;
+import org.eclipse.soa.mangrove.Process;
+import org.eclipse.soa.mangrove.Service;
+import org.eclipse.soa.mangrove.Step;
+import org.eclipse.soa.mangrove.Transition;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+
+/**
+ * @generated
+ */
+public class IntermediateModelBaseItemSemanticEditPolicy extends
+ SemanticEditPolicy {
+
+ /**
+ * Extended request data key to hold editpart visual id.
+ * @generated
+ */
+ public static final String VISUAL_ID_KEY = "visual_id"; //$NON-NLS-1$
+
+ /**
+ * @generated
+ */
+ private final IElementType myElementType;
+
+ /**
+ * @generated
+ */
+ protected IntermediateModelBaseItemSemanticEditPolicy(
+ IElementType elementType) {
+ myElementType = elementType;
+ }
+
+ /**
+ * Extended request data key to hold editpart visual id.
+ * Add visual id of edited editpart to extended data of the request
+ * so command switch can decide what kind of diagram element is being edited.
+ * It is done in those cases when it's not possible to deduce diagram
+ * element kind from domain element.
+ *
+ * @generated
+ */
+ public Command getCommand(Request request) {
+ if (request instanceof ReconnectRequest) {
+ Object view = ((ReconnectRequest) request).getConnectionEditPart()
+ .getModel();
+ if (view instanceof View) {
+ Integer id = new Integer(
+ IntermediateModelVisualIDRegistry
+ .getVisualID((View) view));
+ request.getExtendedData().put(VISUAL_ID_KEY, id);
+ }
+ }
+ return super.getCommand(request);
+ }
+
+ /**
+ * Returns visual id from request parameters.
+ * @generated
+ */
+ protected int getVisualID(IEditCommandRequest request) {
+ Object id = request.getParameter(VISUAL_ID_KEY);
+ return id instanceof Integer ? ((Integer) id).intValue() : -1;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getSemanticCommand(IEditCommandRequest request) {
+ IEditCommandRequest completedRequest = completeRequest(request);
+ Command semanticCommand = getSemanticCommandSwitch(completedRequest);
+ semanticCommand = getEditHelperCommand(completedRequest,
+ semanticCommand);
+ if (completedRequest instanceof DestroyRequest) {
+ DestroyRequest destroyRequest = (DestroyRequest) completedRequest;
+ return shouldProceed(destroyRequest) ? addDeleteViewCommand(
+ semanticCommand, destroyRequest) : null;
+ }
+ return semanticCommand;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command addDeleteViewCommand(Command mainCommand,
+ DestroyRequest completedRequest) {
+ Command deleteViewCommand = getGEFWrapper(new DeleteCommand(
+ getEditingDomain(), (View) getHost().getModel()));
+ return mainCommand == null ? deleteViewCommand : mainCommand
+ .chain(deleteViewCommand);
+ }
+
+ /**
+ * @generated
+ */
+ private Command getEditHelperCommand(IEditCommandRequest request,
+ Command editPolicyCommand) {
+ if (editPolicyCommand != null) {
+ ICommand command = editPolicyCommand instanceof ICommandProxy ? ((ICommandProxy) editPolicyCommand)
+ .getICommand() : new CommandProxy(editPolicyCommand);
+ request.setParameter(GeneratedEditHelperBase.EDIT_POLICY_COMMAND,
+ command);
+ }
+ IElementType requestContextElementType = getContextElementType(request);
+ request.setParameter(GeneratedEditHelperBase.CONTEXT_ELEMENT_TYPE,
+ requestContextElementType);
+ ICommand command = requestContextElementType.getEditCommand(request);
+ request.setParameter(GeneratedEditHelperBase.EDIT_POLICY_COMMAND, null);
+ request.setParameter(GeneratedEditHelperBase.CONTEXT_ELEMENT_TYPE, null);
+ if (command != null) {
+ if (!(command instanceof CompositeTransactionalCommand)) {
+ command = new CompositeTransactionalCommand(getEditingDomain(),
+ command.getLabel()).compose(command);
+ }
+ return new ICommandProxy(command);
+ }
+ return editPolicyCommand;
+ }
+
+ /**
+ * @generated
+ */
+ private IElementType getContextElementType(IEditCommandRequest request) {
+ IElementType requestContextElementType = IntermediateModelElementTypes
+ .getElementType(getVisualID(request));
+ return requestContextElementType != null ? requestContextElementType
+ : myElementType;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getSemanticCommandSwitch(IEditCommandRequest req) {
+ if (req instanceof CreateRelationshipRequest) {
+ return getCreateRelationshipCommand((CreateRelationshipRequest) req);
+ } else if (req instanceof CreateElementRequest) {
+ return getCreateCommand((CreateElementRequest) req);
+ } else if (req instanceof ConfigureRequest) {
+ return getConfigureCommand((ConfigureRequest) req);
+ } else if (req instanceof DestroyElementRequest) {
+ return getDestroyElementCommand((DestroyElementRequest) req);
+ } else if (req instanceof DestroyReferenceRequest) {
+ return getDestroyReferenceCommand((DestroyReferenceRequest) req);
+ } else if (req instanceof DuplicateElementsRequest) {
+ return getDuplicateCommand((DuplicateElementsRequest) req);
+ } else if (req instanceof GetEditContextRequest) {
+ return getEditContextCommand((GetEditContextRequest) req);
+ } else if (req instanceof MoveRequest) {
+ return getMoveCommand((MoveRequest) req);
+ } else if (req instanceof ReorientReferenceRelationshipRequest) {
+ return getReorientReferenceRelationshipCommand((ReorientReferenceRelationshipRequest) req);
+ } else if (req instanceof ReorientRelationshipRequest) {
+ return getReorientRelationshipCommand((ReorientRelationshipRequest) req);
+ } else if (req instanceof SetRequest) {
+ return getSetCommand((SetRequest) req);
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getConfigureCommand(ConfigureRequest req) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getCreateRelationshipCommand(CreateRelationshipRequest req) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getCreateCommand(CreateElementRequest req) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getSetCommand(SetRequest req) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getEditContextCommand(GetEditContextRequest req) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getDestroyElementCommand(DestroyElementRequest req) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getDestroyReferenceCommand(DestroyReferenceRequest req) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getDuplicateCommand(DuplicateElementsRequest req) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getMoveCommand(MoveRequest req) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getReorientReferenceRelationshipCommand(
+ ReorientReferenceRelationshipRequest req) {
+ return UnexecutableCommand.INSTANCE;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getReorientRelationshipCommand(
+ ReorientRelationshipRequest req) {
+ return UnexecutableCommand.INSTANCE;
+ }
+
+ /**
+ * @generated
+ */
+ protected final Command getGEFWrapper(ICommand cmd) {
+ return new ICommandProxy(cmd);
+ }
+
+ /**
+ * Returns editing domain from the host edit part.
+ * @generated
+ */
+ protected TransactionalEditingDomain getEditingDomain() {
+ return ((IGraphicalEditPart) getHost()).getEditingDomain();
+ }
+
+ /**
+ * Clean all shortcuts to the host element from the same diagram
+ * @generated
+ */
+ protected void addDestroyShortcutsCommand(ICompositeCommand cmd, View view) {
+ assert view.getEAnnotation("Shortcut") == null; //$NON-NLS-1$
+ for (Iterator it = view.getDiagram().getChildren().iterator(); it
+ .hasNext();) {
+ View nextView = (View) it.next();
+ if (nextView.getEAnnotation("Shortcut") == null || !nextView.isSetElement() || nextView.getElement() != view.getElement()) { //$NON-NLS-1$
+ continue;
+ }
+ cmd.add(new DeleteCommand(getEditingDomain(), nextView));
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public static LinkConstraints getLinkConstraints() {
+ LinkConstraints cached = IntermediateModelDiagramEditorPlugin
+ .getInstance().getLinkConstraints();
+ if (cached == null) {
+ IntermediateModelDiagramEditorPlugin.getInstance()
+ .setLinkConstraints(cached = new LinkConstraints());
+ }
+ return cached;
+ }
+
+ /**
+ * @generated
+ */
+ public static class LinkConstraints {
+
+ /**
+ * @generated
+ */
+ LinkConstraints() {
+ // use static method #getLinkConstraints() to access instance
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canCreateTransition_4009(Process container, Step source,
+ Step target) {
+ return canExistTransition_4009(container, null, source, target);
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canCreateStepServiceModel_4010(Step source,
+ Service target) {
+ if (source != null) {
+ if (source.getServiceModel() != null) {
+ return false;
+ }
+ }
+
+ return canExistStepServiceModel_4010(source, target);
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canCreateServiceNeeds_4011(Service source, Service target) {
+ if (source != null) {
+ if (source.getNeeds().contains(target)) {
+ return false;
+ }
+ }
+
+ return canExistServiceNeeds_4011(source, target);
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExistTransition_4009(Process container,
+ Transition linkInstance, Step source, Step target) {
+ return true;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExistStepServiceModel_4010(Step source, Service target) {
+ return true;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean canExistServiceNeeds_4011(Service source, Service target) {
+ return true;
+ }
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/IntermediateModelTextNonResizableEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/IntermediateModelTextNonResizableEditPolicy.java
new file mode 100755
index 0000000..db7a76c
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/IntermediateModelTextNonResizableEditPolicy.java
@@ -0,0 +1,228 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.FigureListener;
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.RectangleFigure;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.gef.handles.MoveHandle;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.NonResizableEditPolicyEx;
+import org.eclipse.gmf.runtime.diagram.ui.tools.DragEditPartsTrackerEx;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.tooling.runtime.edit.policies.labels.IRefreshableFeedbackEditPolicy;
+
+/**
+ * @generated
+ */
+public class IntermediateModelTextNonResizableEditPolicy extends
+ NonResizableEditPolicyEx implements IRefreshableFeedbackEditPolicy {
+
+ /**
+ * @generated
+ */
+ private IFigure selectionFeedbackFigure;
+
+ /**
+ * @generated
+ */
+ private IFigure focusFeedbackFigure;
+
+ /**
+ * @generated
+ */
+ private FigureListener hostPositionListener;
+
+ /**
+ * @generated
+ */
+ protected void showPrimarySelection() {
+ if (getHostFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getHostFigure()).setSelected(true);
+ ((WrappingLabel) getHostFigure()).setFocus(true);
+ } else {
+ showSelection();
+ showFocus();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void showSelection() {
+ if (getHostFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getHostFigure()).setSelected(true);
+ ((WrappingLabel) getHostFigure()).setFocus(false);
+ } else {
+ hideSelection();
+ addFeedback(selectionFeedbackFigure = createSelectionFeedbackFigure());
+ getHostFigure().addFigureListener(getHostPositionListener());
+ refreshSelectionFeedback();
+ hideFocus();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void hideSelection() {
+ if (getHostFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getHostFigure()).setSelected(false);
+ ((WrappingLabel) getHostFigure()).setFocus(false);
+ } else {
+ if (selectionFeedbackFigure != null) {
+ removeFeedback(selectionFeedbackFigure);
+ getHostFigure().removeFigureListener(getHostPositionListener());
+ selectionFeedbackFigure = null;
+ }
+ hideFocus();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void showFocus() {
+ if (getHostFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getHostFigure()).setFocus(true);
+ } else {
+ hideFocus();
+ addFeedback(focusFeedbackFigure = createFocusFeedbackFigure());
+ refreshFocusFeedback();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void hideFocus() {
+ if (getHostFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getHostFigure()).setFocus(false);
+ } else {
+ if (focusFeedbackFigure != null) {
+ removeFeedback(focusFeedbackFigure);
+ focusFeedbackFigure = null;
+ }
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected Rectangle getFeedbackBounds() {
+ Rectangle bounds;
+ if (getHostFigure() instanceof Label) {
+ bounds = ((Label) getHostFigure()).getTextBounds();
+ bounds.intersect(getHostFigure().getBounds());
+ } else {
+ bounds = getHostFigure().getBounds().getCopy();
+ }
+ getHostFigure().getParent().translateToAbsolute(bounds);
+ getFeedbackLayer().translateToRelative(bounds);
+ return bounds;
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createSelectionFeedbackFigure() {
+ if (getHostFigure() instanceof Label) {
+ Label feedbackFigure = new Label();
+ feedbackFigure.setOpaque(true);
+ feedbackFigure
+ .setBackgroundColor(ColorConstants.menuBackgroundSelected);
+ feedbackFigure
+ .setForegroundColor(ColorConstants.menuForegroundSelected);
+ return feedbackFigure;
+ } else {
+ RectangleFigure feedbackFigure = new RectangleFigure();
+ feedbackFigure.setFill(false);
+ return feedbackFigure;
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createFocusFeedbackFigure() {
+ return new Figure() {
+
+ protected void paintFigure(Graphics graphics) {
+ graphics.drawFocus(getBounds().getResized(-1, -1));
+ }
+ };
+ }
+
+ /**
+ * @generated
+ */
+ protected void updateLabel(Label target) {
+ Label source = (Label) getHostFigure();
+ target.setText(source.getText());
+ target.setTextAlignment(source.getTextAlignment());
+ target.setFont(source.getFont());
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshSelectionFeedback() {
+ if (selectionFeedbackFigure != null) {
+ if (selectionFeedbackFigure instanceof Label) {
+ updateLabel((Label) selectionFeedbackFigure);
+ selectionFeedbackFigure.setBounds(getFeedbackBounds());
+ } else {
+ selectionFeedbackFigure.setBounds(getFeedbackBounds().expand(5,
+ 5));
+ }
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshFocusFeedback() {
+ if (focusFeedbackFigure != null) {
+ focusFeedbackFigure.setBounds(getFeedbackBounds());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public void refreshFeedback() {
+ refreshSelectionFeedback();
+ refreshFocusFeedback();
+ }
+
+ /**
+ * @generated
+ */
+ private FigureListener getHostPositionListener() {
+ if (hostPositionListener == null) {
+ hostPositionListener = new FigureListener() {
+ public void figureMoved(IFigure source) {
+ refreshFeedback();
+ }
+ };
+ }
+ return hostPositionListener;
+ }
+
+ /**
+ * @generated
+ */
+ protected List createSelectionHandles() {
+ MoveHandle moveHandle = new MoveHandle((GraphicalEditPart) getHost());
+ moveHandle.setBorder(null);
+ moveHandle.setDragTracker(new DragEditPartsTrackerEx(getHost()));
+ return Collections.singletonList(moveHandle);
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/IntermediateModelTextSelectionEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/IntermediateModelTextSelectionEditPolicy.java
new file mode 100755
index 0000000..4d51ad3
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/IntermediateModelTextSelectionEditPolicy.java
@@ -0,0 +1,212 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.FigureListener;
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.RectangleFigure;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gef.editpolicies.SelectionEditPolicy;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.WrappingLabel;
+import org.eclipse.gmf.tooling.runtime.edit.policies.labels.IRefreshableFeedbackEditPolicy;
+
+/**
+ * @generated
+ */
+public class IntermediateModelTextSelectionEditPolicy extends
+ SelectionEditPolicy implements IRefreshableFeedbackEditPolicy {
+
+ /**
+ * @generated
+ */
+ private IFigure selectionFeedbackFigure;
+
+ /**
+ * @generated
+ */
+ private IFigure focusFeedbackFigure;
+
+ /**
+ * @generated
+ */
+ private FigureListener hostPositionListener;
+
+ /**
+ * @generated
+ */
+ protected void showPrimarySelection() {
+ if (getHostFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getHostFigure()).setSelected(true);
+ ((WrappingLabel) getHostFigure()).setFocus(true);
+ } else {
+ showSelection();
+ showFocus();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void showSelection() {
+ if (getHostFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getHostFigure()).setSelected(true);
+ ((WrappingLabel) getHostFigure()).setFocus(false);
+ } else {
+ hideSelection();
+ addFeedback(selectionFeedbackFigure = createSelectionFeedbackFigure());
+ getHostFigure().addFigureListener(getHostPositionListener());
+ refreshSelectionFeedback();
+ hideFocus();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void hideSelection() {
+ if (getHostFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getHostFigure()).setSelected(false);
+ ((WrappingLabel) getHostFigure()).setFocus(false);
+ } else {
+ if (selectionFeedbackFigure != null) {
+ removeFeedback(selectionFeedbackFigure);
+ getHostFigure().removeFigureListener(getHostPositionListener());
+ selectionFeedbackFigure = null;
+ }
+ hideFocus();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void showFocus() {
+ if (getHostFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getHostFigure()).setFocus(true);
+ } else {
+ hideFocus();
+ addFeedback(focusFeedbackFigure = createFocusFeedbackFigure());
+ refreshFocusFeedback();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void hideFocus() {
+ if (getHostFigure() instanceof WrappingLabel) {
+ ((WrappingLabel) getHostFigure()).setFocus(false);
+ } else {
+ if (focusFeedbackFigure != null) {
+ removeFeedback(focusFeedbackFigure);
+ focusFeedbackFigure = null;
+ }
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected Rectangle getFeedbackBounds() {
+ Rectangle bounds;
+ if (getHostFigure() instanceof Label) {
+ bounds = ((Label) getHostFigure()).getTextBounds();
+ bounds.intersect(getHostFigure().getBounds());
+ } else {
+ bounds = getHostFigure().getBounds().getCopy();
+ }
+ getHostFigure().getParent().translateToAbsolute(bounds);
+ getFeedbackLayer().translateToRelative(bounds);
+ return bounds;
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createSelectionFeedbackFigure() {
+ if (getHostFigure() instanceof Label) {
+ Label feedbackFigure = new Label();
+ feedbackFigure.setOpaque(true);
+ feedbackFigure
+ .setBackgroundColor(ColorConstants.menuBackgroundSelected);
+ feedbackFigure
+ .setForegroundColor(ColorConstants.menuForegroundSelected);
+ return feedbackFigure;
+ } else {
+ RectangleFigure feedbackFigure = new RectangleFigure();
+ feedbackFigure.setFill(false);
+ return feedbackFigure;
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected IFigure createFocusFeedbackFigure() {
+ return new Figure() {
+
+ protected void paintFigure(Graphics graphics) {
+ graphics.drawFocus(getBounds().getResized(-1, -1));
+ }
+ };
+ }
+
+ /**
+ * @generated
+ */
+ protected void updateLabel(Label target) {
+ Label source = (Label) getHostFigure();
+ target.setText(source.getText());
+ target.setTextAlignment(source.getTextAlignment());
+ target.setFont(source.getFont());
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshSelectionFeedback() {
+ if (selectionFeedbackFigure != null) {
+ if (selectionFeedbackFigure instanceof Label) {
+ updateLabel((Label) selectionFeedbackFigure);
+ selectionFeedbackFigure.setBounds(getFeedbackBounds());
+ } else {
+ selectionFeedbackFigure.setBounds(getFeedbackBounds().expand(5,
+ 5));
+ }
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshFocusFeedback() {
+ if (focusFeedbackFigure != null) {
+ focusFeedbackFigure.setBounds(getFeedbackBounds());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public void refreshFeedback() {
+ refreshSelectionFeedback();
+ refreshFocusFeedback();
+ }
+
+ /**
+ * @generated
+ */
+ private FigureListener getHostPositionListener() {
+ if (hostPositionListener == null) {
+ hostPositionListener = new FigureListener() {
+ public void figureMoved(IFigure source) {
+ refreshFeedback();
+ }
+ };
+ }
+ return hostPositionListener;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ProcessCanonicalEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ProcessCanonicalEditPolicy.java
new file mode 100755
index 0000000..db6ee35
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ProcessCanonicalEditPolicy.java
@@ -0,0 +1,172 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
+import org.eclipse.gmf.runtime.diagram.ui.commands.DeferredLayoutCommand;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.commands.SetViewMutabilityCommand;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.ImPackage;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramUpdater;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelNodeDescriptor;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+
+/**
+ * @generated
+ */
+public class ProcessCanonicalEditPolicy extends CanonicalEditPolicy {
+
+ /**
+ * @generated
+ */
+ protected void refreshOnActivate() {
+ // Need to activate editpart children before invoking the canonical refresh for EditParts to add event listeners
+ List<?> c = getHost().getChildren();
+ for (int i = 0; i < c.size(); i++) {
+ ((EditPart) c.get(i)).activate();
+ }
+ super.refreshOnActivate();
+ }
+
+ /**
+ * @generated
+ */
+ protected EStructuralFeature getFeatureToSynchronize() {
+ return ImPackage.eINSTANCE.getProcess_Steps();
+ }
+
+ /**
+ * @generated
+ */
+ @SuppressWarnings("rawtypes")
+ protected List getSemanticChildrenList() {
+ View viewObject = (View) getHost().getModel();
+ LinkedList<EObject> result = new LinkedList<EObject>();
+ List<IntermediateModelNodeDescriptor> childDescriptors = IntermediateModelDiagramUpdater
+ .getProcess_3007SemanticChildren(viewObject);
+ for (IntermediateModelNodeDescriptor d : childDescriptors) {
+ result.add(d.getModelElement());
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean isOrphaned(Collection<EObject> semanticChildren,
+ final View view) {
+ return isMyDiagramElement(view)
+ && !semanticChildren.contains(view.getElement());
+ }
+
+ /**
+ * @generated
+ */
+ private boolean isMyDiagramElement(View view) {
+ return StepEditPart.VISUAL_ID == IntermediateModelVisualIDRegistry
+ .getVisualID(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshSemantic() {
+ if (resolveSemanticElement() == null) {
+ return;
+ }
+ LinkedList<IAdaptable> createdViews = new LinkedList<IAdaptable>();
+ List<IntermediateModelNodeDescriptor> childDescriptors = IntermediateModelDiagramUpdater
+ .getProcess_3007SemanticChildren((View) getHost().getModel());
+ LinkedList<View> orphaned = new LinkedList<View>();
+ // we care to check only views we recognize as ours
+ LinkedList<View> knownViewChildren = new LinkedList<View>();
+ for (View v : getViewChildren()) {
+ if (isMyDiagramElement(v)) {
+ knownViewChildren.add(v);
+ }
+ }
+ // alternative to #cleanCanonicalSemanticChildren(getViewChildren(), semanticChildren)
+ //
+ // iteration happens over list of desired semantic elements, trying to find best matching View, while original CEP
+ // iterates views, potentially losing view (size/bounds) information - i.e. if there are few views to reference same EObject, only last one
+ // to answer isOrphaned == true will be used for the domain element representation, see #cleanCanonicalSemanticChildren()
+ for (Iterator<IntermediateModelNodeDescriptor> descriptorsIterator = childDescriptors
+ .iterator(); descriptorsIterator.hasNext();) {
+ IntermediateModelNodeDescriptor next = descriptorsIterator.next();
+ String hint = IntermediateModelVisualIDRegistry.getType(next
+ .getVisualID());
+ LinkedList<View> perfectMatch = new LinkedList<View>(); // both semanticElement and hint match that of NodeDescriptor
+ for (View childView : getViewChildren()) {
+ EObject semanticElement = childView.getElement();
+ if (next.getModelElement().equals(semanticElement)) {
+ if (hint.equals(childView.getType())) {
+ perfectMatch.add(childView);
+ // actually, can stop iteration over view children here, but
+ // may want to use not the first view but last one as a 'real' match (the way original CEP does
+ // with its trick with viewToSemanticMap inside #cleanCanonicalSemanticChildren
+ }
+ }
+ }
+ if (perfectMatch.size() > 0) {
+ descriptorsIterator.remove(); // precise match found no need to create anything for the NodeDescriptor
+ // use only one view (first or last?), keep rest as orphaned for further consideration
+ knownViewChildren.remove(perfectMatch.getFirst());
+ }
+ }
+ // those left in knownViewChildren are subject to removal - they are our diagram elements we didn't find match to,
+ // or those we have potential matches to, and thus need to be recreated, preserving size/location information.
+ orphaned.addAll(knownViewChildren);
+ //
+ ArrayList<CreateViewRequest.ViewDescriptor> viewDescriptors = new ArrayList<CreateViewRequest.ViewDescriptor>(
+ childDescriptors.size());
+ for (IntermediateModelNodeDescriptor next : childDescriptors) {
+ String hint = IntermediateModelVisualIDRegistry.getType(next
+ .getVisualID());
+ IAdaptable elementAdapter = new CanonicalElementAdapter(
+ next.getModelElement(), hint);
+ CreateViewRequest.ViewDescriptor descriptor = new CreateViewRequest.ViewDescriptor(
+ elementAdapter, Node.class, hint, ViewUtil.APPEND, false,
+ host().getDiagramPreferencesHint());
+ viewDescriptors.add(descriptor);
+ }
+
+ boolean changed = deleteViews(orphaned.iterator());
+ //
+ CreateViewRequest request = getCreateViewRequest(viewDescriptors);
+ Command cmd = getCreateViewCommand(request);
+ if (cmd != null && cmd.canExecute()) {
+ SetViewMutabilityCommand.makeMutable(
+ new EObjectAdapter(host().getNotationView())).execute();
+ executeCommand(cmd);
+ @SuppressWarnings("unchecked")
+ List<IAdaptable> nl = (List<IAdaptable>) request.getNewObject();
+ createdViews.addAll(nl);
+ }
+ if (changed || createdViews.size() > 0) {
+ postProcessRefreshSemantic(createdViews);
+ }
+ if (createdViews.size() > 1) {
+ // perform a layout of the container
+ DeferredLayoutCommand layoutCmd = new DeferredLayoutCommand(host()
+ .getEditingDomain(), createdViews, host());
+ executeCommand(new ICommandProxy(layoutCmd));
+ }
+
+ makeViewsImmutable(createdViews);
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ProcessCollectionCanonicalEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ProcessCollectionCanonicalEditPolicy.java
new file mode 100755
index 0000000..0ac9ad7
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ProcessCollectionCanonicalEditPolicy.java
@@ -0,0 +1,173 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
+import org.eclipse.gmf.runtime.diagram.ui.commands.DeferredLayoutCommand;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.commands.SetViewMutabilityCommand;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.ImPackage;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramUpdater;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelNodeDescriptor;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+
+/**
+ * @generated
+ */
+public class ProcessCollectionCanonicalEditPolicy extends CanonicalEditPolicy {
+
+ /**
+ * @generated
+ */
+ protected void refreshOnActivate() {
+ // Need to activate editpart children before invoking the canonical refresh for EditParts to add event listeners
+ List<?> c = getHost().getChildren();
+ for (int i = 0; i < c.size(); i++) {
+ ((EditPart) c.get(i)).activate();
+ }
+ super.refreshOnActivate();
+ }
+
+ /**
+ * @generated
+ */
+ protected EStructuralFeature getFeatureToSynchronize() {
+ return ImPackage.eINSTANCE.getProcessCollection_Processes();
+ }
+
+ /**
+ * @generated
+ */
+ @SuppressWarnings("rawtypes")
+ protected List getSemanticChildrenList() {
+ View viewObject = (View) getHost().getModel();
+ LinkedList<EObject> result = new LinkedList<EObject>();
+ List<IntermediateModelNodeDescriptor> childDescriptors = IntermediateModelDiagramUpdater
+ .getProcessCollection_2005SemanticChildren(viewObject);
+ for (IntermediateModelNodeDescriptor d : childDescriptors) {
+ result.add(d.getModelElement());
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean isOrphaned(Collection<EObject> semanticChildren,
+ final View view) {
+ return isMyDiagramElement(view)
+ && !semanticChildren.contains(view.getElement());
+ }
+
+ /**
+ * @generated
+ */
+ private boolean isMyDiagramElement(View view) {
+ return ProcessEditPart.VISUAL_ID == IntermediateModelVisualIDRegistry
+ .getVisualID(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshSemantic() {
+ if (resolveSemanticElement() == null) {
+ return;
+ }
+ LinkedList<IAdaptable> createdViews = new LinkedList<IAdaptable>();
+ List<IntermediateModelNodeDescriptor> childDescriptors = IntermediateModelDiagramUpdater
+ .getProcessCollection_2005SemanticChildren((View) getHost()
+ .getModel());
+ LinkedList<View> orphaned = new LinkedList<View>();
+ // we care to check only views we recognize as ours
+ LinkedList<View> knownViewChildren = new LinkedList<View>();
+ for (View v : getViewChildren()) {
+ if (isMyDiagramElement(v)) {
+ knownViewChildren.add(v);
+ }
+ }
+ // alternative to #cleanCanonicalSemanticChildren(getViewChildren(), semanticChildren)
+ //
+ // iteration happens over list of desired semantic elements, trying to find best matching View, while original CEP
+ // iterates views, potentially losing view (size/bounds) information - i.e. if there are few views to reference same EObject, only last one
+ // to answer isOrphaned == true will be used for the domain element representation, see #cleanCanonicalSemanticChildren()
+ for (Iterator<IntermediateModelNodeDescriptor> descriptorsIterator = childDescriptors
+ .iterator(); descriptorsIterator.hasNext();) {
+ IntermediateModelNodeDescriptor next = descriptorsIterator.next();
+ String hint = IntermediateModelVisualIDRegistry.getType(next
+ .getVisualID());
+ LinkedList<View> perfectMatch = new LinkedList<View>(); // both semanticElement and hint match that of NodeDescriptor
+ for (View childView : getViewChildren()) {
+ EObject semanticElement = childView.getElement();
+ if (next.getModelElement().equals(semanticElement)) {
+ if (hint.equals(childView.getType())) {
+ perfectMatch.add(childView);
+ // actually, can stop iteration over view children here, but
+ // may want to use not the first view but last one as a 'real' match (the way original CEP does
+ // with its trick with viewToSemanticMap inside #cleanCanonicalSemanticChildren
+ }
+ }
+ }
+ if (perfectMatch.size() > 0) {
+ descriptorsIterator.remove(); // precise match found no need to create anything for the NodeDescriptor
+ // use only one view (first or last?), keep rest as orphaned for further consideration
+ knownViewChildren.remove(perfectMatch.getFirst());
+ }
+ }
+ // those left in knownViewChildren are subject to removal - they are our diagram elements we didn't find match to,
+ // or those we have potential matches to, and thus need to be recreated, preserving size/location information.
+ orphaned.addAll(knownViewChildren);
+ //
+ ArrayList<CreateViewRequest.ViewDescriptor> viewDescriptors = new ArrayList<CreateViewRequest.ViewDescriptor>(
+ childDescriptors.size());
+ for (IntermediateModelNodeDescriptor next : childDescriptors) {
+ String hint = IntermediateModelVisualIDRegistry.getType(next
+ .getVisualID());
+ IAdaptable elementAdapter = new CanonicalElementAdapter(
+ next.getModelElement(), hint);
+ CreateViewRequest.ViewDescriptor descriptor = new CreateViewRequest.ViewDescriptor(
+ elementAdapter, Node.class, hint, ViewUtil.APPEND, false,
+ host().getDiagramPreferencesHint());
+ viewDescriptors.add(descriptor);
+ }
+
+ boolean changed = deleteViews(orphaned.iterator());
+ //
+ CreateViewRequest request = getCreateViewRequest(viewDescriptors);
+ Command cmd = getCreateViewCommand(request);
+ if (cmd != null && cmd.canExecute()) {
+ SetViewMutabilityCommand.makeMutable(
+ new EObjectAdapter(host().getNotationView())).execute();
+ executeCommand(cmd);
+ @SuppressWarnings("unchecked")
+ List<IAdaptable> nl = (List<IAdaptable>) request.getNewObject();
+ createdViews.addAll(nl);
+ }
+ if (changed || createdViews.size() > 0) {
+ postProcessRefreshSemantic(createdViews);
+ }
+ if (createdViews.size() > 1) {
+ // perform a layout of the container
+ DeferredLayoutCommand layoutCmd = new DeferredLayoutCommand(host()
+ .getEditingDomain(), createdViews, host());
+ executeCommand(new ICommandProxy(layoutCmd));
+ }
+
+ makeViewsImmutable(createdViews);
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ProcessCollectionItemSemanticEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ProcessCollectionItemSemanticEditPolicy.java
new file mode 100755
index 0000000..88fd516
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ProcessCollectionItemSemanticEditPolicy.java
@@ -0,0 +1,125 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import java.util.Iterator;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.common.core.command.ICompositeCommand;
+import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand;
+import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.diagram.edit.commands.ProcessCreateCommand;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceNeedsEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepServiceModelEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+
+/**
+ * @generated
+ */
+public class ProcessCollectionItemSemanticEditPolicy extends
+ IntermediateModelBaseItemSemanticEditPolicy {
+
+ /**
+ * @generated
+ */
+ public ProcessCollectionItemSemanticEditPolicy() {
+ super(IntermediateModelElementTypes.ProcessCollection_2005);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getCreateCommand(CreateElementRequest req) {
+ if (IntermediateModelElementTypes.Process_3007 == req.getElementType()) {
+ return getGEFWrapper(new ProcessCreateCommand(req));
+ }
+ return super.getCreateCommand(req);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getDestroyElementCommand(DestroyElementRequest req) {
+ View view = (View) getHost().getModel();
+ CompositeTransactionalCommand cmd = new CompositeTransactionalCommand(
+ getEditingDomain(), null);
+ cmd.setTransactionNestingEnabled(false);
+ EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$
+ if (annotation == null) {
+ // there are indirectly referenced children, need extra commands: false
+ addDestroyChildNodesCommand(cmd);
+ addDestroyShortcutsCommand(cmd, view);
+ // delete host element
+ cmd.add(new DestroyElementCommand(req));
+ } else {
+ cmd.add(new DeleteCommand(getEditingDomain(), view));
+ }
+ return getGEFWrapper(cmd.reduce());
+ }
+
+ /**
+ * @generated
+ */
+ private void addDestroyChildNodesCommand(ICompositeCommand cmd) {
+ View view = (View) getHost().getModel();
+ for (Iterator<?> nit = view.getChildren().iterator(); nit.hasNext();) {
+ Node node = (Node) nit.next();
+ switch (IntermediateModelVisualIDRegistry.getVisualID(node)) {
+ case ProcessEditPart.VISUAL_ID:
+ for (Iterator<?> it = node.getTargetEdges().iterator(); it
+ .hasNext();) {
+ Edge incomingLink = (Edge) it.next();
+ if (IntermediateModelVisualIDRegistry
+ .getVisualID(incomingLink) == StepServiceModelEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ incomingLink.getSource().getElement(), null,
+ incomingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(),
+ incomingLink));
+ continue;
+ }
+ if (IntermediateModelVisualIDRegistry
+ .getVisualID(incomingLink) == ServiceNeedsEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ incomingLink.getSource().getElement(), null,
+ incomingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(),
+ incomingLink));
+ continue;
+ }
+ }
+ for (Iterator<?> it = node.getSourceEdges().iterator(); it
+ .hasNext();) {
+ Edge outgoingLink = (Edge) it.next();
+ if (IntermediateModelVisualIDRegistry
+ .getVisualID(outgoingLink) == ServiceNeedsEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ outgoingLink.getSource().getElement(), null,
+ outgoingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(),
+ outgoingLink));
+ continue;
+ }
+ }
+ cmd.add(new DestroyElementCommand(new DestroyElementRequest(
+ getEditingDomain(), node.getElement(), false))); // directlyOwned: true
+ // don't need explicit deletion of node as parent's view deletion would clean child views as well
+ // cmd.add(new org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand(getEditingDomain(), node));
+ break;
+ }
+ }
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ProcessItemSemanticEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ProcessItemSemanticEditPolicy.java
new file mode 100755
index 0000000..9232b5c
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ProcessItemSemanticEditPolicy.java
@@ -0,0 +1,222 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import java.util.Iterator;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.common.core.command.ICompositeCommand;
+import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand;
+import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.diagram.edit.commands.ServiceNeedsCreateCommand;
+import org.eclipse.soa.mangrove.diagram.edit.commands.ServiceNeedsReorientCommand;
+import org.eclipse.soa.mangrove.diagram.edit.commands.StepCreateCommand;
+import org.eclipse.soa.mangrove.diagram.edit.commands.StepServiceModelCreateCommand;
+import org.eclipse.soa.mangrove.diagram.edit.commands.StepServiceModelReorientCommand;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceNeedsEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepServiceModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.TransitionEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+
+/**
+ * @generated
+ */
+public class ProcessItemSemanticEditPolicy extends
+ IntermediateModelBaseItemSemanticEditPolicy {
+
+ /**
+ * @generated
+ */
+ public ProcessItemSemanticEditPolicy() {
+ super(IntermediateModelElementTypes.Process_3007);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getCreateCommand(CreateElementRequest req) {
+ if (IntermediateModelElementTypes.Step_3008 == req.getElementType()) {
+ return getGEFWrapper(new StepCreateCommand(req));
+ }
+ return super.getCreateCommand(req);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getDestroyElementCommand(DestroyElementRequest req) {
+ View view = (View) getHost().getModel();
+ CompositeTransactionalCommand cmd = new CompositeTransactionalCommand(
+ getEditingDomain(), null);
+ cmd.setTransactionNestingEnabled(false);
+ for (Iterator<?> it = view.getTargetEdges().iterator(); it.hasNext();) {
+ Edge incomingLink = (Edge) it.next();
+ if (IntermediateModelVisualIDRegistry.getVisualID(incomingLink) == StepServiceModelEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ incomingLink.getSource().getElement(), null,
+ incomingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(), incomingLink));
+ continue;
+ }
+ if (IntermediateModelVisualIDRegistry.getVisualID(incomingLink) == ServiceNeedsEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ incomingLink.getSource().getElement(), null,
+ incomingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(), incomingLink));
+ continue;
+ }
+ }
+ for (Iterator<?> it = view.getSourceEdges().iterator(); it.hasNext();) {
+ Edge outgoingLink = (Edge) it.next();
+ if (IntermediateModelVisualIDRegistry.getVisualID(outgoingLink) == ServiceNeedsEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ outgoingLink.getSource().getElement(), null,
+ outgoingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink));
+ continue;
+ }
+ }
+ EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$
+ if (annotation == null) {
+ // there are indirectly referenced children, need extra commands: false
+ addDestroyChildNodesCommand(cmd);
+ addDestroyShortcutsCommand(cmd, view);
+ // delete host element
+ cmd.add(new DestroyElementCommand(req));
+ } else {
+ cmd.add(new DeleteCommand(getEditingDomain(), view));
+ }
+ return getGEFWrapper(cmd.reduce());
+ }
+
+ /**
+ * @generated
+ */
+ private void addDestroyChildNodesCommand(ICompositeCommand cmd) {
+ View view = (View) getHost().getModel();
+ for (Iterator<?> nit = view.getChildren().iterator(); nit.hasNext();) {
+ Node node = (Node) nit.next();
+ switch (IntermediateModelVisualIDRegistry.getVisualID(node)) {
+ case StepEditPart.VISUAL_ID:
+ for (Iterator<?> it = node.getTargetEdges().iterator(); it
+ .hasNext();) {
+ Edge incomingLink = (Edge) it.next();
+ if (IntermediateModelVisualIDRegistry
+ .getVisualID(incomingLink) == TransitionEditPart.VISUAL_ID) {
+ DestroyElementRequest r = new DestroyElementRequest(
+ incomingLink.getElement(), false);
+ cmd.add(new DestroyElementCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(),
+ incomingLink));
+ continue;
+ }
+ }
+ for (Iterator<?> it = node.getSourceEdges().iterator(); it
+ .hasNext();) {
+ Edge outgoingLink = (Edge) it.next();
+ if (IntermediateModelVisualIDRegistry
+ .getVisualID(outgoingLink) == TransitionEditPart.VISUAL_ID) {
+ DestroyElementRequest r = new DestroyElementRequest(
+ outgoingLink.getElement(), false);
+ cmd.add(new DestroyElementCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(),
+ outgoingLink));
+ continue;
+ }
+ if (IntermediateModelVisualIDRegistry
+ .getVisualID(outgoingLink) == StepServiceModelEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ outgoingLink.getSource().getElement(), null,
+ outgoingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(),
+ outgoingLink));
+ continue;
+ }
+ }
+ cmd.add(new DestroyElementCommand(new DestroyElementRequest(
+ getEditingDomain(), node.getElement(), false))); // directlyOwned: true
+ // don't need explicit deletion of node as parent's view deletion would clean child views as well
+ // cmd.add(new org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand(getEditingDomain(), node));
+ break;
+ }
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getCreateRelationshipCommand(CreateRelationshipRequest req) {
+ Command command = req.getTarget() == null ? getStartCreateRelationshipCommand(req)
+ : getCompleteCreateRelationshipCommand(req);
+ return command != null ? command : super
+ .getCreateRelationshipCommand(req);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getStartCreateRelationshipCommand(
+ CreateRelationshipRequest req) {
+ if (IntermediateModelElementTypes.StepServiceModel_4010 == req
+ .getElementType()) {
+ return null;
+ }
+ if (IntermediateModelElementTypes.ServiceNeeds_4011 == req
+ .getElementType()) {
+ return getGEFWrapper(new ServiceNeedsCreateCommand(req,
+ req.getSource(), req.getTarget()));
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getCompleteCreateRelationshipCommand(
+ CreateRelationshipRequest req) {
+ if (IntermediateModelElementTypes.StepServiceModel_4010 == req
+ .getElementType()) {
+ return getGEFWrapper(new StepServiceModelCreateCommand(req,
+ req.getSource(), req.getTarget()));
+ }
+ if (IntermediateModelElementTypes.ServiceNeeds_4011 == req
+ .getElementType()) {
+ return getGEFWrapper(new ServiceNeedsCreateCommand(req,
+ req.getSource(), req.getTarget()));
+ }
+ return null;
+ }
+
+ /**
+ * Returns command to reorient EReference based link. New link target or source
+ * should be the domain model element associated with this node.
+ *
+ * @generated
+ */
+ protected Command getReorientReferenceRelationshipCommand(
+ ReorientReferenceRelationshipRequest req) {
+ switch (getVisualID(req)) {
+ case StepServiceModelEditPart.VISUAL_ID:
+ return getGEFWrapper(new StepServiceModelReorientCommand(req));
+ case ServiceNeedsEditPart.VISUAL_ID:
+ return getGEFWrapper(new ServiceNeedsReorientCommand(req));
+ }
+ return super.getReorientReferenceRelationshipCommand(req);
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ServiceCollectionCanonicalEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ServiceCollectionCanonicalEditPolicy.java
new file mode 100755
index 0000000..5b0cc09
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ServiceCollectionCanonicalEditPolicy.java
@@ -0,0 +1,173 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
+import org.eclipse.gmf.runtime.diagram.ui.commands.DeferredLayoutCommand;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.commands.SetViewMutabilityCommand;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.ImPackage;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramUpdater;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelNodeDescriptor;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+
+/**
+ * @generated
+ */
+public class ServiceCollectionCanonicalEditPolicy extends CanonicalEditPolicy {
+
+ /**
+ * @generated
+ */
+ protected void refreshOnActivate() {
+ // Need to activate editpart children before invoking the canonical refresh for EditParts to add event listeners
+ List<?> c = getHost().getChildren();
+ for (int i = 0; i < c.size(); i++) {
+ ((EditPart) c.get(i)).activate();
+ }
+ super.refreshOnActivate();
+ }
+
+ /**
+ * @generated
+ */
+ protected EStructuralFeature getFeatureToSynchronize() {
+ return ImPackage.eINSTANCE.getServiceCollection_Services();
+ }
+
+ /**
+ * @generated
+ */
+ @SuppressWarnings("rawtypes")
+ protected List getSemanticChildrenList() {
+ View viewObject = (View) getHost().getModel();
+ LinkedList<EObject> result = new LinkedList<EObject>();
+ List<IntermediateModelNodeDescriptor> childDescriptors = IntermediateModelDiagramUpdater
+ .getServiceCollection_2006SemanticChildren(viewObject);
+ for (IntermediateModelNodeDescriptor d : childDescriptors) {
+ result.add(d.getModelElement());
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean isOrphaned(Collection<EObject> semanticChildren,
+ final View view) {
+ return isMyDiagramElement(view)
+ && !semanticChildren.contains(view.getElement());
+ }
+
+ /**
+ * @generated
+ */
+ private boolean isMyDiagramElement(View view) {
+ return ServiceEditPart.VISUAL_ID == IntermediateModelVisualIDRegistry
+ .getVisualID(view);
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshSemantic() {
+ if (resolveSemanticElement() == null) {
+ return;
+ }
+ LinkedList<IAdaptable> createdViews = new LinkedList<IAdaptable>();
+ List<IntermediateModelNodeDescriptor> childDescriptors = IntermediateModelDiagramUpdater
+ .getServiceCollection_2006SemanticChildren((View) getHost()
+ .getModel());
+ LinkedList<View> orphaned = new LinkedList<View>();
+ // we care to check only views we recognize as ours
+ LinkedList<View> knownViewChildren = new LinkedList<View>();
+ for (View v : getViewChildren()) {
+ if (isMyDiagramElement(v)) {
+ knownViewChildren.add(v);
+ }
+ }
+ // alternative to #cleanCanonicalSemanticChildren(getViewChildren(), semanticChildren)
+ //
+ // iteration happens over list of desired semantic elements, trying to find best matching View, while original CEP
+ // iterates views, potentially losing view (size/bounds) information - i.e. if there are few views to reference same EObject, only last one
+ // to answer isOrphaned == true will be used for the domain element representation, see #cleanCanonicalSemanticChildren()
+ for (Iterator<IntermediateModelNodeDescriptor> descriptorsIterator = childDescriptors
+ .iterator(); descriptorsIterator.hasNext();) {
+ IntermediateModelNodeDescriptor next = descriptorsIterator.next();
+ String hint = IntermediateModelVisualIDRegistry.getType(next
+ .getVisualID());
+ LinkedList<View> perfectMatch = new LinkedList<View>(); // both semanticElement and hint match that of NodeDescriptor
+ for (View childView : getViewChildren()) {
+ EObject semanticElement = childView.getElement();
+ if (next.getModelElement().equals(semanticElement)) {
+ if (hint.equals(childView.getType())) {
+ perfectMatch.add(childView);
+ // actually, can stop iteration over view children here, but
+ // may want to use not the first view but last one as a 'real' match (the way original CEP does
+ // with its trick with viewToSemanticMap inside #cleanCanonicalSemanticChildren
+ }
+ }
+ }
+ if (perfectMatch.size() > 0) {
+ descriptorsIterator.remove(); // precise match found no need to create anything for the NodeDescriptor
+ // use only one view (first or last?), keep rest as orphaned for further consideration
+ knownViewChildren.remove(perfectMatch.getFirst());
+ }
+ }
+ // those left in knownViewChildren are subject to removal - they are our diagram elements we didn't find match to,
+ // or those we have potential matches to, and thus need to be recreated, preserving size/location information.
+ orphaned.addAll(knownViewChildren);
+ //
+ ArrayList<CreateViewRequest.ViewDescriptor> viewDescriptors = new ArrayList<CreateViewRequest.ViewDescriptor>(
+ childDescriptors.size());
+ for (IntermediateModelNodeDescriptor next : childDescriptors) {
+ String hint = IntermediateModelVisualIDRegistry.getType(next
+ .getVisualID());
+ IAdaptable elementAdapter = new CanonicalElementAdapter(
+ next.getModelElement(), hint);
+ CreateViewRequest.ViewDescriptor descriptor = new CreateViewRequest.ViewDescriptor(
+ elementAdapter, Node.class, hint, ViewUtil.APPEND, false,
+ host().getDiagramPreferencesHint());
+ viewDescriptors.add(descriptor);
+ }
+
+ boolean changed = deleteViews(orphaned.iterator());
+ //
+ CreateViewRequest request = getCreateViewRequest(viewDescriptors);
+ Command cmd = getCreateViewCommand(request);
+ if (cmd != null && cmd.canExecute()) {
+ SetViewMutabilityCommand.makeMutable(
+ new EObjectAdapter(host().getNotationView())).execute();
+ executeCommand(cmd);
+ @SuppressWarnings("unchecked")
+ List<IAdaptable> nl = (List<IAdaptable>) request.getNewObject();
+ createdViews.addAll(nl);
+ }
+ if (changed || createdViews.size() > 0) {
+ postProcessRefreshSemantic(createdViews);
+ }
+ if (createdViews.size() > 1) {
+ // perform a layout of the container
+ DeferredLayoutCommand layoutCmd = new DeferredLayoutCommand(host()
+ .getEditingDomain(), createdViews, host());
+ executeCommand(new ICommandProxy(layoutCmd));
+ }
+
+ makeViewsImmutable(createdViews);
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ServiceCollectionItemSemanticEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ServiceCollectionItemSemanticEditPolicy.java
new file mode 100755
index 0000000..f0c3ba0
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ServiceCollectionItemSemanticEditPolicy.java
@@ -0,0 +1,125 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import java.util.Iterator;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.common.core.command.ICompositeCommand;
+import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand;
+import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.diagram.edit.commands.ServiceCreateCommand;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceNeedsEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepServiceModelEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+
+/**
+ * @generated
+ */
+public class ServiceCollectionItemSemanticEditPolicy extends
+ IntermediateModelBaseItemSemanticEditPolicy {
+
+ /**
+ * @generated
+ */
+ public ServiceCollectionItemSemanticEditPolicy() {
+ super(IntermediateModelElementTypes.ServiceCollection_2006);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getCreateCommand(CreateElementRequest req) {
+ if (IntermediateModelElementTypes.Service_3009 == req.getElementType()) {
+ return getGEFWrapper(new ServiceCreateCommand(req));
+ }
+ return super.getCreateCommand(req);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getDestroyElementCommand(DestroyElementRequest req) {
+ View view = (View) getHost().getModel();
+ CompositeTransactionalCommand cmd = new CompositeTransactionalCommand(
+ getEditingDomain(), null);
+ cmd.setTransactionNestingEnabled(false);
+ EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$
+ if (annotation == null) {
+ // there are indirectly referenced children, need extra commands: false
+ addDestroyChildNodesCommand(cmd);
+ addDestroyShortcutsCommand(cmd, view);
+ // delete host element
+ cmd.add(new DestroyElementCommand(req));
+ } else {
+ cmd.add(new DeleteCommand(getEditingDomain(), view));
+ }
+ return getGEFWrapper(cmd.reduce());
+ }
+
+ /**
+ * @generated
+ */
+ private void addDestroyChildNodesCommand(ICompositeCommand cmd) {
+ View view = (View) getHost().getModel();
+ for (Iterator<?> nit = view.getChildren().iterator(); nit.hasNext();) {
+ Node node = (Node) nit.next();
+ switch (IntermediateModelVisualIDRegistry.getVisualID(node)) {
+ case ServiceEditPart.VISUAL_ID:
+ for (Iterator<?> it = node.getTargetEdges().iterator(); it
+ .hasNext();) {
+ Edge incomingLink = (Edge) it.next();
+ if (IntermediateModelVisualIDRegistry
+ .getVisualID(incomingLink) == StepServiceModelEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ incomingLink.getSource().getElement(), null,
+ incomingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(),
+ incomingLink));
+ continue;
+ }
+ if (IntermediateModelVisualIDRegistry
+ .getVisualID(incomingLink) == ServiceNeedsEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ incomingLink.getSource().getElement(), null,
+ incomingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(),
+ incomingLink));
+ continue;
+ }
+ }
+ for (Iterator<?> it = node.getSourceEdges().iterator(); it
+ .hasNext();) {
+ Edge outgoingLink = (Edge) it.next();
+ if (IntermediateModelVisualIDRegistry
+ .getVisualID(outgoingLink) == ServiceNeedsEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ outgoingLink.getSource().getElement(), null,
+ outgoingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(),
+ outgoingLink));
+ continue;
+ }
+ }
+ cmd.add(new DestroyElementCommand(new DestroyElementRequest(
+ getEditingDomain(), node.getElement(), false))); // directlyOwned: true
+ // don't need explicit deletion of node as parent's view deletion would clean child views as well
+ // cmd.add(new org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand(getEditingDomain(), node));
+ break;
+ }
+ }
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ServiceItemSemanticEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ServiceItemSemanticEditPolicy.java
new file mode 100755
index 0000000..24ab15f
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ServiceItemSemanticEditPolicy.java
@@ -0,0 +1,151 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import java.util.Iterator;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand;
+import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.diagram.edit.commands.ServiceNeedsCreateCommand;
+import org.eclipse.soa.mangrove.diagram.edit.commands.ServiceNeedsReorientCommand;
+import org.eclipse.soa.mangrove.diagram.edit.commands.StepServiceModelCreateCommand;
+import org.eclipse.soa.mangrove.diagram.edit.commands.StepServiceModelReorientCommand;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceNeedsEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepServiceModelEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+
+/**
+ * @generated
+ */
+public class ServiceItemSemanticEditPolicy extends
+ IntermediateModelBaseItemSemanticEditPolicy {
+
+ /**
+ * @generated
+ */
+ public ServiceItemSemanticEditPolicy() {
+ super(IntermediateModelElementTypes.Service_3009);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getDestroyElementCommand(DestroyElementRequest req) {
+ View view = (View) getHost().getModel();
+ CompositeTransactionalCommand cmd = new CompositeTransactionalCommand(
+ getEditingDomain(), null);
+ cmd.setTransactionNestingEnabled(false);
+ for (Iterator<?> it = view.getTargetEdges().iterator(); it.hasNext();) {
+ Edge incomingLink = (Edge) it.next();
+ if (IntermediateModelVisualIDRegistry.getVisualID(incomingLink) == StepServiceModelEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ incomingLink.getSource().getElement(), null,
+ incomingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(), incomingLink));
+ continue;
+ }
+ if (IntermediateModelVisualIDRegistry.getVisualID(incomingLink) == ServiceNeedsEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ incomingLink.getSource().getElement(), null,
+ incomingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(), incomingLink));
+ continue;
+ }
+ }
+ for (Iterator<?> it = view.getSourceEdges().iterator(); it.hasNext();) {
+ Edge outgoingLink = (Edge) it.next();
+ if (IntermediateModelVisualIDRegistry.getVisualID(outgoingLink) == ServiceNeedsEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ outgoingLink.getSource().getElement(), null,
+ outgoingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink));
+ continue;
+ }
+ }
+ EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$
+ if (annotation == null) {
+ // there are indirectly referenced children, need extra commands: false
+ addDestroyShortcutsCommand(cmd, view);
+ // delete host element
+ cmd.add(new DestroyElementCommand(req));
+ } else {
+ cmd.add(new DeleteCommand(getEditingDomain(), view));
+ }
+ return getGEFWrapper(cmd.reduce());
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getCreateRelationshipCommand(CreateRelationshipRequest req) {
+ Command command = req.getTarget() == null ? getStartCreateRelationshipCommand(req)
+ : getCompleteCreateRelationshipCommand(req);
+ return command != null ? command : super
+ .getCreateRelationshipCommand(req);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getStartCreateRelationshipCommand(
+ CreateRelationshipRequest req) {
+ if (IntermediateModelElementTypes.StepServiceModel_4010 == req
+ .getElementType()) {
+ return null;
+ }
+ if (IntermediateModelElementTypes.ServiceNeeds_4011 == req
+ .getElementType()) {
+ return getGEFWrapper(new ServiceNeedsCreateCommand(req,
+ req.getSource(), req.getTarget()));
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getCompleteCreateRelationshipCommand(
+ CreateRelationshipRequest req) {
+ if (IntermediateModelElementTypes.StepServiceModel_4010 == req
+ .getElementType()) {
+ return getGEFWrapper(new StepServiceModelCreateCommand(req,
+ req.getSource(), req.getTarget()));
+ }
+ if (IntermediateModelElementTypes.ServiceNeeds_4011 == req
+ .getElementType()) {
+ return getGEFWrapper(new ServiceNeedsCreateCommand(req,
+ req.getSource(), req.getTarget()));
+ }
+ return null;
+ }
+
+ /**
+ * Returns command to reorient EReference based link. New link target or source
+ * should be the domain model element associated with this node.
+ *
+ * @generated
+ */
+ protected Command getReorientReferenceRelationshipCommand(
+ ReorientReferenceRelationshipRequest req) {
+ switch (getVisualID(req)) {
+ case StepServiceModelEditPart.VISUAL_ID:
+ return getGEFWrapper(new StepServiceModelReorientCommand(req));
+ case ServiceNeedsEditPart.VISUAL_ID:
+ return getGEFWrapper(new ServiceNeedsReorientCommand(req));
+ }
+ return super.getReorientReferenceRelationshipCommand(req);
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ServiceNeedsItemSemanticEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ServiceNeedsItemSemanticEditPolicy.java
new file mode 100755
index 0000000..2235c12
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/ServiceNeedsItemSemanticEditPolicy.java
@@ -0,0 +1,28 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+
+/**
+ * @generated
+ */
+public class ServiceNeedsItemSemanticEditPolicy extends
+ IntermediateModelBaseItemSemanticEditPolicy {
+
+ /**
+ * @generated
+ */
+ public ServiceNeedsItemSemanticEditPolicy() {
+ super(IntermediateModelElementTypes.ServiceNeeds_4011);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getDestroyReferenceCommand(DestroyReferenceRequest req) {
+ return getGEFWrapper(new DestroyReferenceCommand(req));
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/StepItemSemanticEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/StepItemSemanticEditPolicy.java
new file mode 100755
index 0000000..aaa1b17
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/StepItemSemanticEditPolicy.java
@@ -0,0 +1,163 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import java.util.Iterator;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.diagram.core.commands.DeleteCommand;
+import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateRelationshipRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientReferenceRelationshipRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRelationshipRequest;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.diagram.edit.commands.StepServiceModelCreateCommand;
+import org.eclipse.soa.mangrove.diagram.edit.commands.StepServiceModelReorientCommand;
+import org.eclipse.soa.mangrove.diagram.edit.commands.TransitionCreateCommand;
+import org.eclipse.soa.mangrove.diagram.edit.commands.TransitionReorientCommand;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepServiceModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.TransitionEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+
+/**
+ * @generated
+ */
+public class StepItemSemanticEditPolicy extends
+ IntermediateModelBaseItemSemanticEditPolicy {
+
+ /**
+ * @generated
+ */
+ public StepItemSemanticEditPolicy() {
+ super(IntermediateModelElementTypes.Step_3008);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getDestroyElementCommand(DestroyElementRequest req) {
+ View view = (View) getHost().getModel();
+ CompositeTransactionalCommand cmd = new CompositeTransactionalCommand(
+ getEditingDomain(), null);
+ cmd.setTransactionNestingEnabled(false);
+ for (Iterator<?> it = view.getTargetEdges().iterator(); it.hasNext();) {
+ Edge incomingLink = (Edge) it.next();
+ if (IntermediateModelVisualIDRegistry.getVisualID(incomingLink) == TransitionEditPart.VISUAL_ID) {
+ DestroyElementRequest r = new DestroyElementRequest(
+ incomingLink.getElement(), false);
+ cmd.add(new DestroyElementCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(), incomingLink));
+ continue;
+ }
+ }
+ for (Iterator<?> it = view.getSourceEdges().iterator(); it.hasNext();) {
+ Edge outgoingLink = (Edge) it.next();
+ if (IntermediateModelVisualIDRegistry.getVisualID(outgoingLink) == TransitionEditPart.VISUAL_ID) {
+ DestroyElementRequest r = new DestroyElementRequest(
+ outgoingLink.getElement(), false);
+ cmd.add(new DestroyElementCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink));
+ continue;
+ }
+ if (IntermediateModelVisualIDRegistry.getVisualID(outgoingLink) == StepServiceModelEditPart.VISUAL_ID) {
+ DestroyReferenceRequest r = new DestroyReferenceRequest(
+ outgoingLink.getSource().getElement(), null,
+ outgoingLink.getTarget().getElement(), false);
+ cmd.add(new DestroyReferenceCommand(r));
+ cmd.add(new DeleteCommand(getEditingDomain(), outgoingLink));
+ continue;
+ }
+ }
+ EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$
+ if (annotation == null) {
+ // there are indirectly referenced children, need extra commands: false
+ addDestroyShortcutsCommand(cmd, view);
+ // delete host element
+ cmd.add(new DestroyElementCommand(req));
+ } else {
+ cmd.add(new DeleteCommand(getEditingDomain(), view));
+ }
+ return getGEFWrapper(cmd.reduce());
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getCreateRelationshipCommand(CreateRelationshipRequest req) {
+ Command command = req.getTarget() == null ? getStartCreateRelationshipCommand(req)
+ : getCompleteCreateRelationshipCommand(req);
+ return command != null ? command : super
+ .getCreateRelationshipCommand(req);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getStartCreateRelationshipCommand(
+ CreateRelationshipRequest req) {
+ if (IntermediateModelElementTypes.Transition_4009 == req
+ .getElementType()) {
+ return getGEFWrapper(new TransitionCreateCommand(req,
+ req.getSource(), req.getTarget()));
+ }
+ if (IntermediateModelElementTypes.StepServiceModel_4010 == req
+ .getElementType()) {
+ return getGEFWrapper(new StepServiceModelCreateCommand(req,
+ req.getSource(), req.getTarget()));
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getCompleteCreateRelationshipCommand(
+ CreateRelationshipRequest req) {
+ if (IntermediateModelElementTypes.Transition_4009 == req
+ .getElementType()) {
+ return getGEFWrapper(new TransitionCreateCommand(req,
+ req.getSource(), req.getTarget()));
+ }
+ if (IntermediateModelElementTypes.StepServiceModel_4010 == req
+ .getElementType()) {
+ return null;
+ }
+ return null;
+ }
+
+ /**
+ * Returns command to reorient EClass based link. New link target or source
+ * should be the domain model element associated with this node.
+ *
+ * @generated
+ */
+ protected Command getReorientRelationshipCommand(
+ ReorientRelationshipRequest req) {
+ switch (getVisualID(req)) {
+ case TransitionEditPart.VISUAL_ID:
+ return getGEFWrapper(new TransitionReorientCommand(req));
+ }
+ return super.getReorientRelationshipCommand(req);
+ }
+
+ /**
+ * Returns command to reorient EReference based link. New link target or source
+ * should be the domain model element associated with this node.
+ *
+ * @generated
+ */
+ protected Command getReorientReferenceRelationshipCommand(
+ ReorientReferenceRelationshipRequest req) {
+ switch (getVisualID(req)) {
+ case StepServiceModelEditPart.VISUAL_ID:
+ return getGEFWrapper(new StepServiceModelReorientCommand(req));
+ }
+ return super.getReorientReferenceRelationshipCommand(req);
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/StepServiceModelItemSemanticEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/StepServiceModelItemSemanticEditPolicy.java
new file mode 100755
index 0000000..a255d82
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/StepServiceModelItemSemanticEditPolicy.java
@@ -0,0 +1,28 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyReferenceCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyReferenceRequest;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+
+/**
+ * @generated
+ */
+public class StepServiceModelItemSemanticEditPolicy extends
+ IntermediateModelBaseItemSemanticEditPolicy {
+
+ /**
+ * @generated
+ */
+ public StepServiceModelItemSemanticEditPolicy() {
+ super(IntermediateModelElementTypes.StepServiceModel_4010);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getDestroyReferenceCommand(DestroyReferenceRequest req) {
+ return getGEFWrapper(new DestroyReferenceCommand(req));
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/StpIntermediateModelCanonicalEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/StpIntermediateModelCanonicalEditPolicy.java
new file mode 100755
index 0000000..d23a993
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/StpIntermediateModelCanonicalEditPolicy.java
@@ -0,0 +1,453 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
+import org.eclipse.gmf.runtime.diagram.ui.commands.DeferredLayoutCommand;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.commands.SetViewMutabilityCommand;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateConnectionViewRequest;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest;
+import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.update.UpdaterLinkDescriptor;
+import org.eclipse.soa.mangrove.ImPackage;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.TransitionEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramUpdater;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelLinkDescriptor;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelNodeDescriptor;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+
+/**
+ * @generated
+ */
+public class StpIntermediateModelCanonicalEditPolicy extends
+ CanonicalEditPolicy {
+
+ /**
+ * @generated
+ */
+ private Set<EStructuralFeature> myFeaturesToSynchronize;
+
+ /**
+ * @generated
+ */
+ protected void refreshOnActivate() {
+ // Need to activate editpart children before invoking the canonical refresh for EditParts to add event listeners
+ List<?> c = getHost().getChildren();
+ for (int i = 0; i < c.size(); i++) {
+ ((EditPart) c.get(i)).activate();
+ }
+ super.refreshOnActivate();
+ }
+
+ /**
+ * @generated
+ */
+ protected Set getFeaturesToSynchronize() {
+ if (myFeaturesToSynchronize == null) {
+ myFeaturesToSynchronize = new HashSet<EStructuralFeature>();
+ myFeaturesToSynchronize.add(ImPackage.eINSTANCE
+ .getStpIntermediateModel_ProcessCollection());
+ myFeaturesToSynchronize.add(ImPackage.eINSTANCE
+ .getStpIntermediateModel_ServiceCollection());
+ }
+ return myFeaturesToSynchronize;
+ }
+
+ /**
+ * @generated
+ */
+ @SuppressWarnings("rawtypes")
+ protected List getSemanticChildrenList() {
+ View viewObject = (View) getHost().getModel();
+ LinkedList<EObject> result = new LinkedList<EObject>();
+ List<IntermediateModelNodeDescriptor> childDescriptors = IntermediateModelDiagramUpdater
+ .getStpIntermediateModel_1000SemanticChildren(viewObject);
+ for (IntermediateModelNodeDescriptor d : childDescriptors) {
+ result.add(d.getModelElement());
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean isOrphaned(Collection<EObject> semanticChildren,
+ final View view) {
+ return isMyDiagramElement(view)
+ && !semanticChildren.contains(view.getElement());
+ }
+
+ /**
+ * @generated
+ */
+ private boolean isMyDiagramElement(View view) {
+ int visualID = IntermediateModelVisualIDRegistry.getVisualID(view);
+ return visualID == ProcessCollectionEditPart.VISUAL_ID
+ || visualID == ServiceCollectionEditPart.VISUAL_ID;
+ }
+
+ /**
+ * @generated
+ */
+ protected void refreshSemantic() {
+ if (resolveSemanticElement() == null) {
+ return;
+ }
+ LinkedList<IAdaptable> createdViews = new LinkedList<IAdaptable>();
+ List<IntermediateModelNodeDescriptor> childDescriptors = IntermediateModelDiagramUpdater
+ .getStpIntermediateModel_1000SemanticChildren((View) getHost()
+ .getModel());
+ LinkedList<View> orphaned = new LinkedList<View>();
+ // we care to check only views we recognize as ours
+ LinkedList<View> knownViewChildren = new LinkedList<View>();
+ for (View v : getViewChildren()) {
+ if (isMyDiagramElement(v)) {
+ knownViewChildren.add(v);
+ }
+ }
+ // alternative to #cleanCanonicalSemanticChildren(getViewChildren(), semanticChildren)
+ //
+ // iteration happens over list of desired semantic elements, trying to find best matching View, while original CEP
+ // iterates views, potentially losing view (size/bounds) information - i.e. if there are few views to reference same EObject, only last one
+ // to answer isOrphaned == true will be used for the domain element representation, see #cleanCanonicalSemanticChildren()
+ for (Iterator<IntermediateModelNodeDescriptor> descriptorsIterator = childDescriptors
+ .iterator(); descriptorsIterator.hasNext();) {
+ IntermediateModelNodeDescriptor next = descriptorsIterator.next();
+ String hint = IntermediateModelVisualIDRegistry.getType(next
+ .getVisualID());
+ LinkedList<View> perfectMatch = new LinkedList<View>(); // both semanticElement and hint match that of NodeDescriptor
+ for (View childView : getViewChildren()) {
+ EObject semanticElement = childView.getElement();
+ if (next.getModelElement().equals(semanticElement)) {
+ if (hint.equals(childView.getType())) {
+ perfectMatch.add(childView);
+ // actually, can stop iteration over view children here, but
+ // may want to use not the first view but last one as a 'real' match (the way original CEP does
+ // with its trick with viewToSemanticMap inside #cleanCanonicalSemanticChildren
+ }
+ }
+ }
+ if (perfectMatch.size() > 0) {
+ descriptorsIterator.remove(); // precise match found no need to create anything for the NodeDescriptor
+ // use only one view (first or last?), keep rest as orphaned for further consideration
+ knownViewChildren.remove(perfectMatch.getFirst());
+ }
+ }
+ // those left in knownViewChildren are subject to removal - they are our diagram elements we didn't find match to,
+ // or those we have potential matches to, and thus need to be recreated, preserving size/location information.
+ orphaned.addAll(knownViewChildren);
+ //
+ ArrayList<CreateViewRequest.ViewDescriptor> viewDescriptors = new ArrayList<CreateViewRequest.ViewDescriptor>(
+ childDescriptors.size());
+ for (IntermediateModelNodeDescriptor next : childDescriptors) {
+ String hint = IntermediateModelVisualIDRegistry.getType(next
+ .getVisualID());
+ IAdaptable elementAdapter = new CanonicalElementAdapter(
+ next.getModelElement(), hint);
+ CreateViewRequest.ViewDescriptor descriptor = new CreateViewRequest.ViewDescriptor(
+ elementAdapter, Node.class, hint, ViewUtil.APPEND, false,
+ host().getDiagramPreferencesHint());
+ viewDescriptors.add(descriptor);
+ }
+
+ boolean changed = deleteViews(orphaned.iterator());
+ //
+ CreateViewRequest request = getCreateViewRequest(viewDescriptors);
+ Command cmd = getCreateViewCommand(request);
+ if (cmd != null && cmd.canExecute()) {
+ SetViewMutabilityCommand.makeMutable(
+ new EObjectAdapter(host().getNotationView())).execute();
+ executeCommand(cmd);
+ @SuppressWarnings("unchecked")
+ List<IAdaptable> nl = (List<IAdaptable>) request.getNewObject();
+ createdViews.addAll(nl);
+ }
+ if (changed || createdViews.size() > 0) {
+ postProcessRefreshSemantic(createdViews);
+ }
+
+ Collection<IAdaptable> createdConnectionViews = refreshConnections();
+
+ if (createdViews.size() > 1) {
+ // perform a layout of the container
+ DeferredLayoutCommand layoutCmd = new DeferredLayoutCommand(host()
+ .getEditingDomain(), createdViews, host());
+ executeCommand(new ICommandProxy(layoutCmd));
+ }
+
+ createdViews.addAll(createdConnectionViews);
+
+ makeViewsImmutable(createdViews);
+ }
+
+ /**
+ * @generated
+ */
+ private Collection<IAdaptable> refreshConnections() {
+ Domain2Notation domain2NotationMap = new Domain2Notation();
+ Collection<IntermediateModelLinkDescriptor> linkDescriptors = collectAllLinks(
+ getDiagram(), domain2NotationMap);
+ Collection existingLinks = new LinkedList(getDiagram().getEdges());
+ for (Iterator linksIterator = existingLinks.iterator(); linksIterator
+ .hasNext();) {
+ Edge nextDiagramLink = (Edge) linksIterator.next();
+ int diagramLinkVisualID = IntermediateModelVisualIDRegistry
+ .getVisualID(nextDiagramLink);
+ if (diagramLinkVisualID == -1) {
+ if (nextDiagramLink.getSource() != null
+ && nextDiagramLink.getTarget() != null) {
+ linksIterator.remove();
+ }
+ continue;
+ }
+ EObject diagramLinkObject = nextDiagramLink.getElement();
+ EObject diagramLinkSrc = nextDiagramLink.getSource().getElement();
+ EObject diagramLinkDst = nextDiagramLink.getTarget().getElement();
+ for (Iterator<IntermediateModelLinkDescriptor> linkDescriptorsIterator = linkDescriptors
+ .iterator(); linkDescriptorsIterator.hasNext();) {
+ IntermediateModelLinkDescriptor nextLinkDescriptor = linkDescriptorsIterator
+ .next();
+ if (diagramLinkObject == nextLinkDescriptor.getModelElement()
+ && diagramLinkSrc == nextLinkDescriptor.getSource()
+ && diagramLinkDst == nextLinkDescriptor
+ .getDestination()
+ && diagramLinkVisualID == nextLinkDescriptor
+ .getVisualID()) {
+ linksIterator.remove();
+ linkDescriptorsIterator.remove();
+ break;
+ }
+ }
+ }
+ deleteViews(existingLinks.iterator());
+ return createConnections(linkDescriptors, domain2NotationMap);
+ }
+
+ /**
+ * @generated
+ */
+ private Collection<IntermediateModelLinkDescriptor> collectAllLinks(
+ View view, Domain2Notation domain2NotationMap) {
+ if (!StpIntermediateModelEditPart.MODEL_ID
+ .equals(IntermediateModelVisualIDRegistry.getModelID(view))) {
+ return Collections.emptyList();
+ }
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ switch (IntermediateModelVisualIDRegistry.getVisualID(view)) {
+ case StpIntermediateModelEditPart.VISUAL_ID: {
+ if (!domain2NotationMap.containsKey(view.getElement())) {
+ result.addAll(IntermediateModelDiagramUpdater
+ .getStpIntermediateModel_1000ContainedLinks(view));
+ }
+ domain2NotationMap.putView(view.getElement(), view);
+ break;
+ }
+ case ProcessCollectionEditPart.VISUAL_ID: {
+ if (!domain2NotationMap.containsKey(view.getElement())) {
+ result.addAll(IntermediateModelDiagramUpdater
+ .getProcessCollection_2005ContainedLinks(view));
+ }
+ domain2NotationMap.putView(view.getElement(), view);
+ break;
+ }
+ case ServiceCollectionEditPart.VISUAL_ID: {
+ if (!domain2NotationMap.containsKey(view.getElement())) {
+ result.addAll(IntermediateModelDiagramUpdater
+ .getServiceCollection_2006ContainedLinks(view));
+ }
+ domain2NotationMap.putView(view.getElement(), view);
+ break;
+ }
+ case ProcessEditPart.VISUAL_ID: {
+ if (!domain2NotationMap.containsKey(view.getElement())) {
+ result.addAll(IntermediateModelDiagramUpdater
+ .getProcess_3007ContainedLinks(view));
+ }
+ domain2NotationMap.putView(view.getElement(), view);
+ break;
+ }
+ case StepEditPart.VISUAL_ID: {
+ if (!domain2NotationMap.containsKey(view.getElement())) {
+ result.addAll(IntermediateModelDiagramUpdater
+ .getStep_3008ContainedLinks(view));
+ }
+ domain2NotationMap.putView(view.getElement(), view);
+ break;
+ }
+ case ServiceEditPart.VISUAL_ID: {
+ if (!domain2NotationMap.containsKey(view.getElement())) {
+ result.addAll(IntermediateModelDiagramUpdater
+ .getService_3009ContainedLinks(view));
+ }
+ domain2NotationMap.putView(view.getElement(), view);
+ break;
+ }
+ case TransitionEditPart.VISUAL_ID: {
+ if (!domain2NotationMap.containsKey(view.getElement())) {
+ result.addAll(IntermediateModelDiagramUpdater
+ .getTransition_4009ContainedLinks(view));
+ }
+ domain2NotationMap.putView(view.getElement(), view);
+ break;
+ }
+ }
+ for (Iterator children = view.getChildren().iterator(); children
+ .hasNext();) {
+ result.addAll(collectAllLinks((View) children.next(),
+ domain2NotationMap));
+ }
+ for (Iterator edges = view.getSourceEdges().iterator(); edges.hasNext();) {
+ result.addAll(collectAllLinks((View) edges.next(),
+ domain2NotationMap));
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private Collection<IAdaptable> createConnections(
+ Collection<IntermediateModelLinkDescriptor> linkDescriptors,
+ Domain2Notation domain2NotationMap) {
+ LinkedList<IAdaptable> adapters = new LinkedList<IAdaptable>();
+ for (IntermediateModelLinkDescriptor nextLinkDescriptor : linkDescriptors) {
+ EditPart sourceEditPart = getSourceEditPart(nextLinkDescriptor,
+ domain2NotationMap);
+ EditPart targetEditPart = getTargetEditPart(nextLinkDescriptor,
+ domain2NotationMap);
+ if (sourceEditPart == null || targetEditPart == null) {
+ continue;
+ }
+ CreateConnectionViewRequest.ConnectionViewDescriptor descriptor = new CreateConnectionViewRequest.ConnectionViewDescriptor(
+ nextLinkDescriptor.getSemanticAdapter(),
+ IntermediateModelVisualIDRegistry
+ .getType(nextLinkDescriptor.getVisualID()),
+ ViewUtil.APPEND, false,
+ ((IGraphicalEditPart) getHost())
+ .getDiagramPreferencesHint());
+ CreateConnectionViewRequest ccr = new CreateConnectionViewRequest(
+ descriptor);
+ ccr.setType(RequestConstants.REQ_CONNECTION_START);
+ ccr.setSourceEditPart(sourceEditPart);
+ sourceEditPart.getCommand(ccr);
+ ccr.setTargetEditPart(targetEditPart);
+ ccr.setType(RequestConstants.REQ_CONNECTION_END);
+ Command cmd = targetEditPart.getCommand(ccr);
+ if (cmd != null && cmd.canExecute()) {
+ executeCommand(cmd);
+ IAdaptable viewAdapter = (IAdaptable) ccr.getNewObject();
+ if (viewAdapter != null) {
+ adapters.add(viewAdapter);
+ }
+ }
+ }
+ return adapters;
+ }
+
+ /**
+ * @generated
+ */
+ private EditPart getEditPart(EObject domainModelElement,
+ Domain2Notation domain2NotationMap) {
+ View view = (View) domain2NotationMap.get(domainModelElement);
+ if (view != null) {
+ return (EditPart) getHost().getViewer().getEditPartRegistry()
+ .get(view);
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ private Diagram getDiagram() {
+ return ((View) getHost().getModel()).getDiagram();
+ }
+
+ /**
+ * @generated
+ */
+ private EditPart getSourceEditPart(UpdaterLinkDescriptor descriptor,
+ Domain2Notation domain2NotationMap) {
+ return getEditPart(descriptor.getSource(), domain2NotationMap);
+ }
+
+ /**
+ * @generated
+ */
+ private EditPart getTargetEditPart(UpdaterLinkDescriptor descriptor,
+ Domain2Notation domain2NotationMap) {
+ return getEditPart(descriptor.getDestination(), domain2NotationMap);
+ }
+
+ /**
+ * @generated
+ */
+ protected final EditPart getHintedEditPart(EObject domainModelElement,
+ Domain2Notation domain2NotationMap, int hintVisualId) {
+ View view = (View) domain2NotationMap.getHinted(domainModelElement,
+ IntermediateModelVisualIDRegistry.getType(hintVisualId));
+ if (view != null) {
+ return (EditPart) getHost().getViewer().getEditPartRegistry()
+ .get(view);
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ @SuppressWarnings("serial")
+ protected static class Domain2Notation extends HashMap<EObject, View> {
+ /**
+ * @generated
+ */
+ public boolean containsDomainElement(EObject domainElement) {
+ return this.containsKey(domainElement);
+ }
+
+ /**
+ * @generated
+ */
+ public View getHinted(EObject domainEObject, String hint) {
+ return this.get(domainEObject);
+ }
+
+ /**
+ * @generated
+ */
+ public void putView(EObject domainElement, View view) {
+ if (!containsKey(view.getElement())) {
+ this.put(domainElement, view);
+ }
+ }
+
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/StpIntermediateModelItemSemanticEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/StpIntermediateModelItemSemanticEditPolicy.java
new file mode 100755
index 0000000..d60c16f
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/StpIntermediateModelItemSemanticEditPolicy.java
@@ -0,0 +1,69 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.emf.commands.core.commands.DuplicateEObjectsCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DuplicateElementsRequest;
+import org.eclipse.soa.mangrove.diagram.edit.commands.ProcessCollectionCreateCommand;
+import org.eclipse.soa.mangrove.diagram.edit.commands.ServiceCollectionCreateCommand;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+
+/**
+ * @generated
+ */
+public class StpIntermediateModelItemSemanticEditPolicy extends
+ IntermediateModelBaseItemSemanticEditPolicy {
+
+ /**
+ * @generated
+ */
+ public StpIntermediateModelItemSemanticEditPolicy() {
+ super(IntermediateModelElementTypes.StpIntermediateModel_1000);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getCreateCommand(CreateElementRequest req) {
+ if (IntermediateModelElementTypes.ProcessCollection_2005 == req
+ .getElementType()) {
+ return getGEFWrapper(new ProcessCollectionCreateCommand(req));
+ }
+ if (IntermediateModelElementTypes.ServiceCollection_2006 == req
+ .getElementType()) {
+ return getGEFWrapper(new ServiceCollectionCreateCommand(req));
+ }
+ return super.getCreateCommand(req);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getDuplicateCommand(DuplicateElementsRequest req) {
+ TransactionalEditingDomain editingDomain = ((IGraphicalEditPart) getHost())
+ .getEditingDomain();
+ return getGEFWrapper(new DuplicateAnythingCommand(editingDomain, req));
+ }
+
+ /**
+ * @generated
+ */
+ private static class DuplicateAnythingCommand extends
+ DuplicateEObjectsCommand {
+
+ /**
+ * @generated
+ */
+ public DuplicateAnythingCommand(
+ TransactionalEditingDomain editingDomain,
+ DuplicateElementsRequest req) {
+ super(editingDomain, req.getLabel(), req
+ .getElementsToBeDuplicated(), req
+ .getAllDuplicatedElementsMap());
+ }
+
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/TransitionItemSemanticEditPolicy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/TransitionItemSemanticEditPolicy.java
new file mode 100755
index 0000000..09cf632
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/edit/policies/TransitionItemSemanticEditPolicy.java
@@ -0,0 +1,28 @@
+package org.eclipse.soa.mangrove.diagram.edit.policies;
+
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.emf.type.core.commands.DestroyElementCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+
+/**
+ * @generated
+ */
+public class TransitionItemSemanticEditPolicy extends
+ IntermediateModelBaseItemSemanticEditPolicy {
+
+ /**
+ * @generated
+ */
+ public TransitionItemSemanticEditPolicy() {
+ super(IntermediateModelElementTypes.Transition_4009);
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getDestroyElementCommand(DestroyElementRequest req) {
+ return getGEFWrapper(new DestroyElementCommand(req));
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelAbstractNavigatorItem.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelAbstractNavigatorItem.java
new file mode 100755
index 0000000..d4edce4
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelAbstractNavigatorItem.java
@@ -0,0 +1,62 @@
+package org.eclipse.soa.mangrove.diagram.navigator;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
+
+/**
+ * @generated
+ */
+public abstract class IntermediateModelAbstractNavigatorItem extends
+ PlatformObject {
+
+ /**
+ * @generated
+ */
+ static {
+ final Class[] supportedTypes = new Class[] { ITabbedPropertySheetPageContributor.class };
+ final ITabbedPropertySheetPageContributor propertySheetPageContributor = new ITabbedPropertySheetPageContributor() {
+ public String getContributorId() {
+ return "org.eclipse.soa.mangrove.diagram"; //$NON-NLS-1$
+ }
+ };
+ Platform.getAdapterManager().registerAdapters(
+ new IAdapterFactory() {
+
+ public Object getAdapter(Object adaptableObject,
+ Class adapterType) {
+ if (adaptableObject instanceof org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelAbstractNavigatorItem
+ && adapterType == ITabbedPropertySheetPageContributor.class) {
+ return propertySheetPageContributor;
+ }
+ return null;
+ }
+
+ public Class[] getAdapterList() {
+ return supportedTypes;
+ }
+ },
+ org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelAbstractNavigatorItem.class);
+ }
+
+ /**
+ * @generated
+ */
+ private Object myParent;
+
+ /**
+ * @generated
+ */
+ protected IntermediateModelAbstractNavigatorItem(Object parent) {
+ myParent = parent;
+ }
+
+ /**
+ * @generated
+ */
+ public Object getParent() {
+ return myParent;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelDomainNavigatorContentProvider.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelDomainNavigatorContentProvider.java
new file mode 100755
index 0000000..fdba5bd
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelDomainNavigatorContentProvider.java
@@ -0,0 +1,230 @@
+package org.eclipse.soa.mangrove.diagram.navigator;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
+import org.eclipse.gmf.runtime.emf.core.GMFEditingDomainFactory;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonContentProvider;
+
+/**
+ * @generated
+ */
+public class IntermediateModelDomainNavigatorContentProvider implements
+ ICommonContentProvider {
+
+ /**
+ * @generated
+ */
+ private AdapterFactoryContentProvider myAdapterFctoryContentProvier;
+
+ /**
+ * @generated
+ */
+ private static final Object[] EMPTY_ARRAY = new Object[0];
+
+ /**
+ * @generated
+ */
+ private Viewer myViewer;
+
+ /**
+ * @generated
+ */
+ private AdapterFactoryEditingDomain myEditingDomain;
+
+ /**
+ * @generated
+ */
+ private WorkspaceSynchronizer myWorkspaceSynchronizer;
+
+ /**
+ * @generated
+ */
+ private Runnable myViewerRefreshRunnable;
+
+ /**
+ * @generated
+ */
+ public IntermediateModelDomainNavigatorContentProvider() {
+ myAdapterFctoryContentProvier = new AdapterFactoryContentProvider(
+ IntermediateModelDiagramEditorPlugin.getInstance()
+ .getItemProvidersAdapterFactory());
+ TransactionalEditingDomain editingDomain = GMFEditingDomainFactory.INSTANCE
+ .createEditingDomain();
+ myEditingDomain = (AdapterFactoryEditingDomain) editingDomain;
+ myEditingDomain.setResourceToReadOnlyMap(new HashMap() {
+ public Object get(Object key) {
+ if (!containsKey(key)) {
+ put(key, Boolean.TRUE);
+ }
+ return super.get(key);
+ }
+ });
+ myViewerRefreshRunnable = new Runnable() {
+ public void run() {
+ if (myViewer != null) {
+ myViewer.refresh();
+ }
+ }
+ };
+ myWorkspaceSynchronizer = new WorkspaceSynchronizer(editingDomain,
+ new WorkspaceSynchronizer.Delegate() {
+ public void dispose() {
+ }
+
+ public boolean handleResourceChanged(final Resource resource) {
+ unloadAllResources();
+ asyncRefresh();
+ return true;
+ }
+
+ public boolean handleResourceDeleted(Resource resource) {
+ unloadAllResources();
+ asyncRefresh();
+ return true;
+ }
+
+ public boolean handleResourceMoved(Resource resource,
+ final URI newURI) {
+ unloadAllResources();
+ asyncRefresh();
+ return true;
+ }
+ });
+ }
+
+ /**
+ * @generated
+ */
+ public void dispose() {
+ myWorkspaceSynchronizer.dispose();
+ myWorkspaceSynchronizer = null;
+ myViewerRefreshRunnable = null;
+ myViewer = null;
+ unloadAllResources();
+ ((TransactionalEditingDomain) myEditingDomain).dispose();
+ myEditingDomain = null;
+ }
+
+ /**
+ * @generated
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ myViewer = viewer;
+ }
+
+ /**
+ * @generated
+ */
+ void unloadAllResources() {
+ for (Resource nextResource : myEditingDomain.getResourceSet()
+ .getResources()) {
+ nextResource.unload();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ void asyncRefresh() {
+ if (myViewer != null && !myViewer.getControl().isDisposed()) {
+ myViewer.getControl().getDisplay()
+ .asyncExec(myViewerRefreshRunnable);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ /**
+ * @generated
+ */
+ public void restoreState(IMemento aMemento) {
+ }
+
+ /**
+ * @generated
+ */
+ public void saveState(IMemento aMemento) {
+ }
+
+ /**
+ * @generated
+ */
+ public void init(ICommonContentExtensionSite aConfig) {
+ }
+
+ /**
+ * @generated
+ */
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof IFile) {
+ IFile file = (IFile) parentElement;
+ URI fileURI = URI.createPlatformResourceURI(file.getFullPath()
+ .toString(), true);
+ Resource resource = myEditingDomain.getResourceSet().getResource(
+ fileURI, true);
+ return wrapEObjects(
+ myAdapterFctoryContentProvier.getChildren(resource),
+ parentElement);
+ }
+
+ if (parentElement instanceof IntermediateModelDomainNavigatorItem) {
+ return wrapEObjects(
+ myAdapterFctoryContentProvier.getChildren(((IntermediateModelDomainNavigatorItem) parentElement)
+ .getEObject()), parentElement);
+ }
+ return EMPTY_ARRAY;
+ }
+
+ /**
+ * @generated
+ */
+ public Object[] wrapEObjects(Object[] objects, Object parentElement) {
+ Collection result = new ArrayList();
+ for (int i = 0; i < objects.length; i++) {
+ if (objects[i] instanceof EObject) {
+ result.add(new IntermediateModelDomainNavigatorItem(
+ (EObject) objects[i], parentElement,
+ myAdapterFctoryContentProvier));
+ }
+ }
+ return result.toArray();
+ }
+
+ /**
+ * @generated
+ */
+ public Object getParent(Object element) {
+ if (element instanceof IntermediateModelAbstractNavigatorItem) {
+ IntermediateModelAbstractNavigatorItem abstractNavigatorItem = (IntermediateModelAbstractNavigatorItem) element;
+ return abstractNavigatorItem.getParent();
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean hasChildren(Object element) {
+ return element instanceof IFile || getChildren(element).length > 0;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelDomainNavigatorItem.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelDomainNavigatorItem.java
new file mode 100755
index 0000000..755c5ea
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelDomainNavigatorItem.java
@@ -0,0 +1,117 @@
+package org.eclipse.soa.mangrove.diagram.navigator;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.IPropertySourceProvider;
+
+/**
+ * @generated
+ */
+public class IntermediateModelDomainNavigatorItem extends PlatformObject {
+
+ /**
+ * @generated
+ */
+ static {
+ final Class[] supportedTypes = new Class[] { EObject.class,
+ IPropertySource.class };
+ Platform.getAdapterManager().registerAdapters(
+ new IAdapterFactory() {
+
+ public Object getAdapter(Object adaptableObject,
+ Class adapterType) {
+ if (adaptableObject instanceof org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelDomainNavigatorItem) {
+ org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelDomainNavigatorItem domainNavigatorItem = (org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelDomainNavigatorItem) adaptableObject;
+ EObject eObject = domainNavigatorItem.getEObject();
+ if (adapterType == EObject.class) {
+ return eObject;
+ }
+ if (adapterType == IPropertySource.class) {
+ return domainNavigatorItem
+ .getPropertySourceProvider()
+ .getPropertySource(eObject);
+ }
+ }
+
+ return null;
+ }
+
+ public Class[] getAdapterList() {
+ return supportedTypes;
+ }
+ },
+ org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelDomainNavigatorItem.class);
+ }
+
+ /**
+ * @generated
+ */
+ private Object myParent;
+
+ /**
+ * @generated
+ */
+ private EObject myEObject;
+
+ /**
+ * @generated
+ */
+ private IPropertySourceProvider myPropertySourceProvider;
+
+ /**
+ * @generated
+ */
+ public IntermediateModelDomainNavigatorItem(EObject eObject, Object parent,
+ IPropertySourceProvider propertySourceProvider) {
+ myParent = parent;
+ myEObject = eObject;
+ myPropertySourceProvider = propertySourceProvider;
+ }
+
+ /**
+ * @generated
+ */
+ public Object getParent() {
+ return myParent;
+ }
+
+ /**
+ * @generated
+ */
+ public EObject getEObject() {
+ return myEObject;
+ }
+
+ /**
+ * @generated
+ */
+ public IPropertySourceProvider getPropertySourceProvider() {
+ return myPropertySourceProvider;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean equals(Object obj) {
+ if (obj instanceof org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelDomainNavigatorItem) {
+ return EcoreUtil
+ .getURI(getEObject())
+ .equals(EcoreUtil
+ .getURI(((org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelDomainNavigatorItem) obj)
+ .getEObject()));
+ }
+ return super.equals(obj);
+ }
+
+ /**
+ * @generated
+ */
+ public int hashCode() {
+ return EcoreUtil.getURI(getEObject()).hashCode();
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelDomainNavigatorLabelProvider.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelDomainNavigatorLabelProvider.java
new file mode 100755
index 0000000..4d46ebf
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelDomainNavigatorLabelProvider.java
@@ -0,0 +1,101 @@
+package org.eclipse.soa.mangrove.diagram.navigator;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
+
+/**
+ * @generated
+ */
+public class IntermediateModelDomainNavigatorLabelProvider implements
+ ICommonLabelProvider {
+
+ /**
+ * @generated
+ */
+ private AdapterFactoryLabelProvider myAdapterFactoryLabelProvider = new AdapterFactoryLabelProvider(
+ IntermediateModelDiagramEditorPlugin.getInstance()
+ .getItemProvidersAdapterFactory());
+
+ /**
+ * @generated
+ */
+ public void init(ICommonContentExtensionSite aConfig) {
+ }
+
+ /**
+ * @generated
+ */
+ public Image getImage(Object element) {
+ if (element instanceof IntermediateModelDomainNavigatorItem) {
+ return myAdapterFactoryLabelProvider
+ .getImage(((IntermediateModelDomainNavigatorItem) element)
+ .getEObject());
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ public String getText(Object element) {
+ if (element instanceof IntermediateModelDomainNavigatorItem) {
+ return myAdapterFactoryLabelProvider
+ .getText(((IntermediateModelDomainNavigatorItem) element)
+ .getEObject());
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ public void addListener(ILabelProviderListener listener) {
+ myAdapterFactoryLabelProvider.addListener(listener);
+ }
+
+ /**
+ * @generated
+ */
+ public void dispose() {
+ myAdapterFactoryLabelProvider.dispose();
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isLabelProperty(Object element, String property) {
+ return myAdapterFactoryLabelProvider.isLabelProperty(element, property);
+ }
+
+ /**
+ * @generated
+ */
+ public void removeListener(ILabelProviderListener listener) {
+ myAdapterFactoryLabelProvider.removeListener(listener);
+ }
+
+ /**
+ * @generated
+ */
+ public void restoreState(IMemento aMemento) {
+ }
+
+ /**
+ * @generated
+ */
+ public void saveState(IMemento aMemento) {
+ }
+
+ /**
+ * @generated
+ */
+ public String getDescription(Object anElement) {
+ return null;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorActionProvider.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorActionProvider.java
new file mode 100755
index 0000000..633595d
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorActionProvider.java
@@ -0,0 +1,178 @@
+package org.eclipse.soa.mangrove.diagram.navigator;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.common.ui.URIEditorInput;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditor;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.part.Messages;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionConstants;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
+import org.eclipse.ui.part.FileEditorInput;
+
+/**
+ * @generated
+ */
+public class IntermediateModelNavigatorActionProvider extends
+ CommonActionProvider {
+
+ /**
+ * @generated
+ */
+ private boolean myContribute;
+
+ /**
+ * @generated
+ */
+ private OpenDiagramAction myOpenDiagramAction;
+
+ /**
+ * @generated
+ */
+ public void init(ICommonActionExtensionSite aSite) {
+ super.init(aSite);
+ if (aSite.getViewSite() instanceof ICommonViewerWorkbenchSite) {
+ myContribute = true;
+ makeActions((ICommonViewerWorkbenchSite) aSite.getViewSite());
+ } else {
+ myContribute = false;
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private void makeActions(ICommonViewerWorkbenchSite viewerSite) {
+ myOpenDiagramAction = new OpenDiagramAction(viewerSite);
+ }
+
+ /**
+ * @generated
+ */
+ public void fillActionBars(IActionBars actionBars) {
+ if (!myContribute) {
+ return;
+ }
+ IStructuredSelection selection = (IStructuredSelection) getContext()
+ .getSelection();
+ myOpenDiagramAction.selectionChanged(selection);
+ if (myOpenDiagramAction.isEnabled()) {
+ actionBars.setGlobalActionHandler(ICommonActionConstants.OPEN,
+ myOpenDiagramAction);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public void fillContextMenu(IMenuManager menu) {
+ }
+
+ /**
+ * @generated
+ */
+ private static class OpenDiagramAction extends Action {
+
+ /**
+ * @generated
+ */
+ private Diagram myDiagram;
+
+ /**
+ * @generated
+ */
+ private ICommonViewerWorkbenchSite myViewerSite;
+
+ /**
+ * @generated
+ */
+ public OpenDiagramAction(ICommonViewerWorkbenchSite viewerSite) {
+ super(Messages.NavigatorActionProvider_OpenDiagramActionName);
+ myViewerSite = viewerSite;
+ }
+
+ /**
+ * @generated
+ */
+ public final void selectionChanged(IStructuredSelection selection) {
+ myDiagram = null;
+ if (selection.size() == 1) {
+ Object selectedElement = selection.getFirstElement();
+ if (selectedElement instanceof IntermediateModelNavigatorItem) {
+ selectedElement = ((IntermediateModelNavigatorItem) selectedElement)
+ .getView();
+ } else if (selectedElement instanceof IAdaptable) {
+ selectedElement = ((IAdaptable) selectedElement)
+ .getAdapter(View.class);
+ }
+ if (selectedElement instanceof Diagram) {
+ Diagram diagram = (Diagram) selectedElement;
+ if (StpIntermediateModelEditPart.MODEL_ID
+ .equals(IntermediateModelVisualIDRegistry
+ .getModelID(diagram))) {
+ myDiagram = diagram;
+ }
+ }
+ }
+ setEnabled(myDiagram != null);
+ }
+
+ /**
+ * @generated
+ */
+ public void run() {
+ if (myDiagram == null || myDiagram.eResource() == null) {
+ return;
+ }
+
+ IEditorInput editorInput = getEditorInput(myDiagram);
+ IWorkbenchPage page = myViewerSite.getPage();
+ try {
+ page.openEditor(editorInput, IntermediateModelDiagramEditor.ID);
+ } catch (PartInitException e) {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Exception while openning diagram", e); //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private static IEditorInput getEditorInput(Diagram diagram) {
+ Resource diagramResource = diagram.eResource();
+ for (EObject nextEObject : diagramResource.getContents()) {
+ if (nextEObject == diagram) {
+ return new FileEditorInput(
+ WorkspaceSynchronizer.getFile(diagramResource));
+ }
+ if (nextEObject instanceof Diagram) {
+ break;
+ }
+ }
+ URI uri = EcoreUtil.getURI(diagram);
+ String editorName = uri.lastSegment() + '#'
+ + diagram.eResource().getContents().indexOf(diagram);
+ IEditorInput editorInput = new URIEditorInput(uri, editorName);
+ return editorInput;
+ }
+
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorContentProvider.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorContentProvider.java
new file mode 100755
index 0000000..e33149b
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorContentProvider.java
@@ -0,0 +1,634 @@
+package org.eclipse.soa.mangrove.diagram.navigator;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
+import org.eclipse.gmf.runtime.emf.core.GMFEditingDomainFactory;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceNeedsEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepServiceModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.TransitionEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.part.Messages;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonContentProvider;
+
+/**
+ * @generated
+ */
+public class IntermediateModelNavigatorContentProvider implements
+ ICommonContentProvider {
+
+ /**
+ * @generated
+ */
+ private static final Object[] EMPTY_ARRAY = new Object[0];
+
+ /**
+ * @generated
+ */
+ private Viewer myViewer;
+
+ /**
+ * @generated
+ */
+ private AdapterFactoryEditingDomain myEditingDomain;
+
+ /**
+ * @generated
+ */
+ private WorkspaceSynchronizer myWorkspaceSynchronizer;
+
+ /**
+ * @generated
+ */
+ private Runnable myViewerRefreshRunnable;
+
+ /**
+ * @generated
+ */
+ @SuppressWarnings({ "unchecked", "serial", "rawtypes" })
+ public IntermediateModelNavigatorContentProvider() {
+ TransactionalEditingDomain editingDomain = GMFEditingDomainFactory.INSTANCE
+ .createEditingDomain();
+ myEditingDomain = (AdapterFactoryEditingDomain) editingDomain;
+ myEditingDomain.setResourceToReadOnlyMap(new HashMap() {
+ public Object get(Object key) {
+ if (!containsKey(key)) {
+ put(key, Boolean.TRUE);
+ }
+ return super.get(key);
+ }
+ });
+ myViewerRefreshRunnable = new Runnable() {
+ public void run() {
+ if (myViewer != null) {
+ myViewer.refresh();
+ }
+ }
+ };
+ myWorkspaceSynchronizer = new WorkspaceSynchronizer(editingDomain,
+ new WorkspaceSynchronizer.Delegate() {
+ public void dispose() {
+ }
+
+ public boolean handleResourceChanged(final Resource resource) {
+ unloadAllResources();
+ asyncRefresh();
+ return true;
+ }
+
+ public boolean handleResourceDeleted(Resource resource) {
+ unloadAllResources();
+ asyncRefresh();
+ return true;
+ }
+
+ public boolean handleResourceMoved(Resource resource,
+ final URI newURI) {
+ unloadAllResources();
+ asyncRefresh();
+ return true;
+ }
+ });
+ }
+
+ /**
+ * @generated
+ */
+ public void dispose() {
+ myWorkspaceSynchronizer.dispose();
+ myWorkspaceSynchronizer = null;
+ myViewerRefreshRunnable = null;
+ myViewer = null;
+ unloadAllResources();
+ ((TransactionalEditingDomain) myEditingDomain).dispose();
+ myEditingDomain = null;
+ }
+
+ /**
+ * @generated
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ myViewer = viewer;
+ }
+
+ /**
+ * @generated
+ */
+ void unloadAllResources() {
+ for (Resource nextResource : myEditingDomain.getResourceSet()
+ .getResources()) {
+ nextResource.unload();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ void asyncRefresh() {
+ if (myViewer != null && !myViewer.getControl().isDisposed()) {
+ myViewer.getControl().getDisplay()
+ .asyncExec(myViewerRefreshRunnable);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ /**
+ * @generated
+ */
+ public void restoreState(IMemento aMemento) {
+ }
+
+ /**
+ * @generated
+ */
+ public void saveState(IMemento aMemento) {
+ }
+
+ /**
+ * @generated
+ */
+ public void init(ICommonContentExtensionSite aConfig) {
+ }
+
+ /**
+ * @generated
+ */
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof IFile) {
+ IFile file = (IFile) parentElement;
+ URI fileURI = URI.createPlatformResourceURI(file.getFullPath()
+ .toString(), true);
+ Resource resource = myEditingDomain.getResourceSet().getResource(
+ fileURI, true);
+ ArrayList<IntermediateModelNavigatorItem> result = new ArrayList<IntermediateModelNavigatorItem>();
+ ArrayList<View> topViews = new ArrayList<View>(resource
+ .getContents().size());
+ for (EObject o : resource.getContents()) {
+ if (o instanceof View) {
+ topViews.add((View) o);
+ }
+ }
+ result.addAll(createNavigatorItems(
+ selectViewsByType(topViews,
+ StpIntermediateModelEditPart.MODEL_ID), file, false));
+ return result.toArray();
+ }
+
+ if (parentElement instanceof IntermediateModelNavigatorGroup) {
+ IntermediateModelNavigatorGroup group = (IntermediateModelNavigatorGroup) parentElement;
+ return group.getChildren();
+ }
+
+ if (parentElement instanceof IntermediateModelNavigatorItem) {
+ IntermediateModelNavigatorItem navigatorItem = (IntermediateModelNavigatorItem) parentElement;
+ if (navigatorItem.isLeaf() || !isOwnView(navigatorItem.getView())) {
+ return EMPTY_ARRAY;
+ }
+ return getViewChildren(navigatorItem.getView(), parentElement);
+ }
+
+ return EMPTY_ARRAY;
+ }
+
+ /**
+ * @generated
+ */
+ private Object[] getViewChildren(View view, Object parentElement) {
+ switch (IntermediateModelVisualIDRegistry.getVisualID(view)) {
+
+ case StpIntermediateModelEditPart.VISUAL_ID: {
+ LinkedList<IntermediateModelAbstractNavigatorItem> result = new LinkedList<IntermediateModelAbstractNavigatorItem>();
+ Diagram sv = (Diagram) view;
+ IntermediateModelNavigatorGroup links = new IntermediateModelNavigatorGroup(
+ Messages.NavigatorGroupName_StpIntermediateModel_1000_links,
+ "icons/linksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+ Collection<View> connectedViews;
+ connectedViews = getChildrenByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ProcessCollectionEditPart.VISUAL_ID));
+ result.addAll(createNavigatorItems(connectedViews, parentElement,
+ false));
+ connectedViews = getChildrenByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ServiceCollectionEditPart.VISUAL_ID));
+ result.addAll(createNavigatorItems(connectedViews, parentElement,
+ false));
+ connectedViews = getDiagramLinksByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(TransitionEditPart.VISUAL_ID));
+ links.addChildren(createNavigatorItems(connectedViews, links, false));
+ connectedViews = getDiagramLinksByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(StepServiceModelEditPart.VISUAL_ID));
+ links.addChildren(createNavigatorItems(connectedViews, links, false));
+ connectedViews = getDiagramLinksByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ServiceNeedsEditPart.VISUAL_ID));
+ links.addChildren(createNavigatorItems(connectedViews, links, false));
+ if (!links.isEmpty()) {
+ result.add(links);
+ }
+ return result.toArray();
+ }
+
+ case TransitionEditPart.VISUAL_ID: {
+ LinkedList<IntermediateModelAbstractNavigatorItem> result = new LinkedList<IntermediateModelAbstractNavigatorItem>();
+ Edge sv = (Edge) view;
+ IntermediateModelNavigatorGroup target = new IntermediateModelNavigatorGroup(
+ Messages.NavigatorGroupName_Transition_4009_target,
+ "icons/linkTargetNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+ IntermediateModelNavigatorGroup source = new IntermediateModelNavigatorGroup(
+ Messages.NavigatorGroupName_Transition_4009_source,
+ "icons/linkSourceNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+ Collection<View> connectedViews;
+ connectedViews = getLinksTargetByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(StepEditPart.VISUAL_ID));
+ target.addChildren(createNavigatorItems(connectedViews, target,
+ true));
+ connectedViews = getLinksSourceByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(StepEditPart.VISUAL_ID));
+ source.addChildren(createNavigatorItems(connectedViews, source,
+ true));
+ if (!target.isEmpty()) {
+ result.add(target);
+ }
+ if (!source.isEmpty()) {
+ result.add(source);
+ }
+ return result.toArray();
+ }
+
+ case ProcessCollectionEditPart.VISUAL_ID: {
+ LinkedList<IntermediateModelAbstractNavigatorItem> result = new LinkedList<IntermediateModelAbstractNavigatorItem>();
+ Node sv = (Node) view;
+ Collection<View> connectedViews;
+ connectedViews = getChildrenByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ProcessEditPart.VISUAL_ID));
+ result.addAll(createNavigatorItems(connectedViews, parentElement,
+ false));
+ return result.toArray();
+ }
+
+ case ServiceEditPart.VISUAL_ID: {
+ LinkedList<IntermediateModelAbstractNavigatorItem> result = new LinkedList<IntermediateModelAbstractNavigatorItem>();
+ Node sv = (Node) view;
+ IntermediateModelNavigatorGroup incominglinks = new IntermediateModelNavigatorGroup(
+ Messages.NavigatorGroupName_Service_3009_incominglinks,
+ "icons/incomingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+ IntermediateModelNavigatorGroup outgoinglinks = new IntermediateModelNavigatorGroup(
+ Messages.NavigatorGroupName_Service_3009_outgoinglinks,
+ "icons/outgoingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+ Collection<View> connectedViews;
+ connectedViews = getIncomingLinksByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(StepServiceModelEditPart.VISUAL_ID));
+ incominglinks.addChildren(createNavigatorItems(connectedViews,
+ incominglinks, true));
+ connectedViews = getIncomingLinksByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ServiceNeedsEditPart.VISUAL_ID));
+ incominglinks.addChildren(createNavigatorItems(connectedViews,
+ incominglinks, true));
+ connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ServiceNeedsEditPart.VISUAL_ID));
+ outgoinglinks.addChildren(createNavigatorItems(connectedViews,
+ outgoinglinks, true));
+ if (!incominglinks.isEmpty()) {
+ result.add(incominglinks);
+ }
+ if (!outgoinglinks.isEmpty()) {
+ result.add(outgoinglinks);
+ }
+ return result.toArray();
+ }
+
+ case ServiceNeedsEditPart.VISUAL_ID: {
+ LinkedList<IntermediateModelAbstractNavigatorItem> result = new LinkedList<IntermediateModelAbstractNavigatorItem>();
+ Edge sv = (Edge) view;
+ IntermediateModelNavigatorGroup target = new IntermediateModelNavigatorGroup(
+ Messages.NavigatorGroupName_ServiceNeeds_4011_target,
+ "icons/linkTargetNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+ IntermediateModelNavigatorGroup source = new IntermediateModelNavigatorGroup(
+ Messages.NavigatorGroupName_ServiceNeeds_4011_source,
+ "icons/linkSourceNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+ Collection<View> connectedViews;
+ connectedViews = getLinksTargetByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ProcessEditPart.VISUAL_ID));
+ target.addChildren(createNavigatorItems(connectedViews, target,
+ true));
+ connectedViews = getLinksTargetByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ServiceEditPart.VISUAL_ID));
+ target.addChildren(createNavigatorItems(connectedViews, target,
+ true));
+ connectedViews = getLinksSourceByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ProcessEditPart.VISUAL_ID));
+ source.addChildren(createNavigatorItems(connectedViews, source,
+ true));
+ connectedViews = getLinksSourceByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ServiceEditPart.VISUAL_ID));
+ source.addChildren(createNavigatorItems(connectedViews, source,
+ true));
+ if (!target.isEmpty()) {
+ result.add(target);
+ }
+ if (!source.isEmpty()) {
+ result.add(source);
+ }
+ return result.toArray();
+ }
+
+ case StepServiceModelEditPart.VISUAL_ID: {
+ LinkedList<IntermediateModelAbstractNavigatorItem> result = new LinkedList<IntermediateModelAbstractNavigatorItem>();
+ Edge sv = (Edge) view;
+ IntermediateModelNavigatorGroup target = new IntermediateModelNavigatorGroup(
+ Messages.NavigatorGroupName_StepServiceModel_4010_target,
+ "icons/linkTargetNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+ IntermediateModelNavigatorGroup source = new IntermediateModelNavigatorGroup(
+ Messages.NavigatorGroupName_StepServiceModel_4010_source,
+ "icons/linkSourceNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+ Collection<View> connectedViews;
+ connectedViews = getLinksTargetByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ProcessEditPart.VISUAL_ID));
+ target.addChildren(createNavigatorItems(connectedViews, target,
+ true));
+ connectedViews = getLinksTargetByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ServiceEditPart.VISUAL_ID));
+ target.addChildren(createNavigatorItems(connectedViews, target,
+ true));
+ connectedViews = getLinksSourceByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(StepEditPart.VISUAL_ID));
+ source.addChildren(createNavigatorItems(connectedViews, source,
+ true));
+ if (!target.isEmpty()) {
+ result.add(target);
+ }
+ if (!source.isEmpty()) {
+ result.add(source);
+ }
+ return result.toArray();
+ }
+
+ case StepEditPart.VISUAL_ID: {
+ LinkedList<IntermediateModelAbstractNavigatorItem> result = new LinkedList<IntermediateModelAbstractNavigatorItem>();
+ Node sv = (Node) view;
+ IntermediateModelNavigatorGroup incominglinks = new IntermediateModelNavigatorGroup(
+ Messages.NavigatorGroupName_Step_3008_incominglinks,
+ "icons/incomingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+ IntermediateModelNavigatorGroup outgoinglinks = new IntermediateModelNavigatorGroup(
+ Messages.NavigatorGroupName_Step_3008_outgoinglinks,
+ "icons/outgoingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+ Collection<View> connectedViews;
+ connectedViews = getIncomingLinksByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(TransitionEditPart.VISUAL_ID));
+ incominglinks.addChildren(createNavigatorItems(connectedViews,
+ incominglinks, true));
+ connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(TransitionEditPart.VISUAL_ID));
+ outgoinglinks.addChildren(createNavigatorItems(connectedViews,
+ outgoinglinks, true));
+ connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(StepServiceModelEditPart.VISUAL_ID));
+ outgoinglinks.addChildren(createNavigatorItems(connectedViews,
+ outgoinglinks, true));
+ if (!incominglinks.isEmpty()) {
+ result.add(incominglinks);
+ }
+ if (!outgoinglinks.isEmpty()) {
+ result.add(outgoinglinks);
+ }
+ return result.toArray();
+ }
+
+ case ProcessEditPart.VISUAL_ID: {
+ LinkedList<IntermediateModelAbstractNavigatorItem> result = new LinkedList<IntermediateModelAbstractNavigatorItem>();
+ Node sv = (Node) view;
+ IntermediateModelNavigatorGroup incominglinks = new IntermediateModelNavigatorGroup(
+ Messages.NavigatorGroupName_Process_3007_incominglinks,
+ "icons/incomingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+ IntermediateModelNavigatorGroup outgoinglinks = new IntermediateModelNavigatorGroup(
+ Messages.NavigatorGroupName_Process_3007_outgoinglinks,
+ "icons/outgoingLinksNavigatorGroup.gif", parentElement); //$NON-NLS-1$
+ Collection<View> connectedViews;
+ connectedViews = getChildrenByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(StepEditPart.VISUAL_ID));
+ result.addAll(createNavigatorItems(connectedViews, parentElement,
+ false));
+ connectedViews = getIncomingLinksByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(StepServiceModelEditPart.VISUAL_ID));
+ incominglinks.addChildren(createNavigatorItems(connectedViews,
+ incominglinks, true));
+ connectedViews = getIncomingLinksByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ServiceNeedsEditPart.VISUAL_ID));
+ incominglinks.addChildren(createNavigatorItems(connectedViews,
+ incominglinks, true));
+ connectedViews = getOutgoingLinksByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ServiceNeedsEditPart.VISUAL_ID));
+ outgoinglinks.addChildren(createNavigatorItems(connectedViews,
+ outgoinglinks, true));
+ if (!incominglinks.isEmpty()) {
+ result.add(incominglinks);
+ }
+ if (!outgoinglinks.isEmpty()) {
+ result.add(outgoinglinks);
+ }
+ return result.toArray();
+ }
+
+ case ServiceCollectionEditPart.VISUAL_ID: {
+ LinkedList<IntermediateModelAbstractNavigatorItem> result = new LinkedList<IntermediateModelAbstractNavigatorItem>();
+ Node sv = (Node) view;
+ Collection<View> connectedViews;
+ connectedViews = getChildrenByType(Collections.singleton(sv),
+ IntermediateModelVisualIDRegistry
+ .getType(ServiceEditPart.VISUAL_ID));
+ result.addAll(createNavigatorItems(connectedViews, parentElement,
+ false));
+ return result.toArray();
+ }
+ }
+ return EMPTY_ARRAY;
+ }
+
+ /**
+ * @generated
+ */
+ private Collection<View> getLinksSourceByType(Collection<Edge> edges,
+ String type) {
+ LinkedList<View> result = new LinkedList<View>();
+ for (Edge nextEdge : edges) {
+ View nextEdgeSource = nextEdge.getSource();
+ if (type.equals(nextEdgeSource.getType())
+ && isOwnView(nextEdgeSource)) {
+ result.add(nextEdgeSource);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private Collection<View> getLinksTargetByType(Collection<Edge> edges,
+ String type) {
+ LinkedList<View> result = new LinkedList<View>();
+ for (Edge nextEdge : edges) {
+ View nextEdgeTarget = nextEdge.getTarget();
+ if (type.equals(nextEdgeTarget.getType())
+ && isOwnView(nextEdgeTarget)) {
+ result.add(nextEdgeTarget);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private Collection<View> getOutgoingLinksByType(
+ Collection<? extends View> nodes, String type) {
+ LinkedList<View> result = new LinkedList<View>();
+ for (View nextNode : nodes) {
+ result.addAll(selectViewsByType(nextNode.getSourceEdges(), type));
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private Collection<View> getIncomingLinksByType(
+ Collection<? extends View> nodes, String type) {
+ LinkedList<View> result = new LinkedList<View>();
+ for (View nextNode : nodes) {
+ result.addAll(selectViewsByType(nextNode.getTargetEdges(), type));
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private Collection<View> getChildrenByType(
+ Collection<? extends View> nodes, String type) {
+ LinkedList<View> result = new LinkedList<View>();
+ for (View nextNode : nodes) {
+ result.addAll(selectViewsByType(nextNode.getChildren(), type));
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private Collection<View> getDiagramLinksByType(
+ Collection<Diagram> diagrams, String type) {
+ ArrayList<View> result = new ArrayList<View>();
+ for (Diagram nextDiagram : diagrams) {
+ result.addAll(selectViewsByType(nextDiagram.getEdges(), type));
+ }
+ return result;
+ }
+
+ // TODO refactor as static method
+ /**
+ * @generated
+ */
+ private Collection<View> selectViewsByType(Collection<View> views,
+ String type) {
+ ArrayList<View> result = new ArrayList<View>();
+ for (View nextView : views) {
+ if (type.equals(nextView.getType()) && isOwnView(nextView)) {
+ result.add(nextView);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private boolean isOwnView(View view) {
+ return StpIntermediateModelEditPart.MODEL_ID
+ .equals(IntermediateModelVisualIDRegistry.getModelID(view));
+ }
+
+ /**
+ * @generated
+ */
+ private Collection<IntermediateModelNavigatorItem> createNavigatorItems(
+ Collection<View> views, Object parent, boolean isLeafs) {
+ ArrayList<IntermediateModelNavigatorItem> result = new ArrayList<IntermediateModelNavigatorItem>(
+ views.size());
+ for (View nextView : views) {
+ result.add(new IntermediateModelNavigatorItem(nextView, parent,
+ isLeafs));
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public Object getParent(Object element) {
+ if (element instanceof IntermediateModelAbstractNavigatorItem) {
+ IntermediateModelAbstractNavigatorItem abstractNavigatorItem = (IntermediateModelAbstractNavigatorItem) element;
+ return abstractNavigatorItem.getParent();
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean hasChildren(Object element) {
+ return element instanceof IFile || getChildren(element).length > 0;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorGroup.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorGroup.java
new file mode 100755
index 0000000..47100fa
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorGroup.java
@@ -0,0 +1,98 @@
+package org.eclipse.soa.mangrove.diagram.navigator;
+
+import java.util.Collection;
+import java.util.LinkedList;
+
+/**
+ * @generated
+ */
+public class IntermediateModelNavigatorGroup extends
+ IntermediateModelAbstractNavigatorItem {
+
+ /**
+ * @generated
+ */
+ private String myGroupName;
+
+ /**
+ * @generated
+ */
+ private String myIcon;
+
+ /**
+ * @generated
+ */
+ private Collection myChildren = new LinkedList();
+
+ /**
+ * @generated
+ */
+ IntermediateModelNavigatorGroup(String groupName, String icon, Object parent) {
+ super(parent);
+ myGroupName = groupName;
+ myIcon = icon;
+ }
+
+ /**
+ * @generated
+ */
+ public String getGroupName() {
+ return myGroupName;
+ }
+
+ /**
+ * @generated
+ */
+ public String getIcon() {
+ return myIcon;
+ }
+
+ /**
+ * @generated
+ */
+ public Object[] getChildren() {
+ return myChildren.toArray();
+ }
+
+ /**
+ * @generated
+ */
+ public void addChildren(Collection children) {
+ myChildren.addAll(children);
+ }
+
+ /**
+ * @generated
+ */
+ public void addChild(Object child) {
+ myChildren.add(child);
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isEmpty() {
+ return myChildren.size() == 0;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean equals(Object obj) {
+ if (obj instanceof org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorGroup) {
+ org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorGroup anotherGroup = (org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorGroup) obj;
+ if (getGroupName().equals(anotherGroup.getGroupName())) {
+ return getParent().equals(anotherGroup.getParent());
+ }
+ }
+ return super.equals(obj);
+ }
+
+ /**
+ * @generated
+ */
+ public int hashCode() {
+ return getGroupName().hashCode();
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorItem.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorItem.java
new file mode 100755
index 0000000..aa783eb
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorItem.java
@@ -0,0 +1,95 @@
+package org.eclipse.soa.mangrove.diagram.navigator;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.gmf.runtime.notation.View;
+
+/**
+ * @generated
+ */
+public class IntermediateModelNavigatorItem extends
+ IntermediateModelAbstractNavigatorItem {
+
+ /**
+ * @generated
+ */
+ static {
+ final Class[] supportedTypes = new Class[] { View.class, EObject.class };
+ Platform.getAdapterManager().registerAdapters(
+ new IAdapterFactory() {
+
+ public Object getAdapter(Object adaptableObject,
+ Class adapterType) {
+ if (adaptableObject instanceof org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorItem
+ && (adapterType == View.class || adapterType == EObject.class)) {
+ return ((org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorItem) adaptableObject)
+ .getView();
+ }
+ return null;
+ }
+
+ public Class[] getAdapterList() {
+ return supportedTypes;
+ }
+ },
+ org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorItem.class);
+ }
+
+ /**
+ * @generated
+ */
+ private View myView;
+
+ /**
+ * @generated
+ */
+ private boolean myLeaf = false;
+
+ /**
+ * @generated
+ */
+ public IntermediateModelNavigatorItem(View view, Object parent,
+ boolean isLeaf) {
+ super(parent);
+ myView = view;
+ myLeaf = isLeaf;
+ }
+
+ /**
+ * @generated
+ */
+ public View getView() {
+ return myView;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isLeaf() {
+ return myLeaf;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean equals(Object obj) {
+ if (obj instanceof org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorItem) {
+ return EcoreUtil
+ .getURI(getView())
+ .equals(EcoreUtil
+ .getURI(((org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorItem) obj)
+ .getView()));
+ }
+ return super.equals(obj);
+ }
+
+ /**
+ * @generated
+ */
+ public int hashCode() {
+ return EcoreUtil.getURI(getView()).hashCode();
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorLabelProvider.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorLabelProvider.java
new file mode 100755
index 0000000..7642195
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorLabelProvider.java
@@ -0,0 +1,361 @@
+package org.eclipse.soa.mangrove.diagram.navigator;
+
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParser;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserOptions;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.jface.viewers.ITreePathLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.ViewerLabel;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionPoolNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceNeedsEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceServiceNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepServiceModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.TransitionEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelParserProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.navigator.ICommonContentExtensionSite;
+import org.eclipse.ui.navigator.ICommonLabelProvider;
+
+/**
+ * @generated
+ */
+public class IntermediateModelNavigatorLabelProvider extends LabelProvider
+ implements ICommonLabelProvider, ITreePathLabelProvider {
+
+ /**
+ * @generated
+ */
+ static {
+ IntermediateModelDiagramEditorPlugin
+ .getInstance()
+ .getImageRegistry()
+ .put("Navigator?UnknownElement", ImageDescriptor.getMissingImageDescriptor()); //$NON-NLS-1$
+ IntermediateModelDiagramEditorPlugin
+ .getInstance()
+ .getImageRegistry()
+ .put("Navigator?ImageNotFound", ImageDescriptor.getMissingImageDescriptor()); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ public void updateLabel(ViewerLabel label, TreePath elementPath) {
+ Object element = elementPath.getLastSegment();
+ if (element instanceof IntermediateModelNavigatorItem
+ && !isOwnView(((IntermediateModelNavigatorItem) element)
+ .getView())) {
+ return;
+ }
+ label.setText(getText(element));
+ label.setImage(getImage(element));
+ }
+
+ /**
+ * @generated
+ */
+ public Image getImage(Object element) {
+ if (element instanceof IntermediateModelNavigatorGroup) {
+ IntermediateModelNavigatorGroup group = (IntermediateModelNavigatorGroup) element;
+ return IntermediateModelDiagramEditorPlugin.getInstance()
+ .getBundledImage(group.getIcon());
+ }
+
+ if (element instanceof IntermediateModelNavigatorItem) {
+ IntermediateModelNavigatorItem navigatorItem = (IntermediateModelNavigatorItem) element;
+ if (!isOwnView(navigatorItem.getView())) {
+ return super.getImage(element);
+ }
+ return getImage(navigatorItem.getView());
+ }
+
+ return super.getImage(element);
+ }
+
+ /**
+ * @generated
+ */
+ public Image getImage(View view) {
+ switch (IntermediateModelVisualIDRegistry.getVisualID(view)) {
+ case StpIntermediateModelEditPart.VISUAL_ID:
+ return getImage(
+ "Navigator?Diagram?http://eclipse.org/soa/mangrove?StpIntermediateModel", IntermediateModelElementTypes.StpIntermediateModel_1000); //$NON-NLS-1$
+ case TransitionEditPart.VISUAL_ID:
+ return getImage(
+ "Navigator?Link?http://eclipse.org/soa/mangrove?Transition", IntermediateModelElementTypes.Transition_4009); //$NON-NLS-1$
+ case ProcessCollectionEditPart.VISUAL_ID:
+ return getImage(
+ "Navigator?TopLevelNode?http://eclipse.org/soa/mangrove?ProcessCollection", IntermediateModelElementTypes.ProcessCollection_2005); //$NON-NLS-1$
+ case ServiceEditPart.VISUAL_ID:
+ return getImage(
+ "Navigator?Node?http://eclipse.org/soa/mangrove?Service", IntermediateModelElementTypes.Service_3009); //$NON-NLS-1$
+ case ServiceNeedsEditPart.VISUAL_ID:
+ return getImage(
+ "Navigator?Link?http://eclipse.org/soa/mangrove?Service?needs", IntermediateModelElementTypes.ServiceNeeds_4011); //$NON-NLS-1$
+ case StepServiceModelEditPart.VISUAL_ID:
+ return getImage(
+ "Navigator?Link?http://eclipse.org/soa/mangrove?Step?serviceModel", IntermediateModelElementTypes.StepServiceModel_4010); //$NON-NLS-1$
+ case StepEditPart.VISUAL_ID:
+ return getImage(
+ "Navigator?Node?http://eclipse.org/soa/mangrove?Step", IntermediateModelElementTypes.Step_3008); //$NON-NLS-1$
+ case ProcessEditPart.VISUAL_ID:
+ return getImage(
+ "Navigator?Node?http://eclipse.org/soa/mangrove?Process", IntermediateModelElementTypes.Process_3007); //$NON-NLS-1$
+ case ServiceCollectionEditPart.VISUAL_ID:
+ return getImage(
+ "Navigator?TopLevelNode?http://eclipse.org/soa/mangrove?ServiceCollection", IntermediateModelElementTypes.ServiceCollection_2006); //$NON-NLS-1$
+ }
+ return getImage("Navigator?UnknownElement", null); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ private Image getImage(String key, IElementType elementType) {
+ ImageRegistry imageRegistry = IntermediateModelDiagramEditorPlugin
+ .getInstance().getImageRegistry();
+ Image image = imageRegistry.get(key);
+ if (image == null
+ && elementType != null
+ && IntermediateModelElementTypes
+ .isKnownElementType(elementType)) {
+ image = IntermediateModelElementTypes.getImage(elementType);
+ imageRegistry.put(key, image);
+ }
+
+ if (image == null) {
+ image = imageRegistry.get("Navigator?ImageNotFound"); //$NON-NLS-1$
+ imageRegistry.put(key, image);
+ }
+ return image;
+ }
+
+ /**
+ * @generated
+ */
+ public String getText(Object element) {
+ if (element instanceof IntermediateModelNavigatorGroup) {
+ IntermediateModelNavigatorGroup group = (IntermediateModelNavigatorGroup) element;
+ return group.getGroupName();
+ }
+
+ if (element instanceof IntermediateModelNavigatorItem) {
+ IntermediateModelNavigatorItem navigatorItem = (IntermediateModelNavigatorItem) element;
+ if (!isOwnView(navigatorItem.getView())) {
+ return null;
+ }
+ return getText(navigatorItem.getView());
+ }
+
+ return super.getText(element);
+ }
+
+ /**
+ * @generated
+ */
+ public String getText(View view) {
+ if (view.getElement() != null && view.getElement().eIsProxy()) {
+ return getUnresolvedDomainElementProxyText(view);
+ }
+ switch (IntermediateModelVisualIDRegistry.getVisualID(view)) {
+ case StpIntermediateModelEditPart.VISUAL_ID:
+ return getStpIntermediateModel_1000Text(view);
+ case TransitionEditPart.VISUAL_ID:
+ return getTransition_4009Text(view);
+ case ProcessCollectionEditPart.VISUAL_ID:
+ return getProcessCollection_2005Text(view);
+ case ServiceEditPart.VISUAL_ID:
+ return getService_3009Text(view);
+ case ServiceNeedsEditPart.VISUAL_ID:
+ return getServiceNeeds_4011Text(view);
+ case StepServiceModelEditPart.VISUAL_ID:
+ return getStepServiceModel_4010Text(view);
+ case StepEditPart.VISUAL_ID:
+ return getStep_3008Text(view);
+ case ProcessEditPart.VISUAL_ID:
+ return getProcess_3007Text(view);
+ case ServiceCollectionEditPart.VISUAL_ID:
+ return getServiceCollection_2006Text(view);
+ }
+ return getUnknownElementText(view);
+ }
+
+ /**
+ * @generated
+ */
+ private String getStpIntermediateModel_1000Text(View view) {
+ return ""; //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ private String getTransition_4009Text(View view) {
+ return ""; //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ private String getProcessCollection_2005Text(View view) {
+ IParser parser = IntermediateModelParserProvider.getParser(
+ IntermediateModelElementTypes.ProcessCollection_2005, view
+ .getElement() != null ? view.getElement() : view,
+ IntermediateModelVisualIDRegistry
+ .getType(ProcessCollectionPoolNameEditPart.VISUAL_ID));
+ if (parser != null) {
+ return parser.getPrintString(new EObjectAdapter(
+ view.getElement() != null ? view.getElement() : view),
+ ParserOptions.NONE.intValue());
+ } else {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Parser was not found for label " + 5011); //$NON-NLS-1$
+ return ""; //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private String getService_3009Text(View view) {
+ IParser parser = IntermediateModelParserProvider.getParser(
+ IntermediateModelElementTypes.Service_3009,
+ view.getElement() != null ? view.getElement() : view,
+ IntermediateModelVisualIDRegistry
+ .getType(ServiceServiceNameEditPart.VISUAL_ID));
+ if (parser != null) {
+ return parser.getPrintString(new EObjectAdapter(
+ view.getElement() != null ? view.getElement() : view),
+ ParserOptions.NONE.intValue());
+ } else {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Parser was not found for label " + 5012); //$NON-NLS-1$
+ return ""; //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private String getServiceNeeds_4011Text(View view) {
+ return ""; //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ private String getStepServiceModel_4010Text(View view) {
+ return ""; //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ private String getStep_3008Text(View view) {
+ IParser parser = IntermediateModelParserProvider.getParser(
+ IntermediateModelElementTypes.Step_3008,
+ view.getElement() != null ? view.getElement() : view,
+ IntermediateModelVisualIDRegistry
+ .getType(StepNameEditPart.VISUAL_ID));
+ if (parser != null) {
+ return parser.getPrintString(new EObjectAdapter(
+ view.getElement() != null ? view.getElement() : view),
+ ParserOptions.NONE.intValue());
+ } else {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Parser was not found for label " + 5009); //$NON-NLS-1$
+ return ""; //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private String getProcess_3007Text(View view) {
+ IParser parser = IntermediateModelParserProvider.getParser(
+ IntermediateModelElementTypes.Process_3007,
+ view.getElement() != null ? view.getElement() : view,
+ IntermediateModelVisualIDRegistry
+ .getType(ProcessNameEditPart.VISUAL_ID));
+ if (parser != null) {
+ return parser.getPrintString(new EObjectAdapter(
+ view.getElement() != null ? view.getElement() : view),
+ ParserOptions.NONE.intValue());
+ } else {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Parser was not found for label " + 5010); //$NON-NLS-1$
+ return ""; //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private String getServiceCollection_2006Text(View view) {
+ return ""; //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ private String getUnknownElementText(View view) {
+ return "<UnknownElement Visual_ID = " + view.getType() + ">"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /**
+ * @generated
+ */
+ private String getUnresolvedDomainElementProxyText(View view) {
+ return "<Unresolved domain element Visual_ID = " + view.getType() + ">"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /**
+ * @generated
+ */
+ public void init(ICommonContentExtensionSite aConfig) {
+ }
+
+ /**
+ * @generated
+ */
+ public void restoreState(IMemento aMemento) {
+ }
+
+ /**
+ * @generated
+ */
+ public void saveState(IMemento aMemento) {
+ }
+
+ /**
+ * @generated
+ */
+ public String getDescription(Object anElement) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ private boolean isOwnView(View view) {
+ return StpIntermediateModelEditPart.MODEL_ID
+ .equals(IntermediateModelVisualIDRegistry.getModelID(view));
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorLinkHelper.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorLinkHelper.java
new file mode 100755
index 0000000..d9594a8
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorLinkHelper.java
@@ -0,0 +1,128 @@
+package org.eclipse.soa.mangrove.diagram.navigator;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.ui.URIEditorInput;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.GraphicalViewer;
+import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.navigator.ILinkHelper;
+import org.eclipse.ui.part.FileEditorInput;
+
+/**
+ * @generated
+ */
+public class IntermediateModelNavigatorLinkHelper implements ILinkHelper {
+
+ /**
+ * @generated
+ */
+ private static IEditorInput getEditorInput(Diagram diagram) {
+ Resource diagramResource = diagram.eResource();
+ for (EObject nextEObject : diagramResource.getContents()) {
+ if (nextEObject == diagram) {
+ return new FileEditorInput(
+ WorkspaceSynchronizer.getFile(diagramResource));
+ }
+ if (nextEObject instanceof Diagram) {
+ break;
+ }
+ }
+ URI uri = EcoreUtil.getURI(diagram);
+ String editorName = uri.lastSegment() + '#'
+ + diagram.eResource().getContents().indexOf(diagram);
+ IEditorInput editorInput = new URIEditorInput(uri, editorName);
+ return editorInput;
+ }
+
+ /**
+ * @generated
+ */
+ public IStructuredSelection findSelection(IEditorInput anInput) {
+ IDiagramDocument document = IntermediateModelDiagramEditorPlugin
+ .getInstance().getDocumentProvider()
+ .getDiagramDocument(anInput);
+ if (document == null) {
+ return StructuredSelection.EMPTY;
+ }
+ Diagram diagram = document.getDiagram();
+ if (diagram == null || diagram.eResource() == null) {
+ return StructuredSelection.EMPTY;
+ }
+ IFile file = WorkspaceSynchronizer.getFile(diagram.eResource());
+ if (file != null) {
+ IntermediateModelNavigatorItem item = new IntermediateModelNavigatorItem(
+ diagram, file, false);
+ return new StructuredSelection(item);
+ }
+ return StructuredSelection.EMPTY;
+ }
+
+ /**
+ * @generated
+ */
+ public void activateEditor(IWorkbenchPage aPage,
+ IStructuredSelection aSelection) {
+ if (aSelection == null || aSelection.isEmpty()) {
+ return;
+ }
+ if (false == aSelection.getFirstElement() instanceof IntermediateModelAbstractNavigatorItem) {
+ return;
+ }
+
+ IntermediateModelAbstractNavigatorItem abstractNavigatorItem = (IntermediateModelAbstractNavigatorItem) aSelection
+ .getFirstElement();
+ View navigatorView = null;
+ if (abstractNavigatorItem instanceof IntermediateModelNavigatorItem) {
+ navigatorView = ((IntermediateModelNavigatorItem) abstractNavigatorItem)
+ .getView();
+ } else if (abstractNavigatorItem instanceof IntermediateModelNavigatorGroup) {
+ IntermediateModelNavigatorGroup navigatorGroup = (IntermediateModelNavigatorGroup) abstractNavigatorItem;
+ if (navigatorGroup.getParent() instanceof IntermediateModelNavigatorItem) {
+ navigatorView = ((IntermediateModelNavigatorItem) navigatorGroup
+ .getParent()).getView();
+ }
+ }
+ if (navigatorView == null) {
+ return;
+ }
+ IEditorInput editorInput = getEditorInput(navigatorView.getDiagram());
+ IEditorPart editor = aPage.findEditor(editorInput);
+ if (editor == null) {
+ return;
+ }
+ aPage.bringToTop(editor);
+ if (editor instanceof DiagramEditor) {
+ DiagramEditor diagramEditor = (DiagramEditor) editor;
+ ResourceSet diagramEditorResourceSet = diagramEditor
+ .getEditingDomain().getResourceSet();
+ EObject selectedView = diagramEditorResourceSet.getEObject(
+ EcoreUtil.getURI(navigatorView), true);
+ if (selectedView == null) {
+ return;
+ }
+ GraphicalViewer graphicalViewer = (GraphicalViewer) diagramEditor
+ .getAdapter(GraphicalViewer.class);
+ EditPart selectedEditPart = (EditPart) graphicalViewer
+ .getEditPartRegistry().get(selectedView);
+ if (selectedEditPart != null) {
+ graphicalViewer.select(selectedEditPart);
+ }
+ }
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorSorter.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorSorter.java
new file mode 100755
index 0000000..2d66bf7
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/navigator/IntermediateModelNavigatorSorter.java
@@ -0,0 +1,28 @@
+package org.eclipse.soa.mangrove.diagram.navigator;
+
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+
+/**
+ * @generated
+ */
+public class IntermediateModelNavigatorSorter extends ViewerSorter {
+
+ /**
+ * @generated
+ */
+ private static final int GROUP_CATEGORY = 4013;
+
+ /**
+ * @generated
+ */
+ public int category(Object element) {
+ if (element instanceof IntermediateModelNavigatorItem) {
+ IntermediateModelNavigatorItem item = (IntermediateModelNavigatorItem) element;
+ return IntermediateModelVisualIDRegistry
+ .getVisualID(item.getView());
+ }
+ return GROUP_CATEGORY;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/parsers/AbstractParser.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/parsers/AbstractParser.java
new file mode 100755
index 0000000..091c4ac
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/parsers/AbstractParser.java
@@ -0,0 +1,465 @@
+package org.eclipse.soa.mangrove.diagram.parsers;
+
+import java.util.Arrays;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.common.core.command.UnexecutableCommand;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParser;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus;
+import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.type.core.commands.SetValueCommand;
+import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+import org.eclipse.soa.mangrove.diagram.part.Messages;
+
+/**
+ * @generated
+ */
+public abstract class AbstractParser implements IParser {
+
+ /**
+ * @generated
+ */
+ protected final EAttribute[] features;
+
+ /**
+ * @generated
+ */
+ protected final EAttribute[] editableFeatures;
+
+ /**
+ * @generated
+ */
+ private String viewPattern;
+
+ /**
+ * @generated
+ */
+ private String editorPattern;
+
+ /**
+ * @generated
+ */
+ private String editPattern;
+
+ /**
+ * @generated
+ */
+ public AbstractParser(EAttribute[] features) {
+ if (features == null || Arrays.asList(features).contains(null)) {
+ throw new IllegalArgumentException();
+ }
+ this.editableFeatures = this.features = features;
+ }
+
+ /**
+ * @generated
+ */
+ public AbstractParser(EAttribute[] features, EAttribute[] editableFeatures) {
+ if (features == null || Arrays.asList(features).contains(null)) {
+ throw new IllegalArgumentException();
+ }
+ this.features = features;
+ if (editableFeatures == null
+ || Arrays.asList(editableFeatures).contains(null)) {
+ throw new IllegalArgumentException();
+ }
+ this.editableFeatures = editableFeatures;
+ }
+
+ /**
+ * @generated
+ */
+ public String getViewPattern() {
+ return viewPattern;
+ }
+
+ /**
+ * @generated
+ */
+ public void setViewPattern(String viewPattern) {
+ this.viewPattern = viewPattern;
+ }
+
+ /**
+ * @generated
+ */
+ public String getEditorPattern() {
+ return editorPattern;
+ }
+
+ /**
+ * @generated
+ */
+ public void setEditorPattern(String editorPattern) {
+ this.editorPattern = editorPattern;
+ }
+
+ /**
+ * @generated
+ */
+ public String getEditPattern() {
+ return editPattern;
+ }
+
+ /**
+ * @generated
+ */
+ public void setEditPattern(String editPattern) {
+ this.editPattern = editPattern;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isAffectingEvent(Object event, int flags) {
+ if (event instanceof Notification) {
+ return isAffectingFeature(((Notification) event).getFeature());
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean isAffectingFeature(Object feature) {
+ for (int i = 0; i < features.length; i++) {
+ if (features[i] == feature) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ public IContentAssistProcessor getCompletionProcessor(IAdaptable element) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected Object[] getValues(EObject element) {
+ Object[] values = new Object[features.length];
+ for (int i = 0; i < features.length; i++) {
+ values[i] = getValue(element, features[i]);
+ }
+ return values;
+ }
+
+ /**
+ * @generated
+ */
+ protected Object[] getEditableValues(EObject element) {
+ Object[] values = new Object[editableFeatures.length];
+ for (int i = 0; i < editableFeatures.length; i++) {
+ values[i] = getValue(element, editableFeatures[i]);
+ }
+ return values;
+ }
+
+ /**
+ * @generated
+ */
+ protected Object getValue(EObject element, EAttribute feature) {
+ Object value = element.eGet(feature);
+ Class iClass = feature.getEAttributeType().getInstanceClass();
+ if (String.class.equals(iClass)) {
+ if (value == null) {
+ value = ""; //$NON-NLS-1$
+ }
+ }
+ return value;
+ }
+
+ /**
+ * @generated
+ */
+ protected ICommand getParseCommand(IAdaptable adapter, Object[] values,
+ int flags) {
+ if (values == null
+ || validateNewValues(values).getCode() != IParserEditStatus.EDITABLE) {
+ return UnexecutableCommand.INSTANCE;
+ }
+ EObject element = (EObject) adapter.getAdapter(EObject.class);
+ TransactionalEditingDomain editingDomain = TransactionUtil
+ .getEditingDomain(element);
+ if (editingDomain == null) {
+ return UnexecutableCommand.INSTANCE;
+ }
+ CompositeTransactionalCommand command = new CompositeTransactionalCommand(
+ editingDomain, "Set Values"); //$NON-NLS-1$
+ for (int i = 0; i < values.length; i++) {
+ command.compose(getModificationCommand(element,
+ editableFeatures[i], values[i]));
+ }
+ return command;
+ }
+
+ /**
+ * @generated
+ */
+ protected ICommand getModificationCommand(EObject element,
+ EAttribute feature, Object value) {
+ value = getValidNewValue(feature, value);
+ if (value instanceof InvalidValue) {
+ return UnexecutableCommand.INSTANCE;
+ }
+ SetRequest request = new SetRequest(element, feature, value);
+ return new SetValueCommand(request);
+ }
+
+ /**
+ * @generated
+ */
+ protected IParserEditStatus validateNewValues(Object[] values) {
+ if (values.length != editableFeatures.length) {
+ return ParserEditStatus.UNEDITABLE_STATUS;
+ }
+ for (int i = 0; i < values.length; i++) {
+ Object value = getValidNewValue(editableFeatures[i], values[i]);
+ if (value instanceof InvalidValue) {
+ return new ParserEditStatus(
+ IntermediateModelDiagramEditorPlugin.ID,
+ IParserEditStatus.UNEDITABLE, value.toString());
+ }
+ }
+ return ParserEditStatus.EDITABLE_STATUS;
+ }
+
+ /**
+ * @generated
+ */
+ protected Object getValidNewValue(EAttribute feature, Object value) {
+ EClassifier type = feature.getEType();
+ if (type instanceof EDataType) {
+ Class iClass = type.getInstanceClass();
+ if (Boolean.TYPE.equals(iClass)) {
+ if (value instanceof Boolean) {
+ // ok
+ } else if (value instanceof String) {
+ value = Boolean.valueOf((String) value);
+ } else {
+ value = new InvalidValue(NLS.bind(
+ Messages.AbstractParser_UnexpectedValueType,
+ iClass.getName()));
+ }
+ } else if (Character.TYPE.equals(iClass)) {
+ if (value instanceof Character) {
+ // ok
+ } else if (value instanceof String) {
+ String s = (String) value;
+ if (s.length() == 0) {
+ value = null;
+ } else {
+ value = new Character(s.charAt(0));
+ }
+ } else {
+ value = new InvalidValue(NLS.bind(
+ Messages.AbstractParser_UnexpectedValueType,
+ iClass.getName()));
+ }
+ } else if (Byte.TYPE.equals(iClass)) {
+ if (value instanceof Byte) {
+ // ok
+ } else if (value instanceof Number) {
+ value = new Byte(((Number) value).byteValue());
+ } else if (value instanceof String) {
+ String s = (String) value;
+ if (s.length() == 0) {
+ value = null;
+ } else {
+ try {
+ value = Byte.valueOf(s);
+ } catch (NumberFormatException nfe) {
+ value = new InvalidValue(
+ NLS.bind(
+ Messages.AbstractParser_WrongStringConversion,
+ iClass.getName()));
+ }
+ }
+ } else {
+ value = new InvalidValue(NLS.bind(
+ Messages.AbstractParser_UnexpectedValueType,
+ iClass.getName()));
+ }
+ } else if (Short.TYPE.equals(iClass)) {
+ if (value instanceof Short) {
+ // ok
+ } else if (value instanceof Number) {
+ value = new Short(((Number) value).shortValue());
+ } else if (value instanceof String) {
+ String s = (String) value;
+ if (s.length() == 0) {
+ value = null;
+ } else {
+ try {
+ value = Short.valueOf(s);
+ } catch (NumberFormatException nfe) {
+ value = new InvalidValue(
+ NLS.bind(
+ Messages.AbstractParser_WrongStringConversion,
+ iClass.getName()));
+ }
+ }
+ } else {
+ value = new InvalidValue(NLS.bind(
+ Messages.AbstractParser_UnexpectedValueType,
+ iClass.getName()));
+ }
+ } else if (Integer.TYPE.equals(iClass)) {
+ if (value instanceof Integer) {
+ // ok
+ } else if (value instanceof Number) {
+ value = new Integer(((Number) value).intValue());
+ } else if (value instanceof String) {
+ String s = (String) value;
+ if (s.length() == 0) {
+ value = null;
+ } else {
+ try {
+ value = Integer.valueOf(s);
+ } catch (NumberFormatException nfe) {
+ value = new InvalidValue(
+ NLS.bind(
+ Messages.AbstractParser_WrongStringConversion,
+ iClass.getName()));
+ }
+ }
+ } else {
+ value = new InvalidValue(NLS.bind(
+ Messages.AbstractParser_UnexpectedValueType,
+ iClass.getName()));
+ }
+ } else if (Long.TYPE.equals(iClass)) {
+ if (value instanceof Long) {
+ // ok
+ } else if (value instanceof Number) {
+ value = new Long(((Number) value).longValue());
+ } else if (value instanceof String) {
+ String s = (String) value;
+ if (s.length() == 0) {
+ value = null;
+ } else {
+ try {
+ value = Long.valueOf(s);
+ } catch (NumberFormatException nfe) {
+ value = new InvalidValue(
+ NLS.bind(
+ Messages.AbstractParser_WrongStringConversion,
+ iClass.getName()));
+ }
+ }
+ } else {
+ value = new InvalidValue(NLS.bind(
+ Messages.AbstractParser_UnexpectedValueType,
+ iClass.getName()));
+ }
+ } else if (Float.TYPE.equals(iClass)) {
+ if (value instanceof Float) {
+ // ok
+ } else if (value instanceof Number) {
+ value = new Float(((Number) value).floatValue());
+ } else if (value instanceof String) {
+ String s = (String) value;
+ if (s.length() == 0) {
+ value = null;
+ } else {
+ try {
+ value = Float.valueOf(s);
+ } catch (NumberFormatException nfe) {
+ value = new InvalidValue(
+ NLS.bind(
+ Messages.AbstractParser_WrongStringConversion,
+ iClass.getName()));
+ }
+ }
+ } else {
+ value = new InvalidValue(NLS.bind(
+ Messages.AbstractParser_UnexpectedValueType,
+ iClass.getName()));
+ }
+ } else if (Double.TYPE.equals(iClass)) {
+ if (value instanceof Double) {
+ // ok
+ } else if (value instanceof Number) {
+ value = new Double(((Number) value).doubleValue());
+ } else if (value instanceof String) {
+ String s = (String) value;
+ if (s.length() == 0) {
+ value = null;
+ } else {
+ try {
+ value = Double.valueOf(s);
+ } catch (NumberFormatException nfe) {
+ value = new InvalidValue(
+ NLS.bind(
+ Messages.AbstractParser_WrongStringConversion,
+ iClass.getName()));
+ }
+ }
+ } else {
+ value = new InvalidValue(NLS.bind(
+ Messages.AbstractParser_UnexpectedValueType,
+ iClass.getName()));
+ }
+ } else if (type instanceof EEnum) {
+ if (value instanceof String) {
+ EEnumLiteral literal = ((EEnum) type)
+ .getEEnumLiteralByLiteral((String) value);
+ if (literal == null) {
+ value = new InvalidValue(NLS.bind(
+ Messages.AbstractParser_UnknownLiteral, value));
+ } else {
+ value = literal.getInstance();
+ }
+ } else {
+ value = new InvalidValue(NLS.bind(
+ Messages.AbstractParser_UnexpectedValueType,
+ String.class.getName()));
+ }
+ }
+ }
+ return value;
+ }
+
+ /**
+ * @generated
+ */
+ protected class InvalidValue {
+
+ /**
+ * @generated
+ */
+ private String description;
+
+ /**
+ * @generated
+ */
+ public InvalidValue(String description) {
+ this.description = description;
+ }
+
+ /**
+ * @generated
+ */
+ public String toString() {
+ return description;
+ }
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/parsers/MessageFormatParser.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/parsers/MessageFormatParser.java
new file mode 100755
index 0000000..c09d378
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/parsers/MessageFormatParser.java
@@ -0,0 +1,205 @@
+package org.eclipse.soa.mangrove.diagram.parsers;
+
+import java.text.FieldPosition;
+import java.text.MessageFormat;
+import java.text.ParsePosition;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+import org.eclipse.soa.mangrove.diagram.part.Messages;
+
+/**
+ * @generated
+ */
+public class MessageFormatParser extends AbstractParser {
+
+ /**
+ * @generated
+ */
+ private String defaultPattern;
+
+ /**
+ * @generated
+ */
+ private String defaultEditablePattern;
+
+ /**
+ * @generated
+ */
+ private MessageFormat viewProcessor;
+
+ /**
+ * @generated
+ */
+ private MessageFormat editorProcessor;
+
+ /**
+ * @generated
+ */
+ private MessageFormat editProcessor;
+
+ /**
+ * @generated
+ */
+ public MessageFormatParser(EAttribute[] features) {
+ super(features);
+ }
+
+ /**
+ * @generated
+ */
+ public MessageFormatParser(EAttribute[] features,
+ EAttribute[] editableFeatures) {
+ super(features, editableFeatures);
+ }
+
+ /**
+ * @generated
+ */
+ protected String getDefaultPattern() {
+ if (defaultPattern == null) {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < features.length; i++) {
+ if (i > 0) {
+ sb.append(' ');
+ }
+ sb.append('{');
+ sb.append(i);
+ sb.append('}');
+ }
+ defaultPattern = sb.toString();
+ }
+ return defaultPattern;
+ }
+
+ /**
+ * @generated
+ */
+ public void setViewPattern(String viewPattern) {
+ super.setViewPattern(viewPattern);
+ viewProcessor = null;
+ }
+
+ /**
+ * @generated
+ */
+ public void setEditorPattern(String editorPattern) {
+ super.setEditorPattern(editorPattern);
+ editorProcessor = null;
+ }
+
+ /**
+ * @generated
+ */
+ protected MessageFormat getViewProcessor() {
+ if (viewProcessor == null) {
+ viewProcessor = new MessageFormat(
+ getViewPattern() == null ? getDefaultPattern()
+ : getViewPattern());
+ }
+ return viewProcessor;
+ }
+
+ /**
+ * @generated
+ */
+ protected MessageFormat getEditorProcessor() {
+ if (editorProcessor == null) {
+ editorProcessor = new MessageFormat(
+ getEditorPattern() == null ? getDefaultEditablePattern()
+ : getEditorPattern());
+ }
+ return editorProcessor;
+ }
+
+ /**
+ * @generated
+ */
+ protected String getDefaultEditablePattern() {
+ if (defaultEditablePattern == null) {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < editableFeatures.length; i++) {
+ if (i > 0) {
+ sb.append(' ');
+ }
+ sb.append('{');
+ sb.append(i);
+ sb.append('}');
+ }
+ defaultEditablePattern = sb.toString();
+ }
+ return defaultEditablePattern;
+ }
+
+ /**
+ * @generated
+ */
+ public void setEditPattern(String editPattern) {
+ super.setEditPattern(editPattern);
+ editProcessor = null;
+ }
+
+ /**
+ * @generated
+ */
+ protected MessageFormat getEditProcessor() {
+ if (editProcessor == null) {
+ editProcessor = new MessageFormat(
+ getEditPattern() == null ? getDefaultEditablePattern()
+ : getEditPattern());
+ }
+ return editProcessor;
+ }
+
+ /**
+ * @generated
+ */
+ public String getEditString(IAdaptable adapter, int flags) {
+ EObject element = (EObject) adapter.getAdapter(EObject.class);
+ return getEditorProcessor().format(getEditableValues(element),
+ new StringBuffer(), new FieldPosition(0)).toString();
+ }
+
+ /**
+ * @generated
+ */
+ public IParserEditStatus isValidEditString(IAdaptable adapter,
+ String editString) {
+ ParsePosition pos = new ParsePosition(0);
+ Object[] values = getEditProcessor().parse(editString, pos);
+ if (values == null) {
+ return new ParserEditStatus(
+ IntermediateModelDiagramEditorPlugin.ID,
+ IParserEditStatus.UNEDITABLE, NLS.bind(
+ Messages.MessageFormatParser_InvalidInputError,
+ new Integer(pos.getErrorIndex())));
+ }
+ return validateNewValues(values);
+ }
+
+ /**
+ * @generated
+ */
+ public ICommand getParseCommand(IAdaptable adapter, String newString,
+ int flags) {
+ Object[] values = getEditProcessor().parse(newString,
+ new ParsePosition(0));
+ return getParseCommand(adapter, values, flags);
+ }
+
+ /**
+ * @generated
+ */
+ public String getPrintString(IAdaptable adapter, int flags) {
+ EObject element = (EObject) adapter.getAdapter(EObject.class);
+ return getViewProcessor().format(getValues(element),
+ new StringBuffer(), new FieldPosition(0)).toString();
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/DeleteElementAction.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/DeleteElementAction.java
new file mode 100755
index 0000000..24fd2de
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/DeleteElementAction.java
@@ -0,0 +1,88 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.commands.UnexecutableCommand;
+import org.eclipse.gmf.runtime.diagram.ui.actions.AbstractDeleteFromAction;
+import org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds;
+import org.eclipse.gmf.runtime.diagram.ui.commands.CommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
+import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @generated
+ */
+public class DeleteElementAction extends AbstractDeleteFromAction {
+
+ /**
+ * @generated
+ */
+ public DeleteElementAction(IWorkbenchPart part) {
+ super(part);
+ }
+
+ /**
+ * @generated
+ */
+ public DeleteElementAction(IWorkbenchPage workbenchPage) {
+ super(workbenchPage);
+ }
+
+ /**
+ * @generated
+ */
+ public void init() {
+ super.init();
+ setId(ActionIds.ACTION_DELETE_FROM_MODEL);
+ setText(DiagramUIMessages.DiagramEditor_Delete_from_Model);
+ setToolTipText(DiagramUIMessages.DiagramEditor_Delete_from_ModelToolTip);
+ ISharedImages workbenchImages = PlatformUI.getWorkbench()
+ .getSharedImages();
+ setHoverImageDescriptor(workbenchImages
+ .getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
+ setImageDescriptor(workbenchImages
+ .getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
+ setDisabledImageDescriptor(workbenchImages
+ .getImageDescriptor(ISharedImages.IMG_TOOL_DELETE_DISABLED));
+ }
+
+ /**
+ * @generated
+ */
+ protected String getCommandLabel() {
+ return DiagramUIMessages.DiagramEditor_Delete_from_Model;
+ }
+
+ /**
+ * @generated
+ */
+ protected Command getCommand(Request request) {
+ List operationSet = getOperationSet();
+ if (operationSet.isEmpty()) {
+ return UnexecutableCommand.INSTANCE;
+ }
+ Iterator editParts = operationSet.iterator();
+ CompositeTransactionalCommand command = new CompositeTransactionalCommand(
+ getEditingDomain(), getCommandLabel());
+ while (editParts.hasNext()) {
+ EditPart editPart = (EditPart) editParts.next();
+ Command curCommand = editPart.getCommand(request);
+ if (curCommand != null) {
+ command.compose(new CommandProxy(curCommand));
+ }
+ }
+ if (command.isEmpty() || command.size() != operationSet.size()) {
+ return UnexecutableCommand.INSTANCE;
+ }
+ return new ICommandProxy(command);
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/DiagramEditorContextMenuProvider.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/DiagramEditorContextMenuProvider.java
new file mode 100755
index 0000000..e54e285
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/DiagramEditorContextMenuProvider.java
@@ -0,0 +1,75 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.gef.EditPartViewer;
+import org.eclipse.gmf.runtime.common.ui.services.action.contributionitem.ContributionItemService;
+import org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds;
+import org.eclipse.gmf.runtime.diagram.ui.providers.DiagramContextMenuProvider;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.ui.IWorkbenchPart;
+
+/**
+ * @generated
+ */
+public class DiagramEditorContextMenuProvider extends
+ DiagramContextMenuProvider {
+
+ /**
+ * @generated
+ */
+ private IWorkbenchPart part;
+
+ /**
+ * @generated
+ */
+ private DeleteElementAction deleteAction;
+
+ /**
+ * @generated
+ */
+ public DiagramEditorContextMenuProvider(IWorkbenchPart part,
+ EditPartViewer viewer) {
+ super(part, viewer);
+ this.part = part;
+ deleteAction = new DeleteElementAction(part);
+ deleteAction.init();
+ }
+
+ /**
+ * @generated
+ */
+ public void dispose() {
+ if (deleteAction != null) {
+ deleteAction.dispose();
+ deleteAction = null;
+ }
+ super.dispose();
+ }
+
+ /**
+ * @generated
+ */
+ public void buildContextMenu(final IMenuManager menu) {
+ getViewer().flush();
+ try {
+ TransactionUtil.getEditingDomain(
+ (EObject) getViewer().getContents().getModel())
+ .runExclusive(new Runnable() {
+
+ public void run() {
+ ContributionItemService
+ .getInstance()
+ .contributeToPopupMenu(
+ DiagramEditorContextMenuProvider.this,
+ part);
+ menu.remove(ActionIds.ACTION_DELETE_FROM_MODEL);
+ menu.appendToGroup("editGroup", deleteAction);
+ }
+ });
+ } catch (Exception e) {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Error building context menu", e);
+ }
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelCreationWizard.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelCreationWizard.java
new file mode 100755
index 0000000..e9b4b42
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelCreationWizard.java
@@ -0,0 +1,177 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+/**
+ * @generated
+ */
+public class IntermediateModelCreationWizard extends Wizard implements
+ INewWizard {
+
+ /**
+ * @generated
+ */
+ private IWorkbench workbench;
+
+ /**
+ * @generated
+ */
+ protected IStructuredSelection selection;
+
+ /**
+ * @generated
+ */
+ protected IntermediateModelCreationWizardPage diagramModelFilePage;
+
+ /**
+ * @generated
+ */
+ protected IntermediateModelCreationWizardPage domainModelFilePage;
+
+ /**
+ * @generated
+ */
+ protected Resource diagram;
+
+ /**
+ * @generated
+ */
+ private boolean openNewlyCreatedDiagramEditor = true;
+
+ /**
+ * @generated
+ */
+ public IWorkbench getWorkbench() {
+ return workbench;
+ }
+
+ /**
+ * @generated
+ */
+ public IStructuredSelection getSelection() {
+ return selection;
+ }
+
+ /**
+ * @generated
+ */
+ public final Resource getDiagram() {
+ return diagram;
+ }
+
+ /**
+ * @generated
+ */
+ public final boolean isOpenNewlyCreatedDiagramEditor() {
+ return openNewlyCreatedDiagramEditor;
+ }
+
+ /**
+ * @generated
+ */
+ public void setOpenNewlyCreatedDiagramEditor(
+ boolean openNewlyCreatedDiagramEditor) {
+ this.openNewlyCreatedDiagramEditor = openNewlyCreatedDiagramEditor;
+ }
+
+ /**
+ * @generated
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ this.workbench = workbench;
+ this.selection = selection;
+ setWindowTitle(Messages.IntermediateModelCreationWizardTitle);
+ setDefaultPageImageDescriptor(IntermediateModelDiagramEditorPlugin
+ .getBundledImageDescriptor("icons/wizban/NewImWizard.gif")); //$NON-NLS-1$
+ setNeedsProgressMonitor(true);
+ }
+
+ /**
+ * @generated
+ */
+ public void addPages() {
+ diagramModelFilePage = new IntermediateModelCreationWizardPage(
+ "DiagramModelFile", getSelection(), "mangrove_diagram"); //$NON-NLS-1$ //$NON-NLS-2$
+ diagramModelFilePage
+ .setTitle(Messages.IntermediateModelCreationWizard_DiagramModelFilePageTitle);
+ diagramModelFilePage
+ .setDescription(Messages.IntermediateModelCreationWizard_DiagramModelFilePageDescription);
+ addPage(diagramModelFilePage);
+
+ domainModelFilePage = new IntermediateModelCreationWizardPage(
+ "DomainModelFile", getSelection(), "mangrove") { //$NON-NLS-1$ //$NON-NLS-2$
+
+ public void setVisible(boolean visible) {
+ if (visible) {
+ String fileName = diagramModelFilePage.getFileName();
+ fileName = fileName.substring(0, fileName.length()
+ - ".mangrove_diagram".length()); //$NON-NLS-1$
+ setFileName(IntermediateModelDiagramEditorUtil
+ .getUniqueFileName(getContainerFullPath(),
+ fileName, "mangrove")); //$NON-NLS-1$
+ }
+ super.setVisible(visible);
+ }
+ };
+ domainModelFilePage
+ .setTitle(Messages.IntermediateModelCreationWizard_DomainModelFilePageTitle);
+ domainModelFilePage
+ .setDescription(Messages.IntermediateModelCreationWizard_DomainModelFilePageDescription);
+ addPage(domainModelFilePage);
+ }
+
+ /**
+ * @generated
+ */
+ public boolean performFinish() {
+ IRunnableWithProgress op = new WorkspaceModifyOperation(null) {
+
+ protected void execute(IProgressMonitor monitor)
+ throws CoreException, InterruptedException {
+ diagram = IntermediateModelDiagramEditorUtil.createDiagram(
+ diagramModelFilePage.getURI(),
+ domainModelFilePage.getURI(), monitor);
+ if (isOpenNewlyCreatedDiagramEditor() && diagram != null) {
+ try {
+ IntermediateModelDiagramEditorUtil.openDiagram(diagram);
+ } catch (PartInitException e) {
+ ErrorDialog
+ .openError(
+ getContainer().getShell(),
+ Messages.IntermediateModelCreationWizardOpenEditorError,
+ null, e.getStatus());
+ }
+ }
+ }
+ };
+ try {
+ getContainer().run(false, true, op);
+ } catch (InterruptedException e) {
+ return false;
+ } catch (InvocationTargetException e) {
+ if (e.getTargetException() instanceof CoreException) {
+ ErrorDialog.openError(getContainer().getShell(),
+ Messages.IntermediateModelCreationWizardCreationError,
+ null,
+ ((CoreException) e.getTargetException()).getStatus());
+ } else {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Error creating diagram", e.getTargetException()); //$NON-NLS-1$
+ }
+ return false;
+ }
+ return diagram != null;
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelCreationWizardPage.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelCreationWizardPage.java
new file mode 100755
index 0000000..5a20684
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelCreationWizardPage.java
@@ -0,0 +1,89 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+
+/**
+ * @generated
+ */
+public class IntermediateModelCreationWizardPage extends
+ WizardNewFileCreationPage {
+
+ /**
+ * @generated
+ */
+ private final String fileExtension;
+
+ /**
+ * @generated
+ */
+ public IntermediateModelCreationWizardPage(String pageName,
+ IStructuredSelection selection, String fileExtension) {
+ super(pageName, selection);
+ this.fileExtension = fileExtension;
+ }
+
+ /**
+ * Override to create files with this extension.
+ *
+ * @generated
+ */
+ protected String getExtension() {
+ return fileExtension;
+ }
+
+ /**
+ * @generated
+ */
+ public URI getURI() {
+ return URI.createPlatformResourceURI(getFilePath().toString(), false);
+ }
+
+ /**
+ * @generated
+ */
+ protected IPath getFilePath() {
+ IPath path = getContainerFullPath();
+ if (path == null) {
+ path = new Path(""); //$NON-NLS-1$
+ }
+ String fileName = getFileName();
+ if (fileName != null) {
+ path = path.append(fileName);
+ }
+ return path;
+ }
+
+ /**
+ * @generated
+ */
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+ setFileName(IntermediateModelDiagramEditorUtil.getUniqueFileName(
+ getContainerFullPath(), getFileName(), getExtension()));
+ setPageComplete(validatePage());
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean validatePage() {
+ if (!super.validatePage()) {
+ return false;
+ }
+ String extension = getExtension();
+ if (extension != null
+ && !getFilePath().toString().endsWith("." + extension)) {
+ setErrorMessage(NLS.bind(
+ Messages.IntermediateModelCreationWizardPageExtensionError,
+ extension));
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramActionBarContributor.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramActionBarContributor.java
new file mode 100755
index 0000000..1ed909d
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramActionBarContributor.java
@@ -0,0 +1,40 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramActionBarContributor;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchPage;
+
+/**
+ * @generated
+ */
+public class IntermediateModelDiagramActionBarContributor extends
+ DiagramActionBarContributor {
+
+ /**
+ * @generated
+ */
+ protected Class getEditorClass() {
+ return IntermediateModelDiagramEditor.class;
+ }
+
+ /**
+ * @generated
+ */
+ protected String getEditorId() {
+ return IntermediateModelDiagramEditor.ID;
+ }
+
+ /**
+ * @generated
+ */
+ public void init(IActionBars bars, IWorkbenchPage page) {
+ super.init(bars, page);
+ // print preview
+ IMenuManager fileMenu = bars.getMenuManager().findMenuUsingPath(
+ IWorkbenchActionConstants.M_FILE);
+ assert fileMenu != null;
+ fileMenu.remove("pageSetupAction"); //$NON-NLS-1$
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramEditor.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramEditor.java
new file mode 100755
index 0000000..4906a83
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramEditor.java
@@ -0,0 +1,296 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.ui.URIEditorInput;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
+import org.eclipse.gef.palette.PaletteRoot;
+import org.eclipse.gmf.runtime.common.ui.services.marker.MarkerNavigationService;
+import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
+import org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocument;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorItem;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorMatchingStrategy;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.ide.IGotoMarker;
+import org.eclipse.ui.navigator.resources.ProjectExplorer;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.IShowInTargetList;
+import org.eclipse.ui.part.ShowInContext;
+
+/**
+ * @generated
+ */
+public class IntermediateModelDiagramEditor extends DiagramDocumentEditor
+ implements IGotoMarker {
+
+ /**
+ * @generated
+ */
+ public static final String ID = "org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorID"; //$NON-NLS-1$
+
+ /**
+ * @generated
+ */
+ public static final String CONTEXT_ID = "org.eclipse.soa.mangrove.diagram.ui.diagramContext"; //$NON-NLS-1$
+
+ /**
+ * @generated
+ */
+ public IntermediateModelDiagramEditor() {
+ super(true);
+ }
+
+ /**
+ * @generated
+ */
+ protected String getContextID() {
+ return CONTEXT_ID;
+ }
+
+ /**
+ * @generated
+ */
+ protected PaletteRoot createPaletteRoot(PaletteRoot existingPaletteRoot) {
+ PaletteRoot root = super.createPaletteRoot(existingPaletteRoot);
+ new IntermediateModelPaletteFactory().fillPalette(root);
+ return root;
+ }
+
+ /**
+ * @generated
+ */
+ protected PreferencesHint getPreferencesHint() {
+ return IntermediateModelDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT;
+ }
+
+ /**
+ * @generated
+ */
+ public String getContributorId() {
+ return IntermediateModelDiagramEditorPlugin.ID;
+ }
+
+ /**
+ * @generated
+ */
+ @SuppressWarnings("rawtypes")
+ public Object getAdapter(Class type) {
+ if (type == IShowInTargetList.class) {
+ return new IShowInTargetList() {
+ public String[] getShowInTargetIds() {
+ return new String[] { ProjectExplorer.VIEW_ID };
+ }
+ };
+ }
+ return super.getAdapter(type);
+ }
+
+ /**
+ * @generated
+ */
+ protected IDocumentProvider getDocumentProvider(IEditorInput input) {
+ if (input instanceof IFileEditorInput
+ || input instanceof URIEditorInput) {
+ return IntermediateModelDiagramEditorPlugin.getInstance()
+ .getDocumentProvider();
+ }
+ return super.getDocumentProvider(input);
+ }
+
+ /**
+ * @generated
+ */
+ public TransactionalEditingDomain getEditingDomain() {
+ IDocument document = getEditorInput() != null ? getDocumentProvider()
+ .getDocument(getEditorInput()) : null;
+ if (document instanceof IDiagramDocument) {
+ return ((IDiagramDocument) document).getEditingDomain();
+ }
+ return super.getEditingDomain();
+ }
+
+ /**
+ * @generated
+ */
+ protected void setDocumentProvider(IEditorInput input) {
+ if (input instanceof IFileEditorInput
+ || input instanceof URIEditorInput) {
+ setDocumentProvider(IntermediateModelDiagramEditorPlugin
+ .getInstance().getDocumentProvider());
+ } else {
+ super.setDocumentProvider(input);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public void gotoMarker(IMarker marker) {
+ MarkerNavigationService.getInstance().gotoMarker(this, marker);
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isSaveAsAllowed() {
+ return true;
+ }
+
+ /**
+ * @generated
+ */
+ public void doSaveAs() {
+ performSaveAs(new NullProgressMonitor());
+ }
+
+ /**
+ * @generated
+ */
+ protected void performSaveAs(IProgressMonitor progressMonitor) {
+ Shell shell = getSite().getShell();
+ IEditorInput input = getEditorInput();
+ SaveAsDialog dialog = new SaveAsDialog(shell);
+ IFile original = input instanceof IFileEditorInput ? ((IFileEditorInput) input)
+ .getFile() : null;
+ if (original != null) {
+ dialog.setOriginalFile(original);
+ }
+ dialog.create();
+ IDocumentProvider provider = getDocumentProvider();
+ if (provider == null) {
+ // editor has been programmatically closed while the dialog was open
+ return;
+ }
+ if (provider.isDeleted(input) && original != null) {
+ String message = NLS.bind(
+ Messages.IntermediateModelDiagramEditor_SavingDeletedFile,
+ original.getName());
+ dialog.setErrorMessage(null);
+ dialog.setMessage(message, IMessageProvider.WARNING);
+ }
+ if (dialog.open() == Window.CANCEL) {
+ if (progressMonitor != null) {
+ progressMonitor.setCanceled(true);
+ }
+ return;
+ }
+ IPath filePath = dialog.getResult();
+ if (filePath == null) {
+ if (progressMonitor != null) {
+ progressMonitor.setCanceled(true);
+ }
+ return;
+ }
+ IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
+ IFile file = workspaceRoot.getFile(filePath);
+ final IEditorInput newInput = new FileEditorInput(file);
+ // Check if the editor is already open
+ IEditorMatchingStrategy matchingStrategy = getEditorDescriptor()
+ .getEditorMatchingStrategy();
+ IEditorReference[] editorRefs = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getActivePage()
+ .getEditorReferences();
+ for (int i = 0; i < editorRefs.length; i++) {
+ if (matchingStrategy.matches(editorRefs[i], newInput)) {
+ MessageDialog
+ .openWarning(
+ shell,
+ Messages.IntermediateModelDiagramEditor_SaveAsErrorTitle,
+ Messages.IntermediateModelDiagramEditor_SaveAsErrorMessage);
+ return;
+ }
+ }
+ boolean success = false;
+ try {
+ provider.aboutToChange(newInput);
+ getDocumentProvider(newInput).saveDocument(progressMonitor,
+ newInput,
+ getDocumentProvider().getDocument(getEditorInput()), true);
+ success = true;
+ } catch (CoreException x) {
+ IStatus status = x.getStatus();
+ if (status == null || status.getSeverity() != IStatus.CANCEL) {
+ ErrorDialog
+ .openError(
+ shell,
+ Messages.IntermediateModelDiagramEditor_SaveErrorTitle,
+ Messages.IntermediateModelDiagramEditor_SaveErrorMessage,
+ x.getStatus());
+ }
+ } finally {
+ provider.changed(newInput);
+ if (success) {
+ setInput(newInput);
+ }
+ }
+ if (progressMonitor != null) {
+ progressMonitor.setCanceled(!success);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public ShowInContext getShowInContext() {
+ return new ShowInContext(getEditorInput(), getNavigatorSelection());
+ }
+
+ /**
+ * @generated
+ */
+ private ISelection getNavigatorSelection() {
+ IDiagramDocument document = getDiagramDocument();
+ if (document == null) {
+ return StructuredSelection.EMPTY;
+ }
+ Diagram diagram = document.getDiagram();
+ if (diagram == null || diagram.eResource() == null) {
+ return StructuredSelection.EMPTY;
+ }
+ IFile file = WorkspaceSynchronizer.getFile(diagram.eResource());
+ if (file != null) {
+ IntermediateModelNavigatorItem item = new IntermediateModelNavigatorItem(
+ diagram, file, false);
+ return new StructuredSelection(item);
+ }
+ return StructuredSelection.EMPTY;
+ }
+
+ /**
+ * @generated
+ */
+ protected void configureGraphicalViewer() {
+ super.configureGraphicalViewer();
+ DiagramEditorContextMenuProvider provider = new DiagramEditorContextMenuProvider(
+ this, getDiagramGraphicalViewer());
+ getDiagramGraphicalViewer().setContextMenu(provider);
+ getSite().registerContextMenu(ActionIds.DIAGRAM_EDITOR_CONTEXT_MENU,
+ provider, getDiagramGraphicalViewer());
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramEditorPlugin.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramEditorPlugin.java
new file mode 100755
index 0000000..aabda43
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramEditorPlugin.java
@@ -0,0 +1,293 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.soa.mangrove.diagram.edit.policies.IntermediateModelBaseItemSemanticEditPolicy;
+import org.eclipse.soa.mangrove.diagram.providers.ElementInitializers;
+import org.eclipse.soa.mangrove.provider.ImItemProviderAdapterFactory;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * @generated
+ */
+public class IntermediateModelDiagramEditorPlugin extends AbstractUIPlugin {
+
+ /**
+ * @generated
+ */
+ public static final String ID = "org.eclipse.soa.mangrove.diagram"; //$NON-NLS-1$
+
+ /**
+ * @generated
+ */
+ public static final PreferencesHint DIAGRAM_PREFERENCES_HINT = new PreferencesHint(
+ ID);
+
+ /**
+ * @generated
+ */
+ private static IntermediateModelDiagramEditorPlugin instance;
+
+ /**
+ * @generated
+ */
+ private ComposedAdapterFactory adapterFactory;
+
+ /**
+ * @generated
+ */
+ private IntermediateModelDocumentProvider documentProvider;
+
+ /**
+ * @generated
+ */
+ private IntermediateModelBaseItemSemanticEditPolicy.LinkConstraints linkConstraints;
+
+ /**
+ * @generated
+ */
+ private ElementInitializers initializers;
+
+ /**
+ * @generated
+ */
+ public IntermediateModelDiagramEditorPlugin() {
+ }
+
+ /**
+ * @generated
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ instance = this;
+ PreferencesHint.registerPreferenceStore(DIAGRAM_PREFERENCES_HINT,
+ getPreferenceStore());
+ adapterFactory = createAdapterFactory();
+ }
+
+ /**
+ * @generated
+ */
+ public void stop(BundleContext context) throws Exception {
+ adapterFactory.dispose();
+ adapterFactory = null;
+ linkConstraints = null;
+ initializers = null;
+ instance = null;
+ super.stop(context);
+ }
+
+ /**
+ * @generated
+ */
+ public static IntermediateModelDiagramEditorPlugin getInstance() {
+ return instance;
+ }
+
+ /**
+ * @generated
+ */
+ protected ComposedAdapterFactory createAdapterFactory() {
+ ArrayList<AdapterFactory> factories = new ArrayList<AdapterFactory>();
+ fillItemProviderFactories(factories);
+ return new ComposedAdapterFactory(factories);
+ }
+
+ /**
+ * @generated
+ */
+ protected void fillItemProviderFactories(List<AdapterFactory> factories) {
+ factories.add(new ImItemProviderAdapterFactory());
+ factories.add(new ResourceItemProviderAdapterFactory());
+ factories.add(new ReflectiveItemProviderAdapterFactory());
+ }
+
+ /**
+ * @generated
+ */
+ public AdapterFactory getItemProvidersAdapterFactory() {
+ return adapterFactory;
+ }
+
+ /**
+ * @generated
+ */
+ public ImageDescriptor getItemImageDescriptor(Object item) {
+ IItemLabelProvider labelProvider = (IItemLabelProvider) adapterFactory
+ .adapt(item, IItemLabelProvider.class);
+ if (labelProvider != null) {
+ return ExtendedImageRegistry.getInstance().getImageDescriptor(
+ labelProvider.getImage(item));
+ }
+ return null;
+ }
+
+ /**
+ * Returns an image descriptor for the image file at the given
+ * plug-in relative path.
+ *
+ * @generated
+ * @param path the path
+ * @return the image descriptor
+ */
+ public static ImageDescriptor getBundledImageDescriptor(String path) {
+ return AbstractUIPlugin.imageDescriptorFromPlugin(ID, path);
+ }
+
+ /**
+ * Respects images residing in any plug-in. If path is relative,
+ * then this bundle is looked up for the image, otherwise, for absolute
+ * path, first segment is taken as id of plug-in with image
+ *
+ * @generated
+ * @param path the path to image, either absolute (with plug-in id as first segment), or relative for bundled images
+ * @return the image descriptor
+ */
+ public static ImageDescriptor findImageDescriptor(String path) {
+ final IPath p = new Path(path);
+ if (p.isAbsolute() && p.segmentCount() > 1) {
+ return AbstractUIPlugin.imageDescriptorFromPlugin(p.segment(0), p
+ .removeFirstSegments(1).makeAbsolute().toString());
+ } else {
+ return getBundledImageDescriptor(p.makeAbsolute().toString());
+ }
+ }
+
+ /**
+ * Returns an image for the image file at the given plug-in relative path.
+ * Client do not need to dispose this image. Images will be disposed automatically.
+ *
+ * @generated
+ * @param path the path
+ * @return image instance
+ */
+ public Image getBundledImage(String path) {
+ Image image = getImageRegistry().get(path);
+ if (image == null) {
+ getImageRegistry().put(path, getBundledImageDescriptor(path));
+ image = getImageRegistry().get(path);
+ }
+ return image;
+ }
+
+ /**
+ * Returns string from plug-in's resource bundle
+ *
+ * @generated
+ */
+ public static String getString(String key) {
+ return Platform.getResourceString(getInstance().getBundle(), "%" + key); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ public IntermediateModelDocumentProvider getDocumentProvider() {
+ if (documentProvider == null) {
+ documentProvider = new IntermediateModelDocumentProvider();
+ }
+ return documentProvider;
+ }
+
+ /**
+ * @generated
+ */
+ public IntermediateModelBaseItemSemanticEditPolicy.LinkConstraints getLinkConstraints() {
+ return linkConstraints;
+ }
+
+ /**
+ * @generated
+ */
+ public void setLinkConstraints(
+ IntermediateModelBaseItemSemanticEditPolicy.LinkConstraints lc) {
+ this.linkConstraints = lc;
+ }
+
+ /**
+ * @generated
+ */
+ public ElementInitializers getElementInitializers() {
+ return initializers;
+ }
+
+ /**
+ * @generated
+ */
+ public void setElementInitializers(ElementInitializers i) {
+ this.initializers = i;
+ }
+
+ /**
+ * @generated
+ */
+ public void logError(String error) {
+ logError(error, null);
+ }
+
+ /**
+ * @generated
+ */
+ public void logError(String error, Throwable throwable) {
+ if (error == null && throwable != null) {
+ error = throwable.getMessage();
+ }
+ getLog().log(
+ new Status(IStatus.ERROR,
+ IntermediateModelDiagramEditorPlugin.ID, IStatus.OK,
+ error, throwable));
+ debug(error, throwable);
+ }
+
+ /**
+ * @generated
+ */
+ public void logInfo(String message) {
+ logInfo(message, null);
+ }
+
+ /**
+ * @generated
+ */
+ public void logInfo(String message, Throwable throwable) {
+ if (message == null && throwable != null) {
+ message = throwable.getMessage();
+ }
+ getLog().log(
+ new Status(IStatus.INFO,
+ IntermediateModelDiagramEditorPlugin.ID, IStatus.OK,
+ message, throwable));
+ debug(message, throwable);
+ }
+
+ /**
+ * @generated
+ */
+ private void debug(String message, Throwable throwable) {
+ if (!isDebugging()) {
+ return;
+ }
+ if (message != null) {
+ System.err.println(message);
+ }
+ if (throwable != null) {
+ throwable.printStackTrace();
+ }
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramEditorUtil.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramEditorUtil.java
new file mode 100755
index 0000000..3a5f400
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramEditorUtil.java
@@ -0,0 +1,423 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.OperationHistoryFactory;
+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.IAdaptable;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.core.services.ViewService;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IPrimaryEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramGraphicalViewer;
+import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.core.GMFEditingDomainFactory;
+import org.eclipse.gmf.runtime.emf.core.util.EMFCoreUtil;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.soa.mangrove.ImFactory;
+import org.eclipse.soa.mangrove.StpIntermediateModel;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.FileEditorInput;
+
+/**
+ * @generated
+ */
+public class IntermediateModelDiagramEditorUtil {
+
+ /**
+ * @generated
+ */
+ public static Map<?, ?> getSaveOptions() {
+ HashMap<String, Object> saveOptions = new HashMap<String, Object>();
+ saveOptions.put(XMLResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$
+ saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED,
+ Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+ return saveOptions;
+ }
+
+ /**
+ * @generated
+ */
+ public static boolean openDiagram(Resource diagram)
+ throws PartInitException {
+ String path = diagram.getURI().toPlatformString(true);
+ IResource workspaceResource = ResourcesPlugin.getWorkspace().getRoot()
+ .findMember(new Path(path));
+ if (workspaceResource instanceof IFile) {
+ IWorkbenchPage page = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getActivePage();
+ return null != page.openEditor(new FileEditorInput(
+ (IFile) workspaceResource),
+ IntermediateModelDiagramEditor.ID);
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ public static void setCharset(IFile file) {
+ if (file == null) {
+ return;
+ }
+ try {
+ file.setCharset("UTF-8", new NullProgressMonitor()); //$NON-NLS-1$
+ } catch (CoreException e) {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Unable to set charset for file " + file.getFullPath(), e); //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public static String getUniqueFileName(IPath containerFullPath,
+ String fileName, String extension) {
+ if (containerFullPath == null) {
+ containerFullPath = new Path(""); //$NON-NLS-1$
+ }
+ if (fileName == null || fileName.trim().length() == 0) {
+ fileName = "default"; //$NON-NLS-1$
+ }
+ IPath filePath = containerFullPath.append(fileName);
+ if (extension != null && !extension.equals(filePath.getFileExtension())) {
+ filePath = filePath.addFileExtension(extension);
+ }
+ extension = filePath.getFileExtension();
+ fileName = filePath.removeFileExtension().lastSegment();
+ int i = 1;
+ while (ResourcesPlugin.getWorkspace().getRoot().exists(filePath)) {
+ i++;
+ filePath = containerFullPath.append(fileName + i);
+ if (extension != null) {
+ filePath = filePath.addFileExtension(extension);
+ }
+ }
+ return filePath.lastSegment();
+ }
+
+ /**
+ * Runs the wizard in a dialog.
+ *
+ * @generated
+ */
+ public static void runWizard(Shell shell, Wizard wizard, String settingsKey) {
+ IDialogSettings pluginDialogSettings = IntermediateModelDiagramEditorPlugin
+ .getInstance().getDialogSettings();
+ IDialogSettings wizardDialogSettings = pluginDialogSettings
+ .getSection(settingsKey);
+ if (wizardDialogSettings == null) {
+ wizardDialogSettings = pluginDialogSettings
+ .addNewSection(settingsKey);
+ }
+ wizard.setDialogSettings(wizardDialogSettings);
+ WizardDialog dialog = new WizardDialog(shell, wizard);
+ dialog.create();
+ dialog.getShell().setSize(Math.max(500, dialog.getShell().getSize().x),
+ 500);
+ dialog.open();
+ }
+
+ /**
+ * This method should be called within a workspace modify operation since it creates resources.
+ * @generated
+ */
+ public static Resource createDiagram(URI diagramURI, URI modelURI,
+ IProgressMonitor progressMonitor) {
+ TransactionalEditingDomain editingDomain = GMFEditingDomainFactory.INSTANCE
+ .createEditingDomain();
+ progressMonitor
+ .beginTask(
+ Messages.IntermediateModelDiagramEditorUtil_CreateDiagramProgressTask,
+ 3);
+ final Resource diagramResource = editingDomain.getResourceSet()
+ .createResource(diagramURI);
+ final Resource modelResource = editingDomain.getResourceSet()
+ .createResource(modelURI);
+ final String diagramName = diagramURI.lastSegment();
+ AbstractTransactionalCommand command = new AbstractTransactionalCommand(
+ editingDomain,
+ Messages.IntermediateModelDiagramEditorUtil_CreateDiagramCommandLabel,
+ Collections.EMPTY_LIST) {
+ protected CommandResult doExecuteWithResult(
+ IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ StpIntermediateModel model = createInitialModel();
+ attachModelToResource(model, modelResource);
+
+ Diagram diagram = ViewService
+ .createDiagram(
+ model,
+ StpIntermediateModelEditPart.MODEL_ID,
+ IntermediateModelDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
+ if (diagram != null) {
+ diagramResource.getContents().add(diagram);
+ diagram.setName(diagramName);
+ diagram.setElement(model);
+ }
+
+ try {
+ modelResource
+ .save(org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorUtil
+ .getSaveOptions());
+ diagramResource
+ .save(org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorUtil
+ .getSaveOptions());
+ } catch (IOException e) {
+
+ IntermediateModelDiagramEditorPlugin
+ .getInstance()
+ .logError(
+ "Unable to store model and diagram resources", e); //$NON-NLS-1$
+ }
+ return CommandResult.newOKCommandResult();
+ }
+ };
+ try {
+ OperationHistoryFactory.getOperationHistory().execute(command,
+ new SubProgressMonitor(progressMonitor, 1), null);
+ } catch (ExecutionException e) {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Unable to create model and diagram", e); //$NON-NLS-1$
+ }
+ setCharset(WorkspaceSynchronizer.getFile(modelResource));
+ setCharset(WorkspaceSynchronizer.getFile(diagramResource));
+ return diagramResource;
+ }
+
+ /**
+ * Create a new instance of domain element associated with canvas.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static StpIntermediateModel createInitialModel() {
+ return ImFactory.eINSTANCE.createStpIntermediateModel();
+ }
+
+ /**
+ * Store model element in the resource.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static void attachModelToResource(StpIntermediateModel model,
+ Resource resource) {
+ resource.getContents().add(model);
+ }
+
+ /**
+ * @generated
+ */
+ public static void selectElementsInDiagram(
+ IDiagramWorkbenchPart diagramPart, List<EditPart> editParts) {
+ diagramPart.getDiagramGraphicalViewer().deselectAll();
+
+ EditPart firstPrimary = null;
+ for (EditPart nextPart : editParts) {
+ diagramPart.getDiagramGraphicalViewer().appendSelection(nextPart);
+ if (firstPrimary == null && nextPart instanceof IPrimaryEditPart) {
+ firstPrimary = nextPart;
+ }
+ }
+
+ if (!editParts.isEmpty()) {
+ diagramPart.getDiagramGraphicalViewer().reveal(
+ firstPrimary != null ? firstPrimary : (EditPart) editParts
+ .get(0));
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private static int findElementsInDiagramByID(DiagramEditPart diagramPart,
+ EObject element, List<EditPart> editPartCollector) {
+ IDiagramGraphicalViewer viewer = (IDiagramGraphicalViewer) diagramPart
+ .getViewer();
+ final int intialNumOfEditParts = editPartCollector.size();
+
+ if (element instanceof View) { // support notation element lookup
+ EditPart editPart = (EditPart) viewer.getEditPartRegistry().get(
+ element);
+ if (editPart != null) {
+ editPartCollector.add(editPart);
+ return 1;
+ }
+ }
+
+ String elementID = EMFCoreUtil.getProxyID(element);
+ @SuppressWarnings("unchecked")
+ List<EditPart> associatedParts = viewer.findEditPartsForElement(
+ elementID, IGraphicalEditPart.class);
+ // perform the possible hierarchy disjoint -> take the top-most parts only
+ for (EditPart nextPart : associatedParts) {
+ EditPart parentPart = nextPart.getParent();
+ while (parentPart != null && !associatedParts.contains(parentPart)) {
+ parentPart = parentPart.getParent();
+ }
+ if (parentPart == null) {
+ editPartCollector.add(nextPart);
+ }
+ }
+
+ if (intialNumOfEditParts == editPartCollector.size()) {
+ if (!associatedParts.isEmpty()) {
+ editPartCollector.add(associatedParts.get(0));
+ } else {
+ if (element.eContainer() != null) {
+ return findElementsInDiagramByID(diagramPart,
+ element.eContainer(), editPartCollector);
+ }
+ }
+ }
+ return editPartCollector.size() - intialNumOfEditParts;
+ }
+
+ /**
+ * @generated
+ */
+ public static View findView(DiagramEditPart diagramEditPart,
+ EObject targetElement, LazyElement2ViewMap lazyElement2ViewMap) {
+ boolean hasStructuralURI = false;
+ if (targetElement.eResource() instanceof XMLResource) {
+ hasStructuralURI = ((XMLResource) targetElement.eResource())
+ .getID(targetElement) == null;
+ }
+
+ View view = null;
+ LinkedList<EditPart> editPartHolder = new LinkedList<EditPart>();
+ if (hasStructuralURI
+ && !lazyElement2ViewMap.getElement2ViewMap().isEmpty()) {
+ view = lazyElement2ViewMap.getElement2ViewMap().get(targetElement);
+ } else if (findElementsInDiagramByID(diagramEditPart, targetElement,
+ editPartHolder) > 0) {
+ EditPart editPart = editPartHolder.get(0);
+ view = editPart.getModel() instanceof View ? (View) editPart
+ .getModel() : null;
+ }
+
+ return (view == null) ? diagramEditPart.getDiagramView() : view;
+ }
+
+ /**
+ * XXX This is quite suspicious code (especially editPartTmpHolder) and likely to be removed soon
+ * @generated
+ */
+ public static class LazyElement2ViewMap {
+ /**
+ * @generated
+ */
+ private Map<EObject, View> element2ViewMap;
+
+ /**
+ * @generated
+ */
+ private View scope;
+
+ /**
+ * @generated
+ */
+ private Set<? extends EObject> elementSet;
+
+ /**
+ * @generated
+ */
+ public LazyElement2ViewMap(View scope, Set<? extends EObject> elements) {
+ this.scope = scope;
+ this.elementSet = elements;
+ }
+
+ /**
+ * @generated
+ */
+ public final Map<EObject, View> getElement2ViewMap() {
+ if (element2ViewMap == null) {
+ element2ViewMap = new HashMap<EObject, View>();
+ // map possible notation elements to itself as these can't be found by view.getElement()
+ for (EObject element : elementSet) {
+ if (element instanceof View) {
+ View view = (View) element;
+ if (view.getDiagram() == scope.getDiagram()) {
+ element2ViewMap.put(element, view); // take only those that part of our diagram
+ }
+ }
+ }
+
+ buildElement2ViewMap(scope, element2ViewMap, elementSet);
+ }
+ return element2ViewMap;
+ }
+
+ /**
+ * @generated
+ */
+ private static boolean buildElement2ViewMap(View parentView,
+ Map<EObject, View> element2ViewMap,
+ Set<? extends EObject> elements) {
+ if (elements.size() == element2ViewMap.size()) {
+ return true;
+ }
+
+ if (parentView.isSetElement()
+ && !element2ViewMap.containsKey(parentView.getElement())
+ && elements.contains(parentView.getElement())) {
+ element2ViewMap.put(parentView.getElement(), parentView);
+ if (elements.size() == element2ViewMap.size()) {
+ return true;
+ }
+ }
+ boolean complete = false;
+ for (Iterator<?> it = parentView.getChildren().iterator(); it
+ .hasNext() && !complete;) {
+ complete = buildElement2ViewMap((View) it.next(),
+ element2ViewMap, elements);
+ }
+ for (Iterator<?> it = parentView.getSourceEdges().iterator(); it
+ .hasNext() && !complete;) {
+ complete = buildElement2ViewMap((View) it.next(),
+ element2ViewMap, elements);
+ }
+ for (Iterator<?> it = parentView.getTargetEdges().iterator(); it
+ .hasNext() && !complete;) {
+ complete = buildElement2ViewMap((View) it.next(),
+ element2ViewMap, elements);
+ }
+ return complete;
+ }
+ } //LazyElement2ViewMap
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramUpdateCommand.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramUpdateCommand.java
new file mode 100755
index 0000000..7f69c52
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramUpdateCommand.java
@@ -0,0 +1,85 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.commands.IHandlerListener;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @generated
+ */
+public class IntermediateModelDiagramUpdateCommand implements IHandler {
+
+ /**
+ * @generated
+ */
+ public void addHandlerListener(IHandlerListener handlerListener) {
+ }
+
+ /**
+ * @generated
+ */
+ public void dispose() {
+ }
+
+ /**
+ * @generated
+ */
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ISelection selection = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getSelectionService()
+ .getSelection();
+ if (selection instanceof IStructuredSelection) {
+ IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+ if (structuredSelection.size() != 1) {
+ return null;
+ }
+ if (structuredSelection.getFirstElement() instanceof EditPart
+ && ((EditPart) structuredSelection.getFirstElement())
+ .getModel() instanceof View) {
+ EObject modelElement = ((View) ((EditPart) structuredSelection
+ .getFirstElement()).getModel()).getElement();
+ List editPolicies = CanonicalEditPolicy
+ .getRegisteredEditPolicies(modelElement);
+ for (Iterator it = editPolicies.iterator(); it.hasNext();) {
+ CanonicalEditPolicy nextEditPolicy = (CanonicalEditPolicy) it
+ .next();
+ nextEditPolicy.refresh();
+ }
+
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isEnabled() {
+ return true;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isHandled() {
+ return true;
+ }
+
+ /**
+ * @generated
+ */
+ public void removeHandlerListener(IHandlerListener handlerListener) {
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramUpdater.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramUpdater.java
new file mode 100755
index 0000000..951a269
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDiagramUpdater.java
@@ -0,0 +1,632 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.update.DiagramUpdater;
+import org.eclipse.soa.mangrove.ImPackage;
+import org.eclipse.soa.mangrove.Process;
+import org.eclipse.soa.mangrove.ProcessCollection;
+import org.eclipse.soa.mangrove.Service;
+import org.eclipse.soa.mangrove.ServiceCollection;
+import org.eclipse.soa.mangrove.Step;
+import org.eclipse.soa.mangrove.StpIntermediateModel;
+import org.eclipse.soa.mangrove.Transition;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceNeedsEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepServiceModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.TransitionEditPart;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+
+/**
+ * @generated
+ */
+public class IntermediateModelDiagramUpdater {
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelNodeDescriptor> getSemanticChildren(
+ View view) {
+ switch (IntermediateModelVisualIDRegistry.getVisualID(view)) {
+ case StpIntermediateModelEditPart.VISUAL_ID:
+ return getStpIntermediateModel_1000SemanticChildren(view);
+ case ProcessCollectionEditPart.VISUAL_ID:
+ return getProcessCollection_2005SemanticChildren(view);
+ case ServiceCollectionEditPart.VISUAL_ID:
+ return getServiceCollection_2006SemanticChildren(view);
+ case ProcessEditPart.VISUAL_ID:
+ return getProcess_3007SemanticChildren(view);
+ }
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelNodeDescriptor> getStpIntermediateModel_1000SemanticChildren(
+ View view) {
+ if (!view.isSetElement()) {
+ return Collections.emptyList();
+ }
+ StpIntermediateModel modelElement = (StpIntermediateModel) view
+ .getElement();
+ LinkedList<IntermediateModelNodeDescriptor> result = new LinkedList<IntermediateModelNodeDescriptor>();
+ {
+ ProcessCollection childElement = modelElement
+ .getProcessCollection();
+ int visualID = IntermediateModelVisualIDRegistry.getNodeVisualID(
+ view, childElement);
+ if (visualID == ProcessCollectionEditPart.VISUAL_ID) {
+ result.add(new IntermediateModelNodeDescriptor(childElement,
+ visualID));
+ }
+ }
+ {
+ ServiceCollection childElement = modelElement
+ .getServiceCollection();
+ int visualID = IntermediateModelVisualIDRegistry.getNodeVisualID(
+ view, childElement);
+ if (visualID == ServiceCollectionEditPart.VISUAL_ID) {
+ result.add(new IntermediateModelNodeDescriptor(childElement,
+ visualID));
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelNodeDescriptor> getProcessCollection_2005SemanticChildren(
+ View view) {
+ if (!view.isSetElement()) {
+ return Collections.emptyList();
+ }
+ ProcessCollection modelElement = (ProcessCollection) view.getElement();
+ LinkedList<IntermediateModelNodeDescriptor> result = new LinkedList<IntermediateModelNodeDescriptor>();
+ for (Iterator<?> it = modelElement.getProcesses().iterator(); it
+ .hasNext();) {
+ Process childElement = (Process) it.next();
+ int visualID = IntermediateModelVisualIDRegistry.getNodeVisualID(
+ view, childElement);
+ if (visualID == ProcessEditPart.VISUAL_ID) {
+ result.add(new IntermediateModelNodeDescriptor(childElement,
+ visualID));
+ continue;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelNodeDescriptor> getServiceCollection_2006SemanticChildren(
+ View view) {
+ if (!view.isSetElement()) {
+ return Collections.emptyList();
+ }
+ ServiceCollection modelElement = (ServiceCollection) view.getElement();
+ LinkedList<IntermediateModelNodeDescriptor> result = new LinkedList<IntermediateModelNodeDescriptor>();
+ for (Iterator<?> it = modelElement.getServices().iterator(); it
+ .hasNext();) {
+ Service childElement = (Service) it.next();
+ int visualID = IntermediateModelVisualIDRegistry.getNodeVisualID(
+ view, childElement);
+ if (visualID == ServiceEditPart.VISUAL_ID) {
+ result.add(new IntermediateModelNodeDescriptor(childElement,
+ visualID));
+ continue;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelNodeDescriptor> getProcess_3007SemanticChildren(
+ View view) {
+ if (!view.isSetElement()) {
+ return Collections.emptyList();
+ }
+ Process modelElement = (Process) view.getElement();
+ LinkedList<IntermediateModelNodeDescriptor> result = new LinkedList<IntermediateModelNodeDescriptor>();
+ for (Iterator<?> it = modelElement.getSteps().iterator(); it.hasNext();) {
+ Step childElement = (Step) it.next();
+ int visualID = IntermediateModelVisualIDRegistry.getNodeVisualID(
+ view, childElement);
+ if (visualID == StepEditPart.VISUAL_ID) {
+ result.add(new IntermediateModelNodeDescriptor(childElement,
+ visualID));
+ continue;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getContainedLinks(
+ View view) {
+ switch (IntermediateModelVisualIDRegistry.getVisualID(view)) {
+ case StpIntermediateModelEditPart.VISUAL_ID:
+ return getStpIntermediateModel_1000ContainedLinks(view);
+ case ProcessCollectionEditPart.VISUAL_ID:
+ return getProcessCollection_2005ContainedLinks(view);
+ case ServiceCollectionEditPart.VISUAL_ID:
+ return getServiceCollection_2006ContainedLinks(view);
+ case ProcessEditPart.VISUAL_ID:
+ return getProcess_3007ContainedLinks(view);
+ case StepEditPart.VISUAL_ID:
+ return getStep_3008ContainedLinks(view);
+ case ServiceEditPart.VISUAL_ID:
+ return getService_3009ContainedLinks(view);
+ case TransitionEditPart.VISUAL_ID:
+ return getTransition_4009ContainedLinks(view);
+ }
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getIncomingLinks(
+ View view) {
+ switch (IntermediateModelVisualIDRegistry.getVisualID(view)) {
+ case ProcessCollectionEditPart.VISUAL_ID:
+ return getProcessCollection_2005IncomingLinks(view);
+ case ServiceCollectionEditPart.VISUAL_ID:
+ return getServiceCollection_2006IncomingLinks(view);
+ case ProcessEditPart.VISUAL_ID:
+ return getProcess_3007IncomingLinks(view);
+ case StepEditPart.VISUAL_ID:
+ return getStep_3008IncomingLinks(view);
+ case ServiceEditPart.VISUAL_ID:
+ return getService_3009IncomingLinks(view);
+ case TransitionEditPart.VISUAL_ID:
+ return getTransition_4009IncomingLinks(view);
+ }
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getOutgoingLinks(
+ View view) {
+ switch (IntermediateModelVisualIDRegistry.getVisualID(view)) {
+ case ProcessCollectionEditPart.VISUAL_ID:
+ return getProcessCollection_2005OutgoingLinks(view);
+ case ServiceCollectionEditPart.VISUAL_ID:
+ return getServiceCollection_2006OutgoingLinks(view);
+ case ProcessEditPart.VISUAL_ID:
+ return getProcess_3007OutgoingLinks(view);
+ case StepEditPart.VISUAL_ID:
+ return getStep_3008OutgoingLinks(view);
+ case ServiceEditPart.VISUAL_ID:
+ return getService_3009OutgoingLinks(view);
+ case TransitionEditPart.VISUAL_ID:
+ return getTransition_4009OutgoingLinks(view);
+ }
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getStpIntermediateModel_1000ContainedLinks(
+ View view) {
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getProcessCollection_2005ContainedLinks(
+ View view) {
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getServiceCollection_2006ContainedLinks(
+ View view) {
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getProcess_3007ContainedLinks(
+ View view) {
+ Process modelElement = (Process) view.getElement();
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ result.addAll(getContainedTypeModelFacetLinks_Transition_4009(modelElement));
+ result.addAll(getOutgoingFeatureModelFacetLinks_Service_Needs_4011(modelElement));
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getStep_3008ContainedLinks(
+ View view) {
+ Step modelElement = (Step) view.getElement();
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ result.addAll(getOutgoingFeatureModelFacetLinks_Step_ServiceModel_4010(modelElement));
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getService_3009ContainedLinks(
+ View view) {
+ Service modelElement = (Service) view.getElement();
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ result.addAll(getOutgoingFeatureModelFacetLinks_Service_Needs_4011(modelElement));
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getTransition_4009ContainedLinks(
+ View view) {
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getProcessCollection_2005IncomingLinks(
+ View view) {
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getServiceCollection_2006IncomingLinks(
+ View view) {
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getProcess_3007IncomingLinks(
+ View view) {
+ Process modelElement = (Process) view.getElement();
+ Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences = EcoreUtil.CrossReferencer
+ .find(view.eResource().getResourceSet().getResources());
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ result.addAll(getIncomingFeatureModelFacetLinks_Step_ServiceModel_4010(
+ modelElement, crossReferences));
+ result.addAll(getIncomingFeatureModelFacetLinks_Service_Needs_4011(
+ modelElement, crossReferences));
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getStep_3008IncomingLinks(
+ View view) {
+ Step modelElement = (Step) view.getElement();
+ Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences = EcoreUtil.CrossReferencer
+ .find(view.eResource().getResourceSet().getResources());
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ result.addAll(getIncomingTypeModelFacetLinks_Transition_4009(
+ modelElement, crossReferences));
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getService_3009IncomingLinks(
+ View view) {
+ Service modelElement = (Service) view.getElement();
+ Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences = EcoreUtil.CrossReferencer
+ .find(view.eResource().getResourceSet().getResources());
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ result.addAll(getIncomingFeatureModelFacetLinks_Step_ServiceModel_4010(
+ modelElement, crossReferences));
+ result.addAll(getIncomingFeatureModelFacetLinks_Service_Needs_4011(
+ modelElement, crossReferences));
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getTransition_4009IncomingLinks(
+ View view) {
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getProcessCollection_2005OutgoingLinks(
+ View view) {
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getServiceCollection_2006OutgoingLinks(
+ View view) {
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getProcess_3007OutgoingLinks(
+ View view) {
+ Process modelElement = (Process) view.getElement();
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ result.addAll(getOutgoingFeatureModelFacetLinks_Service_Needs_4011(modelElement));
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getStep_3008OutgoingLinks(
+ View view) {
+ Step modelElement = (Step) view.getElement();
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ result.addAll(getOutgoingTypeModelFacetLinks_Transition_4009(modelElement));
+ result.addAll(getOutgoingFeatureModelFacetLinks_Step_ServiceModel_4010(modelElement));
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getService_3009OutgoingLinks(
+ View view) {
+ Service modelElement = (Service) view.getElement();
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ result.addAll(getOutgoingFeatureModelFacetLinks_Service_Needs_4011(modelElement));
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static List<IntermediateModelLinkDescriptor> getTransition_4009OutgoingLinks(
+ View view) {
+ return Collections.emptyList();
+ }
+
+ /**
+ * @generated
+ */
+ private static Collection<IntermediateModelLinkDescriptor> getContainedTypeModelFacetLinks_Transition_4009(
+ Process container) {
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ for (Iterator<?> links = container.getTransitions().iterator(); links
+ .hasNext();) {
+ EObject linkObject = (EObject) links.next();
+ if (false == linkObject instanceof Transition) {
+ continue;
+ }
+ Transition link = (Transition) linkObject;
+ if (TransitionEditPart.VISUAL_ID != IntermediateModelVisualIDRegistry
+ .getLinkWithClassVisualID(link)) {
+ continue;
+ }
+ Step dst = link.getTarget();
+ Step src = link.getSource();
+ result.add(new IntermediateModelLinkDescriptor(src, dst, link,
+ IntermediateModelElementTypes.Transition_4009,
+ TransitionEditPart.VISUAL_ID));
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private static Collection<IntermediateModelLinkDescriptor> getIncomingTypeModelFacetLinks_Transition_4009(
+ Step target,
+ Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences) {
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ Collection<EStructuralFeature.Setting> settings = crossReferences
+ .get(target);
+ for (EStructuralFeature.Setting setting : settings) {
+ if (setting.getEStructuralFeature() != ImPackage.eINSTANCE
+ .getTransition_Target()
+ || false == setting.getEObject() instanceof Transition) {
+ continue;
+ }
+ Transition link = (Transition) setting.getEObject();
+ if (TransitionEditPart.VISUAL_ID != IntermediateModelVisualIDRegistry
+ .getLinkWithClassVisualID(link)) {
+ continue;
+ }
+ Step src = link.getSource();
+ result.add(new IntermediateModelLinkDescriptor(src, target, link,
+ IntermediateModelElementTypes.Transition_4009,
+ TransitionEditPart.VISUAL_ID));
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private static Collection<IntermediateModelLinkDescriptor> getIncomingFeatureModelFacetLinks_Step_ServiceModel_4010(
+ Service target,
+ Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences) {
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ Collection<EStructuralFeature.Setting> settings = crossReferences
+ .get(target);
+ for (EStructuralFeature.Setting setting : settings) {
+ if (setting.getEStructuralFeature() == ImPackage.eINSTANCE
+ .getStep_ServiceModel()) {
+ result.add(new IntermediateModelLinkDescriptor(setting
+ .getEObject(), target,
+ IntermediateModelElementTypes.StepServiceModel_4010,
+ StepServiceModelEditPart.VISUAL_ID));
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private static Collection<IntermediateModelLinkDescriptor> getIncomingFeatureModelFacetLinks_Service_Needs_4011(
+ Service target,
+ Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences) {
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ Collection<EStructuralFeature.Setting> settings = crossReferences
+ .get(target);
+ for (EStructuralFeature.Setting setting : settings) {
+ if (setting.getEStructuralFeature() == ImPackage.eINSTANCE
+ .getService_Needs()) {
+ result.add(new IntermediateModelLinkDescriptor(setting
+ .getEObject(), target,
+ IntermediateModelElementTypes.ServiceNeeds_4011,
+ ServiceNeedsEditPart.VISUAL_ID));
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private static Collection<IntermediateModelLinkDescriptor> getOutgoingTypeModelFacetLinks_Transition_4009(
+ Step source) {
+ Process container = null;
+ // Find container element for the link.
+ // Climb up by containment hierarchy starting from the source
+ // and return the first element that is instance of the container class.
+ for (EObject element = source; element != null && container == null; element = element
+ .eContainer()) {
+ if (element instanceof Process) {
+ container = (Process) element;
+ }
+ }
+ if (container == null) {
+ return Collections.emptyList();
+ }
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ for (Iterator<?> links = container.getTransitions().iterator(); links
+ .hasNext();) {
+ EObject linkObject = (EObject) links.next();
+ if (false == linkObject instanceof Transition) {
+ continue;
+ }
+ Transition link = (Transition) linkObject;
+ if (TransitionEditPart.VISUAL_ID != IntermediateModelVisualIDRegistry
+ .getLinkWithClassVisualID(link)) {
+ continue;
+ }
+ Step dst = link.getTarget();
+ Step src = link.getSource();
+ if (src != source) {
+ continue;
+ }
+ result.add(new IntermediateModelLinkDescriptor(src, dst, link,
+ IntermediateModelElementTypes.Transition_4009,
+ TransitionEditPart.VISUAL_ID));
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private static Collection<IntermediateModelLinkDescriptor> getOutgoingFeatureModelFacetLinks_Step_ServiceModel_4010(
+ Step source) {
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ Service destination = source.getServiceModel();
+ if (destination == null) {
+ return result;
+ }
+ result.add(new IntermediateModelLinkDescriptor(source, destination,
+ IntermediateModelElementTypes.StepServiceModel_4010,
+ StepServiceModelEditPart.VISUAL_ID));
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ private static Collection<IntermediateModelLinkDescriptor> getOutgoingFeatureModelFacetLinks_Service_Needs_4011(
+ Service source) {
+ LinkedList<IntermediateModelLinkDescriptor> result = new LinkedList<IntermediateModelLinkDescriptor>();
+ for (Iterator<?> destinations = source.getNeeds().iterator(); destinations
+ .hasNext();) {
+ Service destination = (Service) destinations.next();
+ result.add(new IntermediateModelLinkDescriptor(source, destination,
+ IntermediateModelElementTypes.ServiceNeeds_4011,
+ ServiceNeedsEditPart.VISUAL_ID));
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ public static final DiagramUpdater TYPED_INSTANCE = new DiagramUpdater() {
+ /**
+ * @generated
+ */
+
+ public List<IntermediateModelNodeDescriptor> getSemanticChildren(
+ View view) {
+ return IntermediateModelDiagramUpdater.getSemanticChildren(view);
+ }
+
+ /**
+ * @generated
+ */
+
+ public List<IntermediateModelLinkDescriptor> getContainedLinks(View view) {
+ return IntermediateModelDiagramUpdater.getContainedLinks(view);
+ }
+
+ /**
+ * @generated
+ */
+
+ public List<IntermediateModelLinkDescriptor> getIncomingLinks(View view) {
+ return IntermediateModelDiagramUpdater.getIncomingLinks(view);
+ }
+
+ /**
+ * @generated
+ */
+
+ public List<IntermediateModelLinkDescriptor> getOutgoingLinks(View view) {
+ return IntermediateModelDiagramUpdater.getOutgoingLinks(view);
+ }
+ };
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDocumentProvider.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDocumentProvider.java
new file mode 100755
index 0000000..f4837c1
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelDocumentProvider.java
@@ -0,0 +1,1134 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceStatus;
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.core.runtime.jobs.MultiRule;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.ui.URIEditorInput;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.transaction.NotificationFilter;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.core.DiagramEditingDomainFactory;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.AbstractDocumentProvider;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.DiagramDocument;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocumentProvider;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocument;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.internal.EditorStatusCodes;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.internal.util.DiagramIOUtil;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.core.resources.GMFResourceFactory;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.part.FileEditorInput;
+
+/**
+ * @generated
+ */
+public class IntermediateModelDocumentProvider extends AbstractDocumentProvider
+ implements IDiagramDocumentProvider {
+
+ /**
+ * @generated
+ */
+ protected ElementInfo createElementInfo(Object element)
+ throws CoreException {
+ if (false == element instanceof FileEditorInput
+ && false == element instanceof URIEditorInput) {
+ throw new CoreException(
+ new Status(
+ IStatus.ERROR,
+ IntermediateModelDiagramEditorPlugin.ID,
+ 0,
+ NLS.bind(
+ Messages.IntermediateModelDocumentProvider_IncorrectInputError,
+ new Object[] {
+ element,
+ "org.eclipse.ui.part.FileEditorInput", "org.eclipse.emf.common.ui.URIEditorInput" }), //$NON-NLS-1$ //$NON-NLS-2$
+ null));
+ }
+ IEditorInput editorInput = (IEditorInput) element;
+ IDiagramDocument document = (IDiagramDocument) createDocument(editorInput);
+
+ ResourceSetInfo info = new ResourceSetInfo(document, editorInput);
+ info.setModificationStamp(computeModificationStamp(info));
+ info.fStatus = null;
+ return info;
+ }
+
+ /**
+ * @generated
+ */
+ protected IDocument createDocument(Object element) throws CoreException {
+ if (false == element instanceof FileEditorInput
+ && false == element instanceof URIEditorInput) {
+ throw new CoreException(
+ new Status(
+ IStatus.ERROR,
+ IntermediateModelDiagramEditorPlugin.ID,
+ 0,
+ NLS.bind(
+ Messages.IntermediateModelDocumentProvider_IncorrectInputError,
+ new Object[] {
+ element,
+ "org.eclipse.ui.part.FileEditorInput", "org.eclipse.emf.common.ui.URIEditorInput" }), //$NON-NLS-1$ //$NON-NLS-2$
+ null));
+ }
+ IDocument document = createEmptyDocument();
+ setDocumentContent(document, (IEditorInput) element);
+ setupDocument(element, document);
+ return document;
+ }
+
+ /**
+ * Sets up the given document as it would be provided for the given element. The
+ * content of the document is not changed. This default implementation is empty.
+ * Subclasses may reimplement.
+ *
+ * @param element the blue-print element
+ * @param document the document to set up
+ * @generated
+ */
+ protected void setupDocument(Object element, IDocument document) {
+ // for subclasses
+ }
+
+ /**
+ * @generated
+ */
+ private long computeModificationStamp(ResourceSetInfo info) {
+ int result = 0;
+ for (Iterator<Resource> it = info.getLoadedResourcesIterator(); it
+ .hasNext();) {
+ Resource nextResource = it.next();
+ IFile file = WorkspaceSynchronizer.getFile(nextResource);
+ if (file != null) {
+ if (file.getLocation() != null) {
+ result += file.getLocation().toFile().lastModified();
+ } else {
+ result += file.getModificationStamp();
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * @generated
+ */
+ protected IDocument createEmptyDocument() {
+ DiagramDocument document = new DiagramDocument();
+ document.setEditingDomain(createEditingDomain());
+ return document;
+ }
+
+ /**
+ * @generated
+ */
+ private TransactionalEditingDomain createEditingDomain() {
+ TransactionalEditingDomain editingDomain = DiagramEditingDomainFactory
+ .getInstance().createEditingDomain();
+ editingDomain.setID("org.eclipse.soa.mangrove.diagram.EditingDomain"); //$NON-NLS-1$
+ final NotificationFilter diagramResourceModifiedFilter = NotificationFilter
+ .createNotifierFilter(editingDomain.getResourceSet())
+ .and(NotificationFilter.createEventTypeFilter(Notification.ADD))
+ .and(NotificationFilter.createFeatureFilter(ResourceSet.class,
+ ResourceSet.RESOURCE_SET__RESOURCES));
+ editingDomain.getResourceSet().eAdapters().add(new Adapter() {
+
+ private Notifier myTarger;
+
+ public Notifier getTarget() {
+ return myTarger;
+ }
+
+ public boolean isAdapterForType(Object type) {
+ return false;
+ }
+
+ public void notifyChanged(Notification notification) {
+ if (diagramResourceModifiedFilter.matches(notification)) {
+ Object value = notification.getNewValue();
+ if (value instanceof Resource) {
+ ((Resource) value).setTrackingModification(true);
+ }
+ }
+ }
+
+ public void setTarget(Notifier newTarget) {
+ myTarger = newTarget;
+ }
+
+ });
+
+ return editingDomain;
+ }
+
+ /**
+ * @generated
+ */
+ protected void setDocumentContent(IDocument document, IEditorInput element)
+ throws CoreException {
+ IDiagramDocument diagramDocument = (IDiagramDocument) document;
+ TransactionalEditingDomain domain = diagramDocument.getEditingDomain();
+ if (element instanceof FileEditorInput) {
+ IStorage storage = ((FileEditorInput) element).getStorage();
+ Diagram diagram = DiagramIOUtil.load(domain, storage, true,
+ getProgressMonitor());
+ document.setContent(diagram);
+ } else if (element instanceof URIEditorInput) {
+ URI uri = ((URIEditorInput) element).getURI();
+ Resource resource = null;
+ try {
+ resource = domain.getResourceSet().getResource(
+ uri.trimFragment(), false);
+ if (resource == null) {
+ resource = domain.getResourceSet().createResource(
+ uri.trimFragment());
+ }
+ if (!resource.isLoaded()) {
+ try {
+ Map options = new HashMap(
+ GMFResourceFactory.getDefaultLoadOptions());
+ // @see 171060
+ // options.put(org.eclipse.emf.ecore.xmi.XMLResource.OPTION_RECORD_UNKNOWN_FEATURE, Boolean.TRUE);
+ resource.load(options);
+ } catch (IOException e) {
+ resource.unload();
+ throw e;
+ }
+ }
+ if (uri.fragment() != null) {
+ EObject rootElement = resource.getEObject(uri.fragment());
+ if (rootElement instanceof Diagram) {
+ document.setContent((Diagram) rootElement);
+ return;
+ }
+ } else {
+ for (Iterator it = resource.getContents().iterator(); it
+ .hasNext();) {
+ Object rootElement = it.next();
+ if (rootElement instanceof Diagram) {
+ document.setContent((Diagram) rootElement);
+ return;
+ }
+ }
+ }
+ throw new RuntimeException(
+ Messages.IntermediateModelDocumentProvider_NoDiagramInResourceError);
+ } catch (Exception e) {
+ CoreException thrownExcp = null;
+ if (e instanceof CoreException) {
+ thrownExcp = (CoreException) e;
+ } else {
+ String msg = e.getLocalizedMessage();
+ thrownExcp = new CoreException(
+ new Status(
+ IStatus.ERROR,
+ IntermediateModelDiagramEditorPlugin.ID,
+ 0,
+ msg != null ? msg
+ : Messages.IntermediateModelDocumentProvider_DiagramLoadingError,
+ e));
+ }
+ throw thrownExcp;
+ }
+ } else {
+ throw new CoreException(
+ new Status(
+ IStatus.ERROR,
+ IntermediateModelDiagramEditorPlugin.ID,
+ 0,
+ NLS.bind(
+ Messages.IntermediateModelDocumentProvider_IncorrectInputError,
+ new Object[] {
+ element,
+ "org.eclipse.ui.part.FileEditorInput", "org.eclipse.emf.common.ui.URIEditorInput" }), //$NON-NLS-1$ //$NON-NLS-2$
+ null));
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public long getModificationStamp(Object element) {
+ ResourceSetInfo info = getResourceSetInfo(element);
+ if (info != null) {
+ return computeModificationStamp(info);
+ }
+ return super.getModificationStamp(element);
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isDeleted(Object element) {
+ IDiagramDocument document = getDiagramDocument(element);
+ if (document != null) {
+ Resource diagramResource = document.getDiagram().eResource();
+ if (diagramResource != null) {
+ IFile file = WorkspaceSynchronizer.getFile(diagramResource);
+ return file == null || file.getLocation() == null
+ || !file.getLocation().toFile().exists();
+ }
+ }
+ return super.isDeleted(element);
+ }
+
+ /**
+ * @generated
+ */
+ public ResourceSetInfo getResourceSetInfo(Object editorInput) {
+ return (ResourceSetInfo) super.getElementInfo(editorInput);
+ }
+
+ /**
+ * @generated
+ */
+ protected void disposeElementInfo(Object element, ElementInfo info) {
+ if (info instanceof ResourceSetInfo) {
+ ResourceSetInfo resourceSetInfo = (ResourceSetInfo) info;
+ resourceSetInfo.dispose();
+ }
+ super.disposeElementInfo(element, info);
+ }
+
+ /**
+ * @generated
+ */
+ protected void doValidateState(Object element, Object computationContext)
+ throws CoreException {
+ ResourceSetInfo info = getResourceSetInfo(element);
+ if (info != null) {
+ LinkedList<IFile> files2Validate = new LinkedList<IFile>();
+ for (Iterator<Resource> it = info.getLoadedResourcesIterator(); it
+ .hasNext();) {
+ Resource nextResource = it.next();
+ IFile file = WorkspaceSynchronizer.getFile(nextResource);
+ if (file != null && file.isReadOnly()) {
+ files2Validate.add(file);
+ }
+ }
+ ResourcesPlugin.getWorkspace().validateEdit(
+ (IFile[]) files2Validate.toArray(new IFile[files2Validate
+ .size()]), computationContext);
+ }
+
+ super.doValidateState(element, computationContext);
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isReadOnly(Object element) {
+ ResourceSetInfo info = getResourceSetInfo(element);
+ if (info != null) {
+ if (info.isUpdateCache()) {
+ try {
+ updateCache(element);
+ } catch (CoreException ex) {
+ IntermediateModelDiagramEditorPlugin
+ .getInstance()
+ .logError(
+ Messages.IntermediateModelDocumentProvider_isModifiable,
+ ex);
+ // Error message to log was initially taken from org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide.internal.l10n.EditorMessages.StorageDocumentProvider_isModifiable
+ }
+ }
+ return info.isReadOnly();
+ }
+ return super.isReadOnly(element);
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isModifiable(Object element) {
+ if (!isStateValidated(element)) {
+ if (element instanceof FileEditorInput
+ || element instanceof URIEditorInput) {
+ return true;
+ }
+ }
+ ResourceSetInfo info = getResourceSetInfo(element);
+ if (info != null) {
+ if (info.isUpdateCache()) {
+ try {
+ updateCache(element);
+ } catch (CoreException ex) {
+ IntermediateModelDiagramEditorPlugin
+ .getInstance()
+ .logError(
+ Messages.IntermediateModelDocumentProvider_isModifiable,
+ ex);
+ // Error message to log was initially taken from org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide.internal.l10n.EditorMessages.StorageDocumentProvider_isModifiable
+ }
+ }
+ return info.isModifiable();
+ }
+ return super.isModifiable(element);
+ }
+
+ /**
+ * @generated
+ */
+ protected void updateCache(Object element) throws CoreException {
+ ResourceSetInfo info = getResourceSetInfo(element);
+ if (info != null) {
+ for (Iterator<Resource> it = info.getLoadedResourcesIterator(); it
+ .hasNext();) {
+ Resource nextResource = it.next();
+ IFile file = WorkspaceSynchronizer.getFile(nextResource);
+ if (file != null && file.isReadOnly()) {
+ info.setReadOnly(true);
+ info.setModifiable(false);
+ return;
+ }
+ }
+ info.setReadOnly(false);
+ info.setModifiable(true);
+ return;
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void doUpdateStateCache(Object element) throws CoreException {
+ ResourceSetInfo info = getResourceSetInfo(element);
+ if (info != null) {
+ info.setUpdateCache(true);
+ }
+ super.doUpdateStateCache(element);
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isSynchronized(Object element) {
+ ResourceSetInfo info = getResourceSetInfo(element);
+ if (info != null) {
+ return info.isSynchronized();
+ }
+ return super.isSynchronized(element);
+ }
+
+ /**
+ * @generated
+ */
+ protected ISchedulingRule getResetRule(Object element) {
+ ResourceSetInfo info = getResourceSetInfo(element);
+ if (info != null) {
+ LinkedList<ISchedulingRule> rules = new LinkedList<ISchedulingRule>();
+ for (Iterator<Resource> it = info.getLoadedResourcesIterator(); it
+ .hasNext();) {
+ Resource nextResource = it.next();
+ IFile file = WorkspaceSynchronizer.getFile(nextResource);
+ if (file != null) {
+ rules.add(ResourcesPlugin.getWorkspace().getRuleFactory()
+ .modifyRule(file));
+ }
+ }
+ return new MultiRule(
+ (ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules
+ .size()]));
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected ISchedulingRule getSaveRule(Object element) {
+ ResourceSetInfo info = getResourceSetInfo(element);
+ if (info != null) {
+ LinkedList<ISchedulingRule> rules = new LinkedList<ISchedulingRule>();
+ for (Iterator<Resource> it = info.getLoadedResourcesIterator(); it
+ .hasNext();) {
+ Resource nextResource = it.next();
+ IFile file = WorkspaceSynchronizer.getFile(nextResource);
+ if (file != null) {
+ rules.add(computeSchedulingRule(file));
+ }
+ }
+ return new MultiRule(
+ (ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules
+ .size()]));
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected ISchedulingRule getSynchronizeRule(Object element) {
+ ResourceSetInfo info = getResourceSetInfo(element);
+ if (info != null) {
+ LinkedList<ISchedulingRule> rules = new LinkedList<ISchedulingRule>();
+ for (Iterator<Resource> it = info.getLoadedResourcesIterator(); it
+ .hasNext();) {
+ Resource nextResource = it.next();
+ IFile file = WorkspaceSynchronizer.getFile(nextResource);
+ if (file != null) {
+ rules.add(ResourcesPlugin.getWorkspace().getRuleFactory()
+ .refreshRule(file));
+ }
+ }
+ return new MultiRule(
+ (ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules
+ .size()]));
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected ISchedulingRule getValidateStateRule(Object element) {
+ ResourceSetInfo info = getResourceSetInfo(element);
+ if (info != null) {
+ LinkedList<ISchedulingRule> files = new LinkedList<ISchedulingRule>();
+ for (Iterator<Resource> it = info.getLoadedResourcesIterator(); it
+ .hasNext();) {
+ Resource nextResource = it.next();
+ IFile file = WorkspaceSynchronizer.getFile(nextResource);
+ if (file != null) {
+ files.add(file);
+ }
+ }
+ return ResourcesPlugin
+ .getWorkspace()
+ .getRuleFactory()
+ .validateEditRule(
+ (IFile[]) files.toArray(new IFile[files.size()]));
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ private ISchedulingRule computeSchedulingRule(IResource toCreateOrModify) {
+ if (toCreateOrModify.exists())
+ return ResourcesPlugin.getWorkspace().getRuleFactory()
+ .modifyRule(toCreateOrModify);
+
+ IResource parent = toCreateOrModify;
+ do {
+ /*
+ * XXX This is a workaround for
+ * https://bugs.eclipse.org/bugs/show_bug.cgi?id=67601
+ * IResourceRuleFactory.createRule should iterate the hierarchy
+ * itself.
+ */
+ toCreateOrModify = parent;
+ parent = toCreateOrModify.getParent();
+ } while (parent != null && !parent.exists());
+
+ return ResourcesPlugin.getWorkspace().getRuleFactory()
+ .createRule(toCreateOrModify);
+ }
+
+ /**
+ * @generated
+ */
+ protected void doSynchronize(Object element, IProgressMonitor monitor)
+ throws CoreException {
+ ResourceSetInfo info = getResourceSetInfo(element);
+ if (info != null) {
+ for (Iterator<Resource> it = info.getLoadedResourcesIterator(); it
+ .hasNext();) {
+ Resource nextResource = it.next();
+ handleElementChanged(info, nextResource, monitor);
+ }
+ return;
+ }
+ super.doSynchronize(element, monitor);
+ }
+
+ /**
+ * @generated
+ */
+ protected void doSaveDocument(IProgressMonitor monitor, Object element,
+ IDocument document, boolean overwrite) throws CoreException {
+ ResourceSetInfo info = getResourceSetInfo(element);
+ if (info != null) {
+ if (!overwrite && !info.isSynchronized()) {
+ throw new CoreException(
+ new Status(
+ IStatus.ERROR,
+ IntermediateModelDiagramEditorPlugin.ID,
+ IResourceStatus.OUT_OF_SYNC_LOCAL,
+ Messages.IntermediateModelDocumentProvider_UnsynchronizedFileSaveError,
+ null));
+ }
+ info.stopResourceListening();
+ fireElementStateChanging(element);
+ try {
+ monitor.beginTask(
+ Messages.IntermediateModelDocumentProvider_SaveDiagramTask,
+ info.getResourceSet().getResources().size() + 1); //"Saving diagram"
+ for (Iterator<Resource> it = info.getLoadedResourcesIterator(); it
+ .hasNext();) {
+ Resource nextResource = it.next();
+ monitor.setTaskName(NLS
+ .bind(Messages.IntermediateModelDocumentProvider_SaveNextResourceTask,
+ nextResource.getURI()));
+ if (nextResource.isLoaded()
+ && !info.getEditingDomain()
+ .isReadOnly(nextResource)) {
+ try {
+ nextResource
+ .save(IntermediateModelDiagramEditorUtil
+ .getSaveOptions());
+ } catch (IOException e) {
+ fireElementStateChangeFailed(element);
+ throw new CoreException(new Status(IStatus.ERROR,
+ IntermediateModelDiagramEditorPlugin.ID,
+ EditorStatusCodes.RESOURCE_FAILURE,
+ e.getLocalizedMessage(), null));
+ }
+ }
+ monitor.worked(1);
+ }
+ monitor.done();
+ info.setModificationStamp(computeModificationStamp(info));
+ } catch (RuntimeException x) {
+ fireElementStateChangeFailed(element);
+ throw x;
+ } finally {
+ info.startResourceListening();
+ }
+ } else {
+ URI newResoruceURI;
+ List<IFile> affectedFiles = null;
+ if (element instanceof FileEditorInput) {
+ IFile newFile = ((FileEditorInput) element).getFile();
+ affectedFiles = Collections.singletonList(newFile);
+ newResoruceURI = URI.createPlatformResourceURI(newFile
+ .getFullPath().toString(), true);
+ } else if (element instanceof URIEditorInput) {
+ newResoruceURI = ((URIEditorInput) element).getURI();
+ } else {
+ fireElementStateChangeFailed(element);
+ throw new CoreException(
+ new Status(
+ IStatus.ERROR,
+ IntermediateModelDiagramEditorPlugin.ID,
+ 0,
+ NLS.bind(
+ Messages.IntermediateModelDocumentProvider_IncorrectInputError,
+ new Object[] {
+ element,
+ "org.eclipse.ui.part.FileEditorInput", "org.eclipse.emf.common.ui.URIEditorInput" }), //$NON-NLS-1$ //$NON-NLS-2$
+ null));
+ }
+ if (false == document instanceof IDiagramDocument) {
+ fireElementStateChangeFailed(element);
+ throw new CoreException(
+ new Status(
+ IStatus.ERROR,
+ IntermediateModelDiagramEditorPlugin.ID,
+ 0,
+ "Incorrect document used: " + document + " instead of org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument", null)); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ IDiagramDocument diagramDocument = (IDiagramDocument) document;
+ final Resource newResource = diagramDocument.getEditingDomain()
+ .getResourceSet().createResource(newResoruceURI);
+ final Diagram diagramCopy = (Diagram) EcoreUtil
+ .copy(diagramDocument.getDiagram());
+ try {
+ new AbstractTransactionalCommand(
+ diagramDocument.getEditingDomain(),
+ NLS.bind(
+ Messages.IntermediateModelDocumentProvider_SaveAsOperation,
+ diagramCopy.getName()), affectedFiles) {
+ protected CommandResult doExecuteWithResult(
+ IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ newResource.getContents().add(diagramCopy);
+ return CommandResult.newOKCommandResult();
+ }
+ }.execute(monitor, null);
+ newResource.save(IntermediateModelDiagramEditorUtil
+ .getSaveOptions());
+ } catch (ExecutionException e) {
+ fireElementStateChangeFailed(element);
+ throw new CoreException(new Status(IStatus.ERROR,
+ IntermediateModelDiagramEditorPlugin.ID, 0,
+ e.getLocalizedMessage(), null));
+ } catch (IOException e) {
+ fireElementStateChangeFailed(element);
+ throw new CoreException(new Status(IStatus.ERROR,
+ IntermediateModelDiagramEditorPlugin.ID, 0,
+ e.getLocalizedMessage(), null));
+ }
+ newResource.unload();
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected void handleElementChanged(ResourceSetInfo info,
+ Resource changedResource, IProgressMonitor monitor) {
+ IFile file = WorkspaceSynchronizer.getFile(changedResource);
+ if (file != null) {
+ try {
+ file.refreshLocal(IResource.DEPTH_INFINITE, monitor);
+ } catch (CoreException ex) {
+ IntermediateModelDiagramEditorPlugin
+ .getInstance()
+ .logError(
+ Messages.IntermediateModelDocumentProvider_handleElementContentChanged,
+ ex);
+ // Error message to log was initially taken from org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide.internal.l10n.EditorMessages.FileDocumentProvider_handleElementContentChanged
+ }
+ }
+ changedResource.unload();
+
+ fireElementContentAboutToBeReplaced(info.getEditorInput());
+ removeUnchangedElementListeners(info.getEditorInput(), info);
+ info.fStatus = null;
+ try {
+ setDocumentContent(info.fDocument, info.getEditorInput());
+ } catch (CoreException e) {
+ info.fStatus = e.getStatus();
+ }
+ if (!info.fCanBeSaved) {
+ info.setModificationStamp(computeModificationStamp(info));
+ }
+ addUnchangedElementListeners(info.getEditorInput(), info);
+ fireElementContentReplaced(info.getEditorInput());
+ }
+
+ /**
+ * @generated
+ */
+ protected void handleElementMoved(IEditorInput input, URI uri) {
+ if (input instanceof FileEditorInput) {
+ IFile newFile = ResourcesPlugin
+ .getWorkspace()
+ .getRoot()
+ .getFile(
+ new Path(URI.decode(uri.path()))
+ .removeFirstSegments(1));
+ fireElementMoved(input, newFile == null ? null
+ : new FileEditorInput(newFile));
+ return;
+ }
+ // TODO: append suffix to the URI! (use diagram as a parameter)
+ fireElementMoved(input, new URIEditorInput(uri));
+ }
+
+ /**
+ * @generated
+ */
+ public IEditorInput createInputWithEditingDomain(IEditorInput editorInput,
+ TransactionalEditingDomain domain) {
+ return editorInput;
+ }
+
+ /**
+ * @generated
+ */
+ public IDiagramDocument getDiagramDocument(Object element) {
+ IDocument doc = getDocument(element);
+ if (doc instanceof IDiagramDocument) {
+ return (IDiagramDocument) doc;
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected IRunnableContext getOperationRunner(IProgressMonitor monitor) {
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected class ResourceSetInfo extends ElementInfo {
+
+ /**
+ * @generated
+ */
+ private long myModificationStamp = IResource.NULL_STAMP;
+
+ /**
+ * @generated
+ */
+ private WorkspaceSynchronizer mySynchronizer;
+
+ /**
+ * @generated
+ */
+ private LinkedList<Resource> myUnSynchronizedResources = new LinkedList<Resource>();
+
+ /**
+ * @generated
+ */
+ private IDiagramDocument myDocument;
+
+ /**
+ * @generated
+ */
+ private IEditorInput myEditorInput;
+
+ /**
+ * @generated
+ */
+ private boolean myUpdateCache = true;
+
+ /**
+ * @generated
+ */
+ private boolean myModifiable = false;
+
+ /**
+ * @generated
+ */
+ private boolean myReadOnly = true;
+
+ /**
+ * @generated
+ */
+ private ResourceSetModificationListener myResourceSetListener;
+
+ /**
+ * @generated
+ */
+ public ResourceSetInfo(IDiagramDocument document,
+ IEditorInput editorInput) {
+ super(document);
+ myDocument = document;
+ myEditorInput = editorInput;
+ startResourceListening();
+ myResourceSetListener = new ResourceSetModificationListener(this);
+ getResourceSet().eAdapters().add(myResourceSetListener);
+ }
+
+ /**
+ * @generated
+ */
+ public long getModificationStamp() {
+ return myModificationStamp;
+ }
+
+ /**
+ * @generated
+ */
+ public void setModificationStamp(long modificationStamp) {
+ myModificationStamp = modificationStamp;
+ }
+
+ /**
+ * @generated
+ */
+ public TransactionalEditingDomain getEditingDomain() {
+ return myDocument.getEditingDomain();
+ }
+
+ /**
+ * @generated
+ */
+ public ResourceSet getResourceSet() {
+ return getEditingDomain().getResourceSet();
+ }
+
+ /**
+ * @generated
+ */
+ public Iterator<Resource> getLoadedResourcesIterator() {
+ return new ArrayList<Resource>(getResourceSet().getResources())
+ .iterator();
+ }
+
+ /**
+ * @generated
+ */
+ public IEditorInput getEditorInput() {
+ return myEditorInput;
+ }
+
+ /**
+ * @generated
+ */
+ public void dispose() {
+ stopResourceListening();
+ getResourceSet().eAdapters().remove(myResourceSetListener);
+ for (Iterator<Resource> it = getLoadedResourcesIterator(); it
+ .hasNext();) {
+ Resource resource = it.next();
+ resource.unload();
+ }
+ getEditingDomain().dispose();
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isSynchronized() {
+ return myUnSynchronizedResources.size() == 0;
+ }
+
+ /**
+ * @generated
+ */
+ public void setUnSynchronized(Resource resource) {
+ myUnSynchronizedResources.add(resource);
+ }
+
+ /**
+ * @generated
+ */
+ public void setSynchronized(Resource resource) {
+ myUnSynchronizedResources.remove(resource);
+ }
+
+ /**
+ * @generated
+ */
+ public final void stopResourceListening() {
+ mySynchronizer.dispose();
+ mySynchronizer = null;
+ }
+
+ /**
+ * @generated
+ */
+ public final void startResourceListening() {
+ mySynchronizer = new WorkspaceSynchronizer(getEditingDomain(),
+ new SynchronizerDelegate());
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isUpdateCache() {
+ return myUpdateCache;
+ }
+
+ /**
+ * @generated
+ */
+ public void setUpdateCache(boolean update) {
+ myUpdateCache = update;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isModifiable() {
+ return myModifiable;
+ }
+
+ /**
+ * @generated
+ */
+ public void setModifiable(boolean modifiable) {
+ myModifiable = modifiable;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean isReadOnly() {
+ return myReadOnly;
+ }
+
+ /**
+ * @generated
+ */
+ public void setReadOnly(boolean readOnly) {
+ myReadOnly = readOnly;
+ }
+
+ /**
+ * @generated
+ */
+ private class SynchronizerDelegate implements
+ WorkspaceSynchronizer.Delegate {
+
+ /**
+ * @generated
+ */
+ public void dispose() {
+ }
+
+ /**
+ * @generated
+ */
+ public boolean handleResourceChanged(final Resource resource) {
+ synchronized (ResourceSetInfo.this) {
+ if (ResourceSetInfo.this.fCanBeSaved) {
+ ResourceSetInfo.this.setUnSynchronized(resource);
+ return true;
+ }
+ }
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ handleElementChanged(ResourceSetInfo.this, resource,
+ null);
+ }
+ });
+ return true;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean handleResourceDeleted(Resource resource) {
+ synchronized (ResourceSetInfo.this) {
+ if (ResourceSetInfo.this.fCanBeSaved) {
+ ResourceSetInfo.this.setUnSynchronized(resource);
+ return true;
+ }
+ }
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ fireElementDeleted(ResourceSetInfo.this
+ .getEditorInput());
+ }
+ });
+ return true;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean handleResourceMoved(Resource resource,
+ final URI newURI) {
+ synchronized (ResourceSetInfo.this) {
+ if (ResourceSetInfo.this.fCanBeSaved) {
+ ResourceSetInfo.this.setUnSynchronized(resource);
+ return true;
+ }
+ }
+ if (myDocument.getDiagram().eResource() == resource) {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ handleElementMoved(
+ ResourceSetInfo.this.getEditorInput(),
+ newURI);
+ }
+ });
+ } else {
+ handleResourceDeleted(resource);
+ }
+ return true;
+ }
+
+ }
+
+ }
+
+ /**
+ * @generated
+ */
+ private class ResourceSetModificationListener extends EContentAdapter {
+
+ /**
+ * @generated
+ */
+ private NotificationFilter myModifiedFilter;
+
+ /**
+ * @generated
+ */
+ private ResourceSetInfo myInfo;
+
+ /**
+ * @generated
+ */
+ public ResourceSetModificationListener(ResourceSetInfo info) {
+ myInfo = info;
+ myModifiedFilter = NotificationFilter
+ .createEventTypeFilter(Notification.SET)
+ .or(NotificationFilter
+ .createEventTypeFilter(Notification.UNSET))
+ .and(NotificationFilter.createFeatureFilter(Resource.class,
+ Resource.RESOURCE__IS_MODIFIED));
+ }
+
+ /**
+ * @generated
+ */
+ public void notifyChanged(Notification notification) {
+ if (notification.getNotifier() instanceof ResourceSet) {
+ super.notifyChanged(notification);
+ }
+ if (!notification.isTouch()
+ && myModifiedFilter.matches(notification)) {
+ if (notification.getNotifier() instanceof Resource) {
+ Resource resource = (Resource) notification.getNotifier();
+ if (resource.isLoaded()) {
+ boolean modified = false;
+ for (Iterator/*<org.eclipse.emf.ecore.resource.Resource>*/it = myInfo
+ .getLoadedResourcesIterator(); it.hasNext()
+ && !modified;) {
+ Resource nextResource = (Resource) it.next();
+ if (nextResource.isLoaded()) {
+ modified = nextResource.isModified();
+ }
+ }
+ boolean dirtyStateChanged = false;
+ synchronized (myInfo) {
+ if (modified != myInfo.fCanBeSaved) {
+ myInfo.fCanBeSaved = modified;
+ dirtyStateChanged = true;
+ }
+ if (!resource.isModified()) {
+ myInfo.setSynchronized(resource);
+ }
+ }
+ if (dirtyStateChanged) {
+ fireElementDirtyStateChanged(
+ myInfo.getEditorInput(), modified);
+
+ if (!modified) {
+ myInfo.setModificationStamp(computeModificationStamp(myInfo));
+ }
+ }
+ }
+ }
+ }
+ }
+
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelInitDiagramFileAction.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelInitDiagramFileAction.java
new file mode 100755
index 0000000..3c26169
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelInitDiagramFileAction.java
@@ -0,0 +1,97 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.common.util.WrappedException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.emf.core.GMFEditingDomainFactory;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+
+/**
+ * @generated
+ */
+public class IntermediateModelInitDiagramFileAction implements
+ IObjectActionDelegate {
+
+ /**
+ * @generated
+ */
+ private IWorkbenchPart targetPart;
+
+ /**
+ * @generated
+ */
+ private URI domainModelURI;
+
+ /**
+ * @generated
+ */
+ public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+ this.targetPart = targetPart;
+ }
+
+ /**
+ * @generated
+ */
+ public void selectionChanged(IAction action, ISelection selection) {
+ domainModelURI = null;
+ action.setEnabled(false);
+ if (selection instanceof IStructuredSelection == false
+ || selection.isEmpty()) {
+ return;
+ }
+ IFile file = (IFile) ((IStructuredSelection) selection)
+ .getFirstElement();
+ domainModelURI = URI.createPlatformResourceURI(file.getFullPath()
+ .toString(), true);
+ action.setEnabled(true);
+ }
+
+ /**
+ * @generated
+ */
+ private Shell getShell() {
+ return targetPart.getSite().getShell();
+ }
+
+ /**
+ * @generated
+ */
+ public void run(IAction action) {
+ TransactionalEditingDomain editingDomain = GMFEditingDomainFactory.INSTANCE
+ .createEditingDomain();
+ ResourceSet resourceSet = editingDomain.getResourceSet();
+ EObject diagramRoot = null;
+ try {
+ Resource resource = resourceSet.getResource(domainModelURI, true);
+ diagramRoot = (EObject) resource.getContents().get(0);
+ } catch (WrappedException ex) {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Unable to load resource: " + domainModelURI, ex); //$NON-NLS-1$
+ }
+ if (diagramRoot == null) {
+ MessageDialog.openError(getShell(),
+ Messages.InitDiagramFile_ResourceErrorDialogTitle,
+ Messages.InitDiagramFile_ResourceErrorDialogMessage);
+ return;
+ }
+ Wizard wizard = new IntermediateModelNewDiagramFileWizard(
+ domainModelURI, diagramRoot, editingDomain);
+ wizard.setWindowTitle(NLS.bind(Messages.InitDiagramFile_WizardTitle,
+ StpIntermediateModelEditPart.MODEL_ID));
+ IntermediateModelDiagramEditorUtil.runWizard(getShell(), wizard,
+ "InitDiagramFile"); //$NON-NLS-1$
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelLinkDescriptor.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelLinkDescriptor.java
new file mode 100755
index 0000000..f6fc48c
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelLinkDescriptor.java
@@ -0,0 +1,27 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.tooling.runtime.update.UpdaterLinkDescriptor;
+
+/**
+ * @generated
+ */
+public class IntermediateModelLinkDescriptor extends UpdaterLinkDescriptor {
+ /**
+ * @generated
+ */
+ public IntermediateModelLinkDescriptor(EObject source, EObject destination,
+ IElementType elementType, int linkVID) {
+ super(source, destination, elementType, linkVID);
+ }
+
+ /**
+ * @generated
+ */
+ public IntermediateModelLinkDescriptor(EObject source, EObject destination,
+ EObject linkElement, IElementType elementType, int linkVID) {
+ super(source, destination, linkElement, elementType, linkVID);
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelMatchingStrategy.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelMatchingStrategy.java
new file mode 100755
index 0000000..e6bee38
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelMatchingStrategy.java
@@ -0,0 +1,37 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import org.eclipse.emf.common.ui.URIEditorInput;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorMatchingStrategy;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * @generated
+ */
+public class IntermediateModelMatchingStrategy implements
+ IEditorMatchingStrategy {
+
+ /**
+ * @generated
+ */
+ public boolean matches(IEditorReference editorRef, IEditorInput input) {
+ IEditorInput editorInput;
+ try {
+ editorInput = editorRef.getEditorInput();
+ } catch (PartInitException e) {
+ return false;
+ }
+
+ if (editorInput.equals(input)) {
+ return true;
+ }
+ if (editorInput instanceof URIEditorInput
+ && input instanceof URIEditorInput) {
+ return ((URIEditorInput) editorInput).getURI().equals(
+ ((URIEditorInput) input).getURI());
+ }
+ return false;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelNewDiagramFileWizard.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelNewDiagramFileWizard.java
new file mode 100755
index 0000000..ae9d742
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelNewDiagramFileWizard.java
@@ -0,0 +1,203 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import java.io.IOException;
+import java.util.LinkedList;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.OperationHistoryFactory;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.core.services.ViewService;
+import org.eclipse.gmf.runtime.diagram.core.services.view.CreateDiagramViewOperation;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+
+/**
+ * @generated
+ */
+public class IntermediateModelNewDiagramFileWizard extends Wizard {
+
+ /**
+ * @generated
+ */
+ private WizardNewFileCreationPage myFileCreationPage;
+
+ /**
+ * @generated
+ */
+ private ModelElementSelectionPage diagramRootElementSelectionPage;
+
+ /**
+ * @generated
+ */
+ private TransactionalEditingDomain myEditingDomain;
+
+ /**
+ * @generated
+ */
+ public IntermediateModelNewDiagramFileWizard(URI domainModelURI,
+ EObject diagramRoot, TransactionalEditingDomain editingDomain) {
+ assert domainModelURI != null : "Domain model uri must be specified"; //$NON-NLS-1$
+ assert diagramRoot != null : "Doagram root element must be specified"; //$NON-NLS-1$
+ assert editingDomain != null : "Editing domain must be specified"; //$NON-NLS-1$
+
+ myFileCreationPage = new WizardNewFileCreationPage(
+ Messages.IntermediateModelNewDiagramFileWizard_CreationPageName,
+ StructuredSelection.EMPTY);
+ myFileCreationPage
+ .setTitle(Messages.IntermediateModelNewDiagramFileWizard_CreationPageTitle);
+ myFileCreationPage
+ .setDescription(NLS
+ .bind(Messages.IntermediateModelNewDiagramFileWizard_CreationPageDescription,
+ StpIntermediateModelEditPart.MODEL_ID));
+ IPath filePath;
+ String fileName = URI.decode(domainModelURI.trimFileExtension()
+ .lastSegment());
+ if (domainModelURI.isPlatformResource()) {
+ filePath = new Path(domainModelURI.trimSegments(1)
+ .toPlatformString(true));
+ } else if (domainModelURI.isFile()) {
+ filePath = new Path(domainModelURI.trimSegments(1).toFileString());
+ } else {
+ // TODO : use some default path
+ throw new IllegalArgumentException(
+ "Unsupported URI: " + domainModelURI); //$NON-NLS-1$
+ }
+ myFileCreationPage.setContainerFullPath(filePath);
+ myFileCreationPage.setFileName(IntermediateModelDiagramEditorUtil
+ .getUniqueFileName(filePath, fileName, "mangrove_diagram")); //$NON-NLS-1$
+
+ diagramRootElementSelectionPage = new DiagramRootElementSelectionPage(
+ Messages.IntermediateModelNewDiagramFileWizard_RootSelectionPageName);
+ diagramRootElementSelectionPage
+ .setTitle(Messages.IntermediateModelNewDiagramFileWizard_RootSelectionPageTitle);
+ diagramRootElementSelectionPage
+ .setDescription(Messages.IntermediateModelNewDiagramFileWizard_RootSelectionPageDescription);
+ diagramRootElementSelectionPage.setModelElement(diagramRoot);
+
+ myEditingDomain = editingDomain;
+ }
+
+ /**
+ * @generated
+ */
+ public void addPages() {
+ addPage(myFileCreationPage);
+ addPage(diagramRootElementSelectionPage);
+ }
+
+ /**
+ * @generated
+ */
+ public boolean performFinish() {
+ LinkedList<IFile> affectedFiles = new LinkedList<IFile>();
+ IFile diagramFile = myFileCreationPage.createNewFile();
+ IntermediateModelDiagramEditorUtil.setCharset(diagramFile);
+ affectedFiles.add(diagramFile);
+ URI diagramModelURI = URI.createPlatformResourceURI(diagramFile
+ .getFullPath().toString(), true);
+ ResourceSet resourceSet = myEditingDomain.getResourceSet();
+ final Resource diagramResource = resourceSet
+ .createResource(diagramModelURI);
+ AbstractTransactionalCommand command = new AbstractTransactionalCommand(
+ myEditingDomain,
+ Messages.IntermediateModelNewDiagramFileWizard_InitDiagramCommand,
+ affectedFiles) {
+
+ protected CommandResult doExecuteWithResult(
+ IProgressMonitor monitor, IAdaptable info)
+ throws ExecutionException {
+ int diagramVID = IntermediateModelVisualIDRegistry
+ .getDiagramVisualID(diagramRootElementSelectionPage
+ .getModelElement());
+ if (diagramVID != StpIntermediateModelEditPart.VISUAL_ID) {
+ return CommandResult
+ .newErrorCommandResult(Messages.IntermediateModelNewDiagramFileWizard_IncorrectRootError);
+ }
+ Diagram diagram = ViewService
+ .createDiagram(
+ diagramRootElementSelectionPage
+ .getModelElement(),
+ StpIntermediateModelEditPart.MODEL_ID,
+ IntermediateModelDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
+ diagramResource.getContents().add(diagram);
+ return CommandResult.newOKCommandResult();
+ }
+ };
+ try {
+ OperationHistoryFactory.getOperationHistory().execute(command,
+ new NullProgressMonitor(), null);
+ diagramResource.save(IntermediateModelDiagramEditorUtil
+ .getSaveOptions());
+ IntermediateModelDiagramEditorUtil.openDiagram(diagramResource);
+ } catch (ExecutionException e) {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Unable to create model and diagram", e); //$NON-NLS-1$
+ } catch (IOException ex) {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Save operation failed for: " + diagramModelURI, ex); //$NON-NLS-1$
+ } catch (PartInitException ex) {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Unable to open editor", ex); //$NON-NLS-1$
+ }
+ return true;
+ }
+
+ /**
+ * @generated
+ */
+ private static class DiagramRootElementSelectionPage extends
+ ModelElementSelectionPage {
+
+ /**
+ * @generated
+ */
+ protected DiagramRootElementSelectionPage(String pageName) {
+ super(pageName);
+ }
+
+ /**
+ * @generated
+ */
+ protected String getSelectionTitle() {
+ return Messages.IntermediateModelNewDiagramFileWizard_RootSelectionPageSelectionTitle;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean validatePage() {
+ if (selectedModelElement == null) {
+ setErrorMessage(Messages.IntermediateModelNewDiagramFileWizard_RootSelectionPageNoSelectionMessage);
+ return false;
+ }
+ boolean result = ViewService
+ .getInstance()
+ .provides(
+ new CreateDiagramViewOperation(
+ new EObjectAdapter(selectedModelElement),
+ StpIntermediateModelEditPart.MODEL_ID,
+ IntermediateModelDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT));
+ setErrorMessage(result ? null
+ : Messages.IntermediateModelNewDiagramFileWizard_RootSelectionPageInvalidSelectionMessage);
+ return result;
+ }
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelNodeDescriptor.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelNodeDescriptor.java
new file mode 100755
index 0000000..98ec1d2
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelNodeDescriptor.java
@@ -0,0 +1,17 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.tooling.runtime.update.UpdaterNodeDescriptor;
+
+/**
+ * @generated
+ */
+public class IntermediateModelNodeDescriptor extends UpdaterNodeDescriptor {
+ /**
+ * @generated
+ */
+ public IntermediateModelNodeDescriptor(EObject modelElement, int visualID) {
+ super(modelElement, visualID);
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelPaletteFactory.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelPaletteFactory.java
new file mode 100755
index 0000000..c675f14
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelPaletteFactory.java
@@ -0,0 +1,352 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.gef.Tool;
+import org.eclipse.gef.palette.PaletteContainer;
+import org.eclipse.gef.palette.PaletteDrawer;
+import org.eclipse.gef.palette.PaletteEntry;
+import org.eclipse.gef.palette.PaletteRoot;
+import org.eclipse.gef.palette.PaletteSeparator;
+import org.eclipse.gef.palette.PanningSelectionToolEntry;
+import org.eclipse.gef.palette.ToolEntry;
+import org.eclipse.gmf.runtime.diagram.ui.tools.UnspecifiedTypeConnectionTool;
+import org.eclipse.gmf.runtime.diagram.ui.tools.UnspecifiedTypeCreationTool;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+
+/**
+ * @generated
+ */
+public class IntermediateModelPaletteFactory {
+
+ /**
+ * @generated
+ */
+ public void fillPalette(PaletteRoot paletteRoot) {
+ cleanStandardTools(paletteRoot);
+ paletteRoot.add(createMangrove1Group());
+ paletteRoot.add(createTravelServices2Group());
+ paletteRoot.add(createFinancialServices3Group());
+ }
+
+ /**
+ * Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=159289
+ * @generated
+ */
+ private void cleanStandardTools(PaletteRoot paletteRoot) {
+ for (Iterator it = paletteRoot.getChildren().iterator(); it.hasNext();) {
+ PaletteEntry entry = (PaletteEntry) it.next();
+ if (!"standardGroup".equals(entry.getId())) { //$NON-NLS-1$
+ continue;
+ }
+ for (Iterator it2 = ((PaletteContainer) entry).getChildren()
+ .iterator(); it2.hasNext();) {
+ PaletteEntry entry2 = (PaletteEntry) it2.next();
+ if ("zoomTool".equals(entry2.getId())) { //$NON-NLS-1$
+ it2.remove();
+ } else if ("noteStack".equals(entry2.getId())) { //$NON-NLS-1$
+ it2.remove();
+ } else if ("selectionTool".equals(entry2.getId())) { //$NON-NLS-1$
+ it2.remove();
+ }
+ if (paletteRoot.getDefaultEntry() == entry2) {
+ paletteRoot.setDefaultEntry(null);
+ }
+ }
+ }
+ }
+
+ /**
+ * Creates "mangrove" palette tool group
+ * @generated
+ */
+ private PaletteContainer createMangrove1Group() {
+ PaletteDrawer paletteContainer = new PaletteDrawer(
+ Messages.Mangrove1Group_title);
+ paletteContainer.setId("createMangrove1Group"); //$NON-NLS-1$
+ paletteContainer.setDescription(Messages.Mangrove1Group_desc);
+ paletteContainer.add(createStandardToolsTool());
+ paletteContainer.add(new PaletteSeparator());
+ paletteContainer.add(createProcessCollection3CreationTool());
+ paletteContainer.add(createProcess4CreationTool());
+ paletteContainer.add(createStep5CreationTool());
+ paletteContainer.add(createTransition6CreationTool());
+ paletteContainer.add(new PaletteSeparator());
+ paletteContainer.add(createServiceCollection8CreationTool());
+ paletteContainer.add(createService9CreationTool());
+ paletteContainer.add(createServiceService10CreationTool());
+ paletteContainer.add(new PaletteSeparator());
+ paletteContainer.add(createStepServiceConnection12CreationTool());
+ paletteContainer.add(new PaletteSeparator());
+ return paletteContainer;
+ }
+
+ /**
+ * Creates "Travel Services" palette tool group
+ * @generated
+ */
+ private PaletteContainer createTravelServices2Group() {
+ PaletteDrawer paletteContainer = new PaletteDrawer(
+ Messages.TravelServices2Group_title);
+ paletteContainer.setId("createTravelServices2Group"); //$NON-NLS-1$
+ paletteContainer.add(createHotel1CreationTool());
+ paletteContainer.add(createWeather2CreationTool());
+ return paletteContainer;
+ }
+
+ /**
+ * Creates "Financial Services" palette tool group
+ * @generated
+ */
+ private PaletteContainer createFinancialServices3Group() {
+ PaletteDrawer paletteContainer = new PaletteDrawer(
+ Messages.FinancialServices3Group_title);
+ paletteContainer.setId("createFinancialServices3Group"); //$NON-NLS-1$
+ paletteContainer.setDescription(Messages.FinancialServices3Group_desc);
+ paletteContainer.add(createCreditCard1CreationTool());
+ paletteContainer.add(createShoppingCart2CreationTool());
+ return paletteContainer;
+ }
+
+ /**
+ * @generated
+ */
+ private ToolEntry createStandardToolsTool() {
+ PanningSelectionToolEntry entry = new PanningSelectionToolEntry();
+ entry.setId("createStandardToolsTool"); //$NON-NLS-1$
+ return entry;
+ }
+
+ /**
+ * @generated
+ */
+ private ToolEntry createProcessCollection3CreationTool() {
+ NodeToolEntry entry = new NodeToolEntry(
+ Messages.ProcessCollection3CreationTool_title,
+ Messages.ProcessCollection3CreationTool_desc,
+ Collections
+ .singletonList(IntermediateModelElementTypes.ProcessCollection_2005));
+ entry.setId("createProcessCollection3CreationTool"); //$NON-NLS-1$
+ entry.setSmallIcon(IntermediateModelElementTypes
+ .getImageDescriptor(IntermediateModelElementTypes.ProcessCollection_2005));
+ entry.setLargeIcon(entry.getSmallIcon());
+ return entry;
+ }
+
+ /**
+ * @generated
+ */
+ private ToolEntry createProcess4CreationTool() {
+ NodeToolEntry entry = new NodeToolEntry(
+ Messages.Process4CreationTool_title,
+ Messages.Process4CreationTool_desc,
+ Collections
+ .singletonList(IntermediateModelElementTypes.Process_3007));
+ entry.setId("createProcess4CreationTool"); //$NON-NLS-1$
+ entry.setSmallIcon(IntermediateModelElementTypes
+ .getImageDescriptor(IntermediateModelElementTypes.Process_3007));
+ entry.setLargeIcon(entry.getSmallIcon());
+ return entry;
+ }
+
+ /**
+ * @generated
+ */
+ private ToolEntry createStep5CreationTool() {
+ NodeToolEntry entry = new NodeToolEntry(
+ Messages.Step5CreationTool_title,
+ Messages.Step5CreationTool_desc,
+ Collections
+ .singletonList(IntermediateModelElementTypes.Step_3008));
+ entry.setId("createStep5CreationTool"); //$NON-NLS-1$
+ entry.setSmallIcon(IntermediateModelElementTypes
+ .getImageDescriptor(IntermediateModelElementTypes.Step_3008));
+ entry.setLargeIcon(entry.getSmallIcon());
+ return entry;
+ }
+
+ /**
+ * @generated
+ */
+ private ToolEntry createTransition6CreationTool() {
+ LinkToolEntry entry = new LinkToolEntry(
+ Messages.Transition6CreationTool_title,
+ Messages.Transition6CreationTool_desc,
+ Collections
+ .singletonList(IntermediateModelElementTypes.Transition_4009));
+ entry.setId("createTransition6CreationTool"); //$NON-NLS-1$
+ entry.setSmallIcon(IntermediateModelElementTypes
+ .getImageDescriptor(IntermediateModelElementTypes.Transition_4009));
+ entry.setLargeIcon(entry.getSmallIcon());
+ return entry;
+ }
+
+ /**
+ * @generated
+ */
+ private ToolEntry createServiceCollection8CreationTool() {
+ NodeToolEntry entry = new NodeToolEntry(
+ Messages.ServiceCollection8CreationTool_title,
+ Messages.ServiceCollection8CreationTool_desc,
+ Collections
+ .singletonList(IntermediateModelElementTypes.ServiceCollection_2006));
+ entry.setId("createServiceCollection8CreationTool"); //$NON-NLS-1$
+ entry.setSmallIcon(IntermediateModelElementTypes
+ .getImageDescriptor(IntermediateModelElementTypes.ServiceCollection_2006));
+ entry.setLargeIcon(entry.getSmallIcon());
+ return entry;
+ }
+
+ /**
+ * @generated
+ */
+ private ToolEntry createService9CreationTool() {
+ NodeToolEntry entry = new NodeToolEntry(
+ Messages.Service9CreationTool_title,
+ Messages.Service9CreationTool_desc,
+ Collections
+ .singletonList(IntermediateModelElementTypes.Service_3009));
+ entry.setId("createService9CreationTool"); //$NON-NLS-1$
+ entry.setSmallIcon(IntermediateModelElementTypes
+ .getImageDescriptor(IntermediateModelElementTypes.Service_3009));
+ entry.setLargeIcon(entry.getSmallIcon());
+ return entry;
+ }
+
+ /**
+ * @generated
+ */
+ private ToolEntry createServiceService10CreationTool() {
+ LinkToolEntry entry = new LinkToolEntry(
+ Messages.ServiceService10CreationTool_title,
+ Messages.ServiceService10CreationTool_desc,
+ Collections
+ .singletonList(IntermediateModelElementTypes.ServiceNeeds_4011));
+ entry.setId("createServiceService10CreationTool"); //$NON-NLS-1$
+ entry.setSmallIcon(IntermediateModelElementTypes
+ .getImageDescriptor(IntermediateModelElementTypes.ServiceNeeds_4011));
+ entry.setLargeIcon(entry.getSmallIcon());
+ return entry;
+ }
+
+ /**
+ * @generated
+ */
+ private ToolEntry createStepServiceConnection12CreationTool() {
+ LinkToolEntry entry = new LinkToolEntry(
+ Messages.StepServiceConnection12CreationTool_title,
+ Messages.StepServiceConnection12CreationTool_desc,
+ Collections
+ .singletonList(IntermediateModelElementTypes.StepServiceModel_4010));
+ entry.setId("createStepServiceConnection12CreationTool"); //$NON-NLS-1$
+ entry.setSmallIcon(IntermediateModelElementTypes
+ .getImageDescriptor(IntermediateModelElementTypes.StepServiceModel_4010));
+ entry.setLargeIcon(entry.getSmallIcon());
+ return entry;
+ }
+
+ /**
+ * @generated
+ */
+ private ToolEntry createHotel1CreationTool() {
+ ToolEntry entry = new ToolEntry(Messages.Hotel1CreationTool_title,
+ null, null, null) {
+ };
+ entry.setId("createHotel1CreationTool"); //$NON-NLS-1$
+ return entry;
+ }
+
+ /**
+ * @generated
+ */
+ private ToolEntry createWeather2CreationTool() {
+ ToolEntry entry = new ToolEntry(Messages.Weather2CreationTool_title,
+ Messages.Weather2CreationTool_desc, null, null) {
+ };
+ entry.setId("createWeather2CreationTool"); //$NON-NLS-1$
+ return entry;
+ }
+
+ /**
+ * @generated
+ */
+ private ToolEntry createCreditCard1CreationTool() {
+ ToolEntry entry = new ToolEntry(Messages.CreditCard1CreationTool_title,
+ null, null, null) {
+ };
+ entry.setId("createCreditCard1CreationTool"); //$NON-NLS-1$
+ return entry;
+ }
+
+ /**
+ * @generated
+ */
+ private ToolEntry createShoppingCart2CreationTool() {
+ ToolEntry entry = new ToolEntry(
+ Messages.ShoppingCart2CreationTool_title, null, null, null) {
+ };
+ entry.setId("createShoppingCart2CreationTool"); //$NON-NLS-1$
+ return entry;
+ }
+
+ /**
+ * @generated
+ */
+ private static class NodeToolEntry extends ToolEntry {
+
+ /**
+ * @generated
+ */
+ private final List<IElementType> elementTypes;
+
+ /**
+ * @generated
+ */
+ private NodeToolEntry(String title, String description,
+ List<IElementType> elementTypes) {
+ super(title, description, null, null);
+ this.elementTypes = elementTypes;
+ }
+
+ /**
+ * @generated
+ */
+ public Tool createTool() {
+ Tool tool = new UnspecifiedTypeCreationTool(elementTypes);
+ tool.setProperties(getToolProperties());
+ return tool;
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private static class LinkToolEntry extends ToolEntry {
+
+ /**
+ * @generated
+ */
+ private final List<IElementType> relationshipTypes;
+
+ /**
+ * @generated
+ */
+ private LinkToolEntry(String title, String description,
+ List<IElementType> relationshipTypes) {
+ super(title, description, null, null);
+ this.relationshipTypes = relationshipTypes;
+ }
+
+ /**
+ * @generated
+ */
+ public Tool createTool() {
+ Tool tool = new UnspecifiedTypeConnectionTool(relationshipTypes);
+ tool.setProperties(getToolProperties());
+ return tool;
+ }
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelUriEditorInputTester.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelUriEditorInputTester.java
new file mode 100755
index 0000000..995136c
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelUriEditorInputTester.java
@@ -0,0 +1,23 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.emf.common.ui.URIEditorInput;
+
+/**
+ * @generated
+ */
+public class IntermediateModelUriEditorInputTester extends PropertyTester {
+
+ /**
+ * @generated
+ */
+ public boolean test(Object receiver, String method, Object[] args,
+ Object expectedValue) {
+ if (false == receiver instanceof URIEditorInput) {
+ return false;
+ }
+ URIEditorInput editorInput = (URIEditorInput) receiver;
+ return "mangrove_diagram".equals(editorInput.getURI().fileExtension()); //$NON-NLS-1$
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelVisualIDRegistry.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelVisualIDRegistry.java
new file mode 100755
index 0000000..055c9c3
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/IntermediateModelVisualIDRegistry.java
@@ -0,0 +1,346 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.tooling.runtime.structure.DiagramStructure;
+import org.eclipse.soa.mangrove.ImPackage;
+import org.eclipse.soa.mangrove.StpIntermediateModel;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionPoolNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceServiceNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.TransitionEditPart;
+
+/**
+ * This registry is used to determine which type of visual object should be
+ * created for the corresponding Diagram, Node, ChildNode or Link represented
+ * by a domain model object.
+ *
+ * @generated
+ */
+public class IntermediateModelVisualIDRegistry {
+
+ /**
+ * @generated
+ */
+ private static final String DEBUG_KEY = "org.eclipse.soa.mangrove.diagram/debug/visualID"; //$NON-NLS-1$
+
+ /**
+ * @generated
+ */
+ public static int getVisualID(View view) {
+ if (view instanceof Diagram) {
+ if (StpIntermediateModelEditPart.MODEL_ID.equals(view.getType())) {
+ return StpIntermediateModelEditPart.VISUAL_ID;
+ } else {
+ return -1;
+ }
+ }
+ return org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry
+ .getVisualID(view.getType());
+ }
+
+ /**
+ * @generated
+ */
+ public static String getModelID(View view) {
+ View diagram = view.getDiagram();
+ while (view != diagram) {
+ EAnnotation annotation = view.getEAnnotation("Shortcut"); //$NON-NLS-1$
+ if (annotation != null) {
+ return (String) annotation.getDetails().get("modelID"); //$NON-NLS-1$
+ }
+ view = (View) view.eContainer();
+ }
+ return diagram != null ? diagram.getType() : null;
+ }
+
+ /**
+ * @generated
+ */
+ public static int getVisualID(String type) {
+ try {
+ return Integer.parseInt(type);
+ } catch (NumberFormatException e) {
+ if (Boolean.TRUE.toString().equalsIgnoreCase(
+ Platform.getDebugOption(DEBUG_KEY))) {
+ IntermediateModelDiagramEditorPlugin.getInstance().logError(
+ "Unable to parse view type as a visualID number: "
+ + type);
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * @generated
+ */
+ public static String getType(int visualID) {
+ return Integer.toString(visualID);
+ }
+
+ /**
+ * @generated
+ */
+ public static int getDiagramVisualID(EObject domainElement) {
+ if (domainElement == null) {
+ return -1;
+ }
+ if (ImPackage.eINSTANCE.getStpIntermediateModel().isSuperTypeOf(
+ domainElement.eClass())
+ && isDiagram((StpIntermediateModel) domainElement)) {
+ return StpIntermediateModelEditPart.VISUAL_ID;
+ }
+ return -1;
+ }
+
+ /**
+ * @generated
+ */
+ public static int getNodeVisualID(View containerView, EObject domainElement) {
+ if (domainElement == null) {
+ return -1;
+ }
+ String containerModelID = org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry
+ .getModelID(containerView);
+ if (!StpIntermediateModelEditPart.MODEL_ID.equals(containerModelID)) {
+ return -1;
+ }
+ int containerVisualID;
+ if (StpIntermediateModelEditPart.MODEL_ID.equals(containerModelID)) {
+ containerVisualID = org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry
+ .getVisualID(containerView);
+ } else {
+ if (containerView instanceof Diagram) {
+ containerVisualID = StpIntermediateModelEditPart.VISUAL_ID;
+ } else {
+ return -1;
+ }
+ }
+ switch (containerVisualID) {
+ case StpIntermediateModelEditPart.VISUAL_ID:
+ if (ImPackage.eINSTANCE.getProcessCollection().isSuperTypeOf(
+ domainElement.eClass())) {
+ return ProcessCollectionEditPart.VISUAL_ID;
+ }
+ if (ImPackage.eINSTANCE.getServiceCollection().isSuperTypeOf(
+ domainElement.eClass())) {
+ return ServiceCollectionEditPart.VISUAL_ID;
+ }
+ break;
+ case ProcessCollectionEditPart.VISUAL_ID:
+ if (ImPackage.eINSTANCE.getProcess().isSuperTypeOf(
+ domainElement.eClass())) {
+ return ProcessEditPart.VISUAL_ID;
+ }
+ break;
+ case ServiceCollectionEditPart.VISUAL_ID:
+ if (ImPackage.eINSTANCE.getService().isSuperTypeOf(
+ domainElement.eClass())) {
+ return ServiceEditPart.VISUAL_ID;
+ }
+ break;
+ case ProcessEditPart.VISUAL_ID:
+ if (ImPackage.eINSTANCE.getStep().isSuperTypeOf(
+ domainElement.eClass())) {
+ return StepEditPart.VISUAL_ID;
+ }
+ break;
+ }
+ return -1;
+ }
+
+ /**
+ * @generated
+ */
+ public static boolean canCreateNode(View containerView, int nodeVisualID) {
+ String containerModelID = org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry
+ .getModelID(containerView);
+ if (!StpIntermediateModelEditPart.MODEL_ID.equals(containerModelID)) {
+ return false;
+ }
+ int containerVisualID;
+ if (StpIntermediateModelEditPart.MODEL_ID.equals(containerModelID)) {
+ containerVisualID = org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry
+ .getVisualID(containerView);
+ } else {
+ if (containerView instanceof Diagram) {
+ containerVisualID = StpIntermediateModelEditPart.VISUAL_ID;
+ } else {
+ return false;
+ }
+ }
+ switch (containerVisualID) {
+ case StpIntermediateModelEditPart.VISUAL_ID:
+ if (ProcessCollectionEditPart.VISUAL_ID == nodeVisualID) {
+ return true;
+ }
+ if (ServiceCollectionEditPart.VISUAL_ID == nodeVisualID) {
+ return true;
+ }
+ break;
+ case ProcessCollectionEditPart.VISUAL_ID:
+ if (ProcessCollectionPoolNameEditPart.VISUAL_ID == nodeVisualID) {
+ return true;
+ }
+ if (ProcessEditPart.VISUAL_ID == nodeVisualID) {
+ return true;
+ }
+ break;
+ case ServiceCollectionEditPart.VISUAL_ID:
+ if (ServiceEditPart.VISUAL_ID == nodeVisualID) {
+ return true;
+ }
+ break;
+ case ProcessEditPart.VISUAL_ID:
+ if (ProcessNameEditPart.VISUAL_ID == nodeVisualID) {
+ return true;
+ }
+ if (StepEditPart.VISUAL_ID == nodeVisualID) {
+ return true;
+ }
+ break;
+ case StepEditPart.VISUAL_ID:
+ if (StepNameEditPart.VISUAL_ID == nodeVisualID) {
+ return true;
+ }
+ break;
+ case ServiceEditPart.VISUAL_ID:
+ if (ServiceServiceNameEditPart.VISUAL_ID == nodeVisualID) {
+ return true;
+ }
+ break;
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ public static int getLinkWithClassVisualID(EObject domainElement) {
+ if (domainElement == null) {
+ return -1;
+ }
+ if (ImPackage.eINSTANCE.getTransition().isSuperTypeOf(
+ domainElement.eClass())) {
+ return TransitionEditPart.VISUAL_ID;
+ }
+ return -1;
+ }
+
+ /**
+ * User can change implementation of this method to handle some specific
+ * situations not covered by default logic.
+ *
+ * @generated
+ */
+ private static boolean isDiagram(StpIntermediateModel element) {
+ return true;
+ }
+
+ /**
+ * @generated
+ */
+ public static boolean checkNodeVisualID(View containerView,
+ EObject domainElement, int candidate) {
+ if (candidate == -1) {
+ //unrecognized id is always bad
+ return false;
+ }
+ int basic = getNodeVisualID(containerView, domainElement);
+ return basic == candidate;
+ }
+
+ /**
+ * @generated
+ */
+ public static boolean isCompartmentVisualID(int visualID) {
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ public static boolean isSemanticLeafVisualID(int visualID) {
+ switch (visualID) {
+ case StpIntermediateModelEditPart.VISUAL_ID:
+ return false;
+ case StepEditPart.VISUAL_ID:
+ case ServiceEditPart.VISUAL_ID:
+ return true;
+ default:
+ break;
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ public static final DiagramStructure TYPED_INSTANCE = new DiagramStructure() {
+ /**
+ * @generated
+ */
+
+ public int getVisualID(View view) {
+ return org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry
+ .getVisualID(view);
+ }
+
+ /**
+ * @generated
+ */
+
+ public String getModelID(View view) {
+ return org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry
+ .getModelID(view);
+ }
+
+ /**
+ * @generated
+ */
+
+ public int getNodeVisualID(View containerView, EObject domainElement) {
+ return org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry
+ .getNodeVisualID(containerView, domainElement);
+ }
+
+ /**
+ * @generated
+ */
+
+ public boolean checkNodeVisualID(View containerView,
+ EObject domainElement, int candidate) {
+ return org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry
+ .checkNodeVisualID(containerView, domainElement, candidate);
+ }
+
+ /**
+ * @generated
+ */
+
+ public boolean isCompartmentVisualID(int visualID) {
+ return org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry
+ .isCompartmentVisualID(visualID);
+ }
+
+ /**
+ * @generated
+ */
+
+ public boolean isSemanticLeafVisualID(int visualID) {
+ return org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry
+ .isSemanticLeafVisualID(visualID);
+ }
+ };
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/LoadResourceAction.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/LoadResourceAction.java
new file mode 100755
index 0000000..8007200
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/LoadResourceAction.java
@@ -0,0 +1,31 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * @generated
+ */
+public class LoadResourceAction extends AbstractHandler {
+ /**
+ * @generated
+ */
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ IEditorPart diagramEditor = HandlerUtil.getActiveEditorChecked(event);
+ Shell shell = diagramEditor.getEditorSite().getShell();
+ assert diagramEditor instanceof DiagramEditor;
+ TransactionalEditingDomain editingDomain = ((DiagramEditor) diagramEditor)
+ .getEditingDomain();
+ org.eclipse.emf.edit.ui.action.LoadResourceAction.LoadResourceDialog loadResourceDialog = new org.eclipse.emf.edit.ui.action.LoadResourceAction.LoadResourceDialog(
+ shell, editingDomain);
+ loadResourceDialog.open();
+ return null;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/Messages.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/Messages.java
new file mode 100755
index 0000000..d1476f1
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/Messages.java
@@ -0,0 +1,484 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * @generated
+ */
+public class Messages extends NLS {
+
+ /**
+ * @generated
+ */
+ static {
+ NLS.initializeMessages("messages", Messages.class); //$NON-NLS-1$
+ }
+
+ /**
+ * @generated
+ */
+ private Messages() {
+ }
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelCreationWizardTitle;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelCreationWizard_DiagramModelFilePageTitle;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelCreationWizard_DiagramModelFilePageDescription;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelCreationWizard_DomainModelFilePageTitle;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelCreationWizard_DomainModelFilePageDescription;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelCreationWizardOpenEditorError;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelCreationWizardCreationError;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelCreationWizardPageExtensionError;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDiagramEditorUtil_OpenModelResourceErrorDialogTitle;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDiagramEditorUtil_OpenModelResourceErrorDialogMessage;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDiagramEditorUtil_CreateDiagramProgressTask;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDiagramEditorUtil_CreateDiagramCommandLabel;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDocumentProvider_isModifiable;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDocumentProvider_handleElementContentChanged;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDocumentProvider_IncorrectInputError;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDocumentProvider_NoDiagramInResourceError;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDocumentProvider_DiagramLoadingError;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDocumentProvider_UnsynchronizedFileSaveError;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDocumentProvider_SaveDiagramTask;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDocumentProvider_SaveNextResourceTask;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDocumentProvider_SaveAsOperation;
+
+ /**
+ * @generated
+ */
+ public static String InitDiagramFile_ResourceErrorDialogTitle;
+
+ /**
+ * @generated
+ */
+ public static String InitDiagramFile_ResourceErrorDialogMessage;
+
+ /**
+ * @generated
+ */
+ public static String InitDiagramFile_WizardTitle;
+
+ /**
+ * @generated
+ */
+ public static String InitDiagramFile_OpenModelFileDialogTitle;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelNewDiagramFileWizard_CreationPageName;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelNewDiagramFileWizard_CreationPageTitle;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelNewDiagramFileWizard_CreationPageDescription;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelNewDiagramFileWizard_RootSelectionPageName;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelNewDiagramFileWizard_RootSelectionPageTitle;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelNewDiagramFileWizard_RootSelectionPageDescription;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelNewDiagramFileWizard_RootSelectionPageSelectionTitle;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelNewDiagramFileWizard_RootSelectionPageNoSelectionMessage;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelNewDiagramFileWizard_RootSelectionPageInvalidSelectionMessage;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelNewDiagramFileWizard_InitDiagramCommand;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelNewDiagramFileWizard_IncorrectRootError;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDiagramEditor_SavingDeletedFile;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDiagramEditor_SaveAsErrorTitle;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDiagramEditor_SaveAsErrorMessage;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDiagramEditor_SaveErrorTitle;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelDiagramEditor_SaveErrorMessage;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelElementChooserDialog_SelectModelElementTitle;
+
+ /**
+ * @generated
+ */
+ public static String ModelElementSelectionPageMessage;
+
+ /**
+ * @generated
+ */
+ public static String ValidateActionMessage;
+
+ /**
+ * @generated
+ */
+ public static String Mangrove1Group_title;
+
+ /**
+ * @generated
+ */
+ public static String Mangrove1Group_desc;
+
+ /**
+ * @generated
+ */
+ public static String TravelServices2Group_title;
+
+ /**
+ * @generated
+ */
+ public static String FinancialServices3Group_title;
+
+ /**
+ * @generated
+ */
+ public static String FinancialServices3Group_desc;
+
+ /**
+ * @generated
+ */
+ public static String StandardToolsTool_title;
+
+ /**
+ * @generated
+ */
+ public static String ProcessCollection3CreationTool_title;
+
+ /**
+ * @generated
+ */
+ public static String ProcessCollection3CreationTool_desc;
+
+ /**
+ * @generated
+ */
+ public static String Process4CreationTool_title;
+
+ /**
+ * @generated
+ */
+ public static String Process4CreationTool_desc;
+
+ /**
+ * @generated
+ */
+ public static String Step5CreationTool_title;
+
+ /**
+ * @generated
+ */
+ public static String Step5CreationTool_desc;
+
+ /**
+ * @generated
+ */
+ public static String Transition6CreationTool_title;
+
+ /**
+ * @generated
+ */
+ public static String Transition6CreationTool_desc;
+
+ /**
+ * @generated
+ */
+ public static String ServiceCollection8CreationTool_title;
+
+ /**
+ * @generated
+ */
+ public static String ServiceCollection8CreationTool_desc;
+
+ /**
+ * @generated
+ */
+ public static String Service9CreationTool_title;
+
+ /**
+ * @generated
+ */
+ public static String Service9CreationTool_desc;
+
+ /**
+ * @generated
+ */
+ public static String ServiceService10CreationTool_title;
+
+ /**
+ * @generated
+ */
+ public static String ServiceService10CreationTool_desc;
+
+ /**
+ * @generated
+ */
+ public static String StepServiceConnection12CreationTool_title;
+
+ /**
+ * @generated
+ */
+ public static String StepServiceConnection12CreationTool_desc;
+
+ /**
+ * @generated
+ */
+ public static String Hotel1CreationTool_title;
+
+ /**
+ * @generated
+ */
+ public static String Weather2CreationTool_title;
+
+ /**
+ * @generated
+ */
+ public static String Weather2CreationTool_desc;
+
+ /**
+ * @generated
+ */
+ public static String CreditCard1CreationTool_title;
+
+ /**
+ * @generated
+ */
+ public static String ShoppingCart2CreationTool_title;
+
+ /**
+ * @generated
+ */
+ public static String CommandName_OpenDiagram;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorGroupName_StpIntermediateModel_1000_links;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorGroupName_Transition_4009_target;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorGroupName_Transition_4009_source;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorGroupName_Service_3009_incominglinks;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorGroupName_Service_3009_outgoinglinks;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorGroupName_ServiceNeeds_4011_target;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorGroupName_ServiceNeeds_4011_source;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorGroupName_StepServiceModel_4010_target;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorGroupName_StepServiceModel_4010_source;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorGroupName_Step_3008_incominglinks;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorGroupName_Step_3008_outgoinglinks;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorGroupName_Process_3007_incominglinks;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorGroupName_Process_3007_outgoinglinks;
+
+ /**
+ * @generated
+ */
+ public static String NavigatorActionProvider_OpenDiagramActionName;
+
+ /**
+ * @generated
+ */
+ public static String AbstractParser_UnexpectedValueType;
+
+ /**
+ * @generated
+ */
+ public static String AbstractParser_WrongStringConversion;
+
+ /**
+ * @generated
+ */
+ public static String AbstractParser_UnknownLiteral;
+
+ /**
+ * @generated
+ */
+ public static String MessageFormatParser_InvalidInputError;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelModelingAssistantProviderTitle;
+
+ /**
+ * @generated
+ */
+ public static String IntermediateModelModelingAssistantProviderMessage;
+
+ //TODO: put accessor fields manually
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/ModelElementSelectionPage.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/ModelElementSelectionPage.java
new file mode 100755
index 0000000..3b163d1
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/part/ModelElementSelectionPage.java
@@ -0,0 +1,150 @@
+package org.eclipse.soa.mangrove.diagram.part;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.edit.provider.IWrapperItemProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+/**
+ * Wizard page that allows to select element from model.
+ * @generated
+ */
+public class ModelElementSelectionPage extends WizardPage {
+ /**
+ * @generated
+ */
+ protected EObject selectedModelElement;
+
+ /**
+ * @generated
+ */
+ private TreeViewer modelViewer;
+
+ /**
+ * @generated
+ */
+ public ModelElementSelectionPage(String pageName) {
+ super(pageName);
+ }
+
+ /**
+ * @generated
+ */
+ public EObject getModelElement() {
+ return selectedModelElement;
+ }
+
+ /**
+ * @generated
+ */
+ public void setModelElement(EObject modelElement) {
+ selectedModelElement = modelElement;
+ if (modelViewer != null) {
+ if (selectedModelElement != null) {
+ modelViewer.setInput(selectedModelElement.eResource());
+ modelViewer.setSelection(new StructuredSelection(
+ selectedModelElement));
+ } else {
+ modelViewer.setInput(null);
+ }
+ setPageComplete(validatePage());
+ }
+ }
+
+ /**
+ * @generated
+ */
+ public void createControl(Composite parent) {
+ initializeDialogUnits(parent);
+
+ Composite plate = new Composite(parent, SWT.NONE);
+ plate.setLayoutData(new GridData(GridData.FILL_BOTH));
+ GridLayout layout = new GridLayout();
+ layout.marginWidth = 0;
+ plate.setLayout(layout);
+ setControl(plate);
+
+ Label label = new Label(plate, SWT.NONE);
+ label.setText(getSelectionTitle());
+ label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+
+ modelViewer = new TreeViewer(plate, SWT.SINGLE | SWT.H_SCROLL
+ | SWT.V_SCROLL | SWT.BORDER);
+ GridData layoutData = new GridData(GridData.FILL_BOTH);
+ layoutData.heightHint = 300;
+ layoutData.widthHint = 300;
+ modelViewer.getTree().setLayoutData(layoutData);
+ modelViewer.setContentProvider(new AdapterFactoryContentProvider(
+ IntermediateModelDiagramEditorPlugin.getInstance()
+ .getItemProvidersAdapterFactory()));
+ modelViewer.setLabelProvider(new AdapterFactoryLabelProvider(
+ IntermediateModelDiagramEditorPlugin.getInstance()
+ .getItemProvidersAdapterFactory()));
+ if (selectedModelElement != null) {
+ modelViewer.setInput(selectedModelElement.eResource());
+ modelViewer.setSelection(new StructuredSelection(
+ selectedModelElement));
+ }
+ modelViewer
+ .addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ ModelElementSelectionPage.this
+ .updateSelection((IStructuredSelection) event
+ .getSelection());
+ }
+ });
+
+ setPageComplete(validatePage());
+ }
+
+ /**
+ * Override to provide custom model element description.
+ * @generated
+ */
+ protected String getSelectionTitle() {
+ return Messages.ModelElementSelectionPageMessage;
+ }
+
+ /**
+ * @generated
+ */
+ protected void updateSelection(IStructuredSelection selection) {
+ selectedModelElement = null;
+ if (selection.size() == 1) {
+ Object selectedElement = selection.getFirstElement();
+ if (selectedElement instanceof IWrapperItemProvider) {
+ selectedElement = ((IWrapperItemProvider) selectedElement)
+ .getValue();
+ }
+ if (selectedElement instanceof FeatureMap.Entry) {
+ selectedElement = ((FeatureMap.Entry) selectedElement)
+ .getValue();
+ }
+ if (selectedElement instanceof EObject) {
+ selectedModelElement = (EObject) selectedElement;
+ }
+ }
+ setPageComplete(validatePage());
+ }
+
+ /**
+ * Override to provide specific validation of the selected model element.
+ * @generated
+ */
+ protected boolean validatePage() {
+ return true;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramAppearancePreferencePage.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramAppearancePreferencePage.java
new file mode 100755
index 0000000..9c4e41c
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramAppearancePreferencePage.java
@@ -0,0 +1,18 @@
+package org.eclipse.soa.mangrove.diagram.preferences;
+
+import org.eclipse.gmf.runtime.diagram.ui.preferences.AppearancePreferencePage;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+
+/**
+ * @generated
+ */
+public class DiagramAppearancePreferencePage extends AppearancePreferencePage {
+
+ /**
+ * @generated
+ */
+ public DiagramAppearancePreferencePage() {
+ setPreferenceStore(IntermediateModelDiagramEditorPlugin.getInstance()
+ .getPreferenceStore());
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramConnectionsPreferencePage.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramConnectionsPreferencePage.java
new file mode 100755
index 0000000..db7968b
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramConnectionsPreferencePage.java
@@ -0,0 +1,18 @@
+package org.eclipse.soa.mangrove.diagram.preferences;
+
+import org.eclipse.gmf.runtime.diagram.ui.preferences.ConnectionsPreferencePage;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+
+/**
+ * @generated
+ */
+public class DiagramConnectionsPreferencePage extends ConnectionsPreferencePage {
+
+ /**
+ * @generated
+ */
+ public DiagramConnectionsPreferencePage() {
+ setPreferenceStore(IntermediateModelDiagramEditorPlugin.getInstance()
+ .getPreferenceStore());
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramGeneralPreferencePage.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramGeneralPreferencePage.java
new file mode 100755
index 0000000..25c3b97
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramGeneralPreferencePage.java
@@ -0,0 +1,18 @@
+package org.eclipse.soa.mangrove.diagram.preferences;
+
+import org.eclipse.gmf.runtime.diagram.ui.preferences.DiagramsPreferencePage;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+
+/**
+ * @generated
+ */
+public class DiagramGeneralPreferencePage extends DiagramsPreferencePage {
+
+ /**
+ * @generated
+ */
+ public DiagramGeneralPreferencePage() {
+ setPreferenceStore(IntermediateModelDiagramEditorPlugin.getInstance()
+ .getPreferenceStore());
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramPreferenceInitializer.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramPreferenceInitializer.java
new file mode 100755
index 0000000..03b6fcf
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramPreferenceInitializer.java
@@ -0,0 +1,32 @@
+package org.eclipse.soa.mangrove.diagram.preferences;
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+
+/**
+ * @generated
+ */
+public class DiagramPreferenceInitializer extends AbstractPreferenceInitializer {
+
+ /**
+ * @generated
+ */
+ public void initializeDefaultPreferences() {
+ IPreferenceStore store = getPreferenceStore();
+ DiagramGeneralPreferencePage.initDefaults(store);
+ DiagramAppearancePreferencePage.initDefaults(store);
+ DiagramConnectionsPreferencePage.initDefaults(store);
+ DiagramPrintingPreferencePage.initDefaults(store);
+ DiagramRulersAndGridPreferencePage.initDefaults(store);
+
+ }
+
+ /**
+ * @generated
+ */
+ protected IPreferenceStore getPreferenceStore() {
+ return IntermediateModelDiagramEditorPlugin.getInstance()
+ .getPreferenceStore();
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramPrintingPreferencePage.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramPrintingPreferencePage.java
new file mode 100755
index 0000000..4d9d8f1
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramPrintingPreferencePage.java
@@ -0,0 +1,18 @@
+package org.eclipse.soa.mangrove.diagram.preferences;
+
+import org.eclipse.gmf.runtime.diagram.ui.preferences.PrintingPreferencePage;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+
+/**
+ * @generated
+ */
+public class DiagramPrintingPreferencePage extends PrintingPreferencePage {
+
+ /**
+ * @generated
+ */
+ public DiagramPrintingPreferencePage() {
+ setPreferenceStore(IntermediateModelDiagramEditorPlugin.getInstance()
+ .getPreferenceStore());
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramRulersAndGridPreferencePage.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramRulersAndGridPreferencePage.java
new file mode 100755
index 0000000..927eccf
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/preferences/DiagramRulersAndGridPreferencePage.java
@@ -0,0 +1,18 @@
+package org.eclipse.soa.mangrove.diagram.preferences;
+
+import org.eclipse.gmf.runtime.diagram.ui.preferences.RulerGridPreferencePage;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+
+/**
+ * @generated
+ */
+public class DiagramRulersAndGridPreferencePage extends RulerGridPreferencePage {
+
+ /**
+ * @generated
+ */
+ public DiagramRulersAndGridPreferencePage() {
+ setPreferenceStore(IntermediateModelDiagramEditorPlugin.getInstance()
+ .getPreferenceStore());
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/ElementInitializers.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/ElementInitializers.java
new file mode 100755
index 0000000..fe68e0d
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/ElementInitializers.java
@@ -0,0 +1,26 @@
+package org.eclipse.soa.mangrove.diagram.providers;
+
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+
+/**
+ * @generated
+ */
+public class ElementInitializers {
+
+ protected ElementInitializers() {
+ // use #getInstance to access cached instance
+ }
+
+ /**
+ * @generated
+ */
+ public static ElementInitializers getInstance() {
+ ElementInitializers cached = IntermediateModelDiagramEditorPlugin
+ .getInstance().getElementInitializers();
+ if (cached == null) {
+ IntermediateModelDiagramEditorPlugin.getInstance()
+ .setElementInitializers(cached = new ElementInitializers());
+ }
+ return cached;
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelEditPartProvider.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelEditPartProvider.java
new file mode 100755
index 0000000..8417c57
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelEditPartProvider.java
@@ -0,0 +1,142 @@
+package org.eclipse.soa.mangrove.diagram.providers;
+
+import java.lang.ref.WeakReference;
+
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPartFactory;
+import org.eclipse.gmf.runtime.common.core.service.IOperation;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.services.editpart.AbstractEditPartProvider;
+import org.eclipse.gmf.runtime.diagram.ui.services.editpart.CreateGraphicEditPartOperation;
+import org.eclipse.gmf.runtime.diagram.ui.services.editpart.IEditPartOperation;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.diagram.edit.parts.IntermediateModelEditPartFactory;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+
+/**
+ * @generated
+ */
+public class IntermediateModelEditPartProvider extends AbstractEditPartProvider {
+
+ /**
+ * @generated
+ */
+ private EditPartFactory factory;
+
+ /**
+ * @generated
+ */
+ private boolean allowCaching;
+
+ /**
+ * @generated
+ */
+ private WeakReference cachedPart;
+
+ /**
+ * @generated
+ */
+ private WeakReference cachedView;
+
+ /**
+ * @generated
+ */
+ public IntermediateModelEditPartProvider() {
+ setFactory(new IntermediateModelEditPartFactory());
+ setAllowCaching(true);
+ }
+
+ /**
+ * @generated
+ */
+ public final EditPartFactory getFactory() {
+ return factory;
+ }
+
+ /**
+ * @generated
+ */
+ protected void setFactory(EditPartFactory factory) {
+ this.factory = factory;
+ }
+
+ /**
+ * @generated
+ */
+ public final boolean isAllowCaching() {
+ return allowCaching;
+ }
+
+ /**
+ * @generated
+ */
+ protected synchronized void setAllowCaching(boolean allowCaching) {
+ this.allowCaching = allowCaching;
+ if (!allowCaching) {
+ cachedPart = null;
+ cachedView = null;
+ }
+ }
+
+ /**
+ * @generated
+ */
+ protected IGraphicalEditPart createEditPart(View view) {
+ EditPart part = factory.createEditPart(null, view);
+ if (part instanceof IGraphicalEditPart) {
+ return (IGraphicalEditPart) part;
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected IGraphicalEditPart getCachedPart(View view) {
+ if (cachedView != null && cachedView.get() == view) {
+ return (IGraphicalEditPart) cachedPart.get();
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ public synchronized IGraphicalEditPart createGraphicEditPart(View view) {
+ if (isAllowCaching()) {
+ IGraphicalEditPart part = getCachedPart(view);
+ cachedPart = null;
+ cachedView = null;
+ if (part != null) {
+ return part;
+ }
+ }
+ return createEditPart(view);
+ }
+
+ /**
+ * @generated
+ */
+ public synchronized boolean provides(IOperation operation) {
+ if (operation instanceof CreateGraphicEditPartOperation) {
+ View view = ((IEditPartOperation) operation).getView();
+ if (!StpIntermediateModelEditPart.MODEL_ID
+ .equals(IntermediateModelVisualIDRegistry.getModelID(view))) {
+ return false;
+ }
+ if (isAllowCaching() && getCachedPart(view) != null) {
+ return true;
+ }
+ IGraphicalEditPart part = createEditPart(view);
+ if (part != null) {
+ if (isAllowCaching()) {
+ cachedPart = new WeakReference(part);
+ cachedView = new WeakReference(view);
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelElementTypes.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelElementTypes.java
new file mode 100755
index 0000000..698bbe5
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelElementTypes.java
@@ -0,0 +1,283 @@
+package org.eclipse.soa.mangrove.diagram.providers;
+
+import java.util.HashSet;
+import java.util.IdentityHashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+import org.eclipse.emf.ecore.ENamedElement;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.gmf.runtime.emf.type.core.ElementTypeRegistry;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.soa.mangrove.ImPackage;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceNeedsEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepServiceModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.TransitionEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @generated
+ */
+public class IntermediateModelElementTypes {
+
+ /**
+ * @generated
+ */
+ private IntermediateModelElementTypes() {
+ }
+
+ /**
+ * @generated
+ */
+ private static Map<IElementType, ENamedElement> elements;
+
+ /**
+ * @generated
+ */
+ private static ImageRegistry imageRegistry;
+
+ /**
+ * @generated
+ */
+ private static Set<IElementType> KNOWN_ELEMENT_TYPES;
+
+ /**
+ * @generated
+ */
+ public static final IElementType StpIntermediateModel_1000 = getElementType("org.eclipse.soa.mangrove.diagram.StpIntermediateModel_1000"); //$NON-NLS-1$
+ /**
+ * @generated
+ */
+ public static final IElementType ProcessCollection_2005 = getElementType("org.eclipse.soa.mangrove.diagram.ProcessCollection_2005"); //$NON-NLS-1$
+ /**
+ * @generated
+ */
+ public static final IElementType ServiceCollection_2006 = getElementType("org.eclipse.soa.mangrove.diagram.ServiceCollection_2006"); //$NON-NLS-1$
+ /**
+ * @generated
+ */
+ public static final IElementType Process_3007 = getElementType("org.eclipse.soa.mangrove.diagram.Process_3007"); //$NON-NLS-1$
+ /**
+ * @generated
+ */
+ public static final IElementType Step_3008 = getElementType("org.eclipse.soa.mangrove.diagram.Step_3008"); //$NON-NLS-1$
+ /**
+ * @generated
+ */
+ public static final IElementType Service_3009 = getElementType("org.eclipse.soa.mangrove.diagram.Service_3009"); //$NON-NLS-1$
+ /**
+ * @generated
+ */
+ public static final IElementType Transition_4009 = getElementType("org.eclipse.soa.mangrove.diagram.Transition_4009"); //$NON-NLS-1$
+ /**
+ * @generated
+ */
+ public static final IElementType StepServiceModel_4010 = getElementType("org.eclipse.soa.mangrove.diagram.StepServiceModel_4010"); //$NON-NLS-1$
+ /**
+ * @generated
+ */
+ public static final IElementType ServiceNeeds_4011 = getElementType("org.eclipse.soa.mangrove.diagram.ServiceNeeds_4011"); //$NON-NLS-1$
+
+ /**
+ * @generated
+ */
+ private static ImageRegistry getImageRegistry() {
+ if (imageRegistry == null) {
+ imageRegistry = new ImageRegistry();
+ }
+ return imageRegistry;
+ }
+
+ /**
+ * @generated
+ */
+ private static String getImageRegistryKey(ENamedElement element) {
+ return element.getName();
+ }
+
+ /**
+ * @generated
+ */
+ private static ImageDescriptor getProvidedImageDescriptor(
+ ENamedElement element) {
+ if (element instanceof EStructuralFeature) {
+ EStructuralFeature feature = ((EStructuralFeature) element);
+ EClass eContainingClass = feature.getEContainingClass();
+ EClassifier eType = feature.getEType();
+ if (eContainingClass != null && !eContainingClass.isAbstract()) {
+ element = eContainingClass;
+ } else if (eType instanceof EClass
+ && !((EClass) eType).isAbstract()) {
+ element = eType;
+ }
+ }
+ if (element instanceof EClass) {
+ EClass eClass = (EClass) element;
+ if (!eClass.isAbstract()) {
+ return IntermediateModelDiagramEditorPlugin.getInstance()
+ .getItemImageDescriptor(
+ eClass.getEPackage().getEFactoryInstance()
+ .create(eClass));
+ }
+ }
+ // TODO : support structural features
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ public static ImageDescriptor getImageDescriptor(ENamedElement element) {
+ String key = getImageRegistryKey(element);
+ ImageDescriptor imageDescriptor = getImageRegistry().getDescriptor(key);
+ if (imageDescriptor == null) {
+ imageDescriptor = getProvidedImageDescriptor(element);
+ if (imageDescriptor == null) {
+ imageDescriptor = ImageDescriptor.getMissingImageDescriptor();
+ }
+ getImageRegistry().put(key, imageDescriptor);
+ }
+ return imageDescriptor;
+ }
+
+ /**
+ * @generated
+ */
+ public static Image getImage(ENamedElement element) {
+ String key = getImageRegistryKey(element);
+ Image image = getImageRegistry().get(key);
+ if (image == null) {
+ ImageDescriptor imageDescriptor = getProvidedImageDescriptor(element);
+ if (imageDescriptor == null) {
+ imageDescriptor = ImageDescriptor.getMissingImageDescriptor();
+ }
+ getImageRegistry().put(key, imageDescriptor);
+ image = getImageRegistry().get(key);
+ }
+ return image;
+ }
+
+ /**
+ * @generated
+ */
+ public static ImageDescriptor getImageDescriptor(IAdaptable hint) {
+ ENamedElement element = getElement(hint);
+ if (element == null) {
+ return null;
+ }
+ return getImageDescriptor(element);
+ }
+
+ /**
+ * @generated
+ */
+ public static Image getImage(IAdaptable hint) {
+ ENamedElement element = getElement(hint);
+ if (element == null) {
+ return null;
+ }
+ return getImage(element);
+ }
+
+ /**
+ * Returns 'type' of the ecore object associated with the hint.
+ *
+ * @generated
+ */
+ public static ENamedElement getElement(IAdaptable hint) {
+ Object type = hint.getAdapter(IElementType.class);
+ if (elements == null) {
+ elements = new IdentityHashMap<IElementType, ENamedElement>();
+
+ elements.put(StpIntermediateModel_1000,
+ ImPackage.eINSTANCE.getStpIntermediateModel());
+
+ elements.put(ProcessCollection_2005,
+ ImPackage.eINSTANCE.getProcessCollection());
+
+ elements.put(ServiceCollection_2006,
+ ImPackage.eINSTANCE.getServiceCollection());
+
+ elements.put(Process_3007, ImPackage.eINSTANCE.getProcess());
+
+ elements.put(Step_3008, ImPackage.eINSTANCE.getStep());
+
+ elements.put(Service_3009, ImPackage.eINSTANCE.getService());
+
+ elements.put(Transition_4009, ImPackage.eINSTANCE.getTransition());
+
+ elements.put(StepServiceModel_4010,
+ ImPackage.eINSTANCE.getStep_ServiceModel());
+
+ elements.put(ServiceNeeds_4011,
+ ImPackage.eINSTANCE.getService_Needs());
+ }
+ return (ENamedElement) elements.get(type);
+ }
+
+ /**
+ * @generated
+ */
+ private static IElementType getElementType(String id) {
+ return ElementTypeRegistry.getInstance().getType(id);
+ }
+
+ /**
+ * @generated
+ */
+ public static boolean isKnownElementType(IElementType elementType) {
+ if (KNOWN_ELEMENT_TYPES == null) {
+ KNOWN_ELEMENT_TYPES = new HashSet<IElementType>();
+ KNOWN_ELEMENT_TYPES.add(StpIntermediateModel_1000);
+ KNOWN_ELEMENT_TYPES.add(ProcessCollection_2005);
+ KNOWN_ELEMENT_TYPES.add(ServiceCollection_2006);
+ KNOWN_ELEMENT_TYPES.add(Process_3007);
+ KNOWN_ELEMENT_TYPES.add(Step_3008);
+ KNOWN_ELEMENT_TYPES.add(Service_3009);
+ KNOWN_ELEMENT_TYPES.add(Transition_4009);
+ KNOWN_ELEMENT_TYPES.add(StepServiceModel_4010);
+ KNOWN_ELEMENT_TYPES.add(ServiceNeeds_4011);
+ }
+ return KNOWN_ELEMENT_TYPES.contains(elementType);
+ }
+
+ /**
+ * @generated
+ */
+ public static IElementType getElementType(int visualID) {
+ switch (visualID) {
+ case StpIntermediateModelEditPart.VISUAL_ID:
+ return StpIntermediateModel_1000;
+ case ProcessCollectionEditPart.VISUAL_ID:
+ return ProcessCollection_2005;
+ case ServiceCollectionEditPart.VISUAL_ID:
+ return ServiceCollection_2006;
+ case ProcessEditPart.VISUAL_ID:
+ return Process_3007;
+ case StepEditPart.VISUAL_ID:
+ return Step_3008;
+ case ServiceEditPart.VISUAL_ID:
+ return Service_3009;
+ case TransitionEditPart.VISUAL_ID:
+ return Transition_4009;
+ case StepServiceModelEditPart.VISUAL_ID:
+ return StepServiceModel_4010;
+ case ServiceNeedsEditPart.VISUAL_ID:
+ return ServiceNeeds_4011;
+ }
+ return null;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelIconProvider.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelIconProvider.java
new file mode 100755
index 0000000..df36c9f
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelIconProvider.java
@@ -0,0 +1,32 @@
+package org.eclipse.soa.mangrove.diagram.providers;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.gmf.runtime.common.core.service.AbstractProvider;
+import org.eclipse.gmf.runtime.common.core.service.IOperation;
+import org.eclipse.gmf.runtime.common.ui.services.icon.GetIconOperation;
+import org.eclipse.gmf.runtime.common.ui.services.icon.IIconProvider;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @generated
+ */
+public class IntermediateModelIconProvider extends AbstractProvider implements
+ IIconProvider {
+
+ /**
+ * @generated
+ */
+ public Image getIcon(IAdaptable hint, int flags) {
+ return IntermediateModelElementTypes.getImage(hint);
+ }
+
+ /**
+ * @generated
+ */
+ public boolean provides(IOperation operation) {
+ if (operation instanceof GetIconOperation) {
+ return ((GetIconOperation) operation).execute(this) != null;
+ }
+ return false;
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelModelingAssistantProvider.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelModelingAssistantProvider.java
new file mode 100755
index 0000000..e57f2d7
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelModelingAssistantProvider.java
@@ -0,0 +1,247 @@
+package org.eclipse.soa.mangrove.diagram.providers;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.emf.type.core.ElementTypeRegistry;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.ui.services.modelingassistant.ModelingAssistantProvider;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.window.Window;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelDiagramEditorPlugin;
+import org.eclipse.soa.mangrove.diagram.part.Messages;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.ElementListSelectionDialog;
+
+/**
+ * @generated
+ */
+public class IntermediateModelModelingAssistantProvider extends
+ ModelingAssistantProvider {
+
+ /**
+ * @generated
+ */
+ public List getTypesForPopupBar(IAdaptable host) {
+ IGraphicalEditPart editPart = (IGraphicalEditPart) host
+ .getAdapter(IGraphicalEditPart.class);
+ if (editPart instanceof StpIntermediateModelEditPart) {
+ ArrayList<IElementType> types = new ArrayList<IElementType>(2);
+ types.add(IntermediateModelElementTypes.ProcessCollection_2005);
+ types.add(IntermediateModelElementTypes.ServiceCollection_2006);
+ return types;
+ }
+ if (editPart instanceof ProcessCollectionEditPart) {
+ ArrayList<IElementType> types = new ArrayList<IElementType>(1);
+ types.add(IntermediateModelElementTypes.Process_3007);
+ return types;
+ }
+ if (editPart instanceof ServiceCollectionEditPart) {
+ ArrayList<IElementType> types = new ArrayList<IElementType>(1);
+ types.add(IntermediateModelElementTypes.Service_3009);
+ return types;
+ }
+ if (editPart instanceof ProcessEditPart) {
+ ArrayList<IElementType> types = new ArrayList<IElementType>(1);
+ types.add(IntermediateModelElementTypes.Step_3008);
+ return types;
+ }
+ return Collections.EMPTY_LIST;
+ }
+
+ /**
+ * @generated
+ */
+ public List getRelTypesOnSource(IAdaptable source) {
+ IGraphicalEditPart sourceEditPart = (IGraphicalEditPart) source
+ .getAdapter(IGraphicalEditPart.class);
+ if (sourceEditPart instanceof ProcessEditPart) {
+ return ((ProcessEditPart) sourceEditPart).getMARelTypesOnSource();
+ }
+ if (sourceEditPart instanceof StepEditPart) {
+ return ((StepEditPart) sourceEditPart).getMARelTypesOnSource();
+ }
+ if (sourceEditPart instanceof ServiceEditPart) {
+ return ((ServiceEditPart) sourceEditPart).getMARelTypesOnSource();
+ }
+ return Collections.EMPTY_LIST;
+ }
+
+ /**
+ * @generated
+ */
+ public List getRelTypesOnTarget(IAdaptable target) {
+ IGraphicalEditPart targetEditPart = (IGraphicalEditPart) target
+ .getAdapter(IGraphicalEditPart.class);
+ if (targetEditPart instanceof ProcessEditPart) {
+ return ((ProcessEditPart) targetEditPart).getMARelTypesOnTarget();
+ }
+ if (targetEditPart instanceof StepEditPart) {
+ return ((StepEditPart) targetEditPart).getMARelTypesOnTarget();
+ }
+ if (targetEditPart instanceof ServiceEditPart) {
+ return ((ServiceEditPart) targetEditPart).getMARelTypesOnTarget();
+ }
+ return Collections.EMPTY_LIST;
+ }
+
+ /**
+ * @generated
+ */
+ public List getRelTypesOnSourceAndTarget(IAdaptable source,
+ IAdaptable target) {
+ IGraphicalEditPart sourceEditPart = (IGraphicalEditPart) source
+ .getAdapter(IGraphicalEditPart.class);
+ IGraphicalEditPart targetEditPart = (IGraphicalEditPart) target
+ .getAdapter(IGraphicalEditPart.class);
+ if (sourceEditPart instanceof ProcessEditPart) {
+ return ((ProcessEditPart) sourceEditPart)
+ .getMARelTypesOnSourceAndTarget(targetEditPart);
+ }
+ if (sourceEditPart instanceof StepEditPart) {
+ return ((StepEditPart) sourceEditPart)
+ .getMARelTypesOnSourceAndTarget(targetEditPart);
+ }
+ if (sourceEditPart instanceof ServiceEditPart) {
+ return ((ServiceEditPart) sourceEditPart)
+ .getMARelTypesOnSourceAndTarget(targetEditPart);
+ }
+ return Collections.EMPTY_LIST;
+ }
+
+ /**
+ * @generated
+ */
+ public List getTypesForSource(IAdaptable target,
+ IElementType relationshipType) {
+ IGraphicalEditPart targetEditPart = (IGraphicalEditPart) target
+ .getAdapter(IGraphicalEditPart.class);
+ if (targetEditPart instanceof ProcessEditPart) {
+ return ((ProcessEditPart) targetEditPart)
+ .getMATypesForSource(relationshipType);
+ }
+ if (targetEditPart instanceof StepEditPart) {
+ return ((StepEditPart) targetEditPart)
+ .getMATypesForSource(relationshipType);
+ }
+ if (targetEditPart instanceof ServiceEditPart) {
+ return ((ServiceEditPart) targetEditPart)
+ .getMATypesForSource(relationshipType);
+ }
+ return Collections.EMPTY_LIST;
+ }
+
+ /**
+ * @generated
+ */
+ public List getTypesForTarget(IAdaptable source,
+ IElementType relationshipType) {
+ IGraphicalEditPart sourceEditPart = (IGraphicalEditPart) source
+ .getAdapter(IGraphicalEditPart.class);
+ if (sourceEditPart instanceof ProcessEditPart) {
+ return ((ProcessEditPart) sourceEditPart)
+ .getMATypesForTarget(relationshipType);
+ }
+ if (sourceEditPart instanceof StepEditPart) {
+ return ((StepEditPart) sourceEditPart)
+ .getMATypesForTarget(relationshipType);
+ }
+ if (sourceEditPart instanceof ServiceEditPart) {
+ return ((ServiceEditPart) sourceEditPart)
+ .getMATypesForTarget(relationshipType);
+ }
+ return Collections.EMPTY_LIST;
+ }
+
+ /**
+ * @generated
+ */
+ public EObject selectExistingElementForSource(IAdaptable target,
+ IElementType relationshipType) {
+ return selectExistingElement(target,
+ getTypesForSource(target, relationshipType));
+ }
+
+ /**
+ * @generated
+ */
+ public EObject selectExistingElementForTarget(IAdaptable source,
+ IElementType relationshipType) {
+ return selectExistingElement(source,
+ getTypesForTarget(source, relationshipType));
+ }
+
+ /**
+ * @generated
+ */
+ protected EObject selectExistingElement(IAdaptable host, Collection types) {
+ if (types.isEmpty()) {
+ return null;
+ }
+ IGraphicalEditPart editPart = (IGraphicalEditPart) host
+ .getAdapter(IGraphicalEditPart.class);
+ if (editPart == null) {
+ return null;
+ }
+ Diagram diagram = (Diagram) editPart.getRoot().getContents().getModel();
+ HashSet<EObject> elements = new HashSet<EObject>();
+ for (Iterator<EObject> it = diagram.getElement().eAllContents(); it
+ .hasNext();) {
+ EObject element = it.next();
+ if (isApplicableElement(element, types)) {
+ elements.add(element);
+ }
+ }
+ if (elements.isEmpty()) {
+ return null;
+ }
+ return selectElement((EObject[]) elements.toArray(new EObject[elements
+ .size()]));
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean isApplicableElement(EObject element, Collection types) {
+ IElementType type = ElementTypeRegistry.getInstance().getElementType(
+ element);
+ return types.contains(type);
+ }
+
+ /**
+ * @generated
+ */
+ protected EObject selectElement(EObject[] elements) {
+ Shell shell = Display.getCurrent().getActiveShell();
+ ILabelProvider labelProvider = new AdapterFactoryLabelProvider(
+ IntermediateModelDiagramEditorPlugin.getInstance()
+ .getItemProvidersAdapterFactory());
+ ElementListSelectionDialog dialog = new ElementListSelectionDialog(
+ shell, labelProvider);
+ dialog.setMessage(Messages.IntermediateModelModelingAssistantProviderMessage);
+ dialog.setTitle(Messages.IntermediateModelModelingAssistantProviderTitle);
+ dialog.setMultipleSelection(false);
+ dialog.setElements(elements);
+ EObject selected = null;
+ if (dialog.open() == Window.OK) {
+ selected = (EObject) dialog.getFirstResult();
+ }
+ return selected;
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelParserProvider.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelParserProvider.java
new file mode 100755
index 0000000..bdd83cd
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelParserProvider.java
@@ -0,0 +1,188 @@
+package org.eclipse.soa.mangrove.diagram.providers;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.common.core.service.AbstractProvider;
+import org.eclipse.gmf.runtime.common.core.service.IOperation;
+import org.eclipse.gmf.runtime.common.ui.services.parser.GetParserOperation;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParser;
+import org.eclipse.gmf.runtime.common.ui.services.parser.IParserProvider;
+import org.eclipse.gmf.runtime.common.ui.services.parser.ParserService;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.ui.services.parser.ParserHintAdapter;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.soa.mangrove.ImPackage;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionPoolNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceServiceNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepNameEditPart;
+import org.eclipse.soa.mangrove.diagram.parsers.MessageFormatParser;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+
+/**
+ * @generated
+ */
+public class IntermediateModelParserProvider extends AbstractProvider implements
+ IParserProvider {
+
+ /**
+ * @generated
+ */
+ private IParser processCollectionPoolName_5011Parser;
+
+ /**
+ * @generated
+ */
+ private IParser getProcessCollectionPoolName_5011Parser() {
+ if (processCollectionPoolName_5011Parser == null) {
+ EAttribute[] features = new EAttribute[] { ImPackage.eINSTANCE
+ .getProcessCollection_PoolName() };
+ MessageFormatParser parser = new MessageFormatParser(features);
+ processCollectionPoolName_5011Parser = parser;
+ }
+ return processCollectionPoolName_5011Parser;
+ }
+
+ /**
+ * @generated
+ */
+ private IParser processName_5010Parser;
+
+ /**
+ * @generated
+ */
+ private IParser getProcessName_5010Parser() {
+ if (processName_5010Parser == null) {
+ EAttribute[] features = new EAttribute[] { ImPackage.eINSTANCE
+ .getProcess_Name() };
+ MessageFormatParser parser = new MessageFormatParser(features);
+ processName_5010Parser = parser;
+ }
+ return processName_5010Parser;
+ }
+
+ /**
+ * @generated
+ */
+ private IParser stepName_5009Parser;
+
+ /**
+ * @generated
+ */
+ private IParser getStepName_5009Parser() {
+ if (stepName_5009Parser == null) {
+ EAttribute[] features = new EAttribute[] { ImPackage.eINSTANCE
+ .getStep_Name() };
+ MessageFormatParser parser = new MessageFormatParser(features);
+ stepName_5009Parser = parser;
+ }
+ return stepName_5009Parser;
+ }
+
+ /**
+ * @generated
+ */
+ private IParser serviceServiceName_5012Parser;
+
+ /**
+ * @generated
+ */
+ private IParser getServiceServiceName_5012Parser() {
+ if (serviceServiceName_5012Parser == null) {
+ EAttribute[] features = new EAttribute[] { ImPackage.eINSTANCE
+ .getService_ServiceName() };
+ MessageFormatParser parser = new MessageFormatParser(features);
+ serviceServiceName_5012Parser = parser;
+ }
+ return serviceServiceName_5012Parser;
+ }
+
+ /**
+ * @generated
+ */
+ protected IParser getParser(int visualID) {
+ switch (visualID) {
+ case ProcessCollectionPoolNameEditPart.VISUAL_ID:
+ return getProcessCollectionPoolName_5011Parser();
+ case ProcessNameEditPart.VISUAL_ID:
+ return getProcessName_5010Parser();
+ case StepNameEditPart.VISUAL_ID:
+ return getStepName_5009Parser();
+ case ServiceServiceNameEditPart.VISUAL_ID:
+ return getServiceServiceName_5012Parser();
+ }
+ return null;
+ }
+
+ /**
+ * Utility method that consults ParserService
+ * @generated
+ */
+ public static IParser getParser(IElementType type, EObject object,
+ String parserHint) {
+ return ParserService.getInstance().getParser(
+ new HintAdapter(type, object, parserHint));
+ }
+
+ /**
+ * @generated
+ */
+ public IParser getParser(IAdaptable hint) {
+ String vid = (String) hint.getAdapter(String.class);
+ if (vid != null) {
+ return getParser(IntermediateModelVisualIDRegistry.getVisualID(vid));
+ }
+ View view = (View) hint.getAdapter(View.class);
+ if (view != null) {
+ return getParser(IntermediateModelVisualIDRegistry
+ .getVisualID(view));
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ public boolean provides(IOperation operation) {
+ if (operation instanceof GetParserOperation) {
+ IAdaptable hint = ((GetParserOperation) operation).getHint();
+ if (IntermediateModelElementTypes.getElement(hint) == null) {
+ return false;
+ }
+ return getParser(hint) != null;
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ private static class HintAdapter extends ParserHintAdapter {
+
+ /**
+ * @generated
+ */
+ private final IElementType elementType;
+
+ /**
+ * @generated
+ */
+ public HintAdapter(IElementType type, EObject object, String parserHint) {
+ super(object, parserHint);
+ assert type != null;
+ elementType = type;
+ }
+
+ /**
+ * @generated
+ */
+ public Object getAdapter(Class adapter) {
+ if (IElementType.class.equals(adapter)) {
+ return elementType;
+ }
+ return super.getAdapter(adapter);
+ }
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelViewProvider.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelViewProvider.java
new file mode 100755
index 0000000..1924e35
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/providers/IntermediateModelViewProvider.java
@@ -0,0 +1,689 @@
+package org.eclipse.soa.mangrove.diagram.providers;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.gmf.runtime.common.core.service.AbstractProvider;
+import org.eclipse.gmf.runtime.common.core.service.IOperation;
+import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
+import org.eclipse.gmf.runtime.diagram.core.providers.IViewProvider;
+import org.eclipse.gmf.runtime.diagram.core.services.view.CreateDiagramViewOperation;
+import org.eclipse.gmf.runtime.diagram.core.services.view.CreateEdgeViewOperation;
+import org.eclipse.gmf.runtime.diagram.core.services.view.CreateNodeViewOperation;
+import org.eclipse.gmf.runtime.diagram.core.services.view.CreateViewForKindOperation;
+import org.eclipse.gmf.runtime.diagram.core.services.view.CreateViewOperation;
+import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil;
+import org.eclipse.gmf.runtime.diagram.ui.preferences.IPreferenceConstants;
+import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities;
+import org.eclipse.gmf.runtime.emf.core.util.EMFCoreUtil;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
+import org.eclipse.gmf.runtime.notation.DecorationNode;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.FontStyle;
+import org.eclipse.gmf.runtime.notation.MeasurementUnit;
+import org.eclipse.gmf.runtime.notation.Node;
+import org.eclipse.gmf.runtime.notation.NotationFactory;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.RelativeBendpoints;
+import org.eclipse.gmf.runtime.notation.Routing;
+import org.eclipse.gmf.runtime.notation.Shape;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.gmf.runtime.notation.datatype.RelativeBendpoint;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessCollectionPoolNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ProcessNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceCollectionEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceNeedsEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.ServiceServiceNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepNameEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StepServiceModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.StpIntermediateModelEditPart;
+import org.eclipse.soa.mangrove.diagram.edit.parts.TransitionEditPart;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.FontData;
+
+/**
+ * @generated
+ */
+public class IntermediateModelViewProvider extends AbstractProvider implements
+ IViewProvider {
+
+ /**
+ * @generated
+ */
+ public final boolean provides(IOperation operation) {
+ if (operation instanceof CreateViewForKindOperation) {
+ return provides((CreateViewForKindOperation) operation);
+ }
+ assert operation instanceof CreateViewOperation;
+ if (operation instanceof CreateDiagramViewOperation) {
+ return provides((CreateDiagramViewOperation) operation);
+ } else if (operation instanceof CreateEdgeViewOperation) {
+ return provides((CreateEdgeViewOperation) operation);
+ } else if (operation instanceof CreateNodeViewOperation) {
+ return provides((CreateNodeViewOperation) operation);
+ }
+ return false;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean provides(CreateViewForKindOperation op) {
+ /*
+ if (op.getViewKind() == Node.class)
+ return getNodeViewClass(op.getSemanticAdapter(), op.getContainerView(), op.getSemanticHint()) != null;
+ if (op.getViewKind() == Edge.class)
+ return getEdgeViewClass(op.getSemanticAdapter(), op.getContainerView(), op.getSemanticHint()) != null;
+ */
+ return true;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean provides(CreateDiagramViewOperation op) {
+ return StpIntermediateModelEditPart.MODEL_ID.equals(op
+ .getSemanticHint())
+ && IntermediateModelVisualIDRegistry
+ .getDiagramVisualID(getSemanticElement(op
+ .getSemanticAdapter())) != -1;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean provides(CreateNodeViewOperation op) {
+ if (op.getContainerView() == null) {
+ return false;
+ }
+ IElementType elementType = getSemanticElementType(op
+ .getSemanticAdapter());
+ EObject domainElement = getSemanticElement(op.getSemanticAdapter());
+ int visualID;
+ if (op.getSemanticHint() == null) {
+ // Semantic hint is not specified. Can be a result of call from CanonicalEditPolicy.
+ // In this situation there should be NO elementType, visualID will be determined
+ // by VisualIDRegistry.getNodeVisualID() for domainElement.
+ if (elementType != null || domainElement == null) {
+ return false;
+ }
+ visualID = IntermediateModelVisualIDRegistry.getNodeVisualID(
+ op.getContainerView(), domainElement);
+ } else {
+ visualID = IntermediateModelVisualIDRegistry.getVisualID(op
+ .getSemanticHint());
+ if (elementType != null) {
+ if (!IntermediateModelElementTypes
+ .isKnownElementType(elementType)
+ || (!(elementType instanceof IHintedType))) {
+ return false; // foreign element type
+ }
+ String elementTypeHint = ((IHintedType) elementType)
+ .getSemanticHint();
+ if (!op.getSemanticHint().equals(elementTypeHint)) {
+ return false; // if semantic hint is specified it should be the same as in element type
+ }
+ if (domainElement != null
+ && visualID != IntermediateModelVisualIDRegistry
+ .getNodeVisualID(op.getContainerView(),
+ domainElement)) {
+ return false; // visual id for node EClass should match visual id from element type
+ }
+ } else {
+ if (!StpIntermediateModelEditPart.MODEL_ID
+ .equals(IntermediateModelVisualIDRegistry.getModelID(op
+ .getContainerView()))) {
+ return false; // foreign diagram
+ }
+ switch (visualID) {
+ case ProcessCollectionEditPart.VISUAL_ID:
+ case ServiceCollectionEditPart.VISUAL_ID:
+ case ProcessEditPart.VISUAL_ID:
+ case StepEditPart.VISUAL_ID:
+ case ServiceEditPart.VISUAL_ID:
+ if (domainElement == null
+ || visualID != IntermediateModelVisualIDRegistry
+ .getNodeVisualID(op.getContainerView(),
+ domainElement)) {
+ return false; // visual id in semantic hint should match visual id for domain element
+ }
+ break;
+ default:
+ return false;
+ }
+ }
+ }
+ return ProcessCollectionEditPart.VISUAL_ID == visualID
+ || ServiceCollectionEditPart.VISUAL_ID == visualID
+ || ProcessEditPart.VISUAL_ID == visualID
+ || StepEditPart.VISUAL_ID == visualID
+ || ServiceEditPart.VISUAL_ID == visualID;
+ }
+
+ /**
+ * @generated
+ */
+ protected boolean provides(CreateEdgeViewOperation op) {
+ IElementType elementType = getSemanticElementType(op
+ .getSemanticAdapter());
+ if (!IntermediateModelElementTypes.isKnownElementType(elementType)
+ || (!(elementType instanceof IHintedType))) {
+ return false; // foreign element type
+ }
+ String elementTypeHint = ((IHintedType) elementType).getSemanticHint();
+ if (elementTypeHint == null
+ || (op.getSemanticHint() != null && !elementTypeHint.equals(op
+ .getSemanticHint()))) {
+ return false; // our hint is visual id and must be specified, and it should be the same as in element type
+ }
+ int visualID = IntermediateModelVisualIDRegistry
+ .getVisualID(elementTypeHint);
+ EObject domainElement = getSemanticElement(op.getSemanticAdapter());
+ if (domainElement != null
+ && visualID != IntermediateModelVisualIDRegistry
+ .getLinkWithClassVisualID(domainElement)) {
+ return false; // visual id for link EClass should match visual id from element type
+ }
+ return true;
+ }
+
+ /**
+ * @generated
+ */
+ public Diagram createDiagram(IAdaptable semanticAdapter,
+ String diagramKind, PreferencesHint preferencesHint) {
+ Diagram diagram = NotationFactory.eINSTANCE.createDiagram();
+ diagram.getStyles().add(NotationFactory.eINSTANCE.createDiagramStyle());
+ diagram.setType(StpIntermediateModelEditPart.MODEL_ID);
+ diagram.setElement(getSemanticElement(semanticAdapter));
+ diagram.setMeasurementUnit(MeasurementUnit.PIXEL_LITERAL);
+ return diagram;
+ }
+
+ /**
+ * @generated
+ */
+ public Node createNode(IAdaptable semanticAdapter, View containerView,
+ String semanticHint, int index, boolean persisted,
+ PreferencesHint preferencesHint) {
+ final EObject domainElement = getSemanticElement(semanticAdapter);
+ final int visualID;
+ if (semanticHint == null) {
+ visualID = IntermediateModelVisualIDRegistry.getNodeVisualID(
+ containerView, domainElement);
+ } else {
+ visualID = IntermediateModelVisualIDRegistry
+ .getVisualID(semanticHint);
+ }
+ switch (visualID) {
+ case ProcessCollectionEditPart.VISUAL_ID:
+ return createProcessCollection_2005(domainElement, containerView,
+ index, persisted, preferencesHint);
+ case ServiceCollectionEditPart.VISUAL_ID:
+ return createServiceCollection_2006(domainElement, containerView,
+ index, persisted, preferencesHint);
+ case ProcessEditPart.VISUAL_ID:
+ return createProcess_3007(domainElement, containerView, index,
+ persisted, preferencesHint);
+ case StepEditPart.VISUAL_ID:
+ return createStep_3008(domainElement, containerView, index,
+ persisted, preferencesHint);
+ case ServiceEditPart.VISUAL_ID:
+ return createService_3009(domainElement, containerView, index,
+ persisted, preferencesHint);
+ }
+ // can't happen, provided #provides(CreateNodeViewOperation) is correct
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ public Edge createEdge(IAdaptable semanticAdapter, View containerView,
+ String semanticHint, int index, boolean persisted,
+ PreferencesHint preferencesHint) {
+ IElementType elementType = getSemanticElementType(semanticAdapter);
+ String elementTypeHint = ((IHintedType) elementType).getSemanticHint();
+ switch (IntermediateModelVisualIDRegistry.getVisualID(elementTypeHint)) {
+ case TransitionEditPart.VISUAL_ID:
+ return createTransition_4009(getSemanticElement(semanticAdapter),
+ containerView, index, persisted, preferencesHint);
+ case StepServiceModelEditPart.VISUAL_ID:
+ return createStepServiceModel_4010(containerView, index, persisted,
+ preferencesHint);
+ case ServiceNeedsEditPart.VISUAL_ID:
+ return createServiceNeeds_4011(containerView, index, persisted,
+ preferencesHint);
+ }
+ // can never happen, provided #provides(CreateEdgeViewOperation) is correct
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ public Node createProcessCollection_2005(EObject domainElement,
+ View containerView, int index, boolean persisted,
+ PreferencesHint preferencesHint) {
+ Node node = NotationFactory.eINSTANCE.createNode();
+ node.getStyles()
+ .add(NotationFactory.eINSTANCE.createDescriptionStyle());
+ node.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
+ node.getStyles().add(NotationFactory.eINSTANCE.createLineStyle());
+ node.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds());
+ node.setType(IntermediateModelVisualIDRegistry
+ .getType(ProcessCollectionEditPart.VISUAL_ID));
+ ViewUtil.insertChildView(containerView, node, index, persisted);
+ node.setElement(domainElement);
+ stampShortcut(containerView, node);
+ // initializeFromPreferences
+ final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
+ .getPreferenceStore();
+
+ org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
+ prefStore, IPreferenceConstants.PREF_LINE_COLOR);
+ ViewUtil.setStructuralFeatureValue(node,
+ NotationPackage.eINSTANCE.getLineStyle_LineColor(),
+ FigureUtilities.RGBToInteger(lineRGB));
+ FontStyle nodeFontStyle = (FontStyle) node
+ .getStyle(NotationPackage.Literals.FONT_STYLE);
+ if (nodeFontStyle != null) {
+ FontData fontData = PreferenceConverter.getFontData(prefStore,
+ IPreferenceConstants.PREF_DEFAULT_FONT);
+ nodeFontStyle.setFontName(fontData.getName());
+ nodeFontStyle.setFontHeight(fontData.getHeight());
+ nodeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
+ nodeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
+ org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
+ .getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
+ nodeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
+ .intValue());
+ }
+ Node label5011 = createLabel(node,
+ IntermediateModelVisualIDRegistry
+ .getType(ProcessCollectionPoolNameEditPart.VISUAL_ID));
+ return node;
+ }
+
+ /**
+ * @generated
+ */
+ public Node createServiceCollection_2006(EObject domainElement,
+ View containerView, int index, boolean persisted,
+ PreferencesHint preferencesHint) {
+ Node node = NotationFactory.eINSTANCE.createNode();
+ node.getStyles()
+ .add(NotationFactory.eINSTANCE.createDescriptionStyle());
+ node.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
+ node.getStyles().add(NotationFactory.eINSTANCE.createLineStyle());
+ node.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds());
+ node.setType(IntermediateModelVisualIDRegistry
+ .getType(ServiceCollectionEditPart.VISUAL_ID));
+ ViewUtil.insertChildView(containerView, node, index, persisted);
+ node.setElement(domainElement);
+ stampShortcut(containerView, node);
+ // initializeFromPreferences
+ final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
+ .getPreferenceStore();
+
+ org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
+ prefStore, IPreferenceConstants.PREF_LINE_COLOR);
+ ViewUtil.setStructuralFeatureValue(node,
+ NotationPackage.eINSTANCE.getLineStyle_LineColor(),
+ FigureUtilities.RGBToInteger(lineRGB));
+ FontStyle nodeFontStyle = (FontStyle) node
+ .getStyle(NotationPackage.Literals.FONT_STYLE);
+ if (nodeFontStyle != null) {
+ FontData fontData = PreferenceConverter.getFontData(prefStore,
+ IPreferenceConstants.PREF_DEFAULT_FONT);
+ nodeFontStyle.setFontName(fontData.getName());
+ nodeFontStyle.setFontHeight(fontData.getHeight());
+ nodeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
+ nodeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
+ org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
+ .getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
+ nodeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
+ .intValue());
+ }
+ return node;
+ }
+
+ /**
+ * @generated
+ */
+ public Node createProcess_3007(EObject domainElement, View containerView,
+ int index, boolean persisted, PreferencesHint preferencesHint) {
+ Shape node = NotationFactory.eINSTANCE.createShape();
+ node.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds());
+ node.setType(IntermediateModelVisualIDRegistry
+ .getType(ProcessEditPart.VISUAL_ID));
+ ViewUtil.insertChildView(containerView, node, index, persisted);
+ node.setElement(domainElement);
+ // initializeFromPreferences
+ final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
+ .getPreferenceStore();
+
+ org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
+ prefStore, IPreferenceConstants.PREF_LINE_COLOR);
+ ViewUtil.setStructuralFeatureValue(node,
+ NotationPackage.eINSTANCE.getLineStyle_LineColor(),
+ FigureUtilities.RGBToInteger(lineRGB));
+ FontStyle nodeFontStyle = (FontStyle) node
+ .getStyle(NotationPackage.Literals.FONT_STYLE);
+ if (nodeFontStyle != null) {
+ FontData fontData = PreferenceConverter.getFontData(prefStore,
+ IPreferenceConstants.PREF_DEFAULT_FONT);
+ nodeFontStyle.setFontName(fontData.getName());
+ nodeFontStyle.setFontHeight(fontData.getHeight());
+ nodeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
+ nodeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
+ org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
+ .getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
+ nodeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
+ .intValue());
+ }
+ org.eclipse.swt.graphics.RGB fillRGB = PreferenceConverter.getColor(
+ prefStore, IPreferenceConstants.PREF_FILL_COLOR);
+ ViewUtil.setStructuralFeatureValue(node,
+ NotationPackage.eINSTANCE.getFillStyle_FillColor(),
+ FigureUtilities.RGBToInteger(fillRGB));
+ Node label5010 = createLabel(node,
+ IntermediateModelVisualIDRegistry
+ .getType(ProcessNameEditPart.VISUAL_ID));
+ return node;
+ }
+
+ /**
+ * @generated
+ */
+ public Node createStep_3008(EObject domainElement, View containerView,
+ int index, boolean persisted, PreferencesHint preferencesHint) {
+ Node node = NotationFactory.eINSTANCE.createNode();
+ node.getStyles()
+ .add(NotationFactory.eINSTANCE.createDescriptionStyle());
+ node.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
+ node.getStyles().add(NotationFactory.eINSTANCE.createLineStyle());
+ node.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds());
+ node.setType(IntermediateModelVisualIDRegistry
+ .getType(StepEditPart.VISUAL_ID));
+ ViewUtil.insertChildView(containerView, node, index, persisted);
+ node.setElement(domainElement);
+ // initializeFromPreferences
+ final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
+ .getPreferenceStore();
+
+ org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
+ prefStore, IPreferenceConstants.PREF_LINE_COLOR);
+ ViewUtil.setStructuralFeatureValue(node,
+ NotationPackage.eINSTANCE.getLineStyle_LineColor(),
+ FigureUtilities.RGBToInteger(lineRGB));
+ FontStyle nodeFontStyle = (FontStyle) node
+ .getStyle(NotationPackage.Literals.FONT_STYLE);
+ if (nodeFontStyle != null) {
+ FontData fontData = PreferenceConverter.getFontData(prefStore,
+ IPreferenceConstants.PREF_DEFAULT_FONT);
+ nodeFontStyle.setFontName(fontData.getName());
+ nodeFontStyle.setFontHeight(fontData.getHeight());
+ nodeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
+ nodeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
+ org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
+ .getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
+ nodeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
+ .intValue());
+ }
+ Node label5009 = createLabel(node,
+ IntermediateModelVisualIDRegistry
+ .getType(StepNameEditPart.VISUAL_ID));
+ return node;
+ }
+
+ /**
+ * @generated
+ */
+ public Node createService_3009(EObject domainElement, View containerView,
+ int index, boolean persisted, PreferencesHint preferencesHint) {
+ Node node = NotationFactory.eINSTANCE.createNode();
+ node.getStyles()
+ .add(NotationFactory.eINSTANCE.createDescriptionStyle());
+ node.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
+ node.getStyles().add(NotationFactory.eINSTANCE.createLineStyle());
+ node.setLayoutConstraint(NotationFactory.eINSTANCE.createBounds());
+ node.setType(IntermediateModelVisualIDRegistry
+ .getType(ServiceEditPart.VISUAL_ID));
+ ViewUtil.insertChildView(containerView, node, index, persisted);
+ node.setElement(domainElement);
+ // initializeFromPreferences
+ final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
+ .getPreferenceStore();
+
+ org.eclipse.swt.graphics.RGB lineRGB = PreferenceConverter.getColor(
+ prefStore, IPreferenceConstants.PREF_LINE_COLOR);
+ ViewUtil.setStructuralFeatureValue(node,
+ NotationPackage.eINSTANCE.getLineStyle_LineColor(),
+ FigureUtilities.RGBToInteger(lineRGB));
+ FontStyle nodeFontStyle = (FontStyle) node
+ .getStyle(NotationPackage.Literals.FONT_STYLE);
+ if (nodeFontStyle != null) {
+ FontData fontData = PreferenceConverter.getFontData(prefStore,
+ IPreferenceConstants.PREF_DEFAULT_FONT);
+ nodeFontStyle.setFontName(fontData.getName());
+ nodeFontStyle.setFontHeight(fontData.getHeight());
+ nodeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
+ nodeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
+ org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
+ .getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
+ nodeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
+ .intValue());
+ }
+ Node label5012 = createLabel(node,
+ IntermediateModelVisualIDRegistry
+ .getType(ServiceServiceNameEditPart.VISUAL_ID));
+ return node;
+ }
+
+ /**
+ * @generated
+ */
+ public Edge createTransition_4009(EObject domainElement,
+ View containerView, int index, boolean persisted,
+ PreferencesHint preferencesHint) {
+ Edge edge = NotationFactory.eINSTANCE.createEdge();
+ edge.getStyles().add(NotationFactory.eINSTANCE.createRoutingStyle());
+ edge.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
+ RelativeBendpoints bendpoints = NotationFactory.eINSTANCE
+ .createRelativeBendpoints();
+ ArrayList<RelativeBendpoint> points = new ArrayList<RelativeBendpoint>(
+ 2);
+ points.add(new RelativeBendpoint());
+ points.add(new RelativeBendpoint());
+ bendpoints.setPoints(points);
+ edge.setBendpoints(bendpoints);
+ ViewUtil.insertChildView(containerView, edge, index, persisted);
+ edge.setType(IntermediateModelVisualIDRegistry
+ .getType(TransitionEditPart.VISUAL_ID));
+ edge.setElement(domainElement);
+ // initializePreferences
+ final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
+ .getPreferenceStore();
+ FontStyle edgeFontStyle = (FontStyle) edge
+ .getStyle(NotationPackage.Literals.FONT_STYLE);
+ if (edgeFontStyle != null) {
+ FontData fontData = PreferenceConverter.getFontData(prefStore,
+ IPreferenceConstants.PREF_DEFAULT_FONT);
+ edgeFontStyle.setFontName(fontData.getName());
+ edgeFontStyle.setFontHeight(fontData.getHeight());
+ edgeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
+ edgeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
+ org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
+ .getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
+ edgeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
+ .intValue());
+ }
+ Routing routing = Routing.get(prefStore
+ .getInt(IPreferenceConstants.PREF_LINE_STYLE));
+ if (routing != null) {
+ ViewUtil.setStructuralFeatureValue(edge,
+ NotationPackage.eINSTANCE.getRoutingStyle_Routing(),
+ routing);
+ }
+ return edge;
+ }
+
+ /**
+ * @generated
+ */
+ public Edge createStepServiceModel_4010(View containerView, int index,
+ boolean persisted, PreferencesHint preferencesHint) {
+ Edge edge = NotationFactory.eINSTANCE.createEdge();
+ edge.getStyles().add(NotationFactory.eINSTANCE.createRoutingStyle());
+ edge.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
+ RelativeBendpoints bendpoints = NotationFactory.eINSTANCE
+ .createRelativeBendpoints();
+ ArrayList<RelativeBendpoint> points = new ArrayList<RelativeBendpoint>(
+ 2);
+ points.add(new RelativeBendpoint());
+ points.add(new RelativeBendpoint());
+ bendpoints.setPoints(points);
+ edge.setBendpoints(bendpoints);
+ ViewUtil.insertChildView(containerView, edge, index, persisted);
+ edge.setType(IntermediateModelVisualIDRegistry
+ .getType(StepServiceModelEditPart.VISUAL_ID));
+ edge.setElement(null);
+ // initializePreferences
+ final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
+ .getPreferenceStore();
+ FontStyle edgeFontStyle = (FontStyle) edge
+ .getStyle(NotationPackage.Literals.FONT_STYLE);
+ if (edgeFontStyle != null) {
+ FontData fontData = PreferenceConverter.getFontData(prefStore,
+ IPreferenceConstants.PREF_DEFAULT_FONT);
+ edgeFontStyle.setFontName(fontData.getName());
+ edgeFontStyle.setFontHeight(fontData.getHeight());
+ edgeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
+ edgeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
+ org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
+ .getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
+ edgeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
+ .intValue());
+ }
+ Routing routing = Routing.get(prefStore
+ .getInt(IPreferenceConstants.PREF_LINE_STYLE));
+ if (routing != null) {
+ ViewUtil.setStructuralFeatureValue(edge,
+ NotationPackage.eINSTANCE.getRoutingStyle_Routing(),
+ routing);
+ }
+ return edge;
+ }
+
+ /**
+ * @generated
+ */
+ public Edge createServiceNeeds_4011(View containerView, int index,
+ boolean persisted, PreferencesHint preferencesHint) {
+ Edge edge = NotationFactory.eINSTANCE.createEdge();
+ edge.getStyles().add(NotationFactory.eINSTANCE.createRoutingStyle());
+ edge.getStyles().add(NotationFactory.eINSTANCE.createFontStyle());
+ RelativeBendpoints bendpoints = NotationFactory.eINSTANCE
+ .createRelativeBendpoints();
+ ArrayList<RelativeBendpoint> points = new ArrayList<RelativeBendpoint>(
+ 2);
+ points.add(new RelativeBendpoint());
+ points.add(new RelativeBendpoint());
+ bendpoints.setPoints(points);
+ edge.setBendpoints(bendpoints);
+ ViewUtil.insertChildView(containerView, edge, index, persisted);
+ edge.setType(IntermediateModelVisualIDRegistry
+ .getType(ServiceNeedsEditPart.VISUAL_ID));
+ edge.setElement(null);
+ // initializePreferences
+ final IPreferenceStore prefStore = (IPreferenceStore) preferencesHint
+ .getPreferenceStore();
+ FontStyle edgeFontStyle = (FontStyle) edge
+ .getStyle(NotationPackage.Literals.FONT_STYLE);
+ if (edgeFontStyle != null) {
+ FontData fontData = PreferenceConverter.getFontData(prefStore,
+ IPreferenceConstants.PREF_DEFAULT_FONT);
+ edgeFontStyle.setFontName(fontData.getName());
+ edgeFontStyle.setFontHeight(fontData.getHeight());
+ edgeFontStyle.setBold((fontData.getStyle() & SWT.BOLD) != 0);
+ edgeFontStyle.setItalic((fontData.getStyle() & SWT.ITALIC) != 0);
+ org.eclipse.swt.graphics.RGB fontRGB = PreferenceConverter
+ .getColor(prefStore, IPreferenceConstants.PREF_FONT_COLOR);
+ edgeFontStyle.setFontColor(FigureUtilities.RGBToInteger(fontRGB)
+ .intValue());
+ }
+ Routing routing = Routing.get(prefStore
+ .getInt(IPreferenceConstants.PREF_LINE_STYLE));
+ if (routing != null) {
+ ViewUtil.setStructuralFeatureValue(edge,
+ NotationPackage.eINSTANCE.getRoutingStyle_Routing(),
+ routing);
+ }
+ return edge;
+ }
+
+ /**
+ * @generated
+ */
+ private void stampShortcut(View containerView, Node target) {
+ if (!StpIntermediateModelEditPart.MODEL_ID
+ .equals(IntermediateModelVisualIDRegistry
+ .getModelID(containerView))) {
+ EAnnotation shortcutAnnotation = EcoreFactory.eINSTANCE
+ .createEAnnotation();
+ shortcutAnnotation.setSource("Shortcut"); //$NON-NLS-1$
+ shortcutAnnotation.getDetails().put(
+ "modelID", StpIntermediateModelEditPart.MODEL_ID); //$NON-NLS-1$
+ target.getEAnnotations().add(shortcutAnnotation);
+ }
+ }
+
+ /**
+ * @generated
+ */
+ private Node createLabel(View owner, String hint) {
+ DecorationNode rv = NotationFactory.eINSTANCE.createDecorationNode();
+ rv.setType(hint);
+ ViewUtil.insertChildView(owner, rv, ViewUtil.APPEND, true);
+ return rv;
+ }
+
+ /**
+ * @generated
+ */
+ private EObject getSemanticElement(IAdaptable semanticAdapter) {
+ if (semanticAdapter == null) {
+ return null;
+ }
+ EObject eObject = (EObject) semanticAdapter.getAdapter(EObject.class);
+ if (eObject != null) {
+ return EMFCoreUtil.resolve(
+ TransactionUtil.getEditingDomain(eObject), eObject);
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ private IElementType getSemanticElementType(IAdaptable semanticAdapter) {
+ if (semanticAdapter == null) {
+ return null;
+ }
+ return (IElementType) semanticAdapter.getAdapter(IElementType.class);
+ }
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/sheet/IntermediateModelPropertySection.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/sheet/IntermediateModelPropertySection.java
new file mode 100755
index 0000000..acb75ef
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/sheet/IntermediateModelPropertySection.java
@@ -0,0 +1,117 @@
+package org.eclipse.soa.mangrove.diagram.sheet;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.ui.provider.PropertySource;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.properties.sections.AdvancedPropertySection;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.IPropertySourceProvider;
+
+/**
+ * @generated
+ */
+public class IntermediateModelPropertySection extends AdvancedPropertySection
+ implements IPropertySourceProvider {
+
+ /**
+ * @generated
+ */
+ public IPropertySource getPropertySource(Object object) {
+ if (object instanceof IPropertySource) {
+ return (IPropertySource) object;
+ }
+ AdapterFactory af = getAdapterFactory(object);
+ if (af != null) {
+ IItemPropertySource ips = (IItemPropertySource) af.adapt(object,
+ IItemPropertySource.class);
+ if (ips != null) {
+ return new PropertySource(object, ips);
+ }
+ }
+ if (object instanceof IAdaptable) {
+ return (IPropertySource) ((IAdaptable) object)
+ .getAdapter(IPropertySource.class);
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ protected IPropertySourceProvider getPropertySourceProvider() {
+ return this;
+ }
+
+ /**
+ * Modify/unwrap selection.
+ * @generated
+ */
+ protected Object transformSelection(Object selected) {
+
+ if (selected instanceof EditPart) {
+ Object model = ((EditPart) selected).getModel();
+ return model instanceof View ? ((View) model).getElement() : null;
+ }
+ if (selected instanceof View) {
+ return ((View) selected).getElement();
+ }
+ if (selected instanceof IAdaptable) {
+ View view = (View) ((IAdaptable) selected).getAdapter(View.class);
+ if (view != null) {
+ return view.getElement();
+ }
+ }
+ return selected;
+ }
+
+ /**
+ * @generated
+ */
+ public void setInput(IWorkbenchPart part, ISelection selection) {
+ if (selection.isEmpty()
+ || false == selection instanceof StructuredSelection) {
+ super.setInput(part, selection);
+ return;
+ }
+ final StructuredSelection structuredSelection = ((StructuredSelection) selection);
+ ArrayList transformedSelection = new ArrayList(
+ structuredSelection.size());
+ for (Iterator it = structuredSelection.iterator(); it.hasNext();) {
+ Object r = transformSelection(it.next());
+ if (r != null) {
+ transformedSelection.add(r);
+ }
+ }
+ super.setInput(part, new StructuredSelection(transformedSelection));
+ }
+
+ /**
+ * @generated
+ */
+ protected AdapterFactory getAdapterFactory(Object object) {
+ if (getEditingDomain() instanceof AdapterFactoryEditingDomain) {
+ return ((AdapterFactoryEditingDomain) getEditingDomain())
+ .getAdapterFactory();
+ }
+ TransactionalEditingDomain editingDomain = TransactionUtil
+ .getEditingDomain(object);
+ if (editingDomain != null) {
+ return ((AdapterFactoryEditingDomain) editingDomain)
+ .getAdapterFactory();
+ }
+ return null;
+ }
+
+}
diff --git a/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/sheet/IntermediateModelSheetLabelProvider.java b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/sheet/IntermediateModelSheetLabelProvider.java
new file mode 100755
index 0000000..8d91542
--- /dev/null
+++ b/org.eclipse.soa.mangrove.ui/trunk/org.eclipse.soa.mangrove.diagram/src/org/eclipse/soa/mangrove/diagram/sheet/IntermediateModelSheetLabelProvider.java
@@ -0,0 +1,82 @@
+package org.eclipse.soa.mangrove.diagram.sheet;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.jface.viewers.BaseLabelProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.soa.mangrove.diagram.navigator.IntermediateModelNavigatorGroup;
+import org.eclipse.soa.mangrove.diagram.part.IntermediateModelVisualIDRegistry;
+import org.eclipse.soa.mangrove.diagram.providers.IntermediateModelElementTypes;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @generated
+ */
+public class IntermediateModelSheetLabelProvider extends BaseLabelProvider
+ implements ILabelProvider {
+
+ /**
+ * @generated
+ */
+ public String getText(Object element) {
+ element = unwrap(element);
+ if (element instanceof IntermediateModelNavigatorGroup) {
+ return ((IntermediateModelNavigatorGroup) element).getGroupName();
+ }
+ IElementType etype = getElementType(getView(element));
+ return etype == null ? "" : etype.getDisplayName();
+ }
+
+ /**
+ * @generated
+ */
+ public Image getImage(Object element) {
+ IElementType etype = getElementType(getView(unwrap(element)));
+ return etype == null ? null : IntermediateModelElementTypes
+ .getImage(etype);
+ }
+
+ /**
+ * @generated
+ */
+ private Object unwrap(Object element) {
+ if (element instanceof IStructuredSelection) {
+ return ((IStructuredSelection) element).getFirstElement();
+ }
+ return element;
+ }
+
+ /**
+ * @generated
+ */
+ private View getView(Object element) {
+ if (element instanceof View) {
+ return (View) element;
+ }
+ if (element instanceof IAdaptable) {
+ return (View) ((IAdaptable) element).getAdapter(View.class);
+ }
+ return null;
+ }
+
+ /**
+ * @generated
+ */
+ private IElementType getElementType(View view) {
+ // For intermediate views climb up the containment hierarchy to find the one associated with an element type.
+ while (view != null) {
+ int vid = IntermediateModelVisualIDRegistry.getVisualID(view);
+ IElementType etype = IntermediateModelElementTypes
+ .getElementType(vid);
+ if (etype != null) {
+ return etype;
+ }
+ view = view.eContainer() instanceof View ? (View) view.eContainer()
+ : null;
+ }
+ return null;
+ }
+
+}