Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian W. Damus2015-02-24 17:45:21 +0000
committerChristian W. Damus2015-03-25 12:43:24 +0000
commit076626232757a6cc017b64d4d9d9d3cbe31906a1 (patch)
tree4d6410896a66ad939b0fd3ab90705d1ec5a7772c /plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical
parent424a1bc00a5f57be8b3ea59165333fa0db45ba71 (diff)
downloadorg.eclipse.papyrus-076626232757a6cc017b64d4d9d9d3cbe31906a1.tar.gz
org.eclipse.papyrus-076626232757a6cc017b64d4d9d9d3cbe31906a1.tar.xz
org.eclipse.papyrus-076626232757a6cc017b64d4d9d9d3cbe31906a1.zip
Bug 433206: Papyrus shall enable local synchronization between graphical element and element in the model
https://bugs.eclipse.org/bugs/show_bug.cgi?id=433206 (1) Refactor the 'uml.diagram.synchronizeview' plug-in: * remove the UML dependency (supplied by a UML-specific default children strategy) * move into infra.gmfdiag component * rename for GMF-standard 'canonical' terminology * API types, extension points, etc. renamed for 'canonical' terminology * fix parsing of priorities and other problems in the extension-point loading * support listening to multiple dependent model elements for canonical refresh * add a notion of default semantic children strategies for edit-parts that don't have specific requirements but can rely on a generic implementation (2) Implement a canonical request wrapper to pass through the drop request to default drop edit policy provided by the diagram, by-passing the pluggable strategies to which the CustomizableDopEditPolicy delegates. (3) Implement a toggle action in the various diagram filter menus to toggle canonical synchronization. (4) Enable the canonical edit policy provider. This requires additional changes: * only activate the canonical edit policy when the style is applied and is enabled because otherwise GMF assumes that canonical mode is on and treats connections as canonical (GMF run-time only checks that the edit policy is installed and is active) * listen for changes to the canonical style to disable/enable the canonical edit policy on the fly (5) Fix undo/redo of canonical view creation and of canonical enablement. (6) Properties view support for model/view synchronization (canonical edit policy). (7) Adapt SysML test utility to account for possible inclusion of ToggleCanonicalModeCommand by GMF in drop commands. (8) Implement deferred loading of synch child strategies and XML enablement expressions. (9) Fix problems in handling of connections incoming and outgoing canonical top shapes. (10) Support for a CSS 'canonical' style attribute. (11) Initial simple canonical synchronization scenarios for JUnit test cases. (12) Integrate canonical edit policy tests into the build. (13) Test cases for toggling canonical on/off, with undo/redo. Test cases for adding elements to the semantic model, with undo/redo. Test cases for deleting elements from the semantic model (including by simple remove, which unlike destroy does not also deletes dependent views anyways), with undo/redo. (14) Add regression tests for creation/deletion of elements and views together per the usual diagram editing scenarios, in the context of canonical diagrams. (15) Fix problems in canonical creation (with undo and redo) of connection views for non-owned relationship elements. (16) Add tests for CSS control of canonical synchronization. Fix inability to override CSS canonical style to turn synchronization off on selected views. Bug 461629: [CSS] Diagram refresh undo/redo problems https://bugs.eclipse.org/bugs/show_bug.cgi?id=461629 Implement new DiagramHelper refresh APIs to fix a few problems: - encapsulate synchronous (forced) and asynchronous refresh in new API methods. Deprecate the old methods that required clients to follow several steps. Update various client call sites to use the new API instead of the deprecated API - add corresponding APIs for refresh of individual DiagramEditParts, with similar heuristic for dropping redundant refresh requests - re-implement asynchronous refresh to use a new TransactionalEditingDomain executor that runs tasks as pre-commit trigger commands, to capture any undo/redo information for model changes - implement a new transaction option in the Papyrus editing domain that prevents runExclusive calls creating read-only transactions nested within a write transaction, so that canonical changes ensuing from edit-part refresh during refresh tasks can be properly recorded (without unprotected writes nested in the read-only context) Bug 433206: Papyrus shall enable local synchronization between graphical element and element in the model https://bugs.eclipse.org/bugs/show_bug.cgi?id=433206 (17) Enable test cases unblocked by the fix for undo/redo problems in diagram refresh (being bug 461629). (18) Do not record the edit-part but the view in the SetCanonicalCommand to support undo/redo even if the diagram has been closed and re-opened in the mean-time. To refresh the CanonicalEditPolicy's activation state after execute/undo/redo, the command now searches on the fly for all edit-parts (in all open diagram editors) that present the view in question. (19) Implement a new 'semi-active' state in the PapyrusCanonicalEditPolicy that is its minimally active state. This allows the edit policy to react to semantic model changes to delete views for deleted model elements, where such views are ones that it had originally created by canonical refresh. This relies on new tracking of canonically- created views, which in turn relies on a new utility for digging through complex command tree structures to get the views that were created by them. Includes automated tests for non-transactional refresh creating canonical views, with undo and redo in the semantic model undoing and redoing creationg of the elements that had been canonically created, after the canonical edit policy was (non-transactionally) disabled. (20) Don't forget about views that were created canonically if the diagram happens to be closed and then re-opened. (21) Rework the CanonicalStateListener to support injection of refresh 'pokes' to trigger updates in other dependents, such as the Properties view, when change in canonical activation is detected for any reason. (22) New JUnit tests for: - undo of semantic model change that created a canonical view after canonical edit policy disabled by CSS and close/reopen of the diagram - canonical edit policy's book-keeping does not leak diagram views nor model elements (23) CanonicalStateListener should be auto-retained because it automatically installs itself, and it won't be uninstalled except when successfully released. (24) Fix layout (margins etc.) of Synchronization properties group. (25) Fix concurrent modification in iteration over diagram edit part tree. Rationalize state-transition logic in canonical edit policy. (26) Fix some problems in canonical composite structures (incomplete): - manage connections canonically on border items as well as top shapes - do not include connectors as semantic children of structured classifiers but only as connections/edges of their connected elements - do not create parts of Association type when dropping an Association onto a structured classifier - include notation context in children-strategy query to account for structures such as part-with-port in connectors to disambiguate repeated semantic elements - add canonical composite structure tests (one still failing) (27) Refactor the canonical children strategies extension point ID to make it more meaningful and less redundant. Shave some execution time off the execution of the canonical edit policy tests in the automated build environment where we don't need to see what is happening in the diagrams. This involves a refactoring of earlier infrastructure that detects the build server or local Maven/Tycho build environment. (28) Fix failure to create canonical connection views because source/target nodes that were created canonically don't yet have their edit-parts. The canonical creation of connections is now deferred using the transaction pre-commit executor, exposed as a new DiagramHelper::submit(...) API. Several JUnit tests need updating, both to correct erroneous assumptions on latent bugs now fixed, and also to add UI event-processing in undo/redo scenarios to account for deferred connection creation. Use a DeferredLayoutCommand to improve the layout of the contents added to shape compartments by canonical 'drop', which otherwise would all be stacked on top of one another. Add a new pluggable strategy for determination of the edit-part that should handle creation of views, for cases such as flows in activities where connections must be dropped into contents compartments, not onto either the source or target node shape. (29) Fix canonical presentation of activity flows on pins. Implement basics of canonical synchronization of state machine diagrams. (30) Communication diagram synchronization of messages between lifelines. Requires a new extension interface for pluggable view-children strategies, to complement the semantic-children strategies, because the views that need to be synchronized are labels of connected edges, not the edges themselves. The semantic-children strategy interface is refactored to align with the new visual-children strategy interface, and likewise the determination of existing semantic and visual children in the PapyrusCanonicalEditPolicy. This also removes redundant re-calculation on semantic node children in the second-phase processing of connections. (31) Fix exceptions in synchronization and layout of communication diagrams. Fix regression in canonical deletion of edges. (32) Fix spurious deactivation of canonical edit policy in edit-parts that had had canonical mode (refresh enablement) toggled during execution of some user command. Change-Id: I9c39f74638cb55455e2d8bc42b07e49501ec3ea7
Diffstat (limited to 'plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical')
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.classpath7
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.project28
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.core.prefs291
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.ui.prefs68
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/DeveloperDoc.html1
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/MANIFEST.MF29
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/p2.inf2
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/about.html28
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/build.properties9
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/default.css59
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/docs/out.html1
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/ArchitectureOverview.pngbin0 -> 14434 bytes
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/Structure.pngbin0 -> 34647 bytes
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/UseCaseDiagram.pngbin0 -> 18524 bytes
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.properties17
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.xml14
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/pom.xml14
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.di2
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.notation724
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.uml789
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/schema/strategies.exsd325
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/CanonicalStateListener.java308
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/PapyrusCanonicalEditPolicy.java790
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/Activator.java66
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/provider/PapyrusCanonicalEditPolicyProvider.java76
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/BasicSemanticChildrenStrategy.java82
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/CreationTargetStrategyRegistration.java28
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/DefaultSemanticChildrenStrategyRegistration.java29
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/EditPartBasedRegistration.java78
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ICreationTargetStrategy.java84
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ISemanticChildrenStrategy.java62
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/IVisualChildrenStrategy.java54
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/Registration.java165
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistration.java27
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistry.java177
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/VisualChildrenStrategyRegistration.java26
36 files changed, 4460 insertions, 0 deletions
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.classpath b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.classpath
new file mode 100644
index 00000000000..098194ca4b7
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.project b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.project
new file mode 100644
index 00000000000..c42cca145e2
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.gmfdiag.canonical</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.core.prefs b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..9ca8e68231b
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,291 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=260
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=false
+org.eclipse.jdt.core.formatter.join_wrapped_lines=false
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=260
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=5
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.ui.prefs b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 00000000000..954281dbc31
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,68 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup.use_type_arguments=false
+cleanup_profile=_Papyrus
+cleanup_settings_version=2
+eclipse.preferences.version=1
+formatter_profile=_Papyrus
+formatter_settings_version=12
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * Constructor.\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*****************************************************************************\n * Copyright (c) ${year} CEA LIST and others.\n * \n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors\:\n * CEA LIST - Initial API and implementation\n * \n *****************************************************************************/\n</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/**\n * ${see_to_overridden}\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${see_to_target}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/DeveloperDoc.html b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/DeveloperDoc.html
new file mode 100644
index 00000000000..c2d6193d083
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/DeveloperDoc.html
@@ -0,0 +1 @@
+<html><link rel="stylesheet" href="default.css" type="text/css"><H1>Synchronize automatically between views element with related model element in the model</H1><P>The goal is to enable a strong synchronization between visual elements displayed in the diagram with elements contained in the model. <BR/>This mechanism can be added locally for each element by using CSS. <BR/>For example, you would like to see: <BR/>- synchronize compartment of enumeration literal for all enumeration. <BR/>- synchronize compartment of attributes and operation for all class stereotyped …. <BR/>This fucntionality is associated to the task 433206. <BR/></P><H2>Requirements</H2><P>- LocalSynchronization (id=Req001): <BR/> The synchronization shall be local for each graphical element for example: package compartment, attribute compartment...</P><P>- CSSIntegration (id=Req002): <BR/> The synchronization shall be parameterized by CSS, by using a keyword and a value.</P><P>- CustomSynchronization (id=Req003): <BR/> For an graphical element, it shall be possible to custom the synchonization</P><H2>Use Cases</H2><P align="middle"><img src=C:/git/org.eclipse.papyrus/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/UseCaseDiagram.png alt=UseCaseDiagram ></P><P align="middle">UseCaseDiagram</P><H3>Add an element in the model</H3><P>When an user adds an element in the model, the synchronization mechanism try to add in the current diagram the view that correspond to the semantic element <BR/>The difficulty of this mechanism is to parameter the synchronization. <BR/>By default, the synchronizatiopn is based on ' owned element'role. When you add an element, the graphical element that correponds to the owner try to display it in the diagram. <BR/>But some cases are not interesting. For example in the composite diagram, displaying parts in part correspond to part of the type, not directly part of part.</P><H3>Move an element</H3><P>When a element is moved, the synchronization mechanism must to create graphically the element to each diagram. <BR/></P><H3>Set synchronization enable</H3><P>The user can set enable the synchronization for a set of graphical elements. <BR/></P><H3>Remove an element from the model</H3><P>When the element is removed, the corresponding graphical element must be removed.</P><H2>Design</H2><P align="middle"><img src=C:/git/org.eclipse.papyrus/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/ArchitectureOverview.png alt=ArchitectureOverview ></P><P align="middle">ArchitectureOverview</P><P>The desing consists into one plugin org.eclipse.papyrus.uml.diagram.synchronizeview. <BR/>I contains a editpolicy provider and an extension point</P><P align="middle"><img src=C:/git/org.eclipse.papyrus/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/Structure.png alt=Structure ></P><P align="middle">Structure</P><P>The edit policy SynchronizeViewEdipolicty is installed by the SynchronizeEditPolicyProvider on: <BR/> - DiagramEditPart (to synchronize content of diagram) <BR/> - CompartmentEditPart (to synchronize content of compartment) <BR/> - IBorderedShapeEditPart (to synchronize content of borderedElement as port....) <BR/> <BR/>ThisEditPolicy is used to allowing synchronization between graphical element and element in the model <BR/> It is based on canonical editpolicy but it has several differencies: <BR/> - View Service cannot be called. To call it we need to get the identifier of the child that could be place in compartment. I is not possible to find in a generic way <BR/> --> link to each Diagram Updater, and moreover some child has been created by custom code. In fact, the hierarchy of visual element must follow the hierachy of semantic element. <BR/> --> this is not the case so the Diagram updater generated from the gmfgen has not the good info. <BR/> <BR/>So to an extension point has been added to let the developer to specify semantic element that play children of a given editpart: <BR/> see the example: <BR/><extension <BR/> point="org.eclipse.papyrus.uml.diagram.synchronizeview.semanticchild"> <BR/> <semanticChild <BR/> editPart="org.eclipse.papyrus.uml.diagram.composite.edit.parts.PropertyPartCompartmentEditPartCN" <BR/> getSemanticChildren="org.eclipse.papyrus.uml.diagram.composite.SynchroSemanticForPopertyPartCompartment"> <BR/> </semanticChild> <BR/></extension <BR/> <BR/>The editpolicy try to refresh visual element. To do that it calls the method getSemanticChildrenList(). I llokf for accoss the extesnison point the corresponding 'SemantiChild' with the highest priority. <BR/>This object give the list of sementic element that could be children of the context of the given editpart. <BR/> <BR/>In the context of part, in the composite diagram, we can describe that children are ownedlement of the type of the part. <BR/> <BR/>Finally to allow the creation we base our work on the mechanism of the drop. (refreshSemanticChildrenByDrop)</P><P>In order to install synchronization on element, views must have canonical style. So a migration is needed. <BR/>BasicCompartment becomes Compartment <BR/>Diagram and Shape mst have a style: so we need to add : <BR/> CanonicalStyle canonicalStyle=(CanonicalStyle)diagram.createStyle(NotationPackage.eINSTANCE.getCanonicalStyle()); <BR/> canonicalStyle.setCanonical(false);</P></html> \ No newline at end of file
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/MANIFEST.MF b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..fa195895496
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.common,
+ org.eclipse.emf.ecore,
+ org.eclipse.gef,
+ org.eclipse.gmf.runtime.diagram.ui,
+ org.eclipse.papyrus.infra.core;bundle-version="1.1.0",
+ org.eclipse.papyrus.infra.gmfdiag.common;bundle-version="1.1.0",
+ org.eclipse.papyrus.infra.core.log;bundle-version="1.1.0",
+ com.google.guava;bundle-version="11.0.0",
+ org.eclipse.papyrus.infra.emf;bundle-version="1.1.0",
+ org.eclipse.core.expressions;bundle-version="3.4.600",
+ org.eclipse.papyrus.infra.gmfdiag.commands;bundle-version="1.1.0",
+ org.eclipse.papyrus.infra.tools;bundle-version="1.1.0"
+Export-Package: org.eclipse.papyrus.infra.gmfdiag.canonical.editpolicy,
+ org.eclipse.papyrus.infra.gmfdiag.canonical.internal,
+ org.eclipse.papyrus.infra.gmfdiag.canonical.internal.provider,
+ org.eclipse.papyrus.infra.gmfdiag.canonical.strategy
+Bundle-Vendor: %providerName
+Bundle-ActivationPolicy: lazy
+Bundle-Version: 1.1.0.qualifier
+Bundle-Name: %pluginName
+Bundle-Localization: plugin
+Bundle-Activator: org.eclipse.papyrus.infra.gmfdiag.canonical.internal.Activator
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.papyrus.infra.gmfdiag.canonical;singleton:=true
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-Description: %pluginDescription
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/p2.inf b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/p2.inf
new file mode 100644
index 00000000000..bb7c70ff4d3
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/META-INF/p2.inf
@@ -0,0 +1,2 @@
+update.id=org.eclipse.papyrus.uml.diagram.synchronizeview
+update.range=[1.0.0,1.1.0]
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/about.html b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/about.html
new file mode 100644
index 00000000000..82d49bf5f81
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/build.properties b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/build.properties
new file mode 100644
index 00000000000..8539c191e15
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/build.properties
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ about.html,\
+ plugin.properties,\
+ schema/
+src.includes = about.html
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/default.css b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/default.css
new file mode 100644
index 00000000000..a52509fd64b
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/default.css
@@ -0,0 +1,59 @@
+/*
+ * Style sheet for the CSS2 specification
+ */
+
+body {
+ padding: 2em 1em 2em 70px;
+ margin: 0;
+ font-family: sans-serif;
+ color: black;
+ background: white;
+ background-position: top left;
+ background-attachment: fixed;
+ background-repeat: no-repeat;
+}
+
+
+p {
+ margin-top: 0.6em;
+ margin-bottom: 0.6em;
+ margin-left: 2em;
+}
+
+h1, h2, h3, h4, h5, h6 { text-align: left }
+
+
+h1, h2, h3 { color: #005A9C; background: white }
+h1 { font: 170% sans-serif }
+h2 { font: 140% sans-serif }
+h3 { font: 120% sans-serif }
+h4 { font: bold 100% sans-serif }
+h5 { font: italic 100% sans-serif }
+h6 { font: small-caps 100% sans-serif }
+
+body{counter-reset: h1 h2 h3;}
+
+
+h2:before {
+ content: counter(h2) " ";
+ counter-increment: h2;
+}
+h3:before {
+ content: counter(h2) "." counter(h3) " ";
+ counter-increment: h3;
+}
+h1 {
+ counter-reset: h2;
+}
+h2 {
+ counter-reset: h3;
+}
+h1.unnumbered, h2.unnumbered {
+ counter-reset: none;
+}
+h1.unnumbered:before,
+h2.unnumbered:before,
+h3.unnumbered:before{
+ content: none;
+ counter-increment: none;
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/docs/out.html b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/docs/out.html
new file mode 100644
index 00000000000..73bdc51f3ed
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/docs/out.html
@@ -0,0 +1 @@
+<html><link rel="stylesheet" href="default.css" type="text/css"><H1>Synchronize automatically between graphical element and element in the model</H1><P>The goal is to enable a strong synchronization between visual elements displayed in the diagram with elements contained in the model. <BR/>This mechanism can be added locally for each element by using CSS. <BR/>For example, you would like to see: <BR/>- synchronize compartment of enumeration literal for all enumeration. <BR/>- synchronize compartment of attributes and operation for all class stereotyped …. <BR/>This fucntionality is associated to the task 433206. <BR/></P><H2>Requirements</H2><P>- LocalSynchronization (id=Req001): <BR/> The synchronization shall be local for each graphical element for example: package compartment, attribute compartment...</P><P>- CSSIntegration (id=Req002): <BR/> The synchronization shall be parameterized by CSS, by using a keyword and a value.</P><P>- CustomSynchronization (id=Req003): <BR/> For an graphical element, it shall be possible to custom the synchonization</P><H2>Use Cases</H2><img src=C:/Workspaces/head/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/UseCaseDiagram.png alt=UseCaseDiagram ><P align="middle">UseCaseDiagram</P><H3>Add an element in the model</H3><P>When an user adds an element in the model, the synchronization mechanism try to add in the current diagram the view that correspond to the semantic element <BR/>The difficulty of this mechanism is to parameter the synchronization. <BR/>By default, the synchronizatiopn is based on ' owned element'role. When you add an element, the graphical element that correponds to the owner try to display it in the diagram. <BR/>But some cases are not interesting. For example in the composite diagram, displaying parts in part correspond to part of the type, not directly part of part.</P><H3>Move an element</H3><P>When a element is moved, the synchronization mechanism must to create graphically the element to each diagram. <BR/></P><H3>Set synchronization enable</H3><P>The user can set enable the synchronization for a set of graphical elements. <BR/></P><H3>Remove an element from the model</H3><P>When the element is removed, the corresponding graphical element must be removed.</P><H2>Design</H2><img src=C:/Workspaces/head/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/ArchitectureOverview.png alt=ArchitectureOverview ><P align="middle">ArchitectureOverview</P></html> \ No newline at end of file
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/ArchitectureOverview.png b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/ArchitectureOverview.png
new file mode 100644
index 00000000000..318ac1506d7
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/ArchitectureOverview.png
Binary files differ
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/Structure.png b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/Structure.png
new file mode 100644
index 00000000000..51fc9cff50f
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/Structure.png
Binary files differ
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/UseCaseDiagram.png b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/UseCaseDiagram.png
new file mode 100644
index 00000000000..f6f8921945b
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/imgDOC/UseCaseDiagram.png
Binary files differ
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.properties b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.properties
new file mode 100644
index 00000000000..025c6111645
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.properties
@@ -0,0 +1,17 @@
+#################################################################################
+# Copyright (c) 2008, 2015 CEA LIST, Christian W. Damus, and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - initial API and implementation
+# Christian W. Damus - bug 433206
+##################################################################################
+pluginName=Papyrus Canonical Diagram Infrastructure
+providerName=Eclipse Modeling Project
+
+pluginDescription=An extensible implementation of the Canonical Edit Policy for Papyrus diagrams. More details (models and .html) are available in the docs/ directory.
+
+extpt.strategies.name = Canonical Children Strategies
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.xml b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.xml
new file mode 100644
index 00000000000..4a94207f9f9
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/plugin.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension-point id="org.eclipse.papyrus.infra.gmfdiag.canonical.strategies" name="%extpt.strategies.name" schema="schema/strategies.exsd"/>
+ <extension
+ point="org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders">
+ <editpolicyProvider
+ class="org.eclipse.papyrus.infra.gmfdiag.canonical.internal.provider.PapyrusCanonicalEditPolicyProvider">
+ <Priority
+ name="Low">
+ </Priority>
+ </editpolicyProvider>
+ </extension>
+</plugin>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/pom.xml b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/pom.xml
new file mode 100644
index 00000000000..6141f5538b6
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.papyrus</artifactId>
+ <groupId>org.eclipse.papyrus</groupId>
+ <version>1.1.0-SNAPSHOT</version>
+ <relativePath>../../../../releng/top-pom-main.xml</relativePath>
+ </parent>
+ <artifactId>org.eclipse.papyrus.infra.gmfdiag.canonical</artifactId>
+ <groupId>org.eclipse.papyrus</groupId>
+ <version>1.1.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.di b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.di
new file mode 100644
index 00000000000..8634d4c00e0
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.di
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"/>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.notation b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.notation
new file mode 100644
index 00000000000..915e8f7b5b3
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.notation
@@ -0,0 +1,724 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ADL4Eclipse="http:///schemas/ADL4Eclipse/_jDF0YNT6EeKj0Lzrn2trlQ/2" xmlns:configuration="http://www.eclipse.org/papyrus/infra/viewpoints/configuration" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:nattable="http://www.eclipse.org/papyrus/nattable/model" xmlns:nattableaxis="http://www.eclipse.org/papyrus/nattable/model/table/nattableaxis" xmlns:nattableaxisconfiguration="http://www.eclipse.org/papyrus/nattable/model/table/nattableaxisconfiguration" xmlns:nattableaxisprovider="http://www.eclipse.org/papyrus/nattable/model/table/nattableaxisprovider" xmlns:nattableconfiguration="http://www.eclipse.org/papyrus/nattable/model/nattableconfiguration" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/papyrus/infra/viewpoints/policy/style" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http:///schemas/ADL4Eclipse/_jDF0YNT6EeKj0Lzrn2trlQ/2 pathmap://ADL4ECLIPSE_PROFILES/adl4eclipse.profile.uml#_jDF0YdT6EeKj0Lzrn2trlQ http://www.eclipse.org/papyrus/nattable/model/table/nattableaxis http://www.eclipse.org/papyrus/nattable/model#//nattableaxis http://www.eclipse.org/papyrus/nattable/model/table/nattableaxisconfiguration http://www.eclipse.org/papyrus/nattable/model#//nattableaxisconfiguration http://www.eclipse.org/papyrus/nattable/model/table/nattableaxisprovider http://www.eclipse.org/papyrus/nattable/model#//nattableaxisprovider http://www.eclipse.org/papyrus/nattable/model/nattableconfiguration http://www.eclipse.org/papyrus/nattable/model#//nattableconfiguration">
+ <notation:Diagram xmi:id="_lNP40MbvEeO9CYUoXDRplw" type="PapyrusUMLClassDiagram" name="Overview" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_lNP40cbvEeO9CYUoXDRplw" type="2005">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP40sbvEeO9CYUoXDRplw" type="5020"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP408bvEeO9CYUoXDRplw" type="7009">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_lNP41MbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP41cbvEeO9CYUoXDRplw"/>
+ </children>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnYsbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP41sbvEeO9CYUoXDRplw" x="201" y="38"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_lNP418bvEeO9CYUoXDRplw" type="2005">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP42MbvEeO9CYUoXDRplw" type="5020"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP42cbvEeO9CYUoXDRplw" type="7009">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_lNP42sbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP428bvEeO9CYUoXDRplw"/>
+ </children>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnY8bvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP43MbvEeO9CYUoXDRplw" x="204" y="173" width="259" height="96"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_lNP43cbvEeO9CYUoXDRplw" type="2005">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP43sbvEeO9CYUoXDRplw" type="5020"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP438bvEeO9CYUoXDRplw" type="7009">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_lNP44MbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP44cbvEeO9CYUoXDRplw"/>
+ </children>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP44sbvEeO9CYUoXDRplw" x="206" y="329"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_lNP448bvEeO9CYUoXDRplw" type="2005">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP45MbvEeO9CYUoXDRplw" type="5020"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP45cbvEeO9CYUoXDRplw" type="7009">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_lNP45sbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP458bvEeO9CYUoXDRplw"/>
+ </children>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnaMbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lNP46MbvEeO9CYUoXDRplw" x="635" y="324"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gSwG8MofEeO3DsHezUU9Sg" type="2012">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gSxVEMofEeO3DsHezUU9Sg" type="5038"/>
+ <element xmi:type="uml:Comment" href="model.uml#_gP184MofEeO3DsHezUU9Sg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gSwuAMofEeO3DsHezUU9Sg" x="534" y="72" width="366" height="70"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_lNP46cbvEeO9CYUoXDRplw"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_lNP46sbvEeO9CYUoXDRplw">
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnYMbvEeO9CYUoXDRplw"/>
+ <configuration xmi:type="configuration:PapyrusDiagram" href="platform:/plugin/org.eclipse.papyrus.infra.viewpoints.policy/builtin/default.configuration#//@viewpoints.0/@modelKinds.1"/>
+ </styles>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnYMbvEeO9CYUoXDRplw"/>
+ <edges xmi:type="notation:Connector" xmi:id="_lNP468bvEeO9CYUoXDRplw" type="4006" source="_lNP418bvEeO9CYUoXDRplw" target="_lNP40cbvEeO9CYUoXDRplw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP47MbvEeO9CYUoXDRplw" visible="false" type="6014">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP47cbvEeO9CYUoXDRplw" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP47sbvEeO9CYUoXDRplw" visible="false" type="6015">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP478bvEeO9CYUoXDRplw" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lNP48MbvEeO9CYUoXDRplw"/>
+ <element xmi:type="uml:Abstraction" href="model.uml#_lNLnZMbvEeO9CYUoXDRplw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lNP48cbvEeO9CYUoXDRplw" points="[-2, -10, 8, 48]$[-27, -45, -17, 13]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP48sbvEeO9CYUoXDRplw" id="(0.305,0.1)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP488bvEeO9CYUoXDRplw" id="(0.27,0.87)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_lNP49MbvEeO9CYUoXDRplw" type="4006" source="_lNP43cbvEeO9CYUoXDRplw" target="_lNP418bvEeO9CYUoXDRplw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP49cbvEeO9CYUoXDRplw" visible="false" type="6014">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP49sbvEeO9CYUoXDRplw" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP498bvEeO9CYUoXDRplw" visible="false" type="6015">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP4-MbvEeO9CYUoXDRplw" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lNP4-cbvEeO9CYUoXDRplw"/>
+ <element xmi:type="uml:Abstraction" href="model.uml#_lNLnZ8bvEeO9CYUoXDRplw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lNP4-sbvEeO9CYUoXDRplw" points="[-9, -16, 0, 67]$[-24, -72, -15, 11]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP4-8bvEeO9CYUoXDRplw" id="(0.27,0.16)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP4_MbvEeO9CYUoXDRplw" id="(0.235,0.89)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_lNP4_cbvEeO9CYUoXDRplw" type="4008" source="_lNP448bvEeO9CYUoXDRplw" target="_lNP418bvEeO9CYUoXDRplw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP4_sbvEeO9CYUoXDRplw" visible="false" type="6026">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP4_8bvEeO9CYUoXDRplw" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP5AMbvEeO9CYUoXDRplw" visible="false" type="6027">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP5AcbvEeO9CYUoXDRplw" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lNP5AsbvEeO9CYUoXDRplw"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_lNLnacbvEeO9CYUoXDRplw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lNP5A8bvEeO9CYUoXDRplw" points="[-46, -20, 265, 113]$[-275, -135, 36, -2]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP5BMbvEeO9CYUoXDRplw" id="(0.0,0.24)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP5BcbvEeO9CYUoXDRplw" id="(1.0,0.65)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_lNP5BsbvEeO9CYUoXDRplw" type="4008" source="_lNP448bvEeO9CYUoXDRplw" target="_lNP43cbvEeO9CYUoXDRplw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP5B8bvEeO9CYUoXDRplw" visible="false" type="6026">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP5CMbvEeO9CYUoXDRplw" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lNP5CcbvEeO9CYUoXDRplw" visible="false" type="6027">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lNP5CsbvEeO9CYUoXDRplw" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lNP5C8bvEeO9CYUoXDRplw"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_lNLnasbvEeO9CYUoXDRplw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lNP5DMbvEeO9CYUoXDRplw" points="[-40, 1, 262, -12]$[-267, 20, 35, 7]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP5DcbvEeO9CYUoXDRplw" id="(0.0,0.69)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lNP5DsbvEeO9CYUoXDRplw" id="(1.0,0.64)"/>
+ </edges>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_KohZ8McQEeOLeMHQ13vmOA" type="PapyrusUMLClassDiagram" name="ClassDiagram" measurementUnit="Pixel">
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_KohZ8ccQEeOLeMHQ13vmOA"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_KohZ8scQEeOLeMHQ13vmOA">
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnYMbvEeO9CYUoXDRplw"/>
+ </styles>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnYMbvEeO9CYUoXDRplw"/>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_Nf1kUMcbEeOenbI5XqwJvQ" type="UseCase" name="UseCaseDiagram" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_OAXegMcbEeOenbI5XqwJvQ" type="2015">
+ <children xmi:type="notation:DecorationNode" xmi:id="_OAZTsMcbEeOenbI5XqwJvQ" type="5019"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_OAZTsccbEeOenbI5XqwJvQ" type="7011">
+ <children xmi:type="notation:Shape" xmi:id="_PBuN0McbEeOenbI5XqwJvQ" type="3009">
+ <children xmi:type="notation:DecorationNode" xmi:id="_PBuN0scbEeOenbI5XqwJvQ" type="5018"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PBu04McbEeOenbI5XqwJvQ" type="7012">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_PBu04ccbEeOenbI5XqwJvQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_PBu04scbEeOenbI5XqwJvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PBu048cbEeOenbI5XqwJvQ"/>
+ </children>
+ <element xmi:type="uml:UseCase" href="model.uml#_O8koEMcbEeOenbI5XqwJvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PBuN0ccbEeOenbI5XqwJvQ" x="23" y="12"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_QqrvsMcbEeOenbI5XqwJvQ" type="3009">
+ <children xmi:type="notation:DecorationNode" xmi:id="_QqsWwMcbEeOenbI5XqwJvQ" type="5018"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_QqsWwccbEeOenbI5XqwJvQ" type="7012">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_QqsWwscbEeOenbI5XqwJvQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_QqsWw8cbEeOenbI5XqwJvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QqsWxMcbEeOenbI5XqwJvQ"/>
+ </children>
+ <element xmi:type="uml:UseCase" href="model.uml#_QqgwkMcbEeOenbI5XqwJvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QqrvsccbEeOenbI5XqwJvQ" x="12" y="78"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_zqrN0MozEeO3DsHezUU9Sg" type="3009">
+ <children xmi:type="notation:DecorationNode" xmi:id="_zqr04MozEeO3DsHezUU9Sg" type="5018"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_zqr04cozEeO3DsHezUU9Sg" type="7012">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_zqr04sozEeO3DsHezUU9Sg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_zqr048ozEeO3DsHezUU9Sg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zqr05MozEeO3DsHezUU9Sg"/>
+ </children>
+ <element xmi:type="uml:UseCase" href="model.uml#_zqMFoMozEeO3DsHezUU9Sg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zqrN0cozEeO3DsHezUU9Sg" x="64" y="149" height="47"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_l8-K4Mo3EeOzTpunJ7qmNw" type="3009">
+ <children xmi:type="notation:DecorationNode" xmi:id="_l8-x8Mo3EeOzTpunJ7qmNw" type="5018"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_l8_ZAMo3EeOzTpunJ7qmNw" type="7012">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_l8_ZAco3EeOzTpunJ7qmNw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_l8_ZAso3EeOzTpunJ7qmNw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_l8_ZA8o3EeOzTpunJ7qmNw"/>
+ </children>
+ <element xmi:type="uml:UseCase" href="model.uml#_l5cVwMo3EeOzTpunJ7qmNw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_l8-K4co3EeOzTpunJ7qmNw" x="42" y="206"/>
+ </children>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OAZTsscbEeOenbI5XqwJvQ"/>
+ </children>
+ <element xmi:type="uml:Component" href="model.uml#_lNLnZcbvEeO9CYUoXDRplw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OAXegccbEeOenbI5XqwJvQ" x="311" y="22" width="361" height="316"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_g3FzAMozEeO3DsHezUU9Sg" type="2011">
+ <children xmi:type="notation:DecorationNode" xmi:id="_g3GaEMozEeO3DsHezUU9Sg" type="5014">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_g3GaEcozEeO3DsHezUU9Sg" x="20" y="60"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_g3HBIMozEeO3DsHezUU9Sg" type="6029">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_g3HBIcozEeO3DsHezUU9Sg" x="20" y="100"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_g3HoMMozEeO3DsHezUU9Sg" type="6037">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_g3HoMcozEeO3DsHezUU9Sg" x="20" y="80"/>
+ </children>
+ <element xmi:type="uml:Actor" href="model.uml#_g2Kl8MozEeO3DsHezUU9Sg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_g3FzAcozEeO3DsHezUU9Sg" x="136" y="106"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_Nf2LYMcbEeOenbI5XqwJvQ"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_Nf2LYccbEeOenbI5XqwJvQ">
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnY8bvEeO9CYUoXDRplw"/>
+ </styles>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnY8bvEeO9CYUoXDRplw"/>
+ <edges xmi:type="notation:Connector" xmi:id="_1p5TkMozEeO3DsHezUU9Sg" type="4011" source="_g3FzAMozEeO3DsHezUU9Sg" target="_PBuN0McbEeOenbI5XqwJvQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_1p56oMozEeO3DsHezUU9Sg" visible="false" type="6008">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_1p56ocozEeO3DsHezUU9Sg" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_1p6hsMozEeO3DsHezUU9Sg" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_1p6hscozEeO3DsHezUU9Sg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_1p5TkcozEeO3DsHezUU9Sg"/>
+ <element xmi:type="uml:Association" href="model.uml#_1pkjcMozEeO3DsHezUU9Sg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_1p5TksozEeO3DsHezUU9Sg" points="[40, -7, -141, 0]$[165, -7, -16, 0]"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1qHWAMozEeO3DsHezUU9Sg" id="(0.06584362139917696,0.5)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_2Py18MozEeO3DsHezUU9Sg" type="4011" source="_g3FzAMozEeO3DsHezUU9Sg" target="_QqrvsMcbEeOenbI5XqwJvQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_2PzdAMozEeO3DsHezUU9Sg" visible="false" type="6008">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2PzdAcozEeO3DsHezUU9Sg" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_2P0EEMozEeO3DsHezUU9Sg" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2P0EEcozEeO3DsHezUU9Sg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_2Py18cozEeO3DsHezUU9Sg"/>
+ <element xmi:type="uml:Association" href="model.uml#_2PwZsMozEeO3DsHezUU9Sg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2Py18sozEeO3DsHezUU9Sg" points="[40, 23, -164, -62]$[103, 61, -101, -24]$[166, 76, -38, -9]"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2P7_4MozEeO3DsHezUU9Sg" id="(0.12837837837837837,0.7)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_2zKBsMozEeO3DsHezUU9Sg" type="4011" source="_g3FzAMozEeO3DsHezUU9Sg" target="_zqrN0MozEeO3DsHezUU9Sg">
+ <children xmi:type="notation:DecorationNode" xmi:id="_2zKowMozEeO3DsHezUU9Sg" visible="false" type="6008">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2zLP0MozEeO3DsHezUU9Sg" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_2zLP0cozEeO3DsHezUU9Sg" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2zL24MozEeO3DsHezUU9Sg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_2zKBscozEeO3DsHezUU9Sg"/>
+ <element xmi:type="uml:Association" href="model.uml#_2zHlcMozEeO3DsHezUU9Sg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2zKBssozEeO3DsHezUU9Sg" points="[24, 30, -258, -110]$[82, 102, -200, -38]$[216, 127, -66, -13]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_rvotEMo3EeOzTpunJ7qmNw" type="4011" source="_g3FzAMozEeO3DsHezUU9Sg" target="_l8-K4Mo3EeOzTpunJ7qmNw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_rvpUIMo3EeOzTpunJ7qmNw" visible="false" type="6008">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_rvpUIco3EeOzTpunJ7qmNw" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_rvp7MMo3EeOzTpunJ7qmNw" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_rvp7Mco3EeOzTpunJ7qmNw" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_rvotEco3EeOzTpunJ7qmNw"/>
+ <element xmi:type="uml:Association" href="model.uml#_rvVLEMo3EeOzTpunJ7qmNw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_rvotEso3EeOzTpunJ7qmNw" points="[10, 30, -218, -199]$[54, 160, -174, -69]$[197, 216, -31, -13]"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rvx3AMo3EeOzTpunJ7qmNw" id="(0.13777777777777778,0.6666666666666666)"/>
+ </edges>
+ </notation:Diagram>
+ <nattable:Table xmi:id="_1PpFsMohEeO3DsHezUU9Sg" name="RequirementTable" currentRowAxisProvider="_1PpFtcohEeO3DsHezUU9Sg" currentColumnAxisProvider="_1PpFscohEeO3DsHezUU9Sg">
+ <context xmi:type="uml:Model" href="model.uml#_lNLnYsbvEeO9CYUoXDRplw"/>
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnYsbvEeO9CYUoXDRplw"/>
+ <prototype xmi:type="configuration:PapyrusSyncTable" href="platform:/plugin/org.eclipse.papyrus.infra.viewpoints.policy/builtin/default.configuration#//@viewpoints.0/@modelKinds.26"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml.nattable.requirement.config/configs/requirement.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_1PpFscohEeO3DsHezUU9Sg" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_1PpFssohEeO3DsHezUU9Sg" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml.nattable.requirement.config/configs/requirement.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EStructuralFeatureAxis" xmi:id="_1PpFs8ohEeO3DsHezUU9Sg">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml.nattable.requirement.config/configs/requirement.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="ecore:EAttribute" href="http://www.eclipse.org/uml2/5.0.0/UML#//NamedElement/name"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_1PpFtMohEeO3DsHezUU9Sg" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml.nattable.requirement.config/configs/requirement.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_1PpFtcohEeO3DsHezUU9Sg" description="Provides the requirements directly owned by the context of the table" name="Requirement Axis Provider" disconnectSlave="true"/>
+ </nattable:Table>
+ <notation:Diagram xmi:id="_pUh7UMrhEeOada-BlHQh_Q" type="PapyrusUMLComponentDiagram" name="ArchitectureOverview" measurementUnit="Pixel">
+ <children xmi:type="notation:Node" xmi:id="_JUmCkM7UEeOkpJkbnruUGQ" type="2002">
+ <children xmi:type="notation:DecorationNode" xmi:id="_JUmpoM7UEeOkpJkbnruUGQ" type="5004"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_JUnQsM7UEeOkpJkbnruUGQ" type="7001">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_JUnQsc7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JUnQss7UEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_JUwaoM7UEeOkpJkbnruUGQ" visible="false" type="AppliedStereotypeCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_JUwaoc7UEeOkpJkbnruUGQ" showTitle="true"/>
+ <element xmi:type="ADL4Eclipse:Plugin" href="model.uml#_GhlIYM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JUwaos7UEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_JUwao87UEeOkpJkbnruUGQ" type="compartment_shape_display">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_JUwapM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JUwapc7UEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_KzqooM7UEeOkpJkbnruUGQ" type="3069">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Kzqoos7UEeOkpJkbnruUGQ" visible="false" type="5006">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KzrPsM7UEeOkpJkbnruUGQ" x="132" y="43"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Kzr2wM7UEeOkpJkbnruUGQ" visible="false" type="5007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Kzr2wc7UEeOkpJkbnruUGQ" x="25" y="-10"/>
+ </children>
+ <element xmi:type="uml:Port" href="model.uml#_Gs61sM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Kzqooc7UEeOkpJkbnruUGQ" x="-10" y="50"/>
+ </children>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_JUmCkc7UEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_JUmCks7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Component" href="model.uml#_GhiFEM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_JUmCk87UEeOkpJkbnruUGQ" x="540" y="340" width="638" height="121"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_OzfUMM7UEeOkpJkbnruUGQ" type="2002">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Ozf7QM7UEeOkpJkbnruUGQ" type="5004"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Ozf7Qc7UEeOkpJkbnruUGQ" type="7001">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Ozf7Qs7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ozf7Q87UEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_OzfUMc7UEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_OzfUMs7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Component" href="model.uml#_GqYfEM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_OzfUM87UEeOkpJkbnruUGQ" x="500" y="120" width="161" height="81"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_PyR3sM7UEeOkpJkbnruUGQ" type="2002">
+ <children xmi:type="notation:DecorationNode" xmi:id="_PySewM7UEeOkpJkbnruUGQ" type="5004"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_PyTF0M7UEeOkpJkbnruUGQ" type="7001">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_PyTF0c7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PyTF0s7UEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_PyR3sc7UEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_PyR3ss7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Component" href="model.uml#_Gqqy8M7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_PyR3s87UEeOkpJkbnruUGQ" x="1000" y="120" width="181" height="81"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_QGfNIM7UEeOkpJkbnruUGQ" type="2002">
+ <children xmi:type="notation:DecorationNode" xmi:id="_QGf0MM7UEeOkpJkbnruUGQ" type="5004"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_QGf0Mc7UEeOkpJkbnruUGQ" type="7001">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_QGf0Ms7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QGf0M87UEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_QGfNIc7UEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_QGfNIs7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Component" href="model.uml#_GrR28M7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QGfNI87UEeOkpJkbnruUGQ" x="720" y="120" width="241" height="81"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_QsxxEM7UEeOkpJkbnruUGQ" type="2002">
+ <children xmi:type="notation:DecorationNode" xmi:id="_QsyYIM7UEeOkpJkbnruUGQ" type="5004"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Qsy_MM7UEeOkpJkbnruUGQ" type="7001">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Qsy_Mc7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Qsy_Ms7UEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_QsxxEc7UEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_QsxxEs7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Component" href="model.uml#_GsAPsM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_QsxxE87UEeOkpJkbnruUGQ" x="260" y="120" width="178" height="81"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_TQfD8M7UEeOkpJkbnruUGQ" type="2002">
+ <children xmi:type="notation:DecorationNode" xmi:id="_TQfD9M7UEeOkpJkbnruUGQ" type="5004"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_TQfrAM7UEeOkpJkbnruUGQ" type="7001">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_TQfrAc7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TQfrAs7UEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_TQm_wM7UEeOkpJkbnruUGQ" visible="false" type="AppliedStereotypeCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_TQm_wc7UEeOkpJkbnruUGQ" showTitle="true"/>
+ <element xmi:type="ADL4Eclipse:Plugin" href="model.uml#_GodMcM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TQm_ws7UEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_TQm_w87UEeOkpJkbnruUGQ" type="compartment_shape_display">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_TQm_xM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TQm_xc7UEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_WXf4MM7UEeOkpJkbnruUGQ" type="3069">
+ <children xmi:type="notation:DecorationNode" xmi:id="_WXgfQM7UEeOkpJkbnruUGQ" type="5006">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_iOtWwM7UEeOkpJkbnruUGQ" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_iOt90M7UEeOkpJkbnruUGQ" key="visible" value="true"/>
+ </eAnnotations>
+ <styles xmi:type="notation:StringListValueStyle" xmi:id="_mQo7IM7UEeOkpJkbnruUGQ" name="maskLabel">
+ <stringListValue>visibility</stringListValue>
+ <stringListValue>name</stringListValue>
+ <stringListValue>derived</stringListValue>
+ <stringListValue>conjugated</stringListValue>
+ </styles>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_WXgfQc7UEeOkpJkbnruUGQ" x="-129" y="-70"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_WXhGUM7UEeOkpJkbnruUGQ" type="5007">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_iOuk4M7UEeOkpJkbnruUGQ" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_iOvL8M7UEeOkpJkbnruUGQ" key="visible" value="true"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_WXhtYM7UEeOkpJkbnruUGQ" x="25" y="-10"/>
+ </children>
+ <element xmi:type="uml:Port" href="model.uml#_Gs8D0M7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_WXf4Mc7UEeOkpJkbnruUGQ" x="189" y="50"/>
+ </children>
+ <styles xmi:type="notation:DescriptionStyle" xmi:id="_TQfD8c7UEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_TQfD8s7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Component" href="model.uml#_GoawMc7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TQfD887UEeOkpJkbnruUGQ" x="120" y="340" width="199" height="121"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_pUh7UcrhEeOada-BlHQh_Q"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_pUh7UsrhEeOada-BlHQh_Q">
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ </styles>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ <edges xmi:type="notation:Connector" xmi:id="_OzzdQM7UEeOkpJkbnruUGQ" type="4010" source="_JUmCkM7UEeOkpJkbnruUGQ" target="_OzfUMM7UEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Oz0EUM7UEeOkpJkbnruUGQ" visible="false" type="6009">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Oz0rYM7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Oz0rYc7UEeOkpJkbnruUGQ" visible="false" type="6023">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Oz1ScM7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_OzzdQc7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_Gqo9wM7UEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_OzzdQs7UEeOkpJkbnruUGQ" points="[-129, -77, 565, 339]$[-694, -416, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PNAAYM7UEeOkpJkbnruUGQ" id="(0.0768025078369906,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PNAncM7UEeOkpJkbnruUGQ" id="(0.4968944099378882,0.9876543209876543)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_PyghMM7UEeOkpJkbnruUGQ" type="4010" source="_JUmCkM7UEeOkpJkbnruUGQ" target="_PyR3sM7UEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_PyhIQM7UEeOkpJkbnruUGQ" visible="false" type="6009">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PyhvUM7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PyhvUc7UEeOkpJkbnruUGQ" visible="false" type="6023">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PyhvUs7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_PyghMc7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_GrQBwM7UEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_PyghMs7UEeOkpJkbnruUGQ" points="[-129, -77, 565, 339]$[-694, -416, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_RhUMYM7UEeOkpJkbnruUGQ" id="(0.877742946708464,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_RhUzcM7UEeOkpJkbnruUGQ" id="(0.5524861878453039,0.9876543209876543)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_QGt2oM7UEeOkpJkbnruUGQ" type="4010" source="_JUmCkM7UEeOkpJkbnruUGQ" target="_QGfNIM7UEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_QGudsM7UEeOkpJkbnruUGQ" visible="false" type="6009">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QGudsc7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_QGvEwM7UEeOkpJkbnruUGQ" visible="false" type="6023">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QGvEwc7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_QGt2oc7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_Gr9zcM7UEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_QGt2os7UEeOkpJkbnruUGQ" points="[-129, -77, 565, 339]$[-694, -416, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SA-j4M7UEeOkpJkbnruUGQ" id="(0.4702194357366771,0.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SA_K8M7UEeOkpJkbnruUGQ" id="(0.47717842323651455,1.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_QtAakM7UEeOkpJkbnruUGQ" type="4010" source="_JUmCkM7UEeOkpJkbnruUGQ" target="_QsxxEM7UEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_QtBBoM7UEeOkpJkbnruUGQ" visible="false" type="6009">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QtBosM7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_QtBosc7UEeOkpJkbnruUGQ" visible="false" type="6023">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QtCPwM7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_QtAakc7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_GsjCQM7UEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_QtAaks7UEeOkpJkbnruUGQ" points="[-129, -77, 565, 339]$[-694, -416, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_SngYYM7UEeOkpJkbnruUGQ" id="(0.0,0.06451612903225806)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Sng_cM7UEeOkpJkbnruUGQ" id="(0.449438202247191,0.9876543209876543)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_Yd4V4M7UEeOkpJkbnruUGQ" type="4010" source="_KzqooM7UEeOkpJkbnruUGQ" target="_WXf4MM7UEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Yd488M7UEeOkpJkbnruUGQ" visible="false" type="6009">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Yd5kAM7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Yd6LEM7UEeOkpJkbnruUGQ" visible="false" type="6023">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Yd6LEc7UEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Yd4V4c7UEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_Gs8q4M7UEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Yd4V4s7UEeOkpJkbnruUGQ" points="[-10, -2, 308, 44]$[-308, -45, 10, 1]"/>
+ </edges>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_xae5MM7bEeOkpJkbnruUGQ" type="PapyrusUMLClassDiagram" name="Structure" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_yHZCgM7bEeOkpJkbnruUGQ" type="2007">
+ <children xmi:type="notation:DecorationNode" xmi:id="_yHaQoM7bEeOkpJkbnruUGQ" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_yHaQoc7bEeOkpJkbnruUGQ" type="7016">
+ <children xmi:type="notation:Shape" xmi:id="_0-lSEM7bEeOkpJkbnruUGQ" type="3010" gradient="10011046, 16777215, 0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_0-l5IM7bEeOkpJkbnruUGQ" type="5014"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_0-l5Ic7bEeOkpJkbnruUGQ" visible="false" type="7011">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_0-l5Is7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_0-l5I87bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_0-l5JM7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0-l5Jc7bEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_0-l5Js7bEeOkpJkbnruUGQ" type="7012">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Xv11EM7dEeOkpJkbnruUGQ" source="PapyrusCSSForceValue">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Xv2cIM7dEeOkpJkbnruUGQ" key="visible" value="true"/>
+ </eAnnotations>
+ <children xmi:type="notation:Node" xmi:id="_YbR-wM7dEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#_YbQwoM7dEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YbR-wc7dEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_bqRqUM7dEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#_bqP1IM7dEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_bqRqUc7dEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_0-l5J87bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_0-l5KM7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_0-l5Kc7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0-l5Ks7bEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_0-mgMM7bEeOkpJkbnruUGQ" visible="false" type="7013">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_0-mgMc7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_0-mgMs7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_0-mgM87bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0-mgNM7bEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_0-fygM7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0-lSEc7bEeOkpJkbnruUGQ" x="55" y="32" width="221" height="56"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yHaQos7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yHaQo87bEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_hGz2YM7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yHZCgc7bEeOkpJkbnruUGQ" x="40" y="240" width="393" height="182"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_yixW8M7bEeOkpJkbnruUGQ" type="2007">
+ <children xmi:type="notation:DecorationNode" xmi:id="_yix-AM7bEeOkpJkbnruUGQ" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_yix-Ac7bEeOkpJkbnruUGQ" type="7016">
+ <children xmi:type="notation:Shape" xmi:id="_7X0FAM7bEeOkpJkbnruUGQ" type="3010" gradient="10011046, 16777215, 0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_7X0FAs7bEeOkpJkbnruUGQ" type="5014"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_7X0sEM7bEeOkpJkbnruUGQ" visible="false" type="7011">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_7X0sEc7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_7X0sEs7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_7X0sE87bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7X0sFM7bEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_7X0sFc7bEeOkpJkbnruUGQ" visible="false" type="7012">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_7X0sFs7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_7X0sF87bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_7X0sGM7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7X0sGc7bEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_7X0sGs7bEeOkpJkbnruUGQ" visible="false" type="7013">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_7X0sG87bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_7X0sHM7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_7X0sHc7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7X0sHs7bEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_7XyP0M7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7X0FAc7bEeOkpJkbnruUGQ" x="51" y="13" width="202" height="56"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yix-As7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yix-A87bEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_i84nMM7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yixW8c7bEeOkpJkbnruUGQ" x="40" y="20" width="375" height="169"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_-_KmMM7bEeOkpJkbnruUGQ" type="2007">
+ <children xmi:type="notation:DecorationNode" xmi:id="_-_LNQM7bEeOkpJkbnruUGQ" type="5026"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_-_LNQc7bEeOkpJkbnruUGQ" type="7016">
+ <children xmi:type="notation:Shape" xmi:id="_ADxd0M7cEeOkpJkbnruUGQ" type="3023" gradient="8905185, 16777215, 0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_ADxd0s7cEeOkpJkbnruUGQ" type="5049"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_ADyE4M7cEeOkpJkbnruUGQ" visible="false" type="7027">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_ADyE4c7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ADyE4s7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ADyE487cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ADyE5M7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_ADyE5c7cEeOkpJkbnruUGQ" type="7028">
+ <children xmi:type="notation:Node" xmi:id="_gicIkM7cEeOkpJkbnruUGQ" type="3007">
+ <element xmi:type="uml:Operation" href="model.uml#_giaTYM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gicIkc7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_mbFW8M7cEeOkpJkbnruUGQ" type="3007">
+ <element xmi:type="uml:Operation" href="model.uml#_mbDhwM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_mbFW8c7cEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_ADyE5s7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ADyE587cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ADyE6M7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ADyE6c7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_ADyE6s7cEeOkpJkbnruUGQ" visible="false" type="7029">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_ADyE687cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ADyE7M7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ADyE7c7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ADyE7s7cEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Interface" href="model.uml#_ADvBkM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ADxd0c7cEeOkpJkbnruUGQ" x="255" y="33" height="81"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_G0bSQM7cEeOkpJkbnruUGQ" type="3010" gradient="8905185, 16777215, 0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_G0b5UM7cEeOkpJkbnruUGQ" type="5014"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_G0b5Uc7cEeOkpJkbnruUGQ" visible="false" type="7011">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_G0b5Us7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_G0b5U87cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_G0b5VM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G0b5Vc7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_G0cgYM7cEeOkpJkbnruUGQ" type="7012">
+ <children xmi:type="notation:Node" xmi:id="_swVo0M7cEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#_swTzoM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_swVo0c7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_utIFoM7cEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#_utGQcM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_utIFoc7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_xPFsEM7cEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#_xPD24M7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xPFsEc7cEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_G0cgYc7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_G0cgYs7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_G0cgY87cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G0cgZM7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_G0cgZc7cEeOkpJkbnruUGQ" visible="false" type="7013">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_G0cgZs7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_G0cgZ87cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_G0cgaM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G0cgac7cEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_G0aEIM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_G0bSQc7cEeOkpJkbnruUGQ" x="15" y="33" height="81"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_LRukAM7cEeOkpJkbnruUGQ" type="3010" gradient="8905185, 16777215, 0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_LRukAs7cEeOkpJkbnruUGQ" type="5014"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_LRvLEM7cEeOkpJkbnruUGQ" type="7011">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_LRvLEc7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_LRvLEs7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_LRvLE87cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LRvLFM7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_LRvLFc7cEeOkpJkbnruUGQ" type="7012">
+ <children xmi:type="notation:Node" xmi:id="__iTTAM7cEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#__iRd0M7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="__iTTAc7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_DiIloM7dEeOkpJkbnruUGQ" type="3013">
+ <element xmi:type="uml:Operation" href="model.uml#_DiGwcM7dEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_DiIloc7dEeOkpJkbnruUGQ"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_LRvLFs7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_LRvLF87cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_LRvLGM7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LRvLGc7cEeOkpJkbnruUGQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_LRvLGs7cEeOkpJkbnruUGQ" type="7013">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_LRvLG87cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_LRvLHM7cEeOkpJkbnruUGQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_LRvLHc7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LRvLHs7cEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_LRsu0M7cEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_LRukAc7cEeOkpJkbnruUGQ" x="22" y="240" width="314"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_-_LNQs7bEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-_LNQ87bEeOkpJkbnruUGQ"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_Gs3LUM7UEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_-_KmMc7bEeOkpJkbnruUGQ" x="480" y="20" width="481" height="401"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_xae5Mc7bEeOkpJkbnruUGQ"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_xae5Ms7bEeOkpJkbnruUGQ">
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ </styles>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ <edges xmi:type="notation:Connector" xmi:id="_PaODYM7cEeOkpJkbnruUGQ" type="4001" source="_7X0FAM7bEeOkpJkbnruUGQ" target="_0-lSEM7bEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_PaOqcM7cEeOkpJkbnruUGQ" visible="false" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PaOqcc7cEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PaPRgM7cEeOkpJkbnruUGQ" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PaPRgc7cEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PaP4kM7cEeOkpJkbnruUGQ" visible="false" type="6003">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PaP4kc7cEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PaQfoM7cEeOkpJkbnruUGQ" visible="false" type="6005">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PaQfoc7cEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PaRGsM7cEeOkpJkbnruUGQ" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PaRGsc7cEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_PaRGss7cEeOkpJkbnruUGQ" visible="false" type="6034">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_PaRtwM7cEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_PaODYc7cEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Association" href="model.uml#_PaLAEM7cEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_PaODYs7cEeOkpJkbnruUGQ" points="[6, 12, 0, -174]$[4, 177, -2, -9]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Pa_fcM7cEeOkpJkbnruUGQ" id="(0.5148514851485149,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Pa_fcc7cEeOkpJkbnruUGQ" id="(0.4642857142857143,0.09)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_7ICuMM7cEeOkpJkbnruUGQ" type="4001" source="_G0bSQM7cEeOkpJkbnruUGQ" target="_ADxd0M7cEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_7IDVQM7cEeOkpJkbnruUGQ" visible="false" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7ID8UM7cEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7IEjYM7cEeOkpJkbnruUGQ" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7IEjYc7cEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7IFKcM7cEeOkpJkbnruUGQ" visible="false" type="6003">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7IFKcc7cEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7IFxgM7cEeOkpJkbnruUGQ" visible="false" type="6005">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7IFxgc7cEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7IGYkM7cEeOkpJkbnruUGQ" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7IGYkc7cEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7IG_oM7cEeOkpJkbnruUGQ" visible="false" type="6034">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7IG_oc7cEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_7ICuMc7cEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Association" href="model.uml#_7IAR8M7cEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7ICuMs7cEeOkpJkbnruUGQ" points="[23, 4, -78, 0]$[78, 4, -23, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7IXeUM7cEeOkpJkbnruUGQ" id="(0.8756756756756757,0.4567901234567901)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_7IXeUc7cEeOkpJkbnruUGQ" id="(0.11330049261083744,0.5061728395061729)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_HWBG8M7dEeOkpJkbnruUGQ" type="4001" source="_LRukAM7cEeOkpJkbnruUGQ" target="_G0bSQM7cEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_HWBuAM7dEeOkpJkbnruUGQ" visible="false" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HWBuAc7dEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HWCVEM7dEeOkpJkbnruUGQ" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HWCVEc7dEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HWC8IM7dEeOkpJkbnruUGQ" visible="false" type="6003">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HWC8Ic7dEeOkpJkbnruUGQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HWDjMM7dEeOkpJkbnruUGQ" visible="false" type="6005">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HWDjMc7dEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HWEKQM7dEeOkpJkbnruUGQ" visible="false" type="6033">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HWEKQc7dEeOkpJkbnruUGQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HWExUM7dEeOkpJkbnruUGQ" type="6034">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HWExUc7dEeOkpJkbnruUGQ" x="-7" y="20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_HWBG8c7dEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Association" href="model.uml#_HV-qsM7dEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HWBG8s7dEeOkpJkbnruUGQ" points="[2, -9, 0, 138]$[-8, -135, -10, 12]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_HWXsQM7dEeOkpJkbnruUGQ" id="(0.1910828025477707,0.08108108108108109)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_HWXsQc7dEeOkpJkbnruUGQ" id="(0.372972972972973,0.8518518518518519)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_Q1kKkM7dEeOkpJkbnruUGQ" type="4008" source="_0-lSEM7bEeOkpJkbnruUGQ" target="_LRukAM7cEeOkpJkbnruUGQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Q1kxoM7dEeOkpJkbnruUGQ" visible="false" type="6026">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Q1lYsM7dEeOkpJkbnruUGQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Q1lYsc7dEeOkpJkbnruUGQ" visible="false" type="6027">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Q1l_wM7dEeOkpJkbnruUGQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Q1kKkc7dEeOkpJkbnruUGQ"/>
+ <element xmi:type="uml:Dependency" href="model.uml#_Q1hHQM7dEeOkpJkbnruUGQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Q1kKks7dEeOkpJkbnruUGQ" points="[4, 5, -232, 0]$[215, 2, -21, -3]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Q1w-4M7dEeOkpJkbnruUGQ" id="(0.9795918367346939,0.375)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Q1xl8M7dEeOkpJkbnruUGQ" id="(0.06687898089171974,0.34234234234234234)"/>
+ </edges>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_kCCKAM7eEeOkpJkbnruUGQ" type="PapyrusUMLClassDiagram" name="comment" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_lBxvwM7eEeOkpJkbnruUGQ" type="2012">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_qpb70M7eEeOkpJkbnruUGQ" source="PapyrusHyperLink_Page" references="_xae5MM7bEeOkpJkbnruUGQ">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_qpb70c7eEeOkpJkbnruUGQ" key="tooltip_text" value="Structure"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_qpb70s7eEeOkpJkbnruUGQ" key="pageName" value="PapyrusHyperLink_Page"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_qpb7087eEeOkpJkbnruUGQ" key="is_default_navigation" value="false"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lByW0M7eEeOkpJkbnruUGQ" type="5038"/>
+ <element xmi:type="uml:Comment" href="model.uml#_j3s-wM7dEeOkpJkbnruUGQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_lBxvwc7eEeOkpJkbnruUGQ" x="39" y="27"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_kCCKAc7eEeOkpJkbnruUGQ"/>
+ <styles xmi:type="style:PapyrusViewStyle" xmi:id="_kCCKAs7eEeOkpJkbnruUGQ">
+ <owner xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ </styles>
+ <element xmi:type="uml:Model" href="model.uml#_lNLnZsbvEeO9CYUoXDRplw"/>
+ </notation:Diagram>
+</xmi:XMI>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.uml b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.uml
new file mode 100644
index 00000000000..57a5ae35815
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/resource/model.uml
@@ -0,0 +1,789 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ADL4Eclipse="http:///schemas/ADL4Eclipse/_jDF0YNT6EeKj0Lzrn2trlQ/2" xmlns:Document="http:///schemas/Document/_qR4REMn0EeO9CYUoXDRplw/0" xmlns:ModuleLayer="http://OSGI/schemas/ModuleLayer/_0xHxU4DEEeKQG4TlBAn6bg/3" xmlns:Requirements="http://www.eclipse.org/papyrus/0.7.0/SysML/Requirements" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:structure="http://DeveloperProcess/schemas/structure/_VA9p4McPEeO9CYUoXDRplw/1" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http:///schemas/ADL4Eclipse/_jDF0YNT6EeKj0Lzrn2trlQ/2 pathmap://ADL4ECLIPSE_PROFILES/adl4eclipse.profile.uml#_jDF0YdT6EeKj0Lzrn2trlQ http:///schemas/Document/_qR4REMn0EeO9CYUoXDRplw/0 pathmap://DEVELOPER_PROFILES/Document.profile.uml#_qR44IMn0EeO9CYUoXDRplw http://OSGI/schemas/ModuleLayer/_0xHxU4DEEeKQG4TlBAn6bg/3 pathmap://OSGI_PROFILES/osgi.profile.uml#_0xRiUIDEEeKQG4TlBAn6bg http://www.eclipse.org/papyrus/0.7.0/SysML/Requirements http://www.eclipse.org/papyrus/0.7.0/SysML#//requirements http://DeveloperProcess/schemas/structure/_VA9p4McPEeO9CYUoXDRplw/1 pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_VA-4AMcPEeO9CYUoXDRplw">
+ <uml:Model xmi:id="_lNLnYMbvEeO9CYUoXDRplw" name="SynchronizeView">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_gP184MofEeO3DsHezUU9Sg">
+ <body>The goal is to enable a strong synchronization between visual elements displayed in the diagram with elements contained in the model. &#xD;
+This mechanism can be added locally for each element by using CSS. &#xD;
+For example, you would like to see: &#xD;
+- synchronize compartment of enumeration literal for all enumeration. &#xD;
+- synchronize compartment of attributes and operation for all class stereotyped ….&#xD;
+This fucntionality is associated to the task 433206.&#xD;
+</body>
+ </ownedComment>
+ <packageImport xmi:type="uml:PackageImport" xmi:id="_lNLnYcbvEeO9CYUoXDRplw">
+ <importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
+ </packageImport>
+ <packagedElement xmi:type="uml:Model" xmi:id="_lNLnYsbvEeO9CYUoXDRplw" name="Requirements">
+ <packagedElement xmi:type="uml:Class" xmi:id="_W7DF0MohEeO3DsHezUU9Sg" name="LocalSynchronization"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_9DAe4MoiEeO3DsHezUU9Sg" name="CSSIntegration"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_WWPdsMojEeO3DsHezUU9Sg" name="CustomSynchronization"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Model" xmi:id="_lNLnY8bvEeO9CYUoXDRplw" name="UseCases">
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_lNLnZMbvEeO9CYUoXDRplw" name="useCasesAbstraction" client="_lNLnY8bvEeO9CYUoXDRplw" supplier="_lNLnYsbvEeO9CYUoXDRplw"/>
+ <packagedElement xmi:type="uml:Component" xmi:id="_lNLnZcbvEeO9CYUoXDRplw" name="Synchronization" useCase="_O8koEMcbEeOenbI5XqwJvQ _zqMFoMozEeO3DsHezUU9Sg _l5cVwMo3EeOzTpunJ7qmNw">
+ <ownedUseCase xmi:type="uml:UseCase" xmi:id="_O8koEMcbEeOenbI5XqwJvQ" name="Add an element in the model" subject="_lNLnZcbvEeO9CYUoXDRplw">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_XBXZIMo1EeO3DsHezUU9Sg">
+ <body>When an user adds an element in the model, the synchronization mechanism try to add in the current diagram the view that correspond to the semantic element&#xD;
+The difficulty of this mechanism is to parameter the synchronization.&#xD;
+By default, the synchronizatiopn is based on ' owned element'role. When you add an element, the graphical element that correponds to the owner try to display it in the diagram. &#xD;
+But some cases are not interesting. For example in the composite diagram, displaying parts in part correspond to part of the type, not directly part of part.</body>
+ </ownedComment>
+ </ownedUseCase>
+ <ownedUseCase xmi:type="uml:UseCase" xmi:id="_zqMFoMozEeO3DsHezUU9Sg" name="Move an element" subject="_lNLnZcbvEeO9CYUoXDRplw">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_a-G7gMo1EeO3DsHezUU9Sg">
+ <body>When a element is moved, the synchronization mechanism must to create graphically the element to each diagram.&#xD;
+</body>
+ </ownedComment>
+ </ownedUseCase>
+ <ownedUseCase xmi:type="uml:UseCase" xmi:id="_l5cVwMo3EeOzTpunJ7qmNw" name="Set synchronization enable" subject="_lNLnZcbvEeO9CYUoXDRplw">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_vxFwUMo3EeOzTpunJ7qmNw">
+ <body>The user can set enable the synchronization for a set of graphical elements.&#xD;
+</body>
+ </ownedComment>
+ </ownedUseCase>
+ <packagedElement xmi:type="uml:UseCase" xmi:id="_QqgwkMcbEeOenbI5XqwJvQ" name="Remove an element from the model">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_bGhQoMo1EeO3DsHezUU9Sg">
+ <body>When the element is removed, the corresponding graphical element must be removed.</body>
+ </ownedComment>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Actor" xmi:id="_g2Kl8MozEeO3DsHezUU9Sg" name="User"/>
+ <packagedElement xmi:type="uml:Association" xmi:id="_1pkjcMozEeO3DsHezUU9Sg" name="A_user_add an element in the model" memberEnd="_1pkjccozEeO3DsHezUU9Sg _1pkjdMozEeO3DsHezUU9Sg">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_1pkjccozEeO3DsHezUU9Sg" name="user" type="_g2Kl8MozEeO3DsHezUU9Sg" association="_1pkjcMozEeO3DsHezUU9Sg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_1pkjcsozEeO3DsHezUU9Sg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_1pkjc8ozEeO3DsHezUU9Sg" value="1"/>
+ </ownedEnd>
+ <ownedEnd xmi:type="uml:Property" xmi:id="_1pkjdMozEeO3DsHezUU9Sg" name="add an element in the model" type="_O8koEMcbEeOenbI5XqwJvQ" association="_1pkjcMozEeO3DsHezUU9Sg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_1pkjdcozEeO3DsHezUU9Sg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_1pkjdsozEeO3DsHezUU9Sg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_2PwZsMozEeO3DsHezUU9Sg" name="A_user_remove an element from the model" memberEnd="_2PwZscozEeO3DsHezUU9Sg _2PwZtMozEeO3DsHezUU9Sg">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_2PwZscozEeO3DsHezUU9Sg" name="user" type="_g2Kl8MozEeO3DsHezUU9Sg" association="_2PwZsMozEeO3DsHezUU9Sg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_2PwZssozEeO3DsHezUU9Sg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_2PwZs8ozEeO3DsHezUU9Sg" value="1"/>
+ </ownedEnd>
+ <ownedEnd xmi:type="uml:Property" xmi:id="_2PwZtMozEeO3DsHezUU9Sg" name="remove an element from the model" type="_QqgwkMcbEeOenbI5XqwJvQ" association="_2PwZsMozEeO3DsHezUU9Sg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_2PwZtcozEeO3DsHezUU9Sg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_2PwZtsozEeO3DsHezUU9Sg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_2zHlcMozEeO3DsHezUU9Sg" name="A_user_move an element" memberEnd="_2zHlccozEeO3DsHezUU9Sg _2zHldMozEeO3DsHezUU9Sg">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_2zHlccozEeO3DsHezUU9Sg" name="user" type="_g2Kl8MozEeO3DsHezUU9Sg" association="_2zHlcMozEeO3DsHezUU9Sg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_2zHlcsozEeO3DsHezUU9Sg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_2zHlc8ozEeO3DsHezUU9Sg" value="1"/>
+ </ownedEnd>
+ <ownedEnd xmi:type="uml:Property" xmi:id="_2zHldMozEeO3DsHezUU9Sg" name="move an element" type="_zqMFoMozEeO3DsHezUU9Sg" association="_2zHlcMozEeO3DsHezUU9Sg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_2zHldcozEeO3DsHezUU9Sg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_2zHldsozEeO3DsHezUU9Sg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_rvVLEMo3EeOzTpunJ7qmNw" name="A_user_set synchronization enable" memberEnd="_rvVLEco3EeOzTpunJ7qmNw _rvVLFMo3EeOzTpunJ7qmNw">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_rvVLEco3EeOzTpunJ7qmNw" name="user" type="_g2Kl8MozEeO3DsHezUU9Sg" association="_rvVLEMo3EeOzTpunJ7qmNw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rvVLEso3EeOzTpunJ7qmNw" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rvVLE8o3EeOzTpunJ7qmNw" value="1"/>
+ </ownedEnd>
+ <ownedEnd xmi:type="uml:Property" xmi:id="_rvVLFMo3EeOzTpunJ7qmNw" name="set synchronization enable" type="_l5cVwMo3EeOzTpunJ7qmNw" association="_rvVLEMo3EeOzTpunJ7qmNw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rvVLFco3EeOzTpunJ7qmNw" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rvVLFso3EeOzTpunJ7qmNw" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Model" xmi:id="_lNLnZsbvEeO9CYUoXDRplw" name="Design">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_9I1OUM7pEeOVs4zXLxqLmw">
+ <body>The desing consists into one plugin org.eclipse.papyrus.uml.diagram.synchronizeview.&#xD;
+It contains an editpolicy provider and an extension point</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_j3s-wM7dEeOkpJkbnruUGQ">
+ <body>The edit policy SynchronizeViewEdipolicty is installed by the SynchronizeEditPolicyProvider on:&#xD;
+ - DiagramEditPart (to synchronize content of diagram)&#xD;
+ - CompartmentEditPart (to synchronize content of compartment)&#xD;
+ - IBorderedShapeEditPart (to synchronize content of borderedElement as port....)&#xD;
+&#xD;
+ThisEditPolicy is used to allowing synchronization between graphical element and element in the model&#xD;
+ It is based on canonical editpolicy but it has several differencies:&#xD;
+ - View Service cannot be called. To call it we need to get the identifier of the child that could be place in compartment. I is not possible to find in a generic way&#xD;
+ --> link to each Diagram Updater, and moreover some child has been created by custom code. In fact, the hierarchy of visual element must follow the hierachy of semantic element.&#xD;
+ --> this is not the case so the Diagram updater generated from the gmfgen has not the good info.&#xD;
+&#xD;
+So to an extension point has been added to let the developer to specify semantic element that play children of a given editpart:&#xD;
+ see the example:&#xD;
+&#xD;
+&#xD;
+The editpolicy try to refresh visual element. To do that it calls the method getSemanticChildrenList(). I llokf for accoss the extesnison point the corresponding 'SemantiChild' with the highest priority.&#xD;
+This object give the list of sementic element that could be children of the context of the given editpart.&#xD;
+&#xD;
+In the context of part, in the composite diagram, we can describe that children are ownedlement of the type of the part.&#xD;
+&#xD;
+Finally to allow the creation we base our work on the mechanism of the drop. (refreshSemanticChildrenByDrop)</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_X4kYwMr3EeOxaZrLLxAqiw">
+ <body>Remarks:&#xD;
+In order to install synchronization on element, views must have canonical style. So a migration is needed.&#xD;
+BasicCompartment becomes Compartment&#xD;
+Diagram and Shape mst have a style: so we need to add :&#xD;
+ CanonicalStyle canonicalStyle=(CanonicalStyle)diagram.createStyle(NotationPackage.eINSTANCE.getCanonicalStyle());&#xD;
+ canonicalStyle.setCanonical(false);</body>
+ </ownedComment>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_lNLnZ8bvEeO9CYUoXDRplw" name="DesignAbstraction" client="_lNLnZsbvEeO9CYUoXDRplw" supplier="_lNLnY8bvEeO9CYUoXDRplw"/>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GhiFEM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.uml.diagram.synchronizeview">
+ <ownedAttribute xmi:type="uml:Port" xmi:id="_Gs61sM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GlxE0M7UEeOkpJkbnruUGQ" name="org.eclipse.ui" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_Glk3kM7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GmCxoM7UEeOkpJkbnruUGQ" name="org.eclipse.core.runtime" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_Gl0IIM7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GmbzMM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GmF08M7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GnFTcM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GmePcc7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GoXs4M7UEeOkpJkbnruUGQ" name="org.eclipse.gef" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GnHvsc7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_Gqo9wM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GqYfEM7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GrQBwM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_Gqqy8M7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_Gr9zcM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GrR28M7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GsjCQM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GsAPsM7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_GstaUM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.log" client="_GhiFEM7UEeOkpJkbnruUGQ" supplier="_GslegM7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gs3LUM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.uml.diagram.synchronizeview.customization">
+ <packagedElement xmi:type="uml:Interface" xmi:id="_ADvBkM7cEeOkpJkbnruUGQ" name="ISynchroSemanticChild">
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_giaTYM7cEeOkpJkbnruUGQ" name="getSemanticEObjectToListen"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_mbDhwM7cEeOkpJkbnruUGQ" name="getSynchroSemanticChild"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_G0aEIM7cEeOkpJkbnruUGQ" name="SemanticChild">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_7H_q4M7cEeOkpJkbnruUGQ" name="iSynchroSemanticChild" type="_ADvBkM7cEeOkpJkbnruUGQ" association="_7IAR8M7cEeOkpJkbnruUGQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_7H_q4c7cEeOkpJkbnruUGQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_7H_q4s7cEeOkpJkbnruUGQ" value="1"/>
+ </ownedAttribute>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_swTzoM7cEeOkpJkbnruUGQ" name="getEditPart"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_utGQcM7cEeOkpJkbnruUGQ" name="getPriority"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_xPD24M7cEeOkpJkbnruUGQ" name="getSynchroSemanticChild"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_LRsu0M7cEeOkpJkbnruUGQ" name="SynchroSemanticChildRegistry">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_HV9ckM7dEeOkpJkbnruUGQ" name="semanticChild" type="_G0aEIM7cEeOkpJkbnruUGQ" association="_HV-qsM7dEeOkpJkbnruUGQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_HV9ckc7dEeOkpJkbnruUGQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_HV9cks7dEeOkpJkbnruUGQ" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="__iRd0M7cEeOkpJkbnruUGQ" name="getInstance"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_DiGwcM7dEeOkpJkbnruUGQ" name="getSynchroSemanticChild"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_7IAR8M7cEeOkpJkbnruUGQ" name="A_semanticChild_iSynchroSemanticChild_1" memberEnd="_7IAR8c7cEeOkpJkbnruUGQ _7H_q4M7cEeOkpJkbnruUGQ">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_7IAR8c7cEeOkpJkbnruUGQ" name="semanticChild" type="_G0aEIM7cEeOkpJkbnruUGQ" association="_7IAR8M7cEeOkpJkbnruUGQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_7IAR8s7cEeOkpJkbnruUGQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_7IAR887cEeOkpJkbnruUGQ" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_HV-qsM7dEeOkpJkbnruUGQ" name="A_synchroSemanticChildRegistry_semanticChild_1" memberEnd="_HV-qsc7dEeOkpJkbnruUGQ _HV9ckM7dEeOkpJkbnruUGQ">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_HV-qsc7dEeOkpJkbnruUGQ" name="synchroSemanticChildRegistry" type="_LRsu0M7cEeOkpJkbnruUGQ" association="_HV-qsM7dEeOkpJkbnruUGQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_HV-qss7dEeOkpJkbnruUGQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_HV-qs87dEeOkpJkbnruUGQ" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_Gs8q4M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders" client="_Gs61sM7UEeOkpJkbnruUGQ" supplier="_Gs8D0M7UEeOkpJkbnruUGQ"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_hGz2YM7bEeOkpJkbnruUGQ" name="org.eclipse.papyrus.uml.diagram.synchronizeview.editpolicy">
+ <packagedElement xmi:type="uml:Class" xmi:id="_0-fygM7bEeOkpJkbnruUGQ" name="SynchronizeViewEditPolicy">
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_YbQwoM7dEeOkpJkbnruUGQ" name="getSemanticChildrenList"/>
+ <ownedOperation xmi:type="uml:Operation" xmi:id="_bqP1IM7dEeOkpJkbnruUGQ" name="refreshSemanticChildrenByDrop"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_Q1hHQM7dEeOkpJkbnruUGQ" name="Dependency1" client="_0-fygM7bEeOkpJkbnruUGQ" supplier="_LRsu0M7cEeOkpJkbnruUGQ"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_i84nMM7bEeOkpJkbnruUGQ" name="org.eclipse.papyrus.uml.diagram.synchronizeview.provider">
+ <packagedElement xmi:type="uml:Class" xmi:id="_7XyP0M7bEeOkpJkbnruUGQ" name="SynchronizeEditPolicyProvider">
+ <ownedAttribute xmi:type="uml:Property" xmi:id="_PaKZAM7cEeOkpJkbnruUGQ" name="synchronizeViewEditPolicy" type="_0-fygM7bEeOkpJkbnruUGQ" association="_PaLAEM7cEeOkpJkbnruUGQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PaKZAc7cEeOkpJkbnruUGQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_PaKZAs7cEeOkpJkbnruUGQ" value="1"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_PaLAEM7cEeOkpJkbnruUGQ" name="A_synchronizeEditPolicyProvider_synchronizeViewEditPolicy_1" memberEnd="_PaLAEc7cEeOkpJkbnruUGQ _PaKZAM7cEeOkpJkbnruUGQ">
+ <ownedEnd xmi:type="uml:Property" xmi:id="_PaLAEc7cEeOkpJkbnruUGQ" name="synchronizeEditPolicyProvider" type="_7XyP0M7bEeOkpJkbnruUGQ" association="_PaLAEM7cEeOkpJkbnruUGQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PaLAEs7cEeOkpJkbnruUGQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_PaLAE87cEeOkpJkbnruUGQ" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_Glk3kM7UEeOkpJkbnruUGQ" name="org.eclipse.ui">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GlszYM7UEeOkpJkbnruUGQ" name="org.eclipse.ui.internal"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_Gl0IIM7UEeOkpJkbnruUGQ" name="org.eclipse.core.runtime">
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gl610M7UEeOkpJkbnruUGQ" name="org.eclipse.core.internal.preferences.legacy"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gl9SEM7UEeOkpJkbnruUGQ" name="org.eclipse.core.internal.runtime"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gl_uUM7UEeOkpJkbnruUGQ" name="org.eclipse.core.runtime"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GmF08M7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmMioM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmO-4M7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common.archive"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmRbIM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common.command"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmT3YM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common.notify"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmWToM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common.notify.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmYv4M7UEeOkpJkbnruUGQ" name="org.eclipse.emf.common.util"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GmePcc7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmlkMM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmoAcM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmqcsM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.plugin"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gms48M7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.resource"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmvVMM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.resource.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GmxxcM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.util"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gm0NsM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.namespace"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gm2p8M7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.namespace.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gm5GMM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.namespace.util"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gm7icM7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.type"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gm9Xoc7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.type.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gm_z4c7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.type.internal"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnCQIc7UEeOkpJkbnruUGQ" name="org.eclipse.emf.ecore.xml.type.util"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GnHvsc7UEeOkpJkbnruUGQ" name="org.eclipse.gef">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnPEcM7UEeOkpJkbnruUGQ" name="org.eclipse.gef"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnQ5oc7UEeOkpJkbnruUGQ" name="org.eclipse.gef.commands"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnTV4c7UEeOkpJkbnruUGQ" name="org.eclipse.gef.dnd"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnVyIM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.editparts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnYOYM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.editpolicies"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnaqoM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.handles"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GndG4M7UEeOkpJkbnruUGQ" name="org.eclipse.gef.internal"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnfjIM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.internal.icons"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gnh_YM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.internal.ui.palette"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnkboM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.internal.ui.palette.editparts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gnm34M7UEeOkpJkbnruUGQ" name="org.eclipse.gef.internal.ui.rulers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnpUIM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.palette"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnrJUc7UEeOkpJkbnruUGQ" name="org.eclipse.gef.print"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GntlkM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.requests"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GnwB0M7UEeOkpJkbnruUGQ" name="org.eclipse.gef.rulers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gnx3Ac7UEeOkpJkbnruUGQ" name="org.eclipse.gef.tools"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gn0TQM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.actions"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gn2vgM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.console"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gn4ksc7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.console.icons"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gn7A8c7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.palette"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gn-EQM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.palette.customize"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoBHkM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.palette.editparts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoDj0c7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.parts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoGnIM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.properties"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoJqcM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.rulers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoMtwM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.stackview"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoPKAM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.stackview.icons"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoSNUM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.ui.views.palette"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoUpkM7UEeOkpJkbnruUGQ" name="org.eclipse.gef.util"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GoawMc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui">
+ <ownedAttribute xmi:type="uml:Port" xmi:id="_Gs8D0M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.editpolicyProviders"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoiE8M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GokhMc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.actions"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GonkgM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.commands"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoqAwc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.dialogs.sortfilter"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GotEEM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.editparts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GowHYM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.editpolicies"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GoyjoM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.figures"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Go0_4c7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.handles"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Go3cIc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.image"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Go6fcM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Go9iwM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.actions"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Go__Ac7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.commands"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpDCUM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.dialogs"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpGFoM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.dialogs.sortfilter"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpIh4c7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.editparts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpLlMM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.editpolicies"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpOogM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.figures"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpREwM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.handles"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpThAM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.l10n"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpV9QM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.pagesetup"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpYZgM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.parts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpaOsc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.properties"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gpcq8M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.requests"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpfHMM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.resources"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GphjcM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.ruler"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gpj_sM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.ruler.commands"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gpl04M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.services.decorator"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpnqEM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.services.editpart"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GppfQM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.services.editpolicy"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GprUcc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.services.layout"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GptwsM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.services.palette"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gpvl4M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.tools"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpxbEc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.type"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GpzQQc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.internal.util"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gp1sgM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.l10n"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gp3hsM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.label"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gp5W4c7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.layout"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gp7MEc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.menus"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gp9oUM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.parts"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gp_dgM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.preferences"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqBSsM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.providers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqDH4M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.requests"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqE9Ec7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.services.decorator"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqGyQc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.services.editpart"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqIncc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.services.editpolicy"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqKcoM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.services.layout"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqMR0M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.services.palette"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqNf8c7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.tools"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqPVIM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.type"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqRKUM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.util"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqSYcc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.view.factories"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqUNoM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.runtime.diagram.ui.view.factories.optimal"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GqYfEM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml">
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gqd-oM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gqfz0M7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml.internal.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqhpAM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml.internal.operations"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqjeMM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml.internal.resource"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqlTYM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml.resource"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqnIkM7UEeOkpJkbnruUGQ" name="org.eclipse.uml2.uml.util"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_Gqqy8M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqwSgM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GqyHsM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.clipboard"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gqz84M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.contentoutline"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq1LAc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.editor"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq3AMM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.editorsfactory"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq41YM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.extension"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq6Dgc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.extension.commands"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq74sM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.extension.diagrameditor"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq9t4M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.lifecycleevents"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gq-8AM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.listenerservice"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrAxMM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.markers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrB_Uc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.modelsetquery"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrD0gM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.modelsetquery.impl"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrFpsM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.multidiagram.actionbarcontributor"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrG30c7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.resource"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrItAM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.resource.additional"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrKiMc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.resource.sasheditor"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrMXYM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.services"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrOMkM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.utils"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GrR28M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrX9kM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrZLsc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.adapter"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrbA4M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.commands"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grc2EM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.commands.requests"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GreEMc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.databinding.custom"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grf5YM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.decoration"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrhHgc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.editpart"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gri8sM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.editpolicies"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grkx4M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.figure.edge"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrmAAc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.figure.node"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grn1MM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.handler"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrpDUc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.helper"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grq4gM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.listener"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrstsM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.model"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grt70c7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.preferences"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GrvxAM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.providers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Grw_Ic7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.service.shape"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gry0UM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.snap"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gr0Ccc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.strategy"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gr13oM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.strategy.copy"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gr3Fwc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.strategy.paste"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gr468M7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.types"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gr6JEc7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.undocontext"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gr7-QM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.gmfdiag.common.utils"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GsAPsM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsGWUM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsHkcc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.actions"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsJZoM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.directedit"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsLO0M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.directedit.locator"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsMc8c7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.draw2d"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsOSIM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.draw2d.labels"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsQHUM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.edit.helpers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsRVcM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.edit.policies"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsTKoM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.edit.policies.effect"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsUYwc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.edit.policies.labels"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsWN8M7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.edit.policies.reparent"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsXcEc7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.ocl.tracker"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsZRQM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.parsers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsbGcM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.part"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GscUkM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.providers"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GseJwM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.sheet"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsfX4c7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.structure"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_GshNEM7UEeOkpJkbnruUGQ" name="org.eclipse.gmf.tooling.runtime.update"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Component" xmi:id="_GslegM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.log">
+ <packagedElement xmi:type="uml:Package" xmi:id="_GsrlIM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.infra.core.log"/>
+ </packagedElement>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_Gfrq8M7UEeOkpJkbnruUGQ">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GhgP4M7UEeOkpJkbnruUGQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://ADL4ECLIPSE_PROFILES/adl4eclipse.profile.uml#_jDF0YdT6EeKj0Lzrn2trlQ"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://ADL4ECLIPSE_PROFILES/adl4eclipse.profile.uml#_nE1m0Hz7EeKfO4elN3J5Fw"/>
+ </profileApplication>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Model" xmi:id="_lNLnaMbvEeO9CYUoXDRplw" name="Test">
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_lNLnacbvEeO9CYUoXDRplw" name="Dependency1" client="_lNLnaMbvEeO9CYUoXDRplw" supplier="_lNLnY8bvEeO9CYUoXDRplw"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_lNLnasbvEeO9CYUoXDRplw" name="Dependency2" client="_lNLnaMbvEeO9CYUoXDRplw" supplier="_lNLnZsbvEeO9CYUoXDRplw"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Model" xmi:id="_YDedkM7vEeOVs4zXLxqLmw" name="Synchronize automatically between views element with related model element in the model">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YDjWEM7vEeOVs4zXLxqLmw">
+ <body>The goal is to enable a strong synchronization between visual elements displayed in the diagram with elements contained in the model. &#xD;
+This mechanism can be added locally for each element by using CSS. &#xD;
+For example, you would like to see: &#xD;
+- synchronize compartment of enumeration literal for all enumeration. &#xD;
+- synchronize compartment of attributes and operation for all class stereotyped ….&#xD;
+This fucntionality is associated to the task 433206.&#xD;
+</body>
+ </ownedComment>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YDnAcM7vEeOVs4zXLxqLmw" name="Requirements">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YDsgAM7vEeOVs4zXLxqLmw">
+ <body>- LocalSynchronization (id=Req001):
+ The synchronization shall be local for each graphical element for example: package compartment, attribute compartment...</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YDxYgM7vEeOVs4zXLxqLmw">
+ <body>- CSSIntegration (id=Req002):
+ The synchronization shall be parameterized by CSS, by using a keyword and a value.</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YD1C4M7vEeOVs4zXLxqLmw">
+ <body>- CustomSynchronization (id=Req003):
+ For an graphical element, it shall be possible to custom the synchonization</body>
+ </ownedComment>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YD3fIM7vEeOVs4zXLxqLmw" name="Use Cases">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YE4LwM7vEeOVs4zXLxqLmw">
+ <body>UseCaseDiagram</body>
+ </ownedComment>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YE7PEM7vEeOVs4zXLxqLmw" name="Add an element in the model">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YE9rUM7vEeOVs4zXLxqLmw">
+ <body>When an user adds an element in the model, the synchronization mechanism try to add in the current diagram the view that correspond to the semantic element&#xD;
+The difficulty of this mechanism is to parameter the synchronization.&#xD;
+By default, the synchronizatiopn is based on ' owned element'role. When you add an element, the graphical element that correponds to the owner try to display it in the diagram. &#xD;
+But some cases are not interesting. For example in the composite diagram, displaying parts in part correspond to part of the type, not directly part of part.</body>
+ </ownedComment>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YFAuoM7vEeOVs4zXLxqLmw" name="Move an element">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YFDK4M7vEeOVs4zXLxqLmw">
+ <body>When a element is moved, the synchronization mechanism must to create graphically the element to each diagram.&#xD;
+</body>
+ </ownedComment>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YFFnIM7vEeOVs4zXLxqLmw" name="Set synchronization enable">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YFIDYM7vEeOVs4zXLxqLmw">
+ <body>The user can set enable the synchronization for a set of graphical elements.&#xD;
+</body>
+ </ownedComment>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YFJ4kc7vEeOVs4zXLxqLmw" name="Remove an element from the model">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YFMU0M7vEeOVs4zXLxqLmw">
+ <body>When the element is removed, the corresponding graphical element must be removed.</body>
+ </ownedComment>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_YFPYIM7vEeOVs4zXLxqLmw" name="Design">
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YGwbEM7vEeOVs4zXLxqLmw">
+ <body>ArchitectureOverview</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YGzeYM7vEeOVs4zXLxqLmw">
+ <body>The desing consists into one plugin org.eclipse.papyrus.uml.diagram.synchronizeview.&#xD;
+I contains a editpolicy provider and an extension point</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YJaGcM7vEeOVs4zXLxqLmw">
+ <body>Structure</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YJdJwM7vEeOVs4zXLxqLmw">
+ <body>The edit policy SynchronizeViewEdipolicty is installed by the SynchronizeEditPolicyProvider on:&#xD;
+ - DiagramEditPart (to synchronize content of diagram)&#xD;
+ - CompartmentEditPart (to synchronize content of compartment)&#xD;
+ - IBorderedShapeEditPart (to synchronize content of borderedElement as port....)&#xD;
+&#xD;
+ThisEditPolicy is used to allowing synchronization between graphical element and element in the model&#xD;
+ It is based on canonical editpolicy but it has several differencies:&#xD;
+ - View Service cannot be called. To call it we need to get the identifier of the child that could be place in compartment. I is not possible to find in a generic way&#xD;
+ --> link to each Diagram Updater, and moreover some child has been created by custom code. In fact, the hierarchy of visual element must follow the hierachy of semantic element.&#xD;
+ --> this is not the case so the Diagram updater generated from the gmfgen has not the good info.&#xD;
+&#xD;
+So to an extension point has been added to let the developer to specify semantic element that play children of a given editpart:&#xD;
+ see the example:&#xD;
+&lt;extension&#xD;
+ point=&quot;org.eclipse.papyrus.uml.diagram.synchronizeview.semanticchild&quot;>&#xD;
+ &lt;semanticChild&#xD;
+ editPart=&quot;org.eclipse.papyrus.uml.diagram.composite.edit.parts.PropertyPartCompartmentEditPartCN&quot;&#xD;
+ getSemanticChildren=&quot;org.eclipse.papyrus.uml.diagram.composite.SynchroSemanticForPopertyPartCompartment&quot;>&#xD;
+ &lt;/semanticChild>&#xD;
+&lt;/extension&#xD;
+&#xD;
+The editpolicy try to refresh visual element. To do that it calls the method getSemanticChildrenList(). I llokf for accoss the extesnison point the corresponding 'SemantiChild' with the highest priority.&#xD;
+This object give the list of sementic element that could be children of the context of the given editpart.&#xD;
+&#xD;
+In the context of part, in the composite diagram, we can describe that children are ownedlement of the type of the part.&#xD;
+&#xD;
+Finally to allow the creation we base our work on the mechanism of the drop. (refreshSemanticChildrenByDrop)</body>
+ </ownedComment>
+ <ownedComment xmi:type="uml:Comment" xmi:id="_YJfmAM7vEeOVs4zXLxqLmw">
+ <body>In order to install synchronization on element, views must have canonical style. So a migration is needed.&#xD;
+BasicCompartment becomes Compartment&#xD;
+Diagram and Shape mst have a style: so we need to add :&#xD;
+ CanonicalStyle canonicalStyle=(CanonicalStyle)diagram.createStyle(NotationPackage.eINSTANCE.getCanonicalStyle());&#xD;
+ canonicalStyle.setCanonical(false);</body>
+ </ownedComment>
+ </packagedElement>
+ </packagedElement>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_lNLna8bvEeO9CYUoXDRplw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_lNLnbMbvEeO9CYUoXDRplw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_VA6mkMcPEeO9CYUoXDRplw"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_kWqjAMbXEeO09JBvNFZRNw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_lNLnbcbvEeO9CYUoXDRplw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_lNLnbsbvEeO9CYUoXDRplw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_VA-4AMcPEeO9CYUoXDRplw"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_qCT3MMbXEeO09JBvNFZRNw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_lNLnb8bvEeO9CYUoXDRplw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_lNLncMbvEeO9CYUoXDRplw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_VBAtMccPEeO9CYUoXDRplw"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://DEVELOPER_PROFILES/developerprocess.profile.uml#_2LNtQMbYEeO09JBvNFZRNw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_zqiBwMbvEeO9CYUoXDRplw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zq7DUMbvEeO9CYUoXDRplw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/0.7.0/SysML#//requirements"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://SysML_PROFILES/SysML.profile.uml#_OOJC4LX8EduFmqQsrNB9lw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_FGuXIMn2EeOU_InmtzG_ow">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_FJEggMn2EeOU_InmtzG_ow" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://DEVELOPER_PROFILES/Document.profile.uml#_qR44IMn0EeO9CYUoXDRplw"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://DEVELOPER_PROFILES/Document.profile.uml#_D0JcUMnzEeO9CYUoXDRplw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_DbpSMM7UEeOkpJkbnruUGQ">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DdivoM7UEeOkpJkbnruUGQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://ADL4ECLIPSE_PROFILES/adl4eclipse.profile.uml#_jDF0YdT6EeKj0Lzrn2trlQ"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://ADL4ECLIPSE_PROFILES/adl4eclipse.profile.uml#_nE1m0Hz7EeKfO4elN3J5Fw"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_Ddkk0M7UEeOkpJkbnruUGQ">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DfYisM7UEeOkpJkbnruUGQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://OSGI_PROFILES/osgi.profile.uml#_0xHxUYDEEeKQG4TlBAn6bg"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://OSGI_PROFILES/osgi.profile.uml#_OKU8EHtxEeKcL-wrhM9ICg"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_DfaX4M7UEeOkpJkbnruUGQ">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DhHBAM7UEeOkpJkbnruUGQ" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://OSGI_PROFILES/osgi.profile.uml#_0xRiUIDEEeKQG4TlBAn6bg"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://OSGI_PROFILES/osgi.profile.uml#_YbhfEHtxEeKcL-wrhM9ICg"/>
+ </profileApplication>
+ </uml:Model>
+ <structure:Project xmi:id="_lNODoMbvEeO9CYUoXDRplw" author="P. Tessier (CEA LIST)" version="0.1" base_Model="_lNLnYMbvEeO9CYUoXDRplw" title="Synchronize automatically between views element with related model element in the model"/>
+ <structure:Requirements xmi:id="_lNOqsMbvEeO9CYUoXDRplw" base_Model="_lNLnYsbvEeO9CYUoXDRplw"/>
+ <structure:UseCases xmi:id="_lNOqscbvEeO9CYUoXDRplw" base_Model="_lNLnY8bvEeO9CYUoXDRplw"/>
+ <structure:Design xmi:id="_lNOqssbvEeO9CYUoXDRplw" base_Model="_lNLnZsbvEeO9CYUoXDRplw"/>
+ <structure:Tests xmi:id="_lNOqs8bvEeO9CYUoXDRplw" base_Model="_lNLnaMbvEeO9CYUoXDRplw"/>
+ <structure:UserDoc xmi:id="_uqNUsMofEeO3DsHezUU9Sg" base_Comment="_gP184MofEeO3DsHezUU9Sg"/>
+ <Requirements:Requirement xmi:id="_W7IlYMohEeO3DsHezUU9Sg" text="The synchronization shall be local for each graphical element for example: package compartment, attribute compartment..." id="Req001" base_Class="_W7DF0MohEeO3DsHezUU9Sg"/>
+ <Requirements:Requirement xmi:id="_9DBtAMoiEeO3DsHezUU9Sg" text="The synchronization shall be parameterized by CSS, by using a keyword and a value." id="Req002" base_Class="_9DAe4MoiEeO3DsHezUU9Sg"/>
+ <Requirements:Requirement xmi:id="_WWQr0MojEeO3DsHezUU9Sg" text="For an graphical element, it shall be possible to custom the synchonization" id="Req003" base_Class="_WWPdsMojEeO3DsHezUU9Sg"/>
+ <structure:DeveloperDoc xmi:id="_aDgUcMo1EeO3DsHezUU9Sg" base_Comment="_XBXZIMo1EeO3DsHezUU9Sg"/>
+ <structure:DeveloperDoc xmi:id="_c407wMo1EeO3DsHezUU9Sg" base_Comment="_a-G7gMo1EeO3DsHezUU9Sg"/>
+ <structure:DeveloperDoc xmi:id="_d06JgMo1EeO3DsHezUU9Sg" base_Comment="_bGhQoMo1EeO3DsHezUU9Sg"/>
+ <structure:DeveloperDoc xmi:id="_ym9xQMo3EeOzTpunJ7qmNw" base_Comment="_vxFwUMo3EeOzTpunJ7qmNw"/>
+ <structure:DeveloperDoc xmi:id="_ZWAAEMr3EeOxaZrLLxAqiw" base_Comment="_X4kYwMr3EeOxaZrLLxAqiw"/>
+ <ADL4Eclipse:Plugin xmi:id="_GhlIYM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.papyrus.uml.diagram.synchronizeview.Activator" description="The goal of this plugin is add the fucntionality to synchronize elements in diagram. More details (models and .html) has been store in the docs directory." localization="plugin" requiredExecutionEnvironment="JavaSE-1.6" symbolicName="org.eclipse.papyrus.uml.diagram.synchronizeview" vendor="Eclipse Modeling Project" version="1.0.0.qualifier" exportPackage="_Gs5AgM7UEeOkpJkbnruUGQ" base_Component="_GhiFEM7UEeOkpJkbnruUGQ" name="org.eclipse.papyrus.uml.diagram.synchronizeview" isIncubation="true"/>
+ <ADL4Eclipse:Plugin xmi:id="_GlnT0M7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.ui.internal.UIPlugin" classPath="." localization="plugin" requiredExecutionEnvironment="CDC-1.0/Foundation-1.0,J2SE-1.3" symbolicName="org.eclipse.ui" vendor="Eclipse.org" version="3.106.0.v20140303-1835" exportPackage="_GlvPoM7UEeOkpJkbnruUGQ" base_Component="_Glk3kM7UEeOkpJkbnruUGQ" name="Eclipse UI"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GlvPoM7UEeOkpJkbnruUGQ" base_Package="_GlszYM7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ModuleLayer:BundleReference xmi:id="_GlzhEM7UEeOkpJkbnruUGQ" base_Dependency="_GlxE0M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_Gl19UM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.core.internal.runtime.PlatformActivator" localization="plugin" requiredExecutionEnvironment="J2SE-1.5" symbolicName="org.eclipse.core.runtime" vendor="Eclipse.org" version="3.10.0.v20140221-2027" exportPackage="_Gl8rAM7UEeOkpJkbnruUGQ _Gl_HQM7UEeOkpJkbnruUGQ _GmBjgM7UEeOkpJkbnruUGQ" base_Component="_Gl0IIM7UEeOkpJkbnruUGQ" name="Core Runtime"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gl8rAM7UEeOkpJkbnruUGQ" base_Package="_Gl610M7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gl_HQM7UEeOkpJkbnruUGQ" base_Package="_Gl9SEM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmBjgM7UEeOkpJkbnruUGQ" atleast="3.4.0" base_Package="_Gl_uUM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GmFN4M7UEeOkpJkbnruUGQ" base_Dependency="_GmCxoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GmHqIM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.emf.common.CommonPlugin$Implementation" classPath="." localization="plugin" requiredExecutionEnvironment="J2SE-1.5" symbolicName="org.eclipse.emf.common" vendor="Eclipse Modeling Project" version="2.10.0.v20140303-1023" exportPackage="_GmOX0M7UEeOkpJkbnruUGQ _GmQ0EM7UEeOkpJkbnruUGQ _GmTQUM7UEeOkpJkbnruUGQ _GmVskM7UEeOkpJkbnruUGQ _GmYI0M7UEeOkpJkbnruUGQ _GmalEM7UEeOkpJkbnruUGQ" base_Component="_GmF08M7UEeOkpJkbnruUGQ" name="EMF Common" lazyStart="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmOX0M7UEeOkpJkbnruUGQ" base_Package="_GmMioM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmQ0EM7UEeOkpJkbnruUGQ" base_Package="_GmO-4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmTQUM7UEeOkpJkbnruUGQ" base_Package="_GmRbIM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmVskM7UEeOkpJkbnruUGQ" base_Package="_GmT3YM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmYI0M7UEeOkpJkbnruUGQ" base_Package="_GmWToM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmalEM7UEeOkpJkbnruUGQ" base_Package="_GmYv4M7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GmePcM7UEeOkpJkbnruUGQ" base_Dependency="_GmbzMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GmgrsM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.emf.ecore.plugin.EcorePlugin$Implementation" classPath="." localization="plugin" requiredExecutionEnvironment="J2SE-1.5" symbolicName="org.eclipse.emf.ecore" vendor="Eclipse Modeling Project" version="2.10.0.v20140303-1023" exportPackage="_GmnZYM7UEeOkpJkbnruUGQ _Gmp1oM7UEeOkpJkbnruUGQ _GmsR4M7UEeOkpJkbnruUGQ _GmuuIM7UEeOkpJkbnruUGQ _GmxKYM7UEeOkpJkbnruUGQ _GmzmoM7UEeOkpJkbnruUGQ _Gm2C4M7UEeOkpJkbnruUGQ _Gm4fIM7UEeOkpJkbnruUGQ _Gm67YM7UEeOkpJkbnruUGQ _Gm9XoM7UEeOkpJkbnruUGQ _Gm_z4M7UEeOkpJkbnruUGQ _GnCQIM7UEeOkpJkbnruUGQ _GnEFUM7UEeOkpJkbnruUGQ" base_Component="_GmePcc7UEeOkpJkbnruUGQ" name="EMF Ecore" lazyStart="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmnZYM7UEeOkpJkbnruUGQ" base_Package="_GmlkMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gmp1oM7UEeOkpJkbnruUGQ" base_Package="_GmoAcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmsR4M7UEeOkpJkbnruUGQ" base_Package="_GmqcsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmuuIM7UEeOkpJkbnruUGQ" base_Package="_Gms48M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmxKYM7UEeOkpJkbnruUGQ" base_Package="_GmvVMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GmzmoM7UEeOkpJkbnruUGQ" base_Package="_GmxxcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gm2C4M7UEeOkpJkbnruUGQ" base_Package="_Gm0NsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gm4fIM7UEeOkpJkbnruUGQ" base_Package="_Gm2p8M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gm67YM7UEeOkpJkbnruUGQ" base_Package="_Gm5GMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gm9XoM7UEeOkpJkbnruUGQ" base_Package="_Gm7icM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gm_z4M7UEeOkpJkbnruUGQ" base_Package="_Gm9Xoc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnCQIM7UEeOkpJkbnruUGQ" base_Package="_Gm_z4c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnEFUM7UEeOkpJkbnruUGQ" base_Package="_GnCQIc7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GnHvsM7UEeOkpJkbnruUGQ" base_Dependency="_GnFTcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GnKL8M7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.gef.internal.InternalGEFPlugin" localization="plugin" requiredExecutionEnvironment="J2SE-1.4" symbolicName="org.eclipse.gef" vendor="Eclipse.org" version="3.9.0.201401270305" exportPackage="_GnQ5oM7UEeOkpJkbnruUGQ _GnTV4M7UEeOkpJkbnruUGQ _GnVLEM7UEeOkpJkbnruUGQ _GnXnUM7UEeOkpJkbnruUGQ _GnaDkM7UEeOkpJkbnruUGQ _Gncf0M7UEeOkpJkbnruUGQ _Gne8EM7UEeOkpJkbnruUGQ _GnhYUM7UEeOkpJkbnruUGQ _Gnj0kM7UEeOkpJkbnruUGQ _GnmQ0M7UEeOkpJkbnruUGQ _GnotEM7UEeOkpJkbnruUGQ _GnrJUM7UEeOkpJkbnruUGQ _Gns-gM7UEeOkpJkbnruUGQ _GnvawM7UEeOkpJkbnruUGQ _Gnx3AM7UEeOkpJkbnruUGQ _GnzsMM7UEeOkpJkbnruUGQ _Gn2IcM7UEeOkpJkbnruUGQ _Gn4ksM7UEeOkpJkbnruUGQ _Gn7A8M7UEeOkpJkbnruUGQ _Gn9dMM7UEeOkpJkbnruUGQ _GoAggM7UEeOkpJkbnruUGQ _GoDj0M7UEeOkpJkbnruUGQ _GoGAEM7UEeOkpJkbnruUGQ _GoJDYM7UEeOkpJkbnruUGQ _GoMGsM7UEeOkpJkbnruUGQ _GoOi8M7UEeOkpJkbnruUGQ _GoRmQM7UEeOkpJkbnruUGQ _GoUCgM7UEeOkpJkbnruUGQ _GoXF0M7UEeOkpJkbnruUGQ" base_Component="_GnHvsc7UEeOkpJkbnruUGQ" name="Graphical Editing Framework GEF"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnQ5oM7UEeOkpJkbnruUGQ" base_Package="_GnPEcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnTV4M7UEeOkpJkbnruUGQ" base_Package="_GnQ5oc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnVLEM7UEeOkpJkbnruUGQ" base_Package="_GnTV4c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnXnUM7UEeOkpJkbnruUGQ" base_Package="_GnVyIM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnaDkM7UEeOkpJkbnruUGQ" base_Package="_GnYOYM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gncf0M7UEeOkpJkbnruUGQ" base_Package="_GnaqoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gne8EM7UEeOkpJkbnruUGQ" base_Package="_GndG4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnhYUM7UEeOkpJkbnruUGQ" base_Package="_GnfjIM7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gnj0kM7UEeOkpJkbnruUGQ" base_Package="_Gnh_YM7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnmQ0M7UEeOkpJkbnruUGQ" base_Package="_GnkboM7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnotEM7UEeOkpJkbnruUGQ" base_Package="_Gnm34M7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnrJUM7UEeOkpJkbnruUGQ" base_Package="_GnpUIM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gns-gM7UEeOkpJkbnruUGQ" base_Package="_GnrJUc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnvawM7UEeOkpJkbnruUGQ" base_Package="_GntlkM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gnx3AM7UEeOkpJkbnruUGQ" base_Package="_GnwB0M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GnzsMM7UEeOkpJkbnruUGQ" base_Package="_Gnx3Ac7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gn2IcM7UEeOkpJkbnruUGQ" base_Package="_Gn0TQM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gn4ksM7UEeOkpJkbnruUGQ" base_Package="_Gn2vgM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gn7A8M7UEeOkpJkbnruUGQ" base_Package="_Gn4ksc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gn9dMM7UEeOkpJkbnruUGQ" base_Package="_Gn7A8c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoAggM7UEeOkpJkbnruUGQ" base_Package="_Gn-EQM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoDj0M7UEeOkpJkbnruUGQ" base_Package="_GoBHkM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoGAEM7UEeOkpJkbnruUGQ" base_Package="_GoDj0c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoJDYM7UEeOkpJkbnruUGQ" base_Package="_GoGnIM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoMGsM7UEeOkpJkbnruUGQ" base_Package="_GoJqcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoOi8M7UEeOkpJkbnruUGQ" base_Package="_GoMtwM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoRmQM7UEeOkpJkbnruUGQ" base_Package="_GoPKAM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoUCgM7UEeOkpJkbnruUGQ" base_Package="_GoSNUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoXF0M7UEeOkpJkbnruUGQ" base_Package="_GoUpkM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GoawMM7UEeOkpJkbnruUGQ" base_Dependency="_GoXs4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GodMcM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.gmf.runtime.diagram.ui.internal.DiagramUIPlugin" localization="plugin" requiredExecutionEnvironment="J2SE-1.5" symbolicName="org.eclipse.gmf.runtime.diagram.ui" vendor="Eclipse Modeling Project" version="1.7.0.201403111830" exportPackage="_GokhMM7UEeOkpJkbnruUGQ _Gom9cM7UEeOkpJkbnruUGQ _GoqAwM7UEeOkpJkbnruUGQ _GosdAM7UEeOkpJkbnruUGQ _GovgUM7UEeOkpJkbnruUGQ _Gox8kM7UEeOkpJkbnruUGQ _Go0_4M7UEeOkpJkbnruUGQ _Go3cIM7UEeOkpJkbnruUGQ _Go54YM7UEeOkpJkbnruUGQ _Go87sM7UEeOkpJkbnruUGQ _Go__AM7UEeOkpJkbnruUGQ _GpCbQM7UEeOkpJkbnruUGQ _GpFekM7UEeOkpJkbnruUGQ _GpIh4M7UEeOkpJkbnruUGQ _GpK-IM7UEeOkpJkbnruUGQ _GpOBcM7UEeOkpJkbnruUGQ _GpQdsM7UEeOkpJkbnruUGQ _GpS58M7UEeOkpJkbnruUGQ _GpVWMM7UEeOkpJkbnruUGQ _GpXycM7UEeOkpJkbnruUGQ _GpaOsM7UEeOkpJkbnruUGQ _GpcD4M7UEeOkpJkbnruUGQ _GpegIM7UEeOkpJkbnruUGQ _Gpg8YM7UEeOkpJkbnruUGQ _GpjYoM7UEeOkpJkbnruUGQ _GplN0M7UEeOkpJkbnruUGQ _GpnDAM7UEeOkpJkbnruUGQ _Gpo4MM7UEeOkpJkbnruUGQ _GprUcM7UEeOkpJkbnruUGQ _GptJoM7UEeOkpJkbnruUGQ _Gpu-0M7UEeOkpJkbnruUGQ _GpxbEM7UEeOkpJkbnruUGQ _GpzQQM7UEeOkpJkbnruUGQ _Gp1FcM7UEeOkpJkbnruUGQ _Gp26oM7UEeOkpJkbnruUGQ _Gp5W4M7UEeOkpJkbnruUGQ _Gp7MEM7UEeOkpJkbnruUGQ _Gp9BQM7UEeOkpJkbnruUGQ _Gp-2cM7UEeOkpJkbnruUGQ _GqAroM7UEeOkpJkbnruUGQ _GqCg0M7UEeOkpJkbnruUGQ _GqE9EM7UEeOkpJkbnruUGQ _GqGyQM7UEeOkpJkbnruUGQ _GqIncM7UEeOkpJkbnruUGQ _GqJ1kM7UEeOkpJkbnruUGQ _GqLqwM7UEeOkpJkbnruUGQ _GqNf8M7UEeOkpJkbnruUGQ _GqOuEM7UEeOkpJkbnruUGQ _GqQjQM7UEeOkpJkbnruUGQ _GqSYcM7UEeOkpJkbnruUGQ _GqTmkM7UEeOkpJkbnruUGQ _GqVbwM7UEeOkpJkbnruUGQ" base_Component="_GoawMc7UEeOkpJkbnruUGQ" name="GMF Diagram UI"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GokhMM7UEeOkpJkbnruUGQ" base_Package="_GoiE8M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gom9cM7UEeOkpJkbnruUGQ" base_Package="_GokhMc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GoqAwM7UEeOkpJkbnruUGQ" base_Package="_GonkgM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GosdAM7UEeOkpJkbnruUGQ" base_Package="_GoqAwc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GovgUM7UEeOkpJkbnruUGQ" base_Package="_GotEEM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gox8kM7UEeOkpJkbnruUGQ" base_Package="_GowHYM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Go0_4M7UEeOkpJkbnruUGQ" base_Package="_GoyjoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Go3cIM7UEeOkpJkbnruUGQ" base_Package="_Go0_4c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Go54YM7UEeOkpJkbnruUGQ" base_Package="_Go3cIc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Go87sM7UEeOkpJkbnruUGQ" base_Package="_Go6fcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Go__AM7UEeOkpJkbnruUGQ" base_Package="_Go9iwM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpCbQM7UEeOkpJkbnruUGQ" base_Package="_Go__Ac7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpFekM7UEeOkpJkbnruUGQ" base_Package="_GpDCUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpIh4M7UEeOkpJkbnruUGQ" base_Package="_GpGFoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpK-IM7UEeOkpJkbnruUGQ" base_Package="_GpIh4c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpOBcM7UEeOkpJkbnruUGQ" base_Package="_GpLlMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpQdsM7UEeOkpJkbnruUGQ" base_Package="_GpOogM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpS58M7UEeOkpJkbnruUGQ" base_Package="_GpREwM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpVWMM7UEeOkpJkbnruUGQ" base_Package="_GpThAM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpXycM7UEeOkpJkbnruUGQ" base_Package="_GpV9QM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpaOsM7UEeOkpJkbnruUGQ" base_Package="_GpYZgM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpcD4M7UEeOkpJkbnruUGQ" base_Package="_GpaOsc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpegIM7UEeOkpJkbnruUGQ" base_Package="_Gpcq8M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gpg8YM7UEeOkpJkbnruUGQ" base_Package="_GpfHMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpjYoM7UEeOkpJkbnruUGQ" base_Package="_GphjcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GplN0M7UEeOkpJkbnruUGQ" base_Package="_Gpj_sM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpnDAM7UEeOkpJkbnruUGQ" base_Package="_Gpl04M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gpo4MM7UEeOkpJkbnruUGQ" base_Package="_GpnqEM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GprUcM7UEeOkpJkbnruUGQ" base_Package="_GppfQM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GptJoM7UEeOkpJkbnruUGQ" base_Package="_GprUcc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gpu-0M7UEeOkpJkbnruUGQ" base_Package="_GptwsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpxbEM7UEeOkpJkbnruUGQ" base_Package="_Gpvl4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GpzQQM7UEeOkpJkbnruUGQ" base_Package="_GpxbEc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gp1FcM7UEeOkpJkbnruUGQ" base_Package="_GpzQQc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gp26oM7UEeOkpJkbnruUGQ" base_Package="_Gp1sgM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gp5W4M7UEeOkpJkbnruUGQ" base_Package="_Gp3hsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gp7MEM7UEeOkpJkbnruUGQ" base_Package="_Gp5W4c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gp9BQM7UEeOkpJkbnruUGQ" base_Package="_Gp7MEc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gp-2cM7UEeOkpJkbnruUGQ" base_Package="_Gp9oUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqAroM7UEeOkpJkbnruUGQ" base_Package="_Gp_dgM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqCg0M7UEeOkpJkbnruUGQ" base_Package="_GqBSsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqE9EM7UEeOkpJkbnruUGQ" base_Package="_GqDH4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqGyQM7UEeOkpJkbnruUGQ" base_Package="_GqE9Ec7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqIncM7UEeOkpJkbnruUGQ" base_Package="_GqGyQc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqJ1kM7UEeOkpJkbnruUGQ" base_Package="_GqIncc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqLqwM7UEeOkpJkbnruUGQ" base_Package="_GqKcoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqNf8M7UEeOkpJkbnruUGQ" base_Package="_GqMR0M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqOuEM7UEeOkpJkbnruUGQ" base_Package="_GqNf8c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqQjQM7UEeOkpJkbnruUGQ" base_Package="_GqPVIM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqSYcM7UEeOkpJkbnruUGQ" base_Package="_GqRKUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqTmkM7UEeOkpJkbnruUGQ" base_Package="_GqSYcc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqVbwM7UEeOkpJkbnruUGQ" base_Package="_GqUNoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GqZtMM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.uml2.uml.UMLPlugin$Implementation" classPath="." localization="plugin" requiredExecutionEnvironment="J2SE-1.5" symbolicName="org.eclipse.uml2.uml" vendor="Eclipse Modeling Project" version="5.0.0.v20140310-0733" exportPackage="_GqfMwM7UEeOkpJkbnruUGQ _GqhB8M7UEeOkpJkbnruUGQ _Gqi3IM7UEeOkpJkbnruUGQ _GqksUM7UEeOkpJkbnruUGQ _GqmhgM7UEeOkpJkbnruUGQ _GqnvoM7UEeOkpJkbnruUGQ" base_Component="_GqYfEM7UEeOkpJkbnruUGQ" name="UML2 UML Model" lazyStart="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqfMwM7UEeOkpJkbnruUGQ" base_Package="_Gqd-oM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqhB8M7UEeOkpJkbnruUGQ" base_Package="_Gqfz0M7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gqi3IM7UEeOkpJkbnruUGQ" base_Package="_GqhpAM7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqksUM7UEeOkpJkbnruUGQ" base_Package="_GqjeMM7UEeOkpJkbnruUGQ" isInternal="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqmhgM7UEeOkpJkbnruUGQ" base_Package="_GqlTYM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqnvoM7UEeOkpJkbnruUGQ" base_Package="_GqnIkM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GqqL4M7UEeOkpJkbnruUGQ" base_Dependency="_Gqo9wM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GqsBEM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.papyrus.infra.core.Activator" localization="plugin" requiredExecutionEnvironment="JavaSE-1.6" symbolicName="org.eclipse.papyrus.infra.core" vendor="Eclipse Modeling Project" version="1.0.0.v201404220826" exportPackage="_GqxgoM7UEeOkpJkbnruUGQ _GqzV0M7UEeOkpJkbnruUGQ _Gq1LAM7UEeOkpJkbnruUGQ _Gq2ZIM7UEeOkpJkbnruUGQ _Gq4OUM7UEeOkpJkbnruUGQ _Gq6DgM7UEeOkpJkbnruUGQ _Gq7RoM7UEeOkpJkbnruUGQ _Gq9G0M7UEeOkpJkbnruUGQ _Gq-U8M7UEeOkpJkbnruUGQ _GrAKIM7UEeOkpJkbnruUGQ _GrB_UM7UEeOkpJkbnruUGQ _GrDNcM7UEeOkpJkbnruUGQ _GrFCoM7UEeOkpJkbnruUGQ _GrG30M7UEeOkpJkbnruUGQ _GrIF8M7UEeOkpJkbnruUGQ _GrKiMM7UEeOkpJkbnruUGQ _GrLwUM7UEeOkpJkbnruUGQ _GrNlgM7UEeOkpJkbnruUGQ _GrPasM7UEeOkpJkbnruUGQ" base_Component="_Gqqy8M7UEeOkpJkbnruUGQ" name="Papyrus Backbone" isIncubation="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqxgoM7UEeOkpJkbnruUGQ" base_Package="_GqwSgM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GqzV0M7UEeOkpJkbnruUGQ" base_Package="_GqyHsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq1LAM7UEeOkpJkbnruUGQ" base_Package="_Gqz84M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq2ZIM7UEeOkpJkbnruUGQ" base_Package="_Gq1LAc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq4OUM7UEeOkpJkbnruUGQ" base_Package="_Gq3AMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq6DgM7UEeOkpJkbnruUGQ" base_Package="_Gq41YM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq7RoM7UEeOkpJkbnruUGQ" base_Package="_Gq6Dgc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq9G0M7UEeOkpJkbnruUGQ" base_Package="_Gq74sM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gq-U8M7UEeOkpJkbnruUGQ" base_Package="_Gq9t4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrAKIM7UEeOkpJkbnruUGQ" base_Package="_Gq-8AM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrB_UM7UEeOkpJkbnruUGQ" base_Package="_GrAxMM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrDNcM7UEeOkpJkbnruUGQ" base_Package="_GrB_Uc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrFCoM7UEeOkpJkbnruUGQ" base_Package="_GrD0gM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrG30M7UEeOkpJkbnruUGQ" base_Package="_GrFpsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrIF8M7UEeOkpJkbnruUGQ" base_Package="_GrG30c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrKiMM7UEeOkpJkbnruUGQ" base_Package="_GrItAM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrLwUM7UEeOkpJkbnruUGQ" base_Package="_GrKiMc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrNlgM7UEeOkpJkbnruUGQ" base_Package="_GrMXYM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrPasM7UEeOkpJkbnruUGQ" base_Package="_GrOMkM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GrRP4M7UEeOkpJkbnruUGQ" base_Dependency="_GrQBwM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GrTFEM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.papyrus.infra.gmfdiag.common.Activator" classPath="." localization="plugin" requiredExecutionEnvironment="JavaSE-1.6" symbolicName="org.eclipse.papyrus.infra.gmfdiag.common" vendor="Eclipse Modeling Project" version="1.0.0.qualifier" exportPackage="_GrZLsM7UEeOkpJkbnruUGQ _GraZ0M7UEeOkpJkbnruUGQ _GrcPAM7UEeOkpJkbnruUGQ _GreEMM7UEeOkpJkbnruUGQ _GrfSUM7UEeOkpJkbnruUGQ _GrhHgM7UEeOkpJkbnruUGQ _GriVoM7UEeOkpJkbnruUGQ _GrkK0M7UEeOkpJkbnruUGQ _GrmAAM7UEeOkpJkbnruUGQ _GrnOIM7UEeOkpJkbnruUGQ _GrpDUM7UEeOkpJkbnruUGQ _GrqRcM7UEeOkpJkbnruUGQ _GrsGoM7UEeOkpJkbnruUGQ _Grt70M7UEeOkpJkbnruUGQ _GrvJ8M7UEeOkpJkbnruUGQ _Grw_IM7UEeOkpJkbnruUGQ _GryNQM7UEeOkpJkbnruUGQ _Gr0CcM7UEeOkpJkbnruUGQ _Gr1QkM7UEeOkpJkbnruUGQ _Gr3FwM7UEeOkpJkbnruUGQ _Gr4T4M7UEeOkpJkbnruUGQ _Gr6JEM7UEeOkpJkbnruUGQ _Gr7XMM7UEeOkpJkbnruUGQ _Gr9MYM7UEeOkpJkbnruUGQ" base_Component="_GrR28M7UEeOkpJkbnruUGQ" name="Papyrus GMF Diagrams Support" isIncubation="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrZLsM7UEeOkpJkbnruUGQ" base_Package="_GrX9kM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GraZ0M7UEeOkpJkbnruUGQ" base_Package="_GrZLsc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrcPAM7UEeOkpJkbnruUGQ" base_Package="_GrbA4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GreEMM7UEeOkpJkbnruUGQ" base_Package="_Grc2EM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrfSUM7UEeOkpJkbnruUGQ" base_Package="_GreEMc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrhHgM7UEeOkpJkbnruUGQ" base_Package="_Grf5YM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GriVoM7UEeOkpJkbnruUGQ" base_Package="_GrhHgc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrkK0M7UEeOkpJkbnruUGQ" base_Package="_Gri8sM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrmAAM7UEeOkpJkbnruUGQ" base_Package="_Grkx4M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrnOIM7UEeOkpJkbnruUGQ" base_Package="_GrmAAc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrpDUM7UEeOkpJkbnruUGQ" base_Package="_Grn1MM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrqRcM7UEeOkpJkbnruUGQ" base_Package="_GrpDUc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrsGoM7UEeOkpJkbnruUGQ" base_Package="_Grq4gM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Grt70M7UEeOkpJkbnruUGQ" base_Package="_GrstsM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GrvJ8M7UEeOkpJkbnruUGQ" base_Package="_Grt70c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Grw_IM7UEeOkpJkbnruUGQ" base_Package="_GrvxAM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GryNQM7UEeOkpJkbnruUGQ" base_Package="_Grw_Ic7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr0CcM7UEeOkpJkbnruUGQ" base_Package="_Gry0UM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr1QkM7UEeOkpJkbnruUGQ" base_Package="_Gr0Ccc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr3FwM7UEeOkpJkbnruUGQ" base_Package="_Gr13oM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr4T4M7UEeOkpJkbnruUGQ" base_Package="_Gr3Fwc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr6JEM7UEeOkpJkbnruUGQ" base_Package="_Gr468M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr7XMM7UEeOkpJkbnruUGQ" base_Package="_Gr6JEc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gr9MYM7UEeOkpJkbnruUGQ" base_Package="_Gr7-QM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_Gr_ooM7UEeOkpJkbnruUGQ" base_Dependency="_Gr9zcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GsBd0M7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.gmf.tooling.runtime.GMFToolingRuntimePlugin" localization="plugin" requiredExecutionEnvironment="JavaSE-1.6" symbolicName="org.eclipse.gmf.tooling.runtime" vendor="Eclipse Modeling Project" version="3.2.0.201403121855" exportPackage="_GsHkcM7UEeOkpJkbnruUGQ _GsIykM7UEeOkpJkbnruUGQ _GsKnwM7UEeOkpJkbnruUGQ _GsMc8M7UEeOkpJkbnruUGQ _GsNrEM7UEeOkpJkbnruUGQ _GsPgQM7UEeOkpJkbnruUGQ _GsQuYM7UEeOkpJkbnruUGQ _GsSjkM7UEeOkpJkbnruUGQ _GsUYwM7UEeOkpJkbnruUGQ _GsVm4M7UEeOkpJkbnruUGQ _GsXcEM7UEeOkpJkbnruUGQ _GsYqMM7UEeOkpJkbnruUGQ _GsafYM7UEeOkpJkbnruUGQ _GsbtgM7UEeOkpJkbnruUGQ _GsdisM7UEeOkpJkbnruUGQ _GsfX4M7UEeOkpJkbnruUGQ _GsgmAM7UEeOkpJkbnruUGQ _GsibMM7UEeOkpJkbnruUGQ" base_Component="_GsAPsM7UEeOkpJkbnruUGQ" name="GMF Tooling-Specific Runtime Extensions Plugin"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsHkcM7UEeOkpJkbnruUGQ" base_Package="_GsGWUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsIykM7UEeOkpJkbnruUGQ" base_Package="_GsHkcc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsKnwM7UEeOkpJkbnruUGQ" base_Package="_GsJZoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsMc8M7UEeOkpJkbnruUGQ" base_Package="_GsLO0M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsNrEM7UEeOkpJkbnruUGQ" base_Package="_GsMc8c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsPgQM7UEeOkpJkbnruUGQ" base_Package="_GsOSIM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsQuYM7UEeOkpJkbnruUGQ" base_Package="_GsQHUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsSjkM7UEeOkpJkbnruUGQ" base_Package="_GsRVcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsUYwM7UEeOkpJkbnruUGQ" base_Package="_GsTKoM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsVm4M7UEeOkpJkbnruUGQ" base_Package="_GsUYwc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsXcEM7UEeOkpJkbnruUGQ" base_Package="_GsWN8M7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsYqMM7UEeOkpJkbnruUGQ" base_Package="_GsXcEc7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsafYM7UEeOkpJkbnruUGQ" base_Package="_GsZRQM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsbtgM7UEeOkpJkbnruUGQ" base_Package="_GsbGcM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsdisM7UEeOkpJkbnruUGQ" base_Package="_GscUkM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsfX4M7UEeOkpJkbnruUGQ" base_Package="_GseJwM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsgmAM7UEeOkpJkbnruUGQ" base_Package="_GsfX4c7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsibMM7UEeOkpJkbnruUGQ" base_Package="_GshNEM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_Gsk3cM7UEeOkpJkbnruUGQ" base_Dependency="_GsjCQM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:Plugin xmi:id="_GsmsoM7UEeOkpJkbnruUGQ" hasLazyActivationPolicy="true" activator="org.eclipse.papyrus.infra.core.log.internal.Activator" localization="plugin" requiredExecutionEnvironment="J2SE-1.5" symbolicName="org.eclipse.papyrus.infra.core.log" vendor="Eclipse Modeling Project" version="1.0.0.v201404220826" exportPackage="_GsszQM7UEeOkpJkbnruUGQ" base_Component="_GslegM7UEeOkpJkbnruUGQ" name="Papyrus Logging plugin" isIncubation="true"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_GsszQM7UEeOkpJkbnruUGQ" base_Package="_GsrlIM7UEeOkpJkbnruUGQ"/>
+ <ModuleLayer:BundleReference xmi:id="_GsvPgM7UEeOkpJkbnruUGQ" base_Dependency="_GstaUM7UEeOkpJkbnruUGQ"/>
+ <ADL4Eclipse:EclipseExportedPackage xmi:id="_Gs5AgM7UEeOkpJkbnruUGQ" base_Package="_Gs3LUM7UEeOkpJkbnruUGQ"/>
+ <structure:DeveloperDoc xmi:id="_SUtzsM7eEeOkpJkbnruUGQ" base_Comment="_j3s-wM7dEeOkpJkbnruUGQ"/>
+ <Document:Document xmi:id="_YDhg4M7vEeOVs4zXLxqLmw" base_Model="_YDedkM7vEeOVs4zXLxqLmw" author="P. Tessier (CEA LIST)" version="0.1"/>
+ <Document:Content xmi:id="_YDlyUM7vEeOVs4zXLxqLmw" base_Comment="_YDjWEM7vEeOVs4zXLxqLmw"/>
+ <Document:Section xmi:id="_YDpcsM7vEeOVs4zXLxqLmw" base_Package="_YDnAcM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YDu8QM7vEeOVs4zXLxqLmw" base_Comment="_YDsgAM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YDymoM7vEeOVs4zXLxqLmw" base_Comment="_YDxYgM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YD24EM7vEeOVs4zXLxqLmw" base_Comment="_YD1C4M7vEeOVs4zXLxqLmw"/>
+ <Document:Section xmi:id="_YD5UUM7vEeOVs4zXLxqLmw" base_Package="_YD3fIM7vEeOVs4zXLxqLmw"/>
+ <Document:ImageRef xmi:id="_YE6oAM7vEeOVs4zXLxqLmw" base_Comment="_YE4LwM7vEeOVs4zXLxqLmw" ref="C:/git/org.eclipse.papyrus/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/UseCaseDiagram.png"/>
+ <Document:Section xmi:id="_YE9EQM7vEeOVs4zXLxqLmw" base_Package="_YE7PEM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YFAHkM7vEeOVs4zXLxqLmw" base_Comment="_YE9rUM7vEeOVs4zXLxqLmw"/>
+ <Document:Section xmi:id="_YFCj0M7vEeOVs4zXLxqLmw" base_Package="_YFAuoM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YFFAEM7vEeOVs4zXLxqLmw" base_Comment="_YFDK4M7vEeOVs4zXLxqLmw"/>
+ <Document:Section xmi:id="_YFHcUM7vEeOVs4zXLxqLmw" base_Package="_YFFnIM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YFJ4kM7vEeOVs4zXLxqLmw" base_Comment="_YFIDYM7vEeOVs4zXLxqLmw"/>
+ <Document:Section xmi:id="_YFLtwM7vEeOVs4zXLxqLmw" base_Package="_YFJ4kc7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YFOxEM7vEeOVs4zXLxqLmw" base_Comment="_YFMU0M7vEeOVs4zXLxqLmw"/>
+ <Document:Section xmi:id="_YFRNUM7vEeOVs4zXLxqLmw" base_Package="_YFPYIM7vEeOVs4zXLxqLmw"/>
+ <Document:ImageRef xmi:id="_YGy3UM7vEeOVs4zXLxqLmw" base_Comment="_YGwbEM7vEeOVs4zXLxqLmw" ref="C:/git/org.eclipse.papyrus/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/ArchitectureOverview.png"/>
+ <Document:Content xmi:id="_YG16oM7vEeOVs4zXLxqLmw" base_Comment="_YGzeYM7vEeOVs4zXLxqLmw"/>
+ <Document:ImageRef xmi:id="_YJcisM7vEeOVs4zXLxqLmw" base_Comment="_YJaGcM7vEeOVs4zXLxqLmw" ref="C:/git/org.eclipse.papyrus/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.synchronizeview/imgDOC/Structure.png"/>
+ <Document:Content xmi:id="_YJe-8M7vEeOVs4zXLxqLmw" base_Comment="_YJdJwM7vEeOVs4zXLxqLmw"/>
+ <Document:Content xmi:id="_YJhbMM7vEeOVs4zXLxqLmw" base_Comment="_YJfmAM7vEeOVs4zXLxqLmw"/>
+</xmi:XMI>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/schema/strategies.exsd b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/schema/strategies.exsd
new file mode 100644
index 00000000000..7965c815fbd
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/schema/strategies.exsd
@@ -0,0 +1,325 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.papyrus.infra.gmfdiag.canonical" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.papyrus.infra.gmfdiag.canonical" id="org.eclipse.papyrus.infra.gmfdiag.canonical.strategies" name="Canonical Children Strategies"/>
+ </appinfo>
+ <documentation>
+ A registry of strategies for determining the semantic children of model elements that should canonically be represented as child views in the diagrams. In this context the term &quot;children&quot; is used loosely as pertaining to the model semantics, because elements visualized as child views in the diagram can have any kind of relationship to the element visualized in the parent view. For example, in composite structures, ports of the class that is the type of a part may be presented as child views on the border of the part&apos;s rectangle shape in the diagram, although they are in no way contained either directly or indirectly in the model.
+
+The semantic &quot;children&quot; also include relationships (generalizations, dependencies, associations, etc.) and relationship-like elements (connectors, state transitions, messages, etc.) that should visually connect to a &quot;parent&quot; view in the diagram.
+ </documentation>
+ </annotation>
+
+ <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <choice minOccurs="1" maxOccurs="unbounded">
+ <element ref="semanticChildrenStrategy"/>
+ <element ref="defaultSemanticChildrenStrategy"/>
+ <element ref="creationTargetStrategy"/>
+ <element ref="visualChildrenStrategy"/>
+ </choice>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="semanticChildrenStrategy">
+ <annotation>
+ <documentation>
+ This is a pair (EditPart, ISemanticChildrenStrategy) used to describe the list of semantic elements that will represented as children of the current EditPart.
+&lt;p&gt;
+The nested &amp;lt;enablement&amp;gt; expression, if specified, is used to match edit parts that the strategy supports. The expression has three variables available to it:
+&lt;/p&gt;
+&lt;table border=&quot;1&quot; align=&quot;center&quot;&gt;
+&lt;tr&gt;&lt;th&gt;Variable&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td&gt;editPart&lt;/td&gt;&lt;td&gt;the edit-part under consideration. This is also the default variable&lt;/td&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;view&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;editPart&lt;/tt&gt;&apos;s notation view&lt;/th&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;element&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;view&lt;/tt&gt;&apos;s semantic element&lt;/th&gt;&lt;/tr&gt;
+&lt;/table&gt;
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="enablement" minOccurs="0" maxOccurs="1"/>
+ </sequence>
+ <attribute name="editPart" type="string">
+ <annotation>
+ <documentation>
+ A class implementing the EditPart interface whose instances will be synchronized. If both this attribute and an &amp;lt;enablement&amp;gt; expression are supplied, then strategies will only be used that match both.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.gef.EditPart"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+ A strategy computing the list of semantic elements that will be represented as children of the referenced EditPart.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.ISemanticChildrenStrategy"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="priority" type="string">
+ <annotation>
+ <documentation>
+ Semantic children strategies are matched in priority order, from highest priority first to lowest priority last.
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="defaultSemanticChildrenStrategy">
+ <annotation>
+ <documentation>
+ An extension that provides a generic default implementation of the semantic children for edit parts on semantic objects that it recognizes.
+&lt;p&gt;
+The nested &amp;lt;enablement&amp;gt; expression, if specified, is used to match edit parts that the strategy supports. The expression has three variables available to it:
+&lt;/p&gt;
+&lt;table border=&quot;1&quot; align=&quot;center&quot;&gt;
+&lt;tr&gt;&lt;th&gt;Variable&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td&gt;editPart&lt;/td&gt;&lt;td&gt;the edit-part under consideration. This is also the default variable&lt;/td&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;view&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;editPart&lt;/tt&gt;&apos;s notation view&lt;/th&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;element&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;view&lt;/tt&gt;&apos;s semantic element&lt;/th&gt;&lt;/tr&gt;
+&lt;/table&gt;
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="enablement" minOccurs="0" maxOccurs="1"/>
+ </sequence>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+ The class implementing the default semantic children strategy
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.ISemanticChildrenStrategy"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="priority" type="string">
+ <annotation>
+ <documentation>
+ Default semantic children strategies are consulted only if a specific registered strategy is not matched. In this case, the first default that can provide any children is used, so the priority sorts defaults.
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="creationTargetStrategy">
+ <annotation>
+ <documentation>
+ An extension that provides an alternative target edit part to which requests should be sent for canonical creation of child views.
+&lt;p&gt;
+The nested &amp;lt;enablement&amp;gt; expression, if specified, is used to match edit parts that the strategy supports. The expression has three variables available to it:
+&lt;/p&gt;
+&lt;table border=&quot;1&quot; align=&quot;center&quot;&gt;
+&lt;tr&gt;&lt;th&gt;Variable&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td&gt;editPart&lt;/td&gt;&lt;td&gt;the edit-part under consideration. This is also the default variable&lt;/td&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;view&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;editPart&lt;/tt&gt;&apos;s notation view&lt;/th&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;element&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;view&lt;/tt&gt;&apos;s semantic element&lt;/th&gt;&lt;/tr&gt;
+&lt;/table&gt;
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="enablement" minOccurs="0" maxOccurs="1"/>
+ </sequence>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+ The class implementing the creation target edit-part strategy
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.ICreationTargetStrategy"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="priority" type="string">
+ <annotation>
+ <documentation>
+ Creation target edit-part strategies are matched in priority order, from highest priority first to lowest priority last.
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="visualChildrenStrategy">
+ <annotation>
+ <documentation>
+ This is a pair (EditPart, IVisualChildrenStrategy) used to describe the list of visual notation elements that are canonical children and connections of the current EditPart.
+&lt;p&gt;
+The nested &amp;lt;enablement&amp;gt; expression, if specified, is used to match edit parts that the strategy supports. The expression has three variables available to it:
+&lt;/p&gt;
+&lt;table border=&quot;1&quot; align=&quot;center&quot;&gt;
+&lt;tr&gt;&lt;th&gt;Variable&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
+&lt;tr&gt;&lt;td&gt;editPart&lt;/td&gt;&lt;td&gt;the edit-part under consideration. This is also the default variable&lt;/td&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;view&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;editPart&lt;/tt&gt;&apos;s notation view&lt;/th&gt;&lt;/tr&gt;
+ &lt;tr&gt;&lt;td&gt;element&lt;/td&gt;&lt;td&gt;the &lt;tt&gt;view&lt;/tt&gt;&apos;s semantic element&lt;/th&gt;&lt;/tr&gt;
+&lt;/table&gt;
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="enablement" minOccurs="0" maxOccurs="1"/>
+ </sequence>
+ <attribute name="editPart" type="string">
+ <annotation>
+ <documentation>
+ A class implementing the EditPart interface whose instances will be synchronized. If both this attribute and an &amp;lt;enablement&amp;gt; expression are supplied, then strategies will only be used that match both.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.gef.EditPart"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+ A strategy computing the list of visual notation elements that are canonical children and connections of the referenced EditPart.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.IVisualChildrenStrategy"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="priority" type="string">
+ <annotation>
+ <documentation>
+ Visual children strategies are matched in priority order, from highest priority first to lowest priority last.
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ 1.1.0
+ </documentation>
+ </annotation>
+
+
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ The Composite Structure Diagram provided by Papyrus supports the presentation of nested composite structure in a part rectangle&apos;s structure compartment and ports around its border, according to the structure of the part&apos;s type (if any):
+
+&lt;pre&gt;
+ &lt;extension
+ point=&quot;org.eclipse.papyrus.infra.gmfdiag.canonical.strategies&quot;&gt;
+ &lt;semanticChildrenStrategy
+ editPart=&quot;org.eclipse.papyrus.uml.diagram.composite.edit.parts.PropertyPartCompartmentEditPartCN&quot;
+ class=&quot;org.eclipse.papyrus.uml.diagram.composite.PropertyPartCompartmentSemanticChildrenStrategy&quot;&gt;
+ &lt;/semanticChildrenStrategy&gt;
+ &lt;semanticChildrenStrategy
+ editPart=&quot;org.eclipse.papyrus.uml.diagram.composite.edit.parts.PropertyPartEditPartCN&quot;
+ class=&quot;org.eclipse.papyrus.uml.diagram.composite.PropertyPartCompartmentSemanticChildrenStrategy&quot;&gt;
+ &lt;/semanticChildrenStrategy&gt;
+ &lt;/extension&gt;
+&lt;/pre&gt;
+
+And for diagrams that do not need any more specific strategies, Papyrus provides defaults for owned elements and relationships to be presented as child views and edges, respectively:
+
+&lt;pre&gt;
+ &lt;extension
+ point=&quot;org.eclipse.papyrus.infra.gmfdiag.canonical.strategies&quot;&gt;
+ &lt;defaultSemanticChildrenStrategy
+ class=&quot;org.eclipse.papyrus.uml.diagram.common.canonical.DefaultUMLSemanticChildrenStrategy&quot;
+ priority=&quot;10&quot;&gt;
+ &lt;enablement&gt;
+ &lt;with
+ variable=&quot;element&quot;&gt;
+ &lt;instanceof
+ value=&quot;org.eclipse.uml2.uml.Element&quot;&gt;
+ &lt;/instanceof&gt;
+ &lt;/with&gt;
+ &lt;/enablement&gt;
+ &lt;/defaultSemanticChildrenStrategy&gt;
+ &lt;/extension&gt;
+&lt;/pre&gt;
+
+The Activity diagram cusomizes the edit part from which canonical creation of activity edges incoming and outgoing pins and groups is requested:
+
+&lt;pre&gt;
+ &lt;extension
+ point=&quot;org.eclipse.papyrus.infra.gmfdiag.canonical.strategies&quot;&gt;
+ &lt;creationTargetStrategy
+ class=&quot;org.eclipse.papyrus.uml.diagram.activity.canonical.ActivityCanonicalCreationTargetStrategy&quot;&gt;
+ &lt;enablement&gt;
+ &lt;with
+ variable=&quot;element&quot;&gt;
+ &lt;or&gt;
+ &lt;instanceof
+ value=&quot;org.eclipse.uml2.uml.Pin&quot;&gt;
+ &lt;/instanceof&gt;
+ &lt;instanceof
+ value=&quot;org.eclipse.uml2.uml.ActivityGroup&quot;&gt;
+ &lt;/instanceof&gt;
+ &lt;/or&gt;
+ &lt;/with&gt;
+ &lt;/enablement&gt;
+ &lt;/creationTargetStrategy&gt;
+ &lt;/extension&gt;
+&lt;/pre&gt;
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="copyright"/>
+ </appinfo>
+ <documentation>
+ Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, and others.
+
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/CanonicalStateListener.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/CanonicalStateListener.java
new file mode 100644
index 00000000000..ecb6081bafa
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/CanonicalStateListener.java
@@ -0,0 +1,308 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.canonical.editpolicy;
+
+import java.util.List;
+import java.util.concurrent.ConcurrentMap;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBroker;
+import org.eclipse.gmf.runtime.diagram.core.listener.NotificationListener;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.util.EditPartUtil;
+import org.eclipse.gmf.runtime.notation.CanonicalStyle;
+import org.eclipse.gmf.runtime.notation.NotationFactory;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.tools.util.ReferenceCounted;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.MapMaker;
+
+/**
+ * A {@link DiagramEventBroker} listener that is notified when the {@link CanonicalStyle} of a view changes.
+ */
+public class CanonicalStateListener extends ReferenceCounted<CanonicalStateListener> implements NotificationListener {
+ private static final ConcurrentMap<IGraphicalEditPart, CanonicalStateListener> listeners = new MapMaker().weakKeys().weakValues().makeMap();
+
+ private final IGraphicalEditPart owner;
+
+ private List<Handler> handlers = Lists.newArrayListWithExpectedSize(2);
+
+ private CanonicalStateListener(IGraphicalEditPart owner) {
+ super();
+
+ this.owner = owner;
+
+ install();
+ }
+
+ @Override
+ protected void dispose() {
+ listeners.remove(owner, this);
+ uninstall();
+ }
+
+ /**
+ * <p>
+ * Obtains the shared canonical state listener for a given {@code editPart}.
+ * </p>
+ * <p>
+ * <b>Note</b> that the resulting listener is automatically {@linkplain ReferenceCounted#retain() retained} on the caller's behalf. The caller will have to {@linkplain ReferenceCounted#release() release} the listener when it is no longer needed.
+ * </p>
+ *
+ * @param editPart
+ * an edit part
+ * @return its shared canonical state listener. Do not {@linkplain ReferenceCounted#retain() retain} it, otherwise you will
+ * have doubly retained it
+ *
+ * @see ReferenceCounted#retain()
+ * @see ReferenceCounted#release()
+ */
+ public static CanonicalStateListener getInstance(IGraphicalEditPart editPart) {
+ CanonicalStateListener result = listeners.get(editPart);
+ if (result == null) {
+ result = new CanonicalStateListener(editPart);
+ CanonicalStateListener clash = listeners.putIfAbsent(editPart, result);
+ if (clash != null) {
+ result.dispose();
+ result = clash;
+ }
+ }
+ return result.retain();
+ }
+
+ public void addCanonicalRefreshHandler(Handler refreshHandler) {
+ handlers.add(refreshHandler);
+ }
+
+ public void removeCanonicalRefreshHandler(Handler refreshHandler) {
+ handlers.remove(refreshHandler);
+ }
+
+ private void install() {
+ View view = owner.getNotationView();
+
+ DiagramEventBroker broker = getDiagramEventBroker();
+ broker.addNotificationListener(view, NotationPackage.Literals.VIEW__STYLES, this);
+
+ // If provided by CSS, the style could be a transient floating object. In that case, don't listen to
+ // it (CSS cannot change its state). Or, if the view itself is a CanonicalStyle, then we're already
+ // listening to it
+ CanonicalStyle style = (CanonicalStyle) view.getStyle(NotationPackage.Literals.CANONICAL_STYLE);
+ if ((style != null) && (style.eContainer() == view)) {
+ install(style);
+ }
+ }
+
+ private IGraphicalEditPart getOwner() {
+ return owner;
+ }
+
+ private void install(CanonicalStyle style) {
+ DiagramEventBroker broker = getDiagramEventBroker();
+ broker.addNotificationListener(style, NotationPackage.Literals.CANONICAL_STYLE__CANONICAL, this);
+ }
+
+ private void uninstall() {
+ View view = getOwner().getNotationView();
+
+ CanonicalStyle style = (CanonicalStyle) view.getStyle(NotationPackage.Literals.CANONICAL_STYLE);
+ if ((style != null) && (style != view)) {
+ uninstall(style);
+ }
+
+ DiagramEventBroker broker = getDiagramEventBroker();
+ if (broker != null) {
+ broker.removeNotificationListener(view, NotationPackage.Literals.VIEW__STYLES, this);
+ }
+ }
+
+ private void uninstall(CanonicalStyle style) {
+ DiagramEventBroker broker = getDiagramEventBroker();
+ if (broker != null) {
+ broker.removeNotificationListener(style, NotationPackage.Literals.CANONICAL_STYLE__CANONICAL, this);
+ }
+ }
+
+ protected DiagramEventBroker getDiagramEventBroker() {
+ IGraphicalEditPart owner = getOwner();
+ TransactionalEditingDomain domain = (owner == null) ? null : owner.getEditingDomain();
+ return (domain == null) ? null : DiagramEventBroker.getInstance(domain);
+ }
+
+ @Override
+ public void notifyChanged(Notification notification) {
+ Object notifier = notification.getNotifier();
+
+ if ((notifier instanceof CanonicalStyle) && (notification.getFeature() == NotationPackage.Literals.CANONICAL_STYLE__CANONICAL)) {
+ // Already listening to CanonicalStyle::canonical, so don't use internalHandleAdd
+ handleAdd((CanonicalStyle) notifier, null);
+ } else if (notification.getFeature() == NotationPackage.Literals.VIEW__STYLES) {
+ switch (notification.getEventType()) {
+ case Notification.ADD:
+ if (notification.getNewValue() instanceof CanonicalStyle) {
+ internalHandleAdd((CanonicalStyle) notification.getNewValue());
+ }
+ break;
+ case Notification.ADD_MANY:
+ for (Object next : (Iterable<?>) notification.getNewValue()) {
+ if (next instanceof CanonicalStyle) {
+ internalHandleAdd((CanonicalStyle) next);
+ break;
+ }
+ }
+ break;
+ case Notification.REMOVE:
+ if (notification.getOldValue() instanceof CanonicalStyle) {
+ internalHandleRemove((CanonicalStyle) notification.getOldValue());
+ }
+ break;
+ case Notification.REMOVE_MANY:
+ for (Object next : (Iterable<?>) notification.getOldValue()) {
+ if (next instanceof CanonicalStyle) {
+ internalHandleRemove((CanonicalStyle) next);
+ break;
+ }
+ }
+ break;
+ case Notification.SET:
+ case Notification.UNSET:
+ CanonicalStyle added = (notification.getNewValue() instanceof CanonicalStyle) ? (CanonicalStyle) notification.getNewValue() : null;
+ CanonicalStyle removed = (notification.getOldValue() instanceof CanonicalStyle) ? (CanonicalStyle) notification.getOldValue() : null;
+
+ if (added != null) {
+ if (removed != null) {
+ uninstall(removed);
+ }
+
+ // Doesn't matter whether the old style was a canonical. It matters that this one is
+ internalHandleAdd((CanonicalStyle) notification.getNewValue());
+ } else if (notification.getOldValue() instanceof CanonicalStyle) {
+ // Canonical style was replaced by a different kind
+ internalHandleRemove((CanonicalStyle) notification.getOldValue());
+ }
+ break;
+ }
+ }
+ }
+
+ private void internalHandleAdd(CanonicalStyle style) {
+ // If provided by CSS, the style could be a transient floating object. In that case, don't listen to
+ // it (CSS cannot change its state)
+ if (style.eContainer() == owner.getNotationView()) {
+ install(style);
+ }
+ handleAdd(style, null);
+ }
+
+ void handleAdd(CanonicalStyle style, Predicate<? super Handler> filter) {
+ if (!handlers.isEmpty()) {
+ Iterable<Handler> filtered = (filter == null) ? handlers : Iterables.filter(handlers, filter);
+ for (Handler next : filtered) {
+ Runnable update = next.handleAdd(style);
+ if (update != null) {
+ EditPartUtil.synchronizeRunnableToMainThread(getOwner(), update);
+ }
+ }
+ }
+ }
+
+ private void internalHandleRemove(CanonicalStyle style) {
+ uninstall(style);
+ handleRemove(style, null);
+ }
+
+ void handleRemove(CanonicalStyle style, Predicate<? super Handler> filter) {
+ if (!handlers.isEmpty()) {
+ Iterable<Handler> filtered = (filter == null) ? handlers : Iterables.filter(handlers, filter);
+ for (Handler next : filtered) {
+ Runnable update = next.handleRemove(style);
+ if (update != null) {
+ EditPartUtil.synchronizeRunnableToMainThread(getOwner(), update);
+ }
+ }
+ }
+ }
+
+ /**
+ * Handles a change in the implicit canonical style of a notation view (such as from changes in CSS stylesheets).
+ *
+ * @param requestor
+ * the handler of the entity making the poke request, which should be skipped in the poke
+ * (presumably because it already knows about the canonical state change)
+ * @param enabled
+ * whether the edit-policy has become enabled ({@code true}) or disabled ({@code false})
+ */
+ void pokeHandlers(Handler requestor, boolean enabled) {
+ View view = owner.getNotationView();
+ if (view != null) {
+ CanonicalStyle style = (CanonicalStyle) view.getStyle(NotationPackage.Literals.CANONICAL_STYLE);
+ if (style == null) {
+ // Only need to fake a removal if CSS told us that we're not enabled
+ if (!enabled) {
+ CanonicalStyle fakeStyle = NotationFactory.eINSTANCE.createCanonicalStyle();
+ handleRemove(fakeStyle, not(requestor));
+ }
+ } else if (style.eContainer() == null) {
+ // Only need to fake an addition if CSS told us that we're enabled
+ if (enabled) {
+ handleAdd(style, not(requestor));
+ }
+ }
+ }
+ }
+
+ private static Predicate<Object> not(final Object excluded) {
+ return (excluded == null) ? null : new Predicate<Object>() {
+ @Override
+ public boolean apply(Object input) {
+ return input != excluded;
+ }
+ };
+ }
+
+ //
+ // Nested types
+ //
+
+ public interface Handler {
+
+ /**
+ * Obtains a runnable that will be invoked on the display thread (for safe access to diagram edit parts)
+ * to handle the addition/update of the canonical {@code style}.
+ *
+ * @param style
+ * the added or changed canonical style
+ *
+ * @return a runnable to run in response, or {@code null} if no response is needed
+ */
+ Runnable handleAdd(CanonicalStyle style);
+
+ /**
+ * Obtains a runnable that will be invoked on the display thread (for safe access to diagram edit parts)
+ * to handle the removal of the canonical {@code style}.
+ *
+ * @param style
+ * the removed canonical style
+ *
+ * @return a runnable to run in response, or {@code null} if no response is needed
+ */
+ Runnable handleRemove(CanonicalStyle style);
+
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/PapyrusCanonicalEditPolicy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/PapyrusCanonicalEditPolicy.java
new file mode 100644
index 00000000000..ab83e95bd7c
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/editpolicy/PapyrusCanonicalEditPolicy.java
@@ -0,0 +1,790 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.editpolicy;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.WeakHashMap;
+import java.util.concurrent.Callable;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.commands.CompoundCommand;
+import org.eclipse.gef.requests.CreateRequest;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+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.editparts.IBorderItemEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IResizableCompartmentEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.TopGraphicEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
+import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewRequest.ViewDescriptor;
+import org.eclipse.gmf.runtime.diagram.ui.requests.DropObjectsRequest;
+import org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter;
+import org.eclipse.gmf.runtime.notation.CanonicalStyle;
+import org.eclipse.gmf.runtime.notation.DecorationNode;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.commands.util.CommandTreeIterator;
+import org.eclipse.papyrus.commands.wrappers.GEFCommandWrapper;
+import org.eclipse.papyrus.infra.core.utils.AdapterUtils;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.internal.Activator;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.ICreationTargetStrategy;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.ISemanticChildrenStrategy;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.IVisualChildrenStrategy;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.strategy.SemanticChildrenStrategyRegistry;
+import org.eclipse.papyrus.infra.gmfdiag.common.commands.requests.CanonicalDropObjectsRequest;
+import org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.IPapyrusCanonicalEditPolicy;
+import org.eclipse.papyrus.infra.gmfdiag.common.helper.DiagramHelper;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+/**
+ * A specialization of the GMF {@link CanonicalEditPolicy} that alters the standard behaviour in a few key ways:
+ * <ul>
+ * <li>rather than using the View Service to create child views, delegate to the core drag-and-drop implementation generated for each diagram (by-passing the Papyrus exensible/pluggable drop strategies). This avoids the problems of determining a priori the
+ * identifiers of child views to create in each compartment</li>
+ * <li>treat incoming and outgoing edges on a top shape as child views for canonical synchronization</li>
+ * <li>delegate determination of semantic children to pluggable strategies on an extension point</li>
+ * </ul>
+ */
+public class PapyrusCanonicalEditPolicy extends CanonicalEditPolicy implements IPapyrusCanonicalEditPolicy {
+
+ static final String FILTER_ID = "org.eclipse.papyrus.canonicalDependents"; //$NON-NLS-1$
+ static final String SEMI_ACTIVE_FILTER_ID = "org.eclipse.papyrus.semiCanonical"; //$NON-NLS-1$
+
+ private static final Set<View> createdByCanonical = Sets.newSetFromMap(new WeakHashMap<View, Boolean>());
+
+ private ISemanticChildrenStrategy semanticChildrenStrategy = null;
+ private ICreationTargetStrategy creationTargetStrategy;
+
+ private Collection<? extends EObject> dependents = null;
+
+ private CanonicalStateListener canonicalStateListener;
+ private CanonicalStateListener.Handler refreshHandler;
+
+ private State state = State.INACTIVE;
+
+ private boolean overrideEnabled;
+
+ @Override
+ public final void activate() {
+ if (host().getNotationView() != null) {
+ final SemanticChildrenStrategyRegistry reg = SemanticChildrenStrategyRegistry.getInstance();
+ semanticChildrenStrategy = reg.getSemanticChildrenStrategy(getHost());
+ creationTargetStrategy = ICreationTargetStrategy.Safe.safe(reg.getCreationTargetStrategy(getHost()));
+
+ hookCanonicalStateListener();
+ if (isEnabled()) {
+ doActivate();
+ } else {
+ transition(State.SEMIACTIVE);
+ }
+ }
+ }
+
+ protected final void basicActivate() {
+ transition(State.ACTIVE);
+ super.activate();
+ }
+
+ protected void doActivate() {
+ basicActivate();
+
+ if (semanticChildrenStrategy != null) {
+ dependents = semanticChildrenStrategy.getCanonicalDependents((getSemanticHost()));
+ hookDependentsListener(dependents);
+ }
+ }
+
+ @Override
+ public final void deactivate() {
+ if (host().getNotationView() != null) {
+ unhookCanonicalStateListener();
+ }
+
+ doDeactivate();
+
+ transition(State.INACTIVE);
+ }
+
+ protected final void basicDeactivate() {
+ super.deactivate();
+ transition(State.SEMIACTIVE);
+ }
+
+ protected void doDeactivate() {
+ basicDeactivate();
+ }
+
+ private State transition(State newState) {
+ final State result = state;
+
+ if (newState != state) {
+ if (!state.validateTransition(newState)) {
+ Activator.log.warn(String.format("PapyrusCanonicalEditPolicy forcing invalid transition %s => %s ", state, newState)); //$NON-NLS-1$
+ }
+
+ switch (newState) {
+ case INACTIVE:
+ removeListenerFilter(SEMI_ACTIVE_FILTER_ID);
+ break;
+ case SEMIACTIVE:
+ // Enter a semi-active state in which we only delete obsolete views that we had
+ // originally created canonically while we were active
+ EObject semanticHost = getSemanticHost();
+ if (semanticHost != null) {
+ addListenerFilter(SEMI_ACTIVE_FILTER_ID, this, semanticHost);
+ }
+ break;
+ case ACTIVE:
+ removeListenerFilter(SEMI_ACTIVE_FILTER_ID);
+ break;
+ }
+
+ state = newState;
+ }
+
+ return result;
+ }
+
+ protected final boolean isInState(State state) {
+ return this.state == state;
+ }
+
+ @Override
+ public void enableRefresh(boolean enable) {
+ // Only set ourselves 'enabled' when at least semi-active
+ if (!isInState(State.INACTIVE)) {
+ super.enableRefresh(enable);
+ }
+ }
+
+ @Override
+ public void refreshActive() {
+ if (canonicalStateListener != null) {
+ if (!isActive()) {
+ if (isCanonicalStyleEnabled()) {
+ doActivate();
+
+ // I will not get this poke
+ canonicalStateListener.pokeHandlers(refreshHandler, true);
+ }
+ } else {
+ if (!isCanonicalStyleEnabled()) {
+ doDeactivate();
+
+ // I will not get this poke
+ canonicalStateListener.pokeHandlers(refreshHandler, false);
+ }
+ }
+ }
+ }
+
+ /**
+ * For CSS support, the canonical style of a compartment is inherited from its parent shape.
+ */
+ @Override
+ protected CanonicalStyle getCanonicalStyle() {
+ return (CanonicalStyle) canonicalHost().getNotationView().getStyle(NotationPackage.eINSTANCE.getCanonicalStyle());
+ }
+
+ /**
+ * For CSS support, the canonical style of a compartment is inherited from its parent shape.
+ */
+ protected final IGraphicalEditPart canonicalHost() {
+ IGraphicalEditPart result = host();
+ if (result instanceof IResizableCompartmentEditPart) {
+ result = result.getTopGraphicEditPart();
+ }
+ return result;
+ }
+
+ private void hookCanonicalStateListener() {
+ class Activate implements Runnable {
+ @Override
+ public void run() {
+ doActivate();
+ }
+ }
+ class Deactivate implements Runnable {
+ @Override
+ public void run() {
+ doDeactivate();
+ }
+ }
+
+ refreshHandler = new CanonicalStateListener.Handler() {
+ @Override
+ public Runnable handleAdd(CanonicalStyle style) {
+ Runnable result = null;
+
+ if (style.isCanonical()) {
+ if (!isActive()) {
+ result = new Activate();
+ }
+ } else if (isActive()) {
+ result = new Deactivate();
+ }
+
+ return result;
+ }
+
+ @Override
+ public Runnable handleRemove(CanonicalStyle style) {
+ Runnable result = null;
+
+ if (isActive()) {
+ result = new Deactivate();
+ }
+
+ return result;
+ }
+ };
+
+ canonicalStateListener = CanonicalStateListener.getInstance(canonicalHost());
+ canonicalStateListener.addCanonicalRefreshHandler(refreshHandler);
+ }
+
+ private void unhookCanonicalStateListener() {
+ if (canonicalStateListener != null) {
+ canonicalStateListener.removeCanonicalRefreshHandler(refreshHandler);
+ canonicalStateListener.release();
+ canonicalStateListener = null;
+ }
+ }
+
+ protected void hookDependentsListener(Iterable<? extends EObject> dependents) {
+ if (dependents != null) {
+ for (EObject next : dependents) {
+ addListenerFilter(FILTER_ID, this, next);
+ }
+ }
+ }
+
+ @Override
+ public boolean isEnabled() {
+ if (overrideEnabled) {
+ return true;
+ }
+
+ // by default there is no synchronization
+ if (getCanonicalStyle() == null) {
+ return false;
+ }
+ return super.isEnabled();
+ }
+
+ /**
+ * Queries whether I have the {@linkplain CanonicalStyle canonical style} applied and that style
+ * is {@linkplain CanonicalStyle#isCanonical() enabled}.
+ */
+ protected boolean isCanonicalStyleEnabled() {
+ CanonicalStyle style = getCanonicalStyle();
+ return (style != null) && style.isCanonical();
+ }
+
+ @Override
+ protected List<EObject> getSemanticChildrenList() {
+ List<EObject> result = getSemanticChildrenList(ChildrenKind.NODE);
+
+ if (isManageConnections()) {
+ result = concat(result, getSemanticChildrenList());
+ }
+
+ return result;
+ }
+
+ static <E> List<E> concat(Iterable<? extends E> list1, Iterable<? extends E> list2) {
+ List<E> result = null;
+
+ if (list1 != null) {
+ result = Lists.newArrayList(list1);
+ }
+
+ if (list2 != null) {
+ if (result != null) {
+ Iterables.addAll(result, list2);
+ } else {
+ result = Lists.newArrayList(list2);
+ }
+ }
+
+ return (result == null) ? Collections.<E> emptyList() : result;
+ }
+
+ protected List<EObject> getSemanticChildrenList(ChildrenKind kind) {
+ if (semanticChildrenStrategy != null) {
+ ArrayList<EObject> ancestor = getAllEObjectAncestor();
+
+ List<? extends EObject> children;
+ switch (kind) {
+ case NODE:
+ children = semanticChildrenStrategy.getCanonicalSemanticChildren(getSemanticHost(), host().getNotationView());
+ break;
+ case CONNECTION:
+ children = semanticChildrenStrategy.getCanonicalSemanticConnections(getSemanticHost(), host().getNotationView());
+ break;
+ default:
+ throw new IllegalArgumentException(kind.name());
+ }
+
+ if (children != null) {
+ for (EObject next : children) {
+ if (ancestor.contains(next)) {
+ return Collections.emptyList();
+ }
+ }
+ return Collections.unmodifiableList(children);
+ }
+ }
+
+ return Collections.emptyList();
+ }
+
+
+ /**
+ * This method is used to calculate if a semantic element has been already display in parent to avoid loop of display
+ *
+ * @return the list of all semantic element display by parents edipart.
+ */
+ protected ArrayList<EObject> getAllEObjectAncestor() {
+ ArrayList<EObject> ancestor = new ArrayList<EObject>();
+ EditPart currentEditPart = getHost();
+ if (currentEditPart.getModel() instanceof View) {
+ ancestor.add(((View) currentEditPart.getModel()).getElement());
+ }
+ while (currentEditPart.getParent() != null) {
+ currentEditPart = currentEditPart.getParent();
+ if (currentEditPart.getModel() instanceof View) {
+ ancestor.add(((View) currentEditPart.getModel()).getElement());
+ }
+ }
+ return ancestor;
+
+ }
+
+ @Override
+ protected void handleNotificationEvent(Notification event) {
+ // Override the enabled state to process deletions
+ final boolean oldOverride = overrideEnabled;
+ overrideEnabled = overrideEnabled || isInState(State.SEMIACTIVE);
+
+ try {
+ super.handleNotificationEvent(event);
+ if (semanticChildrenStrategy != null) {
+ if (dependents == null) {
+ dependents = semanticChildrenStrategy.getCanonicalDependents(getSemanticHost());
+ hookDependentsListener(dependents);
+ }
+ }
+ } finally {
+ overrideEnabled = oldOverride;
+ }
+ }
+
+ /**
+ * @see org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy#refreshSemantic()
+ * In order to connect the drop mechanism this method has be overloaded
+ */
+ @Override
+ protected void refreshSemantic() {
+ // First, process all child nodes now
+ List<IAdaptable> createdViews = refreshSemanticChildren(ChildrenKind.NODE);
+ makeViewsImmutable(createdViews);
+
+ // Then, repeat later with connections included, if appropriate
+ if (isManageConnections()) {
+ ListenableFuture<List<IAdaptable>> createdConnections = DiagramHelper.submit(getHost(), new Callable<List<IAdaptable>>() {
+ @Override
+ public List<IAdaptable> call() throws Exception {
+ return refreshSemanticChildren(ChildrenKind.CONNECTION);
+ }
+ });
+ Futures.addCallback(createdConnections, new FutureCallback<List<IAdaptable>>() {
+ @Override
+ public void onSuccess(List<IAdaptable> result) {
+ makeViewsImmutable(result);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ Activator.log.error(t);
+ }
+ });
+ }
+ }
+
+
+
+ /**
+ * this method is extracted from refreshSemanticChildren
+ * but instead of using the service view it uses the drop
+ *
+ * @return
+ */
+ protected List<IAdaptable> refreshSemanticChildren(ChildrenKind kind) {
+ // -------------- code from superClass----------------
+ // Don't try to refresh children if the semantic element
+ // cannot be resolved.
+ if (resolveSemanticElement() == null) {
+ return Collections.emptyList();
+ }
+
+ if (isInState(State.SEMIACTIVE) && createdByCanonical.isEmpty()) {
+ // No point in calculating anything because we have nothing to clean up
+ return Collections.emptyList();
+ }
+
+ // current views
+ List<View> viewChildren = getViewChildren(kind);
+ List<EObject> semanticChildren = new ArrayList<EObject>(getSemanticChildrenList(kind));
+
+ boolean changed = false;
+
+ if (!isInState(State.INACTIVE)) {
+ //
+ // delete all the remaining orphaned views
+ List<View> orphaned = cleanCanonicalSemanticChildren(viewChildren, semanticChildren);
+ if (!orphaned.isEmpty() && isInState(State.SEMIACTIVE)) {
+ // Furthermore, if we're only semiactive, then we should only delete views that we
+ // had created canonically while we were active
+ filterCanonicallyCreated(orphaned);
+ }
+ if (!orphaned.isEmpty()) {
+ // We may be asynchronously processing the deletion of a relationship that
+ // requires deletion of edges. If so, we may be only semi-active (the edge
+ // could have been created by the edit-part at the other end)
+ changed = deleteViews(orphaned);
+ }
+ }
+
+ //
+ // create a view for each remaining semantic element, if requested.
+ List<IAdaptable> createdViews = Collections.emptyList();
+ if (isInState(State.ACTIVE)) {
+ if (!semanticChildren.isEmpty()) {
+ createdViews = createViews(semanticChildren);
+ }
+ }
+
+ if (changed || !createdViews.isEmpty()) {
+ postProcessRefreshSemantic(createdViews);
+ }
+
+ return createdViews;
+ }
+
+ /**
+ * As {@link CanonicalEditPolicy#deleteViews(Iterator)}, deletes a list of views.
+ * The views will be deleted <tt>iff</tt> their semantic element has also been deleted.
+ *
+ * @param views
+ * an iterator on a list of views.
+ * @return <tt>true</tt> if the host editpart should be refreshed; either one one of the supplied
+ * views was deleted or has been reparented.
+ */
+ protected boolean deleteViews(Iterable<? extends View> views) {
+ // Copied from CanonicalEditPolicy::deleteViews because that method is final, and
+ // we need to be able to delete views even when we are only semi-active
+ if (!isEnabled() && isInState(State.INACTIVE)) {
+ return false;
+ }
+ final CompoundCommand cc = new CompoundCommand(DiagramUIMessages.DeleteCommand_Label);
+ for (View view : views) {
+ if (shouldDeleteView(view)) {
+ cc.add(getDeleteViewCommand(view));
+ }
+ }
+
+ boolean doDelete = !cc.isEmpty() && cc.canExecute();
+ if (doDelete) {
+ executeCommand(cc);
+ }
+ return doDelete;
+ }
+
+ @Override
+ protected Command getCreateViewCommand(CreateRequest request) {
+ Command result;
+
+ if (!(request instanceof CreateViewRequest)) {
+ result = super.getCreateViewCommand(request);
+ } else {
+ // Transform the request to a drop request serviced by the canonical drop policy
+ CreateViewRequest createViewRequest = (CreateViewRequest) request;
+ Iterable<? extends ViewDescriptor> descriptors = createViewRequest.getViewDescriptors();
+
+ CompoundCommand compoundCommand = new CompoundCommand();
+ for (ViewDescriptor viewDescriptor : descriptors) {
+ EObject element = (EObject) viewDescriptor.getElementAdapter().getAdapter(EObject.class);
+
+ if (element != null) {
+ List<EObject> elementToDrop = Collections.singletonList(element);
+ DropObjectsRequest dropRequest = new DropObjectsRequest();
+ dropRequest.setObjects(elementToDrop);
+ dropRequest.setLocation(createViewRequest.getLocation());
+ CanonicalDropObjectsRequest canonicalRequest = new CanonicalDropObjectsRequest(dropRequest);
+
+ Command cmd = creationTargetStrategy.getTargetEditPart(getHost(), element).getCommand(canonicalRequest);
+ if ((cmd != null) && cmd.canExecute()) {
+ compoundCommand.add(cmd);
+ }
+ }
+ }
+
+ result = compoundCommand.unwrap();
+ if (result.canExecute()) {
+ result = tagAndArrange(result);
+ }
+ }
+
+ return result;
+ }
+
+ @Override
+ protected List<View> getViewChildren() {
+ List<View> result = getViewChildren(ChildrenKind.NODE);
+
+ if (isManageConnections()) {
+ result.addAll(getViewChildren(ChildrenKind.CONNECTION));
+ }
+
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected List<View> getViewChildren(ChildrenKind kind) {
+ final IGraphicalEditPart host = host();
+ final View view = host.getNotationView();
+ final IVisualChildrenStrategy strategy = SemanticChildrenStrategyRegistry.getInstance().getVisualChildrenStrategy(host);
+
+ List<View> result;
+
+ if (strategy != null) {
+ List<? extends View> childViews;
+ switch (kind) {
+ case NODE:
+ childViews = strategy.getCanonicalChildren(host, view);
+ break;
+ case CONNECTION:
+ childViews = strategy.getCanonicalEdges(host, view);
+ break;
+ default:
+ throw new IllegalArgumentException(kind.name());
+ }
+ result = (childViews == null) ? Collections.<View> emptyList() : Lists.newArrayList(childViews);
+ } else {
+ // Default strategy
+ switch (kind) {
+ case NODE:
+ result = super.getViewChildren();
+
+ // Filter out child views that visualize the same element as my view (these
+ // should be compartments, decorations, labels)
+ final EObject semantic = getSemanticHost();
+ for (Iterator<? extends View> iter = result.iterator(); iter.hasNext();) {
+ if (iter.next().getElement() == semantic) {
+ iter.remove();
+ }
+ }
+ break;
+ case CONNECTION:
+ // Get distinct incoming and outgoing edges of top shapes and border items.
+ // Compartments of top shapes take care of their own contents
+ List<View> edges = Lists.newArrayList();
+ result = edges;
+ if (view.eIsSet(NotationPackage.Literals.VIEW__SOURCE_EDGES)) {
+ edges.addAll(view.getSourceEdges());
+ }
+ if (view.eIsSet(NotationPackage.Literals.VIEW__TARGET_EDGES)) {
+ for (Edge next : (Iterable<? extends Edge>) view.getTargetEdges()) {
+ if (next.getSource() != view) {
+ // Didn't already get a self-edge from the source edges
+ edges.add(next);
+ }
+ }
+ }
+ break;
+ default:
+ throw new IllegalArgumentException(kind.name());
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Queries whether I manage canonical connections. Edit parts such as top shapes and border items manage connections;
+ * other edit parts such as compartments manage contained views only.
+ *
+ * @return whether I manage canonical connections
+ */
+ protected boolean isManageConnections() {
+ final EditPart host = host();
+ return (host instanceof TopGraphicEditPart) || (host instanceof IBorderItemEditPart);
+ }
+
+ private Command tagAndArrange(Command creationCommand) {
+ return new PostCreationWrapperCommand<List<IAdaptable>>(creationCommand) {
+
+ @Override
+ protected List<IAdaptable> createAccumulator() {
+ return Lists.newArrayList();
+ }
+
+ @Override
+ protected void postProcessView(Object viewish, List<IAdaptable> accumulator) {
+ if (viewish instanceof IAdaptable) {
+ View view = (View) ((IAdaptable) viewish).getAdapter(View.class);
+ if (view != null) {
+ // Arrange the parent of a label, not the label
+ if (view instanceof DecorationNode) {
+ view = (View) view.eContainer();
+ viewish = new EObjectAdapter(view);
+ }
+
+ }
+ accumulator.add((IAdaptable) viewish);
+ }
+ super.postProcessView(viewish, accumulator);
+ }
+
+ @Override
+ protected void postProcessView(View view, List<IAdaptable> accumulator) {
+ createdByCanonical.add(view);
+ }
+
+ @Override
+ protected void complete(List<IAdaptable> accumulator) {
+ if (!accumulator.isEmpty()) {
+ final DeferredLayoutCommand layout = new DeferredLayoutCommand(host().getEditingDomain(), accumulator, host());
+ if (layout.canExecute()) {
+ DiagramHelper.asyncExec(getHost(), new Runnable() {
+
+ @Override
+ public void run() {
+ executeCommand(new ICommandProxy(layout));
+ }
+ });
+ }
+ }
+ }
+ };
+ }
+
+ private <C extends Collection<? extends View>> C filterCanonicallyCreated(C views) {
+ for (Iterator<? extends View> iter = views.iterator(); iter.hasNext();) {
+ if (!createdByCanonical.contains(iter.next())) {
+ iter.remove();
+ }
+ }
+
+ return views;
+ }
+
+ //
+ // Nested types
+ //
+
+ protected enum State {
+ INACTIVE,
+ SEMIACTIVE,
+ ACTIVE;
+
+ boolean validateTransition(State next) {
+ switch (this) {
+ case INACTIVE:
+ case SEMIACTIVE:
+ return next != this;
+ case ACTIVE:
+ return next == SEMIACTIVE;
+ default:
+ throw new IllegalStateException("No such state: " + this); //$NON-NLS-1$
+ }
+ }
+ }
+
+ protected enum ChildrenKind {
+ NODE, CONNECTION;
+ }
+
+ protected static abstract class PostCreationWrapperCommand<A> extends GEFCommandWrapper {
+ public PostCreationWrapperCommand(Command command) {
+ super(command);
+ }
+
+ @Override
+ public void execute() {
+ super.execute();
+
+ A accumulator = createAccumulator();
+ postProcessViews(getCommand(), accumulator);
+ complete(accumulator);
+ }
+
+ protected A createAccumulator() {
+ return null;
+ }
+
+ protected void complete(A accumulator) {
+ // Pass
+ }
+
+ private void postProcessViews(Command command, A accumulator) {
+ for (Iterator<ICommand> iter = CommandTreeIterator.iterateGMF(command); iter.hasNext();) {
+ CommandResult result = iter.next().getCommandResult();
+ if ((result != null) && ((result.getStatus() == null) || result.getStatus().isOK())) {
+ Object returnValue = result.getReturnValue();
+ if (returnValue instanceof Iterable<?>) {
+ for (Object next : (Iterable<?>) returnValue) {
+ postProcessView(next, accumulator);
+ }
+ } else if (returnValue != null) {
+ postProcessView(returnValue, accumulator);
+ }
+ }
+ }
+ }
+
+ protected void postProcessView(Object viewish, A accumulator) {
+ Optional<View> view = AdapterUtils.adapt(viewish, View.class);
+ if (view.isPresent()) {
+ postProcessView(view.get(), accumulator);
+ }
+ }
+
+ protected void postProcessView(View view, A accumulator) {
+ // Pass
+ }
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/Activator.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/Activator.java
new file mode 100644
index 00000000000..1be3b2c8644
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/Activator.java
@@ -0,0 +1,66 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.internal;
+
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.infra.gmfdiag.canonical"; //$NON-NLS-1$
+
+ // The shared instance
+ private static Activator plugin;
+
+ /** Logging helper */
+ public static LogHelper log;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+
+ plugin = this;
+
+ // register the login helper
+ log = new LogHelper(this);
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ log = null;
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/provider/PapyrusCanonicalEditPolicyProvider.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/provider/PapyrusCanonicalEditPolicyProvider.java
new file mode 100644
index 00000000000..895cd804954
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/internal/provider/PapyrusCanonicalEditPolicyProvider.java
@@ -0,0 +1,76 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.internal.provider;
+
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.common.core.service.AbstractProvider;
+import org.eclipse.gmf.runtime.common.core.service.IOperation;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.IBorderedShapeEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ITextAwareEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPoliciesOperation;
+import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.editpolicy.PapyrusCanonicalEditPolicy;
+import org.eclipse.papyrus.infra.gmfdiag.common.utils.ServiceUtilsForEditPart;
+
+/**
+ * this is an editpolicy provider in charge to install a canonical edit policy on papyrus editpart
+ */
+public class PapyrusCanonicalEditPolicyProvider extends AbstractProvider implements IEditPolicyProvider {
+
+ @Override
+ public void createEditPolicies(EditPart editPart) {
+ if (supportsCanonical(editPart)) {
+ if (editPart instanceof DiagramEditPart || editPart instanceof CompartmentEditPart || editPart instanceof IBorderedShapeEditPart) {
+ editPart.installEditPolicy(org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles.CANONICAL_ROLE, new PapyrusCanonicalEditPolicy());
+ }
+ }
+ }
+
+ protected boolean supportsCanonical(EditPart editPart) {
+ boolean result = false;
+
+ if (!(editPart instanceof ITextAwareEditPart)) {
+ result = (editPart instanceof DiagramEditPart)
+ || (editPart instanceof CompartmentEditPart)
+ || (editPart instanceof IBorderedShapeEditPart);
+ }
+
+ return result;
+ }
+
+ @Override
+ public boolean provides(IOperation operation) {
+ CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation) operation;
+
+ EditPart gep = epOperation.getEditPart();
+ // test if the edipart is a papyrus editpart
+ try {
+ if (ServiceUtilsForEditPart.getInstance().getServiceRegistry(gep) == null) {
+ return false;
+ }
+ } catch (org.osgi.framework.ServiceException ex) {
+ return false;
+ } catch (ServiceException e) {
+ return false;
+ }
+
+ // we are sure that this is a papyrus editpart
+ return supportsCanonical(gep);
+ }
+
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/BasicSemanticChildrenStrategy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/BasicSemanticChildrenStrategy.java
new file mode 100644
index 00000000000..28f48594476
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/BasicSemanticChildrenStrategy.java
@@ -0,0 +1,82 @@
+/*****************************************************************************
+ * Copyright (c) 2015 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * CEA LIST - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.util.ECollections;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.util.EContentsEList;
+import org.eclipse.gmf.runtime.notation.View;
+
+import com.google.common.collect.Iterables;
+
+/**
+ * A default implementation of the semantic children strategy that is parameterized
+ * by features providing children and
+ */
+public class BasicSemanticChildrenStrategy implements ISemanticChildrenStrategy {
+
+ private EReference[] childReferences;
+ private EReference[] connectionReferences;
+ private EReference[] dependentReferences;
+
+ public BasicSemanticChildrenStrategy(EReference[] childReferences, EReference[] connectionReferences, EReference[] dependentReferences) {
+ super();
+
+ this.childReferences = (childReferences == null) || (childReferences.length == 0) ? null
+ : Arrays.copyOf(childReferences, childReferences.length);
+ this.connectionReferences = (connectionReferences == null) || (connectionReferences.length == 0) ? null
+ : Arrays.copyOf(connectionReferences, connectionReferences.length);
+ this.dependentReferences = (dependentReferences == null) || (dependentReferences.length == 0) ? null
+ : Arrays.copyOf(dependentReferences, dependentReferences.length);
+ }
+
+ public BasicSemanticChildrenStrategy(Iterable<? extends EReference> childReferences, Iterable<? extends EReference> connectionReferences, Iterable<? extends EReference> dependentReferences) {
+ super();
+
+ this.childReferences = (childReferences == null) || Iterables.isEmpty(childReferences) ? null
+ : Iterables.toArray(childReferences, EReference.class);
+ this.connectionReferences = (connectionReferences == null) || Iterables.isEmpty(connectionReferences) ? null
+ : Iterables.toArray(connectionReferences, EReference.class);
+ this.dependentReferences = (dependentReferences == null) || Iterables.isEmpty(dependentReferences) ? null
+ : Iterables.toArray(dependentReferences, EReference.class);
+ }
+
+ @Override
+ public List<? extends EObject> getCanonicalSemanticChildren(EObject semanticFromEditPart, View viewFromEditPart) {
+ return (childReferences == null)
+ ? ECollections.<EObject> emptyEList()
+ : new EContentsEList<EObject>(semanticFromEditPart, childReferences);
+ }
+
+ @Override
+ public List<? extends EObject> getCanonicalSemanticConnections(EObject semanticFromEditPart, View viewFromEditPart) {
+ return (connectionReferences == null)
+ ? ECollections.<EObject> emptyEList()
+ : new EContentsEList<EObject>(semanticFromEditPart, connectionReferences);
+ }
+
+ @Override
+ public Collection<? extends EObject> getCanonicalDependents(EObject semanticFromEditPart) {
+ return (dependentReferences == null)
+ ? ECollections.<EObject> emptyEList()
+ : new EContentsEList<EObject>(semanticFromEditPart, dependentReferences);
+ }
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/CreationTargetStrategyRegistration.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/CreationTargetStrategyRegistration.java
new file mode 100644
index 00000000000..0688a69c684
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/CreationTargetStrategyRegistration.java
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+
+
+/**
+ * The registration of a creation target strategy.
+ */
+class CreationTargetStrategyRegistration extends Registration<ICreationTargetStrategy, CreationTargetStrategyRegistration> {
+
+ CreationTargetStrategyRegistration(IConfigurationElement config) throws CoreException {
+ super(config, ICreationTargetStrategy.class);
+ }
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/DefaultSemanticChildrenStrategyRegistration.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/DefaultSemanticChildrenStrategyRegistration.java
new file mode 100644
index 00000000000..dc2e31e3d73
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/DefaultSemanticChildrenStrategyRegistration.java
@@ -0,0 +1,29 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+
+
+/**
+ * The registration of a default semantic children strategy.
+ */
+class DefaultSemanticChildrenStrategyRegistration extends Registration<ISemanticChildrenStrategy, DefaultSemanticChildrenStrategyRegistration> {
+
+ DefaultSemanticChildrenStrategyRegistration(IConfigurationElement config) throws CoreException {
+ super(config, ISemanticChildrenStrategy.class);
+ }
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/EditPartBasedRegistration.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/EditPartBasedRegistration.java
new file mode 100644
index 00000000000..50123913ff6
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/EditPartBasedRegistration.java
@@ -0,0 +1,78 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.gef.EditPart;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.internal.Activator;
+import org.osgi.framework.Bundle;
+
+import com.google.common.base.Strings;
+
+/**
+ * Abstraction of an {@link EditPart}-based registration on the extension point.
+ */
+abstract class EditPartBasedRegistration<T, R extends EditPartBasedRegistration<? extends T, R>> extends Registration<T, R> {
+
+ private static final String EDITPART = "editPart"; //$NON-NLS-1$
+
+ private final String editPartClassName;
+
+ private Class<?> editPartType;
+
+ private IStatus editPartTypeFailure;
+
+ public EditPartBasedRegistration(IConfigurationElement config, Class<T> extensionType) throws CoreException {
+ super(config, extensionType);
+
+ this.editPartClassName = Strings.emptyToNull(config.getAttribute(EDITPART));
+ }
+
+ private Class<?> getEditPartType() {
+ if ((editPartType == null) && (editPartTypeFailure == null) && (editPartClassName != null)) {
+ IConfigurationElement config = getConfigurationElement();
+ Bundle bundle = Platform.getBundle(config.getContributor().getName());
+ if ((bundle != null) && (bundle.getState() == Bundle.ACTIVE)) {
+ try {
+ editPartType = bundle.loadClass(editPartClassName).asSubclass(EditPart.class);
+ } catch (Exception e) {
+ editPartType = Void.class; // Forget matching anything, ever
+ Activator.log.error("Failed to load edit-part type " + editPartClassName, e); //$NON-NLS-1$
+ }
+ }
+ }
+
+ return editPartType;
+ }
+
+ boolean matchesEditPartType(Class<?> editPartType) {
+ boolean result = (editPartClassName == null);
+
+ if (!result) {
+ // The declaring bundle may not be loaded, in which case we don't want its strategy
+ Class<?> myEditPartType = getEditPartType();
+ result = (myEditPartType != null) && myEditPartType.isAssignableFrom(editPartType);
+ }
+
+ return result;
+ }
+
+ @Override
+ public boolean isApplicableTo(EditPart editPart) {
+ return matchesEditPartType(editPart.getClass()) && super.isApplicableTo(editPart);
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ICreationTargetStrategy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ICreationTargetStrategy.java
new file mode 100644
index 00000000000..9a663619aa1
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ICreationTargetStrategy.java
@@ -0,0 +1,84 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
+
+/**
+ * A pluggable strategy for determining which edit part should be requested to create
+ * canonical views on behalf of a requesting edit part.
+ */
+public interface ICreationTargetStrategy {
+ /**
+ * A creation-target strategy that always returns the requesting host edit-part as the creation target.
+ */
+ ICreationTargetStrategy IDENTITY = new ICreationTargetStrategy() {
+
+ @Override
+ public EditPart getTargetEditPart(EditPart host, EObject element) {
+ return host;
+ }
+ };
+
+ /**
+ * Obtains the edit part to which the view creation request should be sent
+ * for the given model {@code element}, which was provided as a {@linkplain ISemanticChildrenStrategy semantic child} of the specified {@code host} edit-part.
+ *
+ * @param host
+ * the host edit-part of the {@link CanonicalEditPolicy} requesting creation of a view of an {@code element}
+ * @param element
+ * the element for which a view is required
+ *
+ * @return the target edit part, which may just be the {@code host} as is, or {@code null} if this strategy does not
+ * provide a target
+ */
+ EditPart getTargetEditPart(EditPart host, EObject element);
+
+ //
+ // Nested types
+ //
+
+ /**
+ * A factory for null-safe creation-target strategies.
+ */
+ class Safe implements ICreationTargetStrategy {
+ private final ICreationTargetStrategy delegate;
+
+ private Safe(ICreationTargetStrategy delegate) {
+ super();
+
+ this.delegate = delegate;
+ }
+
+ /**
+ * Obtains a creation-target strategy that is ensured never to return a {@code null} target edit part.
+ *
+ * @param strategy
+ * a strategy to wrap. May be {@code null} if no actual strategy is applicable
+ *
+ * @return a strategy, perhaps a wrapper or perhaps the original {@code strategy}, that is guaranteed always to provide a creation target
+ */
+ public static ICreationTargetStrategy safe(ICreationTargetStrategy strategy) {
+ return (strategy == null) ? IDENTITY : (strategy instanceof Safe) ? strategy : new Safe(strategy);
+ }
+
+ @Override
+ public EditPart getTargetEditPart(EditPart host, EObject element) {
+ EditPart specific = delegate.getTargetEditPart(host, element);
+ return (specific == null) ? host : specific;
+ }
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ISemanticChildrenStrategy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ISemanticChildrenStrategy.java
new file mode 100644
index 00000000000..7e48536ee74
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/ISemanticChildrenStrategy.java
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
+import org.eclipse.gmf.runtime.notation.View;
+
+/**
+ * A pluggable strategy for determination of semantic "children" of an element, those being
+ * either contained elements, relationships of the element, or other related elements.
+ */
+public interface ISemanticChildrenStrategy {
+ /**
+ * Queries the semantic elements that should be presented visually as children of the specified element.
+ *
+ * @param semanticFromEditPart
+ * the semantic model element represented by a canonical edit-part in the diagram
+ * @param viewFromEditPart
+ * the visual (notational) representation of the semantic element, to provide diagram context if required (such as
+ * for determining the appropriate part-with-port match of a connector end)
+ * @return list of semantic elements, or {@code null} to indicate that the strategy does not support the given element.
+ * <b>Note</b> that the result is specifically a {@link List} type because the GMF {@link CanonicalEditPolicy} expects lists of children, not other kinds of collections
+ */
+ public List<? extends EObject> getCanonicalSemanticChildren(EObject semanticFromEditPart, View viewFromEditPart);
+
+ /**
+ * Queries the semantic elements that should be presented visually as connections attached to the specified element.
+ *
+ * @param semanticFromEditPart
+ * the semantic model element represented by a canonical edit-part in the diagram
+ * @param viewFromEditPart
+ * the visual (notational) representation of the semantic element, to provide diagram context if required (such as
+ * for determining the appropriate part-with-port match of a connector end)
+ * @return list of semantic connection elements, or {@code null} to indicate that the strategy does not support the given element.
+ * <b>Note</b> that the result is specifically a {@link List} type because the GMF {@link CanonicalEditPolicy} expects lists of children, not other kinds of collections
+ */
+ public List<? extends EObject> getCanonicalSemanticConnections(EObject semanticFromEditPart, View viewFromEditPart);
+
+ /**
+ * Retrieves objects, if any, related to the element behind a canonical edit-part
+ * on which the that element depends for canonical refresh updates.
+ *
+ * @return dependents of the semantic element, or {@code null} to indicate that it does not support dependents
+ */
+ public Collection<? extends EObject> getCanonicalDependents(EObject semanticFromEditPart);
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/IVisualChildrenStrategy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/IVisualChildrenStrategy.java
new file mode 100644
index 00000000000..a23a05a67ce
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/IVisualChildrenStrategy.java
@@ -0,0 +1,54 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import java.util.List;
+
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CanonicalEditPolicy;
+import org.eclipse.gmf.runtime.notation.View;
+
+/**
+ * A pluggable strategy for determination of visual "children" of an element, those being
+ * either child nodes or connected edges.
+ */
+public interface IVisualChildrenStrategy {
+ /**
+ * Queries the visual elements that are children a view that should be synchronized
+ * with the represented element's semantic "children".
+ *
+ * @param editPart
+ * the edit-part being synchronized
+ * @param view
+ * the edit-part's notation view
+ * @return a list of child views, or {@code null} to indicate that the strategy does not support the given edit-part.
+ * <b>Note</b> that the result is specifically a {@link List} type because the GMF {@link CanonicalEditPolicy} expects lists of views, not other kinds of collections
+ */
+ public List<? extends View> getCanonicalChildren(EditPart editPart, View view);
+
+ /**
+ * Queries the visual elements that are edges connected to a view that should be synchronized
+ * with the represented element's semantic "children" or "connections". The returned views may
+ * alternatively or also include child views of connected edges, in the case that those children
+ * (e.g., labels) are the significant representative views.
+ *
+ * @param editPart
+ * the edit-part being synchronized
+ * @param view
+ * the edit-part's notation view
+ * @return a list of connected edges (or some child views of connected edges), or {@code null} to indicate that the strategy does not support the given edit-part.
+ * <b>Note</b> that the result is specifically a {@link List} type because the GMF {@link CanonicalEditPolicy} expects lists of views, not other kinds of collections
+ */
+ public List<? extends View> getCanonicalEdges(EditPart editPart, View view);
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/Registration.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/Registration.java
new file mode 100644
index 00000000000..8c257ebb672
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/Registration.java
@@ -0,0 +1,165 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.core.expressions.EvaluationContext;
+import org.eclipse.core.expressions.EvaluationResult;
+import org.eclipse.core.expressions.Expression;
+import org.eclipse.core.expressions.ExpressionConverter;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.internal.Activator;
+import org.eclipse.papyrus.infra.gmfdiag.common.helper.NotationHelper;
+
+import com.google.common.base.Strings;
+
+/**
+ * Abstract implementation of an optionally filtered lazy-loading extension-point registration with priority ordering.
+ * Extensions compare in priority order (least priority is last).
+ */
+abstract class Registration<T, R extends Registration<? extends T, R>> implements Comparable<R> {
+
+ private static final String ENABLEMENT = "enablement"; //$NON-NLS-1$
+
+ private static final String CLASS = "class"; //$NON-NLS-1$
+
+ private static final String PRIORITY = "priority"; //$NON-NLS-1$
+
+ private final IConfigurationElement config;
+
+ private final Class<? extends T> extensionType;
+
+ private final int priority;
+
+ private final Expression filterExpression;
+
+ private T extension;
+
+ private IStatus extensionFailure;
+
+ protected Registration(IConfigurationElement config, Class<? extends T> extensionType) throws CoreException {
+ super();
+
+ this.config = config;
+ this.extensionType = extensionType;
+ this.filterExpression = parseExpression(config, ENABLEMENT);
+ this.priority = parseInt(config, PRIORITY);
+ }
+
+ /**
+ * Obtains the extension's priority relative to others that match the same filter criteria (if any).
+ */
+ public int getPriority() {
+ return priority;
+ }
+
+ @Override
+ public int compareTo(R o) {
+ return this.getPriority() - o.getPriority();
+ }
+
+ public boolean isApplicableTo(EditPart editPart) {
+ boolean result = !hasFilterExpression(); // In case there's no filter
+
+ if (!result) {
+ try {
+ IEvaluationContext context = new EvaluationContext(null, editPart);
+ View view = NotationHelper.findView(editPart);
+ if (view != null) {
+ EObject element = view.getElement();
+ if (element != null) {
+ context.addVariable("editPart", editPart); //$NON-NLS-1$
+ context.addVariable("view", view); //$NON-NLS-1$
+ context.addVariable("element", element); //$NON-NLS-1$
+ result = EvaluationResult.TRUE.equals(filterExpression.evaluate(context));
+ }
+ }
+ } catch (CoreException e) {
+ Activator.getDefault().getLog().log(e.getStatus());
+ }
+ }
+
+ return result;
+ }
+
+ protected boolean hasFilterExpression() {
+ return filterExpression != null;
+ }
+
+ protected final IConfigurationElement getConfigurationElement() {
+ return config;
+ }
+
+ /**
+ * Obtains the extension instance, creating it if necessary.
+ *
+ * @return the extension instance
+ */
+ public T getExtension() {
+ T result = extension;
+
+ if ((result == null) && (extensionFailure == null)) {
+ synchronized (this) {
+ try {
+ Object instance = config.createExecutableExtension(CLASS);
+ if (!extensionType.isInstance(instance)) {
+ throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Extension is not an instance of " + extensionType.getClass().getName())); //$NON-NLS-1$
+ }
+ if (extension == null) {
+ extension = extensionType.cast(instance);
+ }
+ } catch (CoreException e) {
+ extensionFailure = e.getStatus();
+ Activator.log.error("Failed to instantiate extension.", e); //$NON-NLS-1$
+ }
+
+ result = extension;
+ }
+ }
+
+ return result;
+ }
+
+ static int parseInt(IConfigurationElement config, String attribute) {
+ int result = 0;
+
+ String attrValue = config.getAttribute(attribute);
+ if (!Strings.isNullOrEmpty(attrValue)) {
+ try {
+ result = Integer.parseInt(attrValue);
+ } catch (Exception e) {
+ Activator.log.warn(String.format("Not an integer value in '%s' attribute of '%s' element from plug-in '%s': %s", //$NON-NLS-1$
+ attribute, config.getName(), config.getContributor().getName(), attrValue));
+ }
+ }
+
+ return result;
+ }
+
+ static Expression parseExpression(IConfigurationElement config, String elementName) throws CoreException {
+ Expression result = null;
+
+ IConfigurationElement[] enablement = config.getChildren(elementName);
+ if (enablement.length > 0) {
+ result = ExpressionConverter.getDefault().perform(enablement[0]);
+ }
+
+ return result;
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistration.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistration.java
new file mode 100644
index 00000000000..67e9af2b8b0
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistration.java
@@ -0,0 +1,27 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+
+/**
+ * Registration of an {@link ISemanticChildrenStrategy} on the extension point.
+ */
+class SemanticChildrenStrategyRegistration extends EditPartBasedRegistration<ISemanticChildrenStrategy, SemanticChildrenStrategyRegistration> {
+
+ public SemanticChildrenStrategyRegistration(IConfigurationElement config) throws CoreException {
+ super(config, ISemanticChildrenStrategy.class);
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistry.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistry.java
new file mode 100644
index 00000000000..d694c066b5b
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/SemanticChildrenStrategyRegistry.java
@@ -0,0 +1,177 @@
+/*****************************************************************************
+ * Copyright (c) 2014, 2015 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 433206
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.gef.EditPart;
+import org.eclipse.papyrus.infra.gmfdiag.canonical.internal.Activator;
+
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Ordering;
+
+/**
+ * This the registry of to get the class that can give info about childreen of an editpart. this is a singleton.
+ */
+public class SemanticChildrenStrategyRegistry {
+
+ private final List<SemanticChildrenStrategyRegistration> strategies;
+ private final Multimap<Class<?>, SemanticChildrenStrategyRegistration> strategiesByEditPart = ArrayListMultimap.create();
+ private final List<DefaultSemanticChildrenStrategyRegistration> defaultStrategies;
+ private final List<VisualChildrenStrategyRegistration> visualChildrenStrategies;
+ private final Multimap<Class<?>, VisualChildrenStrategyRegistration> visualChildrenStrategiesByEditPart = ArrayListMultimap.create();
+ private final List<CreationTargetStrategyRegistration> creationTargetStrategies;
+
+ private static SemanticChildrenStrategyRegistry INSTANCE = new SemanticChildrenStrategyRegistry();
+
+ public static SemanticChildrenStrategyRegistry getInstance() {
+ return INSTANCE;
+ }
+
+ private SemanticChildrenStrategyRegistry() {
+ super();
+
+ List<SemanticChildrenStrategyRegistration> strategies = Lists.newArrayList();
+ List<DefaultSemanticChildrenStrategyRegistration> defaultStrategies = Lists.newArrayListWithExpectedSize(1);
+ List<CreationTargetStrategyRegistration> creationTargetStrategies = Lists.newArrayList();
+ List<VisualChildrenStrategyRegistration> visualChildrenStrategies = Lists.newArrayList();
+
+ // Reading data from plugins
+ IConfigurationElement[] configElements = Platform.getExtensionRegistry().getConfigurationElementsFor(Activator.PLUGIN_ID + ".strategies"); //$NON-NLS-1$
+ for (int i = 0; i < configElements.length; i++) {
+ IConfigurationElement config = configElements[i];
+
+ try {
+ switch (config.getName()) {
+ case "semanticChildrenStrategy": //$NON-NLS-1$
+ strategies.add(new SemanticChildrenStrategyRegistration(config));
+ break;
+ case "defaultSemanticChildrenStrategy": //$NON-NLS-1$
+ defaultStrategies.add(new DefaultSemanticChildrenStrategyRegistration(config));
+ break;
+ case "creationTargetStrategy": //$NON-NLS-1$
+ creationTargetStrategies.add(new CreationTargetStrategyRegistration(config));
+ break;
+ case "visualChildrenStrategy": //$NON-NLS-1$
+ visualChildrenStrategies.add(new VisualChildrenStrategyRegistration(config));
+ break;
+ default:
+ Activator.log.warn(String.format("Unrecognized configuration element <%s> from plug-in %s", config.getName(), config.getContributor().getName())); //$NON-NLS-1$
+ break;
+ }
+ } catch (Exception e) {
+ Activator.log.error("Error loading extension from plug-in " + config.getContributor().getName(), e); //$NON-NLS-1$
+ }
+ }
+
+ // Sort from highest to lowest priority
+ this.strategies = Ordering.natural().reverse().immutableSortedCopy(strategies);
+ this.defaultStrategies = Ordering.natural().reverse().immutableSortedCopy(defaultStrategies);
+ this.creationTargetStrategies = Ordering.natural().reverse().immutableSortedCopy(creationTargetStrategies);
+ this.visualChildrenStrategies = Ordering.natural().reverse().immutableSortedCopy(visualChildrenStrategies);
+ }
+
+ /**
+ * Queries the best semantic children strategy matching an {@code editPart}.
+ *
+ * @param editPart
+ * an edit part in a diagram
+ *
+ * @return the {@link ISemanticChildrenStrategy} or {@code null} if no applicable strategy is registered
+ */
+ public ISemanticChildrenStrategy getSemanticChildrenStrategy(EditPart editPart) {
+ ISemanticChildrenStrategy result = getStrategy(editPart, strategiesByEditPart, strategies);
+
+ if (result == null) {
+ // Look for a default.
+ for (DefaultSemanticChildrenStrategyRegistration next : defaultStrategies) {
+ if (next.isApplicableTo(editPart) && (next.getExtension() != null)) {
+ result = next.getExtension();
+ break;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ private static <T, R extends EditPartBasedRegistration<T, R>> T getStrategy(EditPart editPart, Multimap<Class<?>, R> byEditPart, List<R> registrations) {
+ Class<?> key = editPart.getClass();
+ R reg = null;
+
+ if (!byEditPart.containsKey(key)) {
+ for (R next : registrations) {
+ if (next.matchesEditPartType(key)) {
+ // Add all of these
+ byEditPart.put(key, next);
+
+ // But only take the first matching
+ if ((reg == null) && next.isApplicableTo(editPart) && (next.getExtension() != null)) {
+ reg = next;
+ }
+ }
+ }
+ } else {
+ for (R next : byEditPart.get(key)) {
+ if (next.isApplicableTo(editPart) && (next.getExtension() != null)) {
+ reg = next;
+ break;
+ }
+ }
+ }
+
+ return (reg == null) ? null : reg.getExtension();
+ }
+
+ private static <T, R extends Registration<T, R>> T getStrategy(EditPart editPart, List<R> registrations) {
+ R reg = null;
+
+ for (R next : registrations) {
+ if (next.isApplicableTo(editPart)) {
+ reg = next;
+ break;
+ }
+ }
+
+ return (reg == null) ? null : reg.getExtension();
+ }
+
+ /**
+ * Queries the best creation target strategy matching an {@code editPart}.
+ *
+ * @param editPart
+ * an edit part in a diagram
+ *
+ * @return the {@link ICreationTargetStrategy} or {@code null} if no applicable strategy is registered
+ */
+ public ICreationTargetStrategy getCreationTargetStrategy(EditPart editPart) {
+ return getStrategy(editPart, creationTargetStrategies);
+ }
+
+ /**
+ * Queries the best visual children strategy matching an {@code editPart}.
+ *
+ * @param editPart
+ * an edit part in a diagram
+ *
+ * @return the {@link IVisualChildrenStrategy} or {@code null} if no applicable strategy is registered
+ */
+ public IVisualChildrenStrategy getVisualChildrenStrategy(EditPart editPart) {
+ return getStrategy(editPart, visualChildrenStrategiesByEditPart, visualChildrenStrategies);
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/VisualChildrenStrategyRegistration.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/VisualChildrenStrategyRegistration.java
new file mode 100644
index 00000000000..bd162a6e989
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.canonical/src/org/eclipse/papyrus/infra/gmfdiag/canonical/strategy/VisualChildrenStrategyRegistration.java
@@ -0,0 +1,26 @@
+/*****************************************************************************
+ * Copyright (c) 2015 Christian W. Damus and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.gmfdiag.canonical.strategy;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+
+/**
+ * Registration of an {@link IVisualChildrenStrategy} on the extension point.
+ */
+class VisualChildrenStrategyRegistration extends EditPartBasedRegistration<IVisualChildrenStrategy, VisualChildrenStrategyRegistration> {
+
+ public VisualChildrenStrategyRegistration(IConfigurationElement config) throws CoreException {
+ super(config, IVisualChildrenStrategy.class);
+ }
+}

Back to the top