Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas FAUVERGUE2019-09-16 13:40:02 +0000
committerPatrick Tessier2019-09-18 07:52:57 +0000
commit8fd2a0edd4ab3a6b26bf4c87cecf0ef6cf9e9e7e (patch)
tree480bf7da8e5d3f9eb040757875e23843e4cb2f0b
parente8bc9ba951a87fe317d09fcc25517aa2c4115fe6 (diff)
downloadorg.eclipse.papyrus-8fd2a0edd4ab3a6b26bf4c87cecf0ef6cf9e9e7e.tar.gz
org.eclipse.papyrus-8fd2a0edd4ab3a6b26bf4c87cecf0ef6cf9e9e7e.tar.xz
org.eclipse.papyrus-8fd2a0edd4ab3a6b26bf4c87cecf0ef6cf9e9e7e.zip
Bug 550902: [Doc] The papyrus embedded documentation must be the same
than the documentation on the wiki - Add the neon works documentation: - References view images - Navigation user and dev doc - Control Mode (Fragments and Interface) Change-Id: I428513c3446555711eb0c55c8d0c2fc61c19d2fb Signed-off-by: Nicolas FAUVERGUE <nicolas.fauvergue@cea.fr>
-rw-r--r--features/papyrus-main-features/org.eclipse.papyrus.doc.feature/feature.xml7
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.controlmode.doc/resource/controlMode.mediawiki179
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.controlmode.doc/resource/images/Papyrus-subunits.pngbin0 -> 271023 bytes
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.project58
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.core.resources.prefs2
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.jdt.core.prefs286
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.jdt.ui.prefs68
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.m2e.core.prefs4
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/META-INF/MANIFEST.MF10
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/about.html28
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/build.properties6
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/plugin.xml24
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/pom.xml51
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_hyperlink_menu.pngbin0 -> 21853 bytes
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_hyperlink_preferences.pngbin0 -> 58888 bytes
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_nav_alt_menu.pngbin0 -> 8485 bytes
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_nav_popup_menu.pngbin0 -> 27832 bytes
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_navigation_preferences.pngbin0 -> 55918 bytes
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-devDoc-main-toc.xml7
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-devDoc.mediawiki151
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-userDoc-main-toc.xml7
-rw-r--r--plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-userDoc.mediawiki39
-rw-r--r--plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/ReferencesView_GoToMenu.pngbin0 -> 8409 bytes
-rw-r--r--plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/ReferencesView_LinkWithEditorButton.pngbin0 -> 36470 bytes
-rw-r--r--plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/goToMenu.pngbin9010 -> 0 bytes
-rw-r--r--plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/linkWithEditorButton.pngbin14255 -> 0 bytes
-rw-r--r--plugins/doc/org.eclipse.papyrus.views.references.doc/resource/references-view.mediawiki4
-rw-r--r--plugins/doc/pom.xml1
28 files changed, 922 insertions, 10 deletions
diff --git a/features/papyrus-main-features/org.eclipse.papyrus.doc.feature/feature.xml b/features/papyrus-main-features/org.eclipse.papyrus.doc.feature/feature.xml
index ec17b1f1d1e..0959651196e 100644
--- a/features/papyrus-main-features/org.eclipse.papyrus.doc.feature/feature.xml
+++ b/features/papyrus-main-features/org.eclipse.papyrus.doc.feature/feature.xml
@@ -83,6 +83,13 @@
install-size="0"
version="0.0.0"
unpack="false"/>
+
+ <plugin
+ id="org.eclipse.papyrus.infra.services.navigation.doc"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
<plugin
id="org.eclipse.papyrus.infra.architecture.doc"
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.controlmode.doc/resource/controlMode.mediawiki b/plugins/doc/org.eclipse.papyrus.infra.services.controlmode.doc/resource/controlMode.mediawiki
index 6598fad7c1f..5dd97bc95ad 100644
--- a/plugins/doc/org.eclipse.papyrus.infra.services.controlmode.doc/resource/controlMode.mediawiki
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.controlmode.doc/resource/controlMode.mediawiki
@@ -1,13 +1,11 @@
-=Creation of submodels and reintegration=
-
In this page we will show the Papyrus capabilities to create and reintegrate submodels, also known as ''control mode''.
-==What is it?==
+= What is it? =
As a model grows large in number of elements, it is convenient to split them into different physical resources i.e. files.
Papyrus provides a feature to perform this splitting in a seamless fashion, allowing to move parts of the model to another resource. We call this ''create a submodel''.
This is specially helpful working in collaborative environments, since the Team features can be applied individually to the different resources i.e. make changes and commit them in only one part of the model.
-==Create a submodel==
+= Create a submodel =
To create a submodel:
#Right click on the element which you wish to move to a different resource (a Package in the common case)
#Select ''Create Submodel''<br/>[[Image:images/ControlAction.png]]
@@ -34,7 +32,7 @@ open the top-most independent submodel (or the root model package). Or, if that
open, just activate its editor. This ensures that the nesting package context, and especially
its profile applications, is always available to properly manage stereotypes.
-==Toggle the Independent Submodel Support==
+= Toggle the Independent Submodel Support =
Once a package has been stored in a submodel resource, the support for editing it independently
can be added and removed at any time:
@@ -51,8 +49,7 @@ openable submodel.
[[Image:images/Decorations.png|400px]]
-
-==Reintegrate a submodel into the main model==
+= Reintegrate a submodel into the main model =
To reintegrate a submodel into the main model:
#Open the parent model
@@ -62,4 +59,170 @@ To reintegrate a submodel into the main model:
The submodel is reintegrated into the main model resource.
-'''Important:''' The submodel resources will be deleted only on '''save''' action. \ No newline at end of file
+'''Important:''' The submodel resources will be deleted only on '''save''' action.
+
+= Controlled Units as Integral Fragments =
+
+This enhancement introduces a new variant of the controlled unit dubbed a 'shard' (as being a fragment of broken ceramic or glass that is a constituent of the whole on not generally handled). Thus Papyrus supports two modes of controlled unit:
+
+* sub-model units: the classic form, through the Neon release, being usually a package that is independently openable and editable because it is self-sufficient in profile applications
+* shards: the new form, that when the user opens it in an editor will instead open it in the context of the whole model (or the top-most parent unit that is a sub-model unit)
+
+== Use Cases ==
+
+=== UC1 Import Fragmented Model from RSA ===
+
+# User selects a <code>*.emx</code> resource in the workspace, activates the context menu, and selects 'Import RSA Model/Profile'.
+# The system opens the RSA import wizard.
+# The user completes the wizard.
+# The system imports the <code>*.emx</code> resource along with all of its <code>*.efx</code> fragments. These latter are imported as 'shards'.
+# The user double-clicks on the top-level unit (the one that was imported from the EMX file) to open the model.
+# The system opens the top-level unit in the Papyrus Editor.
+
+=== UC2 Open an Imported Sub-unit Resource ===
+
+# The user double-clicks on a <code>*.di</code> resource that was imported from an <code>*.efx</code> in the RSA model.
+# The system opens the top-level unit containing the root package namespace of the contents of the selected resource in the Papyrus Editor.
+
+==== UC2.1 Variant: Open an Imported Sub-unit Resource (Model Already Open) ====
+
+# The user opens an imported model as in UC1.
+# The user finds some sub-unit resource of this model in the Project Explorer and double-clicks on it to open it.
+# The user activates the editor previously opened, which is the root context of the sub-unit resource.
+
+== Design ==
+
+=== Model Cross-Reference Index ===
+
+The topology of sub-model units is implied by cross-resource containment in EMF: that is, containment references that have proxies for lazily resolved objects from other resources. As one of the benefits of the classic Papyrus sub-model unit is that it is independently openable and editable, it does not add a reference to its parent unit in an annotation as is done in RSA's fragments, because that would trigger loading of the parent unit chain by proxy resolution. Accordingly, in order to discover the connected graph of sub-unit resources at run-time, some agent is required that can provide independent off-line knowledge of it. This is naturally implemented on the <code>WorkspaceModelIndex</code> framework.
+
+A new <code>ICrossReferenceIndex</code> API in the <code>org.eclipse.papyrus.infra.emf</code> bundle provides for queries (asynchronous and synchronous, as usual) about:
+
+* incoming and outgoing cross-references of and given resource (since resources have to be scanned for all references to find the containment proxies, it makes sense to keep this non-containment information, too)
+* child sub-units and parent sub-units (the relationship is multiple in both directions). These are the containment counterparts of the incoming and outgoing cross-references
+* root units
+* whether a resource is a 'shard' style of sub-model unit or not
+
+Unlike sub-model units, shards additionally have annotations that reference the containing object in the parent resource, not unlike fragments in RSA. This is not a problem because they are not intended to be loaded independently of their parent units, anyways, but also has the benefit of enabling a tracing of the parent unit chain in cases where the full off-line index is not available:
+
+* when the Eclipse Job Manager is suspended (e.g., when starting the workbench)
+* in a non-Eclipse environment, such as command-line applications (e.g., headless Papyrus-RT code generation)
+
+<div id="on-demand-index"></div>In these contexts, the cross-reference index API actually parses resources on-the-fly looking for these annotations to trace the parent unit chain, without loading them in the EMF manner.
+
+=== Shard Resource Loading ===
+
+The point of shard resources is that they cannot be loaded without the chain of parent resources storing their containing objects, so that in the case of UML resources, packages find all of the profile applications in their nesting packages to ensure that stereotype applications are properly resolved.
+
+This loading of the parent unit chain, from the root unit(s) down, is ensured in two different ways, depending on the circumstances:
+
+* when opening a resource in the Papyrus Editor, the editor will refer to the index to find the root units to open, instead, if the requested resource is actually a 'shard'. Similarly, the <code>PapyrusMatchingStrategy</code> matches editor-inputs for shards with editor-inputs for their root units
+* when resolving proxies, the EMF <code>ResourceSet</code> will demand-load the referenced resource. If this happens to be a shard, it needs to load it from the top unit down (this is the essence of [http://eclip.se/458837 bug 458837] in which stereotype applications were lost by demand-loaded packages not knowing their profile applications). This is accomplished by a <code>ShardResourceLocator</code> installed on the resource set. This API supports non-Eclipse applications via the on-demand cross-reference index discussed above.
+
+=== Other Index Enhancements ===
+
+Because now another index is introduced (Papyrus has had an index of external profile applications since the Mars release), it is prudent to do some refactoring to ensure as much as possible that performance doesn't suffer from the added burden.
+
+==== Consolidation of Indexing Control ====
+
+Rather than have every index create background jobs for itself that react to resource changes and scan projects in the workspace, now a new <code>IndexManager</code> provides a single point of control for these processes:
+
+* one workspace resource-change listener to trigger re-indexing of projects and files recognized by each individual index
+* one pool of jobs with one indexing job per project, which invokes all indexers to process each file in turn
+
+This improves throughput of the indexing process by eliminating multiple passes over resource deltas and resource trees in the workspace projects, but it does mean that asynchronous queries on any index will only be ready when all indices complete their processing of any deltas.
+
+==== Persistence of Index Data ====
+
+Because even the simplest use case of opening a model now depends on this new workspace-wide index, it is important to initialize that index as efficiently as possible. To that end, the <code>WorkspaceModelIndex</code> framework now supports an extension of the <code>IndexHandler</code> protocol which is a <code>PersistentIndexHandler</code>. This protocol
+
+* guarantees that the index data it provides for a file is <code>Serializable</code>, so that it can be persisted when the workspace shuts down
+* provides API for loading index data saved when the workspace shut down last
+
+The new <code>CrossReferenceIndex</code> supports persistence and the older <code>DecoratorModelIndex</code> is retrofitted for persistence, also.
+
+==== Index Start-up ====
+
+As a consequence of both of the enhancements described above, consolidation of control and initialization from a persistent store, it is necessary for the <code>IndexManager</code> to discover all available index instances when it starts up. This is accomplished by a new extension point <code>org.eclipse.papyrus.infra.emf.index</code> on which <code>IWorkspaceModelIndexProvider</code>s are registered that supply unique concrete <code>WorkspaceModelIndex</code> instances. It is not required but probably advisable that all such instances be long-lived singletons.
+
+=== Manipulating Sub-unit Resources ===
+
+As far as the manipulation of sub-units is concerned, they are still created in the same way as in the Neon release. The difference is that, after a model element is stored in its sub-unit resource, it needs to be tagged as a 'shard'. This is accomplished by the <code>ShardResourceHelper</code> API. A helper is initialized with the model element that is the root of the shard sub-tree. It can add or remove the shard annotation directly or by providing <code>Command</code>s for execution on the stack and can query the current shard-ness of the sub-unit. As long as the helper is in use, it maintains <code>Adapter</code>s to track any changes to the object's containment and/or shard annotation. For this reason, it must be closed when no longer needed, to prevent memory leaks.
+
+= User Interface for New Control-Mode Features =
+
+This enhancement introduces UI for manipulation of the 'shard' style of sub-unit resource, including:
+
+* option to disallow independent opening and editing of the sub-unit
+* action to toggle between independent sub-model unit and shard
+* label decorator to mark sub-model units and shards in the Project Explorer
+
+== Use Cases ==
+
+=== UC3 Create a Sub-model Unit ===
+
+# User selects a package in the Model Explorer, activates the context menu, and selects 'Create Submodel'.
+# The system opens the 'Submodel Resource' dialog.
+# The user enters a resource URI and ensures that the 'Create an independent sub-model resource' check-box is selected, then presses OK.
+# The system creates the sub-model resource in the editor's resource set and shows the controlled unit decoration on the package in the Model Explorer.
+# The user saves the editor.
+# The Project Explorer shows the new sub-unit resource with a filled blue bent-corner paper decoration to denote that it is a sub-model unit.
+
+[[File:images/Papyrus-subunits.png|frame|none|alt=|Papyrus Sub-units]]
+
+=== UC4 Create a Shard Unit ===
+
+# User selects a package in the Model Explorer, activates the context menu, and selects 'Create Submodel'.
+# The system opens the 'Submodel Resource' dialog.
+# The user enters a resource URI and ensures that the 'Create an independent sub-model resource' check-box is '''not''' selected, then presses OK.
+# The system creates the shard resource in the editor's resource set and shows the controlled unit decoration on the package in the Model Explorer.
+# The user saves the editor.
+# The Project Explorer shows the new shard resource with a hollow blue bent-corner paper decoration to denote that it is a shard unit.
+
+==== UC4.1 Variant: Control a UML Class ====
+
+# User selects a class in the Model Explorer, activates the context menu, and selects 'Create Submodel'.
+# The system opens the 'Submodel Resource' dialog. The 'Create an independent sub-model resource' check-box is disabled, because classes cannot be edited independently (they cannot have profile applications).
+# The user enters a resource URI then presses OK.
+# The system creates the shard resource in the editor's resource set and shows the controlled unit decoration on the package in the Model Explorer.
+# The user saves the editor.
+# The Project Explorer shows the new shard resource with a hollow blue bent-corner paper decoration to denote that it is a shard unit.
+
+=== UC5 Convert a Sub-model Unit to a Shard ===
+
+# User creates a sub-model unit for a package as in UC3 and saves the editor.
+# The user selects the package, activates the context menu, and toggles the 'Independent Submodel' menu item, which is currently checked.
+# The system adds the shard annotation and removes redundant profile applications from the package.
+# The user saves the editor.
+# The Project Explorer updates the sub-unit resource's label to show the hollow blue bent-corner paper decoration denoting that it is a shard unit. paper decoration to denote that it is a shard unit.
+
+=== UC6 Convert a Shard to a Sub-model Unit ===
+
+# User creates a shard unit for a package as in UC4 and saves the editor.
+# The user selects the package, activates the context menu, and toggles the 'Independent Submodel' menu item, which is currently checked.
+# The system removes the shard annotation and adds redundant profile applications to the package so that it may be opened independently.
+# The user saves the editor.
+# The Project Explorer updates the sub-unit resource's label to show the filled blue bent-corner paper decoration denoting that it is a sub-model unit.
+
+=== UC6.1 Variant: Convert a Class Shard to a Sub-model Unit ===
+
+# User creates a shard unit for a class as in UC4.1 and saves the editor.
+# The user selects the package and activates the context menu.
+# The 'Independent Submodel' menu item is unchecked and disabled so that it may not be toggled.
+
+== Design ==
+
+=== Control-Mode Participants ===
+
+A new protocol specializing the <code>IControlModeParticipant</code> is introduced that participants may optionally implement to influence the UI workflows. The <code>IControlCommandApprover</code> interface specifies two operations:
+
+* <code>boolean canCreateSubModel(EObject)</code>: queries whether a model element that is to be made into a sub-unit can support independent opening and editing. The UML participant implements this to deny sub-model units for non-packages: they can only be created as shards. Thus, the warning dialog about limited support for non-package sub-units is no longer shown
+* <code>Diagnostic approveRequest(ControlModeRequest)</code>: gives participants an opportunity to veto a control or uncontrol request, with a message that is displayed to the user
+
+So, the former of these APIs is used by the <code>ControlModeManager</code> to determine the enablement of the check-box option for sub-models in the 'control resource' dialog and in the context menu (although, of course, in the latter case the action is enabled if a non-package element is controlled as a sub-model in order that it may be converted to a shard).
+
+The latter API is used by the UI control/uncontrol command handlers to validate a request before attempting to survey the participants for commands and execute them.
+
+= Compatibility =
+
+The 'shard' structure is compatible with the Neon and Mars releases. It adds only an annotation that those versions of the software simply ignore. The back-reference to the parent unit will usually cause the parent units (and recursively up to the roots) to be loaded, which may help to emulate the Neon.1 and later behaviour. However, because a Neon.1 shard will not have redundant profile applications (a model imported from RSA in Mars or Neon would not have them, either) then there may be problems in handling of stereotype applications and potential data loss. If these resources must be edited with Mars or Neon versions of Papyrus, then it is recommended either always to open them at the root unit explicitly or even to opt for the classic sub-model unit structure (except for non-packages, which effectively always were defective shards anyways). \ No newline at end of file
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.controlmode.doc/resource/images/Papyrus-subunits.png b/plugins/doc/org.eclipse.papyrus.infra.services.controlmode.doc/resource/images/Papyrus-subunits.png
new file mode 100644
index 00000000000..27d1637956c
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.controlmode.doc/resource/images/Papyrus-subunits.png
Binary files differ
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.project b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.project
new file mode 100644
index 00000000000..0020487ed64
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.project
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.services.navigation.doc</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>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.oomph.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>check.maven.pom</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>ignore.lower.bound.dependency.ranges</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.papyrus.releng.main.release/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.oomph.version.VersionNature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.core.resources.prefs b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000000..99f26c0203a
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.jdt.core.prefs b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..4e8c6b6e59a
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,286 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+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/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.jdt.ui.prefs b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 00000000000..3f09e0ff2ae
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.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 2.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\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/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.m2e.core.prefs b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 00000000000..f897a7f1cb2
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/META-INF/MANIFEST.MF b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..87d2bf86233
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Require-Bundle: org.eclipse.help;bundle-version="[3.7.0,4.0.0)",
+ org.eclipse.papyrus.infra.doc;bundle-version="[1.2.0,2.0.0)"
+Bundle-Vendor: Eclipse Modeling Project
+Bundle-Version: 1.0.0.qualifier
+Bundle-Name: Service Navigation Documentation
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.papyrus.infra.services.navigation.doc;singleton:=true
+Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.papyrus.infra.services.decoration.doc
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/about.html b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/about.html
new file mode 100644
index 00000000000..3e183aa78df
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/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>November 30, 2017</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 2.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="https://www.eclipse.org/legal/epl-2.0/">https://www.eclipse.org/legal/epl-2.0/</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> \ No newline at end of file
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/build.properties b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/build.properties
new file mode 100644
index 00000000000..86952d093bd
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/build.properties
@@ -0,0 +1,6 @@
+bin.includes = META-INF/,\
+ about.html,\
+ plugin.xml,\
+ target/generated-eclipse-help/**
+src.includes = about.html,\
+ resource/
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/plugin.xml b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/plugin.xml
new file mode 100644
index 00000000000..93501dd84c4
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/plugin.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.help.toc">
+ <toc
+ file="target/generated-eclipse-help/navigation-userDoc-main-toc.xml"
+ primary="false">
+ </toc>
+ <toc
+ file="target/generated-eclipse-help/navigation-userDoc-toc.xml"
+ primary="false">
+ </toc>
+ <toc
+ file="target/generated-eclipse-help/navigation-devDoc-main-toc.xml"
+ primary="false">
+ </toc>
+ <toc
+ file="target/generated-eclipse-help/navigation-devDoc-toc.xml"
+ primary="false">
+ </toc>
+ </extension>
+
+</plugin>
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/pom.xml b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/pom.xml
new file mode 100644
index 00000000000..0e6cb3ad5f8
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/pom.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.papyrus.plugins-doc</artifactId>
+ <groupId>org.eclipse.papyrus</groupId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.papyrus.infra.services.navigation.doc</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.mylyn.docs</groupId>
+ <artifactId>org.eclipse.mylyn.wikitext.maven</artifactId>
+ <configuration>
+ <sourceFolder>resource</sourceFolder>
+ <outputFolder>${project.build.directory}/generated-eclipse-help</outputFolder>
+ <copyrightNotice>${help.copyrightNotice}</copyrightNotice>
+ <title>${help.documentTitle}</title>
+ <multipleOutputFiles>false</multipleOutputFiles>
+ <navigationImages>true</navigationImages>
+ <formatOutput>true</formatOutput>
+ <htmlFilenameFormat>$1.html</htmlFilenameFormat>
+ <xmlFilenameFormat>$1-toc.xml</xmlFilenameFormat>
+ <helpPrefix>target/generated-eclipse-help</helpPrefix>
+ <stylesheetUrls>
+ <param>styles/main.css</param>
+ </stylesheetUrls>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>eclipse-help</goal>
+ </goals>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.mylyn.docs</groupId>
+ <artifactId>org.eclipse.mylyn.wikitext.mediawiki</artifactId>
+ <version>${mylyn.wikitext.version}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+ <name>Papyrus Infra Service decoration doc</name>
+</project> \ No newline at end of file
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_hyperlink_menu.png b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_hyperlink_menu.png
new file mode 100644
index 00000000000..480459b32e8
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_hyperlink_menu.png
Binary files differ
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_hyperlink_preferences.png b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_hyperlink_preferences.png
new file mode 100644
index 00000000000..5444411fbef
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_hyperlink_preferences.png
Binary files differ
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_nav_alt_menu.png b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_nav_alt_menu.png
new file mode 100644
index 00000000000..510daa94728
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_nav_alt_menu.png
Binary files differ
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_nav_popup_menu.png b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_nav_popup_menu.png
new file mode 100644
index 00000000000..a8c503733db
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_nav_popup_menu.png
Binary files differ
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_navigation_preferences.png b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_navigation_preferences.png
new file mode 100644
index 00000000000..0cb2a5aeed7
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/images/Papyrus_navigation_preferences.png
Binary files differ
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-devDoc-main-toc.xml b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-devDoc-main-toc.xml
new file mode 100644
index 00000000000..fc3cecd51ef
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-devDoc-main-toc.xml
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<toc label="Navigation Developer Documenation" link_to="../org.eclipse.papyrus.infra.doc/toc.xml#PapyrusDocDev">
+ <topic href="target/generated-eclipse-help/navigation-devDoc.html" label="Navigation Service">
+ <link toc="target/generated-eclipse-help/navigation-devDoc-toc.xml"/>
+ <anchor id="decorationService"/>
+ </topic>
+</toc>
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-devDoc.mediawiki b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-devDoc.mediawiki
new file mode 100644
index 00000000000..fd2ecede1a0
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-devDoc.mediawiki
@@ -0,0 +1,151 @@
+Sections below show how to use the API to contribute to the navigation menus and hyperlinks proposition strategies.
+
+= Navigation API =
+
+The navigation API has the following:
+* Interface org.eclipse.papyrus.infra.services.navigation.service.ExtendedNavigableElement
+** Classes that implement this interface are navigable elements, i.e. something that wraps a semantic element, that let us navigate to some other object
+** You probably shouldn't implement this directly, but the following class:
+* Class org.eclipse.papyrus.uml.navigation.navigableElement.GenericNavigableElement
+** A generic navigable element. Your own navigable element should probably extend this class, unless you know what you are doing. :)
+* Extension point org.eclipse.papyrus.infra.services.navigation.navigationContributor
+** Specify extensions that will contribute navigable elements
+* Interface org.eclipse.papyrus.infra.services.navigation.service.NavigationContributor
+** Classes that implement this interface contribute navigable elements
+** The "getNavigableElements(Object)" method returns navigable elements according to the context represented by the object passed as parameter. (You do not need to handle how to pass the object, only what to do with it)
+
+== Step-by-step Guide ==
+
+The following instructions allow you to create a new hyperlink contributor:
+* Create a plugin
+* Add the following dependencies to MANIFEST.MF:
+<source lang="java">
+org.eclipse.papyrus.infra.gmfdiag.navigation
+org.eclipse.papyrus.uml.navigation
+</source>
+* Create a navigable element:
+<source lang="java">
+public class SpecialTargetNavigableElement extends GenericNavigableElement {
+ public SpecialTargetNavigableElement(/*...*/) { // Write a constructor that will call "super(Element elt)" where "elt" is the semantic element that this navigable element wraps
+ super(/*...*/);
+ }
+
+ @Override
+ public String getLabel() {
+ return "Go to special target" + getElementLabel() + "..."; // The convention is to return a string like this
+ }
+
+ @Override
+ public String getDescription() {
+ return "Go to the special target:" + getElementLabel(); // The convention is to return a string like this
+ }
+
+ // You can also overwrite other methods of GenericNavigableElement
+}
+</source>
+* Create a navigation contributor:
+<source lang="java">
+public class SpecialTargetNavigationContributor implements NavigationContributor {
+ public List<NavigableElement> getNavigableElements(Object fromElement) {
+ List<NavigableElement> result = new LinkedList<NavigableElement>();
+
+ /* You can check if fromElement is a particular UML type for example.
+ You can then add instances of "SpecialTargetNavigableElement" to the list
+ of navigable elements that will be returned. What you wrap with
+ the navigable element is up to you. Usually we wrap an element related to
+ fromElement. */
+
+ return result;
+ }
+}
+</source>
+* In plugin.xml, add the following extension:
+<source lang="java">
+org.eclipse.papyrus.infra.services.navigation.navigationContributor
+</source>
+* Right click > New > contributor
+* Fill info
+** Id: an arbitrary string
+** Contributor: reference to the class that will contribute navigable elements. Example: "SpecialTargetNavigationContributor" created beforehand.
+** Label: how this contributor is displayed in preferences (for activation/deactivation)
+** Description: tooltip displayed when the mouse hovers over this contributor in the preferences
+* (Optional) Activate/deactivate a hyperlink contributor programmatically (example for "SpecialTargetNavigationContributor" whose id is "oep.specialTargetNavigationContributor"):
+<source lang="java">
+IPreferenceStore preferences = Activator.getDefault().getPreferenceStore();
+String key = "oep.specialTargetNavigationContributor" + ".isActive";
+preferences.setValue(key, true); // or false to deactivate
+</source>
+
+=== Real Example ===
+
+An example of a hyperlink contributor is available below. This contributor creates automatic hyperlinks for a class that has inner classes shown in its inner class diagrams.
+* /org.eclipse.papyrus.uml.navigation/src/org/eclipse/papyrus/uml/navigation/navigableElement/TargetNavigableElement.java
+* /org.eclipse.papyrus.uml.navigation/src/org/eclipse/papyrus/uml/navigation/navigableElement/RelationshipNavigationContributor.java
+* /org.eclipse.papyrus.uml.navigation/plugin.xml (line 48)
+
+= Hyperlink API =
+== API Overview ==
+
+The hyperlink API has the following:
+* Extension point org.eclipse.papyrus.infra.hyperlink.hyperlinkContributor
+** Specify extensions that will contribute hyperlinks
+* Interface org.eclipse.papyrus.infra.hyperlink.service.HyperlinkContributor
+** Classes that implement this interface may contribute hyperlinks
+** The "getHyperlink(Object)" method returns a list of hyperlinks according to the context represented by the object that is passed as parameter. (You do not need to handle how to pass the object, only what to do with it)
+
+== Step-by-step Guide ==
+
+The following instructions allow you to create a new hyperlink contributor:
+* Create a plugin
+* Add the following dependency to MANIFEST.MF:
+<source lang="java">org.eclipse.papyrus.infra.gmfdiag.hyperlink</source>
+* Create a hyperlink contributor:
+<source lang="java">
+public class MyHyperlinkContributor implements HyperlinkContributor {
+ public List<HyperLinkObject> getHyperlinks(Object fromElement) {
+ ArrayList<HyperLinkObject> hyperlinks = new ArrayList<HyperLinkObject>();
+ /* You can check if fromElement is a particular UML type for example.
+ You can use the org.eclipse.papyrus.infra.services.viewersearch.impl.ViewerSearchService
+ to search views containing a particular semantic element.
+ See Real Example section for an example on how to use the ViewerSearchService */
+ return hyperlinks;
+ }
+}
+</source>
+* In plugin.xml, add the following extension:
+<source lang="java">org.eclipse.papyrus.infra.hyperlink.hyperlinkContributor</source>
+* Right click > New > contributor
+* Fill info
+** Id: an arbitrary text
+** Contributor: reference to the class that will contribute hyperlinks. Example: "MyHyperlinkContributor" created beforehand.
+** Label: how this contributor is displayed in preferences (for activation/deactivation)
+** Description: tooltip displayed when the mouse hovers over this contributor in the preferences
+* (Optional) Activate/deactivate a hyperlink contributor programmatically (example for MyHyperlinkContributor whose id is "oep.myHyperlinkContributor"):
+<source lang="java">
+IPreferenceStore preferences = Activator.getDefault().getPreferenceStore();
+String key = "oep.myHyperlinkContributor" + ".isActive";
+preferences.setValue(key, true) // or false to deactivate
+</source>
+
+=== Real Example ===
+
+An example of a hyperlink contributor is available below. This contributor creates automatic hyperlinks for a class that has inner classes shown in its inner class diagrams.
+* /org.eclipse.papyrus.uml.diagram.clazz/custom-src/org/eclipse/papyrus/uml/diagram/clazz/custom/hyperlink/InnerClassHyperlinkContributor.java
+* /org.eclipse.papyrus.uml.diagram.clazz/plugin.xml (line 1733)
+
+= Bugzilla References =
+
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=463589 Bug 463589 - Navigation Alt Menu]
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=462005 Bug 462005 - Navigation to baseclass and subclass missing]
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=461746 Bug 461746 - The navigation service should browse all available diagrams - not only the current one]
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=407733 Bug 407733 - Papyrus shall support navigation history with back and next buttons]
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=463687 Bug 463687 - Not possible to see and click-to-navigate to opposite elements across links in Model Explorer]
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=471697 Bug 471697 - Toolbar buttons to go to next/previous diagram in active window]
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=465122 Bug 465122 - Keys to traverse opened tabs in editor]
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=465886 Bug 465886 - Double-click default action]
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=466294 Bug 466294 - Preview on mouse hover]
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=467017 Bug 467017 - Local file URI should be relative]
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=473763 Bug 473763 - Clicking on a ModelMatch should navigate to the Model Explorer rather than a View]
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=465697 Bug 465697 - AbstractNattableWidgetManager does not compare real objects in revealElement]
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=473763 Bug 473763 - Clicking on a ModelMatch should navigate to the Model Explorer rather than a View]
+* [https://bugs.eclipse.org/bugs/show_bug.cgi?id=491077 Bug 491077 - Make the current alt-navigation menu easier to access]
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-userDoc-main-toc.xml b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-userDoc-main-toc.xml
new file mode 100644
index 00000000000..e72c0fe6cee
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-userDoc-main-toc.xml
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<toc label="Navigation User Documenation" link_to="../org.eclipse.papyrus.infra.doc/toc.xml#PapyrusTasks">
+ <topic href="target/generated-eclipse-help/navigation-userDoc.html" label="Navigation">
+ <link toc="target/generated-eclipse-help/navigation-userDoc-toc.xml"/>
+ <anchor id="PapyrusNavigationUserDoc"/>
+ </topic>
+</toc>
diff --git a/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-userDoc.mediawiki b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-userDoc.mediawiki
new file mode 100644
index 00000000000..e3e87916546
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.infra.services.navigation.doc/resource/navigation-userDoc.mediawiki
@@ -0,0 +1,39 @@
+= Overview and Video =
+
+This page describes the navigation feature of Papyrus implemented in Neon. [https://youtu.be/OsOnOLu8dXk The YouTube video] guides you step-by-step in using the navigation feature. Sections below only describe succinctly the navigation feature.
+
+= Navigation Menus =
+
+By alt-hovering over an element, in a diagram or the model explorer, a menu pops up. This menu is called the alt-menu. The menu shows commands to navigate to some targets, which are related element or the hovered element itself (in another representation). When clicking on a command, corresponding to a target, we navigate to: (1) first representation of the target found in a(nother) diagram, or (2) the target in the model explorer if the first rule found nothing. The alt-menu also shows user-defined hyperlinks pointing to diagrams, local documents, or websites. The figure below shows the alt-menu:
+
+[[File:images/papyrus_nav_alt_menu.png|frame|center|alt=Papyrus Navigation Alt-Menu]]
+
+
+The goal of the alt-menu is to navigate quickly to a target, with the user having to go through too many choices. The user may also navigate by right-clicking on an element in a diagram or the model explorer. This opens up a context menu. He can then choose where to navigate to for a selected target. The figure below shows the context menu:
+
+[[File:papyrus_nav_popup_menu.png|frame|center|alt=Papyrus Navigation Context Menu]]
+
+The user may choose the available navigation targets in the preferences menu. The figure below shows some implemented targets:
+
+[[File:images/papyrus_navigation_preferences.png|frame|center|alt=Papyrus Navigation Target Preferences]]
+
+= Hyperlinks Proposition =
+
+When the user double-clicks on an element in a diagram, we navigate to its default hyperlink. If there aren't any default hyperlink(s), hyperlinks are proposed according to some pre-defined strategies. If there is only one proposed hyperlink, we navigate to it. If there are several, the user may choose one. The figure below shows the menu to choose a proposed hyperlink:
+
+[[File:images/papyrus_hyperlink_menu.png|frame|center|alt=Papyrus Proposed Hyperlinks Menu]]
+
+The user may choose the hyperlinks proposition strategies in the preferences menu. The figure below shows some implemented strategies:
+
+[[File:images/papyrus_hyperlink_preferences.png|frame|center|alt=Papyrus Hyperlink Preferences]]
+
+= Misc. UI Enhancements =
+
+Some other UI enhancements are implemented:
+
+* Integration in Eclipse history to navigate to the previous/next diagram (even in different models) in the order they were opened ([https://git.eclipse.org/r/#/c/46228/ Gerrit 46228])
+* Toolbar arrows to navigate between opened Papyrus diagram tabs ([https://git.eclipse.org/r/#/c/51264/ Gerrit 51264])
+* Key bindings (CTRL+(SHIFT+)TAB) to navigate between opened Papyrus diagram tabs ([https://git.eclipse.org/r/#/c/46192/ Gerrit 46192])
+* Diagram shortcuts show a preview of the diagram on mouse hover ([https://git.eclipse.org/r/#/c/47035/ Gerrit 47035])
+* Clicking on a search result that's a semantic element, navigates to the element in the model explorer ([https://git.eclipse.org/r/#/c/52726/ Gerrit 52726])
+* Hyperlink pointing to a document (resp. website) has the document's default icon (resp. website's favicon) (in navigation alt menu patch) \ No newline at end of file
diff --git a/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/ReferencesView_GoToMenu.png b/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/ReferencesView_GoToMenu.png
new file mode 100644
index 00000000000..17ebedf0ffc
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/ReferencesView_GoToMenu.png
Binary files differ
diff --git a/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/ReferencesView_LinkWithEditorButton.png b/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/ReferencesView_LinkWithEditorButton.png
new file mode 100644
index 00000000000..4dd27f02c3c
--- /dev/null
+++ b/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/ReferencesView_LinkWithEditorButton.png
Binary files differ
diff --git a/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/goToMenu.png b/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/goToMenu.png
deleted file mode 100644
index 2719d1acb01..00000000000
--- a/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/goToMenu.png
+++ /dev/null
Binary files differ
diff --git a/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/linkWithEditorButton.png b/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/linkWithEditorButton.png
deleted file mode 100644
index c61a5c54cb7..00000000000
--- a/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/images/linkWithEditorButton.png
+++ /dev/null
Binary files differ
diff --git a/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/references-view.mediawiki b/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/references-view.mediawiki
index ad7a505f62a..ca0f52a0adf 100644
--- a/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/references-view.mediawiki
+++ b/plugins/doc/org.eclipse.papyrus.views.references.doc/resource/references-view.mediawiki
@@ -19,10 +19,10 @@ If the view is already open, it is updated with the references found without tak
The other way to display all references of an item, is to use the button "Link with Editor" in the 'References' view.
This action displays the references of the active selection. It’s only available on the diagram selection.
-[[File:images/linkWithEditorButton.png| The "References View"]]
+[[File:images/ReferencesView_LinkWithEditorButton.png| The "References View"]]
=== Go to reference ===
To access to the element referencing the searched item, you must either double click on the element or right click and select the 'Go To' feature.
-[[File:images/goToMenu.png| The context menu "Go To"]] \ No newline at end of file
+[[File:images/ReferencesView_GoToMenu.png| The context menu "Go To"]] \ No newline at end of file
diff --git a/plugins/doc/pom.xml b/plugins/doc/pom.xml
index bf9ee423e4c..8b356773966 100644
--- a/plugins/doc/pom.xml
+++ b/plugins/doc/pom.xml
@@ -22,6 +22,7 @@
<module>org.eclipse.papyrus.infra.newchild.doc</module>
<module>org.eclipse.papyrus.infra.services.controlmode.doc</module>
<module>org.eclipse.papyrus.infra.services.decoration.doc</module>
+ <module>org.eclipse.papyrus.infra.services.navigation.doc</module>
<module>org.eclipse.papyrus.infra.architecture.doc</module>
<module>org.eclipse.papyrus.infra.types.doc</module>
<module>org.eclipse.papyrus.req.reqif.doc</module>

Back to the top