Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPauline DEVILLE2018-03-21 09:56:17 +0000
committerPatrick Tessier2018-03-21 12:45:43 +0000
commitf871cd427884fcfb51cad93cb6a871b03beea2fc (patch)
tree3781762f7319798e0057c7e466b2b6761eb78562 /plugins/toolsmiths
parentbbcb7cb78c05873b63b0c65b86727e9f47f76d63 (diff)
downloadorg.eclipse.papyrus-f871cd427884fcfb51cad93cb6a871b03beea2fc.tar.gz
org.eclipse.papyrus-f871cd427884fcfb51cad93cb6a871b03beea2fc.tar.xz
org.eclipse.papyrus-f871cd427884fcfb51cad93cb6a871b03beea2fc.zip
Bug 525483 - [Toolsmiths] Profile changes management and model migration
Change-Id: Id5b2081df69458ef48821f492929b107a1d2ef4f Signed-off-by: Pauline DEVILLE <pauline.deville@cea.fr>
Diffstat (limited to 'plugins/toolsmiths')
-rw-r--r--plugins/toolsmiths/pom.xml1
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.classpath7
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.project28
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.core.resources.prefs2
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.core.runtime.prefs2
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.jdt.core.prefs291
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.jdt.ui.prefs68
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.pde.api.tools.prefs104
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/META-INF/MANIFEST.MF19
-rwxr-xr-xplugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/about.html28
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/build.properties7
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/plugin.xml21
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/pom.xml13
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/Activator.java80
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/Messages.java63
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractApplyNewProfileDialog.java96
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractChangeMultiplicityDialog.java88
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractProfileMigrationDialog.java216
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractTabsProfileMigrationDialog.java116
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AddPropertyToStereotypeDialog.java71
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeIsAbstractFromStereotypeDialog.java117
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeIsStaticFeatureDialog.java73
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeLowerMultiplicityDialog.java62
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeUpperMultiplicityDialog.java59
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/DeleteEnumerationLiteralFromEnumerationDialog.java77
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/MovePackageDialog.java53
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/MoveProfileDialog.java51
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/MoveStereotypeDialog.java56
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/messages.properties35
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/preferences/ProfileMigrationInitializer.java54
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/preferences/ProfileMigrationPreferenceConstants.java102
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/preferences/ProfileMigrationPreferencePage.java244
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/utils/EStructuralFeatureUtil.java99
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.classpath7
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.project28
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.core.resources.prefs2
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.core.runtime.prefs2
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.jdt.core.prefs291
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.jdt.ui.prefs68
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.pde.api.tools.prefs104
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/META-INF/MANIFEST.MF27
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/ProfileMigrationTool_usecases.md20
-rwxr-xr-xplugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/about.html28
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/build.properties7
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/model.di2
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/model.notation1251
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/model.uml382
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/style.css24
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/plugin.properties4
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/plugin.xml13
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/pom.xml13
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/Activator.java87
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/Messages.java30
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/MigratorProfileApplication.java303
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/factory/IMigratorFactory.java101
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/factory/MigratorFactory.java90
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/MigratorProfileApplicationDelegate.java87
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/data/structure/StereotypeApplicationDescriptor.java116
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/data/structure/StereotypeApplicationRegistry.java175
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/factory/AtomicMigratorsFactory.java170
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/enumeration/DeleteEnumerationLiteralFromEnumerationMigrator.java215
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/enumeration/MoveEnumerationLiteralFromEnumerationMigrator.java120
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/packages/MovePackageMigrator.java237
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/profile/MoveProfileMigrator.java201
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/property/ChangeIsStaticFromPropertyMigrator.java207
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/property/ChangeLowerMultiplicityFromPropertyMigrator.java278
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/property/ChangeUpperMultiplicityFromPropertyMigrator.java278
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/stereotype/AddPropertyToStereotypeMigrator.java189
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/stereotype/ChangeIsAbstractFromStereotypeMigrator.java237
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/stereotype/MoveStereotypeMigrator.java229
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/ConflictNode.java77
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/DiffNode.java78
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/MatchNode.java107
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/MatchResourceNode.java98
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/AtomicMigratorComparator.java46
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/DifferenceTreeBuilder.java285
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/ProfileUtil.java118
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/TreeNodeUtils.java409
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/messages.properties2
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/ICompositeMigrator.java37
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/IMigrator.java25
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/AbstractMigrator.java45
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IAddMigrator.java37
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IAtomicMigrator.java39
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IChangeMigrator.java45
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IDeleteMigrator.java37
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IMoveMigrator.java45
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/enumeration/IDeleteEnumerationLiteralFromEnumeration.java44
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/packages/IMovePackageMigrator.java52
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/profile/IMoveProfileMigrator.java40
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/property/IChangeIsStaticFromPropertyMigrator.java50
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/property/IChangeLowerMultiplicityFromPropertyMigrator.java52
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/property/IChangeUpperMultiplicityFromPropertyMigrator.java53
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/stereotype/IAddPropertyToStereotypeMigrator.java53
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/stereotype/IChangeIsAbstractFromStereotypeMigrator.java46
-rw-r--r--plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/stereotype/IMoveStereotypeMigrator.java42
-rw-r--r--plugins/toolsmiths/profilemigration/pom.xml20
97 files changed, 10008 insertions, 0 deletions
diff --git a/plugins/toolsmiths/pom.xml b/plugins/toolsmiths/pom.xml
index cabf7941672..4ab0154f8bd 100644
--- a/plugins/toolsmiths/pom.xml
+++ b/plugins/toolsmiths/pom.xml
@@ -20,6 +20,7 @@
<module>org.eclipse.papyrus.toolsmiths</module>
<module>org.eclipse.papyrus.toolsmiths.palette</module>
<module>org.eclipse.papyrus.toolsmiths.expressions</module>
+ <module>profilemigration</module>
<module>../infra/gmfdiag/paletteconfiguration/org.eclipse.papyrus.infra.gmfdiag.paletteconfiguration.editor</module>
<module>../uml/properties/org.eclipse.papyrus.uml.properties.generation</module>
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.classpath b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.classpath
new file mode 100644
index 00000000000..eca7bdba8f0
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.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.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.project b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.project
new file mode 100644
index 00000000000..aa41a314a26
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.toolsmiths.profilemigration.ui</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/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.core.resources.prefs b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000000..896a9a53a53
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8 \ No newline at end of file
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.core.runtime.prefs b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 00000000000..5a0ad22d2a7
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..b3aa6d60f94
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.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.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
+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/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 00000000000..954281dbc31
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.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/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.pde.api.tools.prefs b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 00000000000..b2260f87129
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,104 @@
+ANNOTATION_ELEMENT_TYPE_ADDED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+API_USE_SCAN_FIELD_SEVERITY=Error
+API_USE_SCAN_METHOD_SEVERITY=Error
+API_USE_SCAN_TYPE_SEVERITY=Error
+CLASS_ELEMENT_TYPE_ADDED_FIELD=Warning
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Warning
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Warning
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_DEFAULT_METHOD=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Ignore
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_ANNOTATION=Ignore
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+MISSING_EE_DESCRIPTIONS=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Warning
+automatically_removed_unused_problem_filters=Enabled
+changed_execution_env=Warning
+eclipse.preferences.version=1
+incompatible_api_component_version=Warning
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+incompatible_api_component_version_report_major_without_breaking_change=Error
+incompatible_api_component_version_report_minor_without_api_change=Error
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/META-INF/MANIFEST.MF b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..44182cba8c7
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.toolsmiths.profilemigration.ui;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.ui.ide;bundle-version="[3.13.0,4.0.0)",
+ org.eclipse.uml2.uml;bundle-version="[5.3.0,6.0.0)",
+ org.eclipse.papyrus.uml.properties;bundle-version="[3.0.0, 4.0.0)",
+ org.eclipse.papyrus.infra.properties.ui;bundle-version="[3.0.0, 4.0.0)",
+ org.eclipse.papyrus.uml.tools;bundle-version="[4.0.0,5.0.0)"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Activator: org.eclipse.papyrus.toolsmiths.profilemigration.ui.Activator
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.papyrus.toolsmiths.profilemigration.ui,
+ org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs,
+ org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/about.html b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/about.html
new file mode 100755
index 00000000000..598b3684879
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/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>May 12, 2008</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> \ No newline at end of file
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/build.properties b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/build.properties
new file mode 100644
index 00000000000..ac08f6316e6
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+ META-INF/,\
+ .,\
+ about.html
+src.includes = about.html
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/plugin.xml b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/plugin.xml
new file mode 100644
index 00000000000..e9f358e2eb5
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/plugin.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+ <extension
+ point="org.eclipse.ui.preferencePages">
+ <page
+ category="org.eclipse.papyrus.uml.tools.profileApplicationDelegate"
+ class="org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferencePage"
+ id="com.cea.profile.migration.tool.ui.ProfileMigrationToolPreferencePage"
+ name="Profile Migration Tool">
+ </page>
+ </extension>
+ <extension
+ point="org.eclipse.core.runtime.preferences">
+ <initializer
+ class="org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationInitializer">
+ </initializer>
+ </extension>
+
+</plugin>
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/pom.xml b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/pom.xml
new file mode 100644
index 00000000000..7cd452931d5
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrus</groupId>
+ <artifactId>org.eclipse.papyrus.toolsmiths.profile-migration</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.papyrus.toolsmiths.profilemigration.ui</artifactId>
+ <version>0.7.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/Activator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/Activator.java
new file mode 100644
index 00000000000..3ded343206d
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/Activator.java
@@ -0,0 +1,80 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+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.toolsmiths.profilemigration.ui"; //$NON-NLS-1$
+
+ /**
+ * The shared instance
+ */
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /**
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /**
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+ /**
+ * Returns an image descriptor for the image file at the given
+ * plug-in relative path
+ *
+ * @param path
+ * the path
+ * @return the image descriptor
+ */
+ public static ImageDescriptor getImageDescriptor(String path) {
+ return imageDescriptorFromPlugin(PLUGIN_ID, path);
+ }
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/Messages.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/Messages.java
new file mode 100644
index 00000000000..b0b497de4c2
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/Messages.java
@@ -0,0 +1,63 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+ private static final String BUNDLE_NAME = "org.eclipse.papyrus.toolsmiths.profilemigration.ui.messages"; //$NON-NLS-1$
+ public static String AbstractProfileMigrationDialog_description;
+ public static String AbstractProfileMigrationDialog_DoNotShowItAgain;
+ public static String AbstractProfileMigrationDialog_MigrateAction;
+ public static String AddPropertyToStereotypeDialog_Description;
+ public static String AddPropertyToStereotypeDialog_Title;
+ public static String ChangeIsAbstractFromStereotypeDialog_Description;
+ public static String ChangeIsAbstractFromStereotypeDialog_Title;
+ public static String ChangeIsStaticFeatureDialog_Description;
+ public static String ChangeIsStaticFeatureDialog_Title;
+ public static String ChangeLowerMultiplicityDialog_Description;
+ public static String ChangeLowerMultiplicityDialog_Title;
+ public static String ChangeUpperMultiplicityDialog_Description;
+ public static String ChangeUpperMultiplicityDialog_Title;
+ public static String DeleteEnumerationLiteralFromEnumerationDialog_Description;
+ public static String DeleteEnumerationLiteralFromEnumerationDialog_Title;
+ public static String MovePackageDialog_description;
+ public static String MovePackageDialog_title;
+ public static String MoveProfileDialog_description;
+ public static String MoveProfileDialog_title;
+ public static String MoveStereotypeDialog_content;
+ public static String MoveStereotypeDialog_description;
+ public static String MoveStereotypeDialog_No;
+ public static String MoveStereotypeDialog_title;
+ public static String MoveStereotypeDialog_Yes;
+ public static String ProfileMigrationPreferenceConstants_AddPropertyToStereotype;
+ public static String ProfileMigrationPreferenceConstants_ChangeIsStaticFeatureOfProperty;
+ public static String ProfileMigrationPreferenceConstants_ChangeLowerMultiplicityOfProperty;
+ public static String ProfileMigrationPreferenceConstants_ChangeUpperMultiplicityOfProperty;
+ public static String ProfileMigrationPreferenceConstants_DeleteEnumLiteralFromEnumeration;
+ public static String ProfileMigrationPreferenceConstants_PackageMove;
+ public static String ProfileMigrationPreferenceConstants_ProfileMove;
+ public static String ProfileMigrationPreferenceConstants_StereotypeMove;
+ public static String ProfileMigrationPreferenceConstants_SuperStereotypeBecomingAbstract;
+ public static String ProfileMigrationPreferencePage_FileInCached;
+ public static String ProfileMigrationPreferencePage_ShowDialogs;
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ private Messages() {
+ }
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractApplyNewProfileDialog.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractApplyNewProfileDialog.java
new file mode 100644
index 00000000000..f96623b15fa
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractApplyNewProfileDialog.java
@@ -0,0 +1,96 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Messages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.uml2.uml.Profile;
+
+/**
+ * Abstract dialog to ask the user if he want to reapply a profile
+ */
+public abstract class AbstractApplyNewProfileDialog extends AbstractProfileMigrationDialog {
+
+ private Button radioYes;
+
+ private Button radioNo;
+
+ private boolean reapply = false;
+
+ /**
+ * The new profile to apply
+ */
+ protected Profile newProfile;
+
+ /**
+ * Constructor.
+ *
+ * @param shell
+ * the active shell
+ * @param title
+ * the title of the dialog
+ * @param prefConst
+ * the preference constant (show or not the dialog)
+ * @param newProfile
+ * the new profile to apply
+ */
+ public AbstractApplyNewProfileDialog(Shell shell, String title, String prefConst, Profile newProfile) {
+ super(shell, title, prefConst);
+ this.newProfile = newProfile;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.AbstractProfileMigrationDialog#getMigrationActionSectionContent(org.eclipse.swt.widgets.Composite, org.eclipse.ui.forms.widgets.FormToolkit)
+ *
+ * @param body
+ * @param toolkit
+ */
+ @Override
+ protected void getMigrationActionSectionContent(Composite body, FormToolkit toolkit) {
+ toolkit.createLabel(body, NLS.bind(Messages.MoveStereotypeDialog_content, newProfile.getName()));
+ radioYes = new Button(body, SWT.RADIO);
+ radioYes.setText(Messages.MoveStereotypeDialog_Yes);
+ radioYes.setSelection(true);
+ radioNo = new Button(body, SWT.RADIO);
+ radioNo.setText(Messages.MoveStereotypeDialog_No);
+ }
+
+ /**
+ * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+ */
+ @Override
+ protected void okPressed() {
+ if (radioYes.getSelection()) {
+ reapply = true;
+ } else {
+ reapply = false;
+ }
+ super.okPressed();
+ }
+
+ /**
+ * @return the reapply
+ */
+ public boolean isReapply() {
+ return reapply;
+ }
+
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractChangeMultiplicityDialog.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractChangeMultiplicityDialog.java
new file mode 100644
index 00000000000..d541bf68336
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractChangeMultiplicityDialog.java
@@ -0,0 +1,88 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.utils.EStructuralFeatureUtil;
+import org.eclipse.papyrus.uml.properties.widgets.EStructuralFeatureEditor;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * Abstract dialog to ask the user to add or remove value to slots to match with a new multiplicity
+ */
+public abstract class AbstractChangeMultiplicityDialog extends AbstractTabsProfileMigrationDialog {
+
+ /**
+ * the property whose multiplicity change
+ */
+ protected Property property;
+
+ /**
+ * the old value of the modified multiplicity
+ */
+ protected int oldValue;
+
+ /**
+ * the new value of the modified multiplicity
+ */
+ protected int newValue;
+
+ /**
+ * Constructor.
+ *
+ * @param shell
+ * the active shell
+ * @param title
+ * the title of the dialog
+ * @param prefConst
+ * the preference constant (show or not the dialog)
+ * @param property
+ * the property whose multiplicity change
+ * @param oldValue
+ * the old value of the modified multiplicity
+ * @param newValue
+ * the new value of the modified multiplicity
+ * @param mapElementToStereotype
+ * the map of element with every stereotype application of stereotypes concerning by the modification
+ */
+ public AbstractChangeMultiplicityDialog(Shell shell, String title, String prefConst, Property property, int oldValue, int newValue, Map<Element, List<Stereotype>> mapElementToStereotype) {
+ super(shell, title, prefConst, mapElementToStereotype);
+ this.property = property;
+ this.oldValue = oldValue;
+ this.newValue = newValue;
+ this.mapElementToStereotype = mapElementToStereotype;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.AbstractTabsProfileMigrationDialog#getMigrationActionTabContent(org.eclipse.swt.widgets.Composite, org.eclipse.uml2.uml.Element, org.eclipse.uml2.uml.Stereotype)
+ *
+ * @param body
+ * @param element
+ * @param stereotype
+ */
+ @Override
+ protected void getMigrationActionTabContent(Composite body, Element element, Stereotype stereotype) {
+ EStructuralFeatureEditor editor = new EStructuralFeatureEditor(body, SWT.NONE);
+ EStructuralFeatureUtil.setValueToEditor(editor, element, property, stereotype);
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractProfileMigrationDialog.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractProfileMigrationDialog.java
new file mode 100644
index 00000000000..63541b280b4
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractProfileMigrationDialog.java
@@ -0,0 +1,216 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Messages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.forms.FormDialog;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.widgets.ExpandableComposite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+
+/**
+ *
+ * This abstract class is used to create dialog for asking action to the model designer
+ *
+ * --------------------------------------------
+ * Title
+ * --------------------------------------------
+ * Description Section (text)
+ * --------------------------------------------
+ * Extra section (define by sub classes)
+ * --------------------------------------------
+ * ButtonBar (Cancel | OK)
+ * --------------------------------------------
+ */
+abstract public class AbstractProfileMigrationDialog extends FormDialog {
+
+ private String title;
+
+ private String prefConst;
+
+ private Button checkBox;
+
+ /**
+ * Constructor
+ *
+ * @param shell
+ * the active shell
+ * @param title
+ * the title of the dialog
+ * @param description
+ * the description of the problem
+ * @param prefConst
+ * the preference constant for the "do not show the dialog again" checkbox
+ */
+ public AbstractProfileMigrationDialog(Shell shell, String title, String prefConst) {
+ super(shell);
+ this.title = title;
+ this.prefConst = prefConst;
+ }
+
+ /**
+ * @see org.eclipse.ui.forms.FormDialog#createFormContent(org.eclipse.ui.forms.IManagedForm)
+ */
+ @Override
+ protected void createFormContent(IManagedForm mform) {
+ mform.getForm().setText(title);
+ ScrolledForm scrolledForm = mform.getForm();
+ FormToolkit toolkit = mform.getToolkit();
+ Composite parent = scrolledForm.getBody();
+ parent.setLayout(new GridLayout());
+ createDescriptionSections(scrolledForm.getBody(), toolkit);
+ createMigrationActionSections(scrolledForm.getBody(), toolkit);
+ dontShowItAgainCheckbox(scrolledForm.getBody(), toolkit);
+ hookListeners();
+ }
+
+ /**
+ * Create the description section
+ *
+ * @param body
+ * the section's parent widget
+ * @param toolkit
+ * the form toolkit
+ */
+ protected void createDescriptionSections(Composite body, FormToolkit toolkit) {
+ String lSectionTitle = getDecriptionSectionTitle();
+ Section lSection = toolkit.createSection(body, ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR);
+ lSection.setLayoutData(new GridData(GridData.FILL_VERTICAL));
+ if (lSectionTitle != null) {
+ lSection.setText(lSectionTitle);
+ }
+ ScrolledForm lInsideScrolledForm = toolkit.createScrolledForm(lSection);
+ lInsideScrolledForm.setExpandHorizontal(true);
+ lInsideScrolledForm.setExpandVertical(true);
+ Composite lBody = lInsideScrolledForm.getBody();
+ GridLayout lLayout = new GridLayout();
+ lLayout.numColumns = 1;
+ lBody.setLayout(lLayout);
+ if (getDecription() != null) {
+ toolkit.createLabel(lBody, getDecription(), SWT.WRAP);
+ }
+ lSection.setClient(lInsideScrolledForm);
+ }
+
+ /**
+ * Get the description section title
+ *
+ * @return the description section title
+ */
+ protected String getDecriptionSectionTitle() {
+ return Messages.AbstractProfileMigrationDialog_description;
+ }
+
+ /**
+ * Get the description
+ *
+ * @return the description
+ */
+ abstract protected String getDecription();
+
+ /**
+ * Create the migration action section
+ *
+ * @param body
+ * the section's parent widget
+ * @param toolkit
+ * the form toolkit
+ */
+ protected void createMigrationActionSections(Composite body, FormToolkit toolkit) {
+ String lSectionTitle = getMigrationActionSectionTitle();
+ Section lSection = toolkit.createSection(body, ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR);
+ lSection.setLayoutData(new GridData(GridData.FILL_BOTH));
+ if (lSectionTitle != null) {
+ lSection.setText(lSectionTitle);
+ }
+ ScrolledForm lInsideScrolledForm = toolkit.createScrolledForm(lSection);
+ lInsideScrolledForm.setExpandHorizontal(true);
+ lInsideScrolledForm.setExpandVertical(true);
+ Composite lBody = lInsideScrolledForm.getBody();
+ FillLayout lLayout = new FillLayout();
+ lLayout.type = SWT.HORIZONTAL;
+ lBody.setLayout(lLayout);
+ getMigrationActionSectionContent(lBody, toolkit);
+ lInsideScrolledForm.reflow(true);
+ lSection.setClient(lInsideScrolledForm);
+ }
+
+ /**
+ * Get the migration action section title
+ *
+ * @return the migration action section title
+ */
+ protected String getMigrationActionSectionTitle() {
+ return Messages.AbstractProfileMigrationDialog_MigrateAction;
+ }
+
+ /**
+ * Create the content of the migration action section
+ *
+ * @param body
+ * the section's parent widget
+ * @param toolkit
+ * the form toolkit
+ */
+ abstract protected void getMigrationActionSectionContent(Composite body, FormToolkit toolkit);
+
+ /**
+ * Create a checkbox for not displaying the popup again
+ *
+ * @param body
+ * @param toolkit
+ * @return the checkbox
+ */
+ protected Control dontShowItAgainCheckbox(Composite body, FormToolkit toolkit) {
+ checkBox = toolkit.createButton(body, Messages.AbstractProfileMigrationDialog_DoNotShowItAgain, SWT.CHECK | SWT.LEFT);
+ return checkBox;
+ }
+
+ /**
+ * Add listeners to widgets
+ */
+ private void hookListeners() {
+ SelectionListener selectCreateListener = new SelectionAdapter() {
+
+ /**
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (e.getSource() instanceof Button) {
+ boolean doNotShow = ((Button) e.getSource()).getSelection();
+ final IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
+ prefStore.putValue(prefConst, Boolean.toString(!doNotShow));
+ }
+ }
+ };
+ checkBox.addSelectionListener(selectCreateListener);
+ }
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractTabsProfileMigrationDialog.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractTabsProfileMigrationDialog.java
new file mode 100644
index 00000000000..c45c2335012
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AbstractTabsProfileMigrationDialog.java
@@ -0,0 +1,116 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.papyrus.uml.tools.providers.UMLLabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * Abstract dialog with the main structure for a dialog using tabs to display multiple stereotype application
+ *
+ * ---------------------
+ * tabs for each element owning a stereotype application concerning by the migration
+ * ---------------------
+ * tabs for each stereotype applied is the element concerning by the migration (if there is more than one)
+ * ---------------------
+ */
+public abstract class AbstractTabsProfileMigrationDialog extends AbstractProfileMigrationDialog {
+
+ /**
+ * The map of element with every stereotype application of stereotypes concerning by the modification
+ */
+ protected Map<Element, List<Stereotype>> mapElementToStereotype;
+
+ /**
+ * Constructor.
+ *
+ * @param shell
+ * the shell
+ * @param title
+ * the title of the dialog
+ * @param prefConst
+ * the preference constant which correspond to this dialog display
+ * @param mapElementToStereotype
+ * the map of element with every stereotype application of stereotypes concerning by the modification
+ */
+ public AbstractTabsProfileMigrationDialog(Shell shell, String title, String prefConst, Map<Element, List<Stereotype>> mapElementToStereotype) {
+ super(shell, title, prefConst);
+ this.mapElementToStereotype = mapElementToStereotype;
+ }
+
+ @Override
+ protected void getMigrationActionSectionContent(Composite body, FormToolkit toolkit) {
+ TabFolder tabFolder = new TabFolder(body, SWT.NONE);
+ UMLLabelProvider labelProvider = new UMLLabelProvider();
+ for (Element element : mapElementToStereotype.keySet()) {
+ TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+ tabItem.setText(labelProvider.getText(element));
+ tabItem.setControl(getTabElementControl(element, tabFolder));
+ }
+ }
+
+ private Control getTabElementControl(Element element, TabFolder tabFolder) {
+ Composite composite = new Composite(tabFolder, SWT.NONE);
+ composite.setLayout(new FillLayout(SWT.HORIZONTAL));
+
+ // StructuralFeatureEditor initialization
+ if (!mapElementToStereotype.isEmpty()) {
+ List<Stereotype> stereotypes = mapElementToStereotype.get(element);
+ if (stereotypes.size() == 1) {
+ getMigrationActionTabContent(composite, element, stereotypes.get(0));
+ } else if (stereotypes.size() > 1) {
+ TabFolder tabFolder2 = new TabFolder(composite, SWT.NONE);
+ UMLLabelProvider labelProvider = new UMLLabelProvider();
+ for (Stereotype stereotype : stereotypes) {
+ TabItem tabItem = new TabItem(tabFolder2, SWT.NONE);
+ tabItem.setText(labelProvider.getText(stereotype));
+ tabItem.setControl(getTabControlStereotype(element, stereotype, tabFolder2));
+ }
+ }
+ }
+ return composite;
+ }
+
+ private Control getTabControlStereotype(Element element, Stereotype stereotype, TabFolder tabFolder2) {
+ Composite composite = new Composite(tabFolder2, SWT.NONE);
+ composite.setLayout(new FillLayout(SWT.HORIZONTAL));
+ getMigrationActionTabContent(composite, element, stereotype);
+ return composite;
+ }
+
+ /**
+ * Create the content for each tab
+ *
+ * @param body
+ * the body
+ * @param element
+ * the element owning the stereotype application
+ * @param stereotype
+ * the stereotype applied
+ */
+ protected abstract void getMigrationActionTabContent(Composite body, Element element, Stereotype stereotype);
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AddPropertyToStereotypeDialog.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AddPropertyToStereotypeDialog.java
new file mode 100644
index 00000000000..21bd57c7d3f
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/AddPropertyToStereotypeDialog.java
@@ -0,0 +1,71 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Messages;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.utils.EStructuralFeatureUtil;
+import org.eclipse.papyrus.uml.properties.widgets.EStructuralFeatureEditor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * Dialog to ask the user to add value to slot corresponding to newly add property
+ */
+public class AddPropertyToStereotypeDialog extends AbstractTabsProfileMigrationDialog {
+
+ private static final String DIALOG_TITLE = Messages.AddPropertyToStereotypeDialog_Title;
+
+ private Stereotype stereotype;
+
+ private Property property;
+
+ /**
+ * Constructor.
+ *
+ * @param shell
+ * the active shell
+ * @param stereotype
+ * the stereotype owning the new property
+ * @param property
+ * the newly added property
+ * @param mapElementToStereotype
+ * the map of element with every stereotype application of stereotypes owning the new property (and sub stereotypes)
+ */
+ public AddPropertyToStereotypeDialog(Shell shell, Stereotype stereotype, Property property, Map<Element, List<Stereotype>> mapElementToStereotype) {
+ super(shell, DIALOG_TITLE, ProfileMigrationPreferenceConstants.ADD_PROPERTY_TO_STEREOTYPE, mapElementToStereotype);
+ this.stereotype = stereotype;
+ this.property = property;
+ }
+
+ @Override
+ protected String getDecription() {
+ return NLS.bind(Messages.AddPropertyToStereotypeDialog_Description,
+ new Object[] { property.getName(), stereotype.getName(), property.getLower(), property.getUpper() });
+ }
+
+ @Override
+ protected void getMigrationActionTabContent(Composite body, Element element, Stereotype stereotype) {
+ EStructuralFeatureEditor editor = new EStructuralFeatureEditor(body, 0);
+ EStructuralFeatureUtil.setValueToEditor(editor, element, property, stereotype);
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeIsAbstractFromStereotypeDialog.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeIsAbstractFromStereotypeDialog.java
new file mode 100644
index 00000000000..9d75f44a495
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeIsAbstractFromStereotypeDialog.java
@@ -0,0 +1,117 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Messages;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.papyrus.uml.tools.providers.UMLLabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * Dialog to ask the user which sub stereotype he want to apply instead of the newly abstract stereotype
+ */
+public class ChangeIsAbstractFromStereotypeDialog extends AbstractTabsProfileMigrationDialog {
+
+ private Stereotype abstractStereotype;
+
+ private List<Stereotype> subStereotypes;
+
+ private Map<Element, List<Stereotype>> result = new HashMap<>();
+
+ private Map<Element, TableViewer> tableViewer = new HashMap<>();;
+
+ /**
+ * Constructor
+ *
+ * @param shell
+ * the active shell
+ * @param abstractStereotype
+ * the stereotype becoming abstract
+ * @param subStereotype
+ * the list of stereotype generalizing the abstractStereotype
+ * @param mapElementsToStereotpyes
+ * the map of element with every stereotype application of the stereotypes which has become abstract (and sub stereotypes)
+ */
+ public ChangeIsAbstractFromStereotypeDialog(Shell shell, Stereotype abstractStereotype, List<Stereotype> subStereotype, Map<Element, List<Stereotype>> mapElementsToStereotpyes) {
+ super(shell, Messages.ChangeIsAbstractFromStereotypeDialog_Title, ProfileMigrationPreferenceConstants.SUPER_STEREOTYPE_BECOMING_ABSTRACT, mapElementsToStereotpyes);
+ this.abstractStereotype = abstractStereotype;
+ this.subStereotypes = subStereotype;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.AbstractProfileMigrationDialog#getDecription()
+ */
+ @Override
+ protected String getDecription() {
+ return NLS.bind(Messages.ChangeIsAbstractFromStereotypeDialog_Description, abstractStereotype.getName());
+ }
+
+ @Override
+ protected void getMigrationActionTabContent(Composite body, Element element, Stereotype stereotype) {
+ TableViewer tv = new TableViewer(body, SWT.CHECK);
+ tv.setContentProvider(new IStructuredContentProvider() {
+ /**
+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ *
+ * @param inputElement
+ * @return the array of sub stereotype
+ */
+ @Override
+ public Object[] getElements(Object inputElement) {
+ @SuppressWarnings("unchecked")
+ List<Stereotype> v = (List<Stereotype>) inputElement;
+ return v.toArray();
+ }
+ });
+ tv.setLabelProvider(new UMLLabelProvider());
+ tv.setInput(subStereotypes);
+ tableViewer.put(element, tv);
+ }
+
+ @Override
+ protected void okPressed() {
+ for (Entry<Element, TableViewer> entry : tableViewer.entrySet()) {
+ TableItem items[] = entry.getValue().getTable().getItems();
+ List<Stereotype> checkedStereotypes = new ArrayList<>();
+ for (TableItem item : items) {
+ if (item.getChecked()) {
+ checkedStereotypes.add((Stereotype) item.getData());
+ }
+ }
+ result.put(entry.getKey(), checkedStereotypes);
+ }
+ super.okPressed();
+ }
+
+ /**
+ * @return The map linking the element to the list of stereotypes which should be applied on it
+ */
+ public Map<Element, List<Stereotype>> getResult() {
+ return result;
+ }
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeIsStaticFeatureDialog.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeIsStaticFeatureDialog.java
new file mode 100644
index 00000000000..b7c645bbff4
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeIsStaticFeatureDialog.java
@@ -0,0 +1,73 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Messages;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.utils.EStructuralFeatureUtil;
+import org.eclipse.papyrus.uml.properties.widgets.EStructuralFeatureEditor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * Dialog to ask the user to select the static value (common to every slot corresponding to the property)
+ */
+public class ChangeIsStaticFeatureDialog extends AbstractProfileMigrationDialog {
+
+ private static final String DIALOG_TITLE = Messages.ChangeIsStaticFeatureDialog_Title;
+
+ private Stereotype stereotype;
+
+ private Property property;
+
+ private Element element;
+
+ private EStructuralFeatureEditor editor;
+
+ /**
+ * Constructor.
+ *
+ * @param shell
+ * the active shell
+ * @param stereotype
+ * the owner of the property
+ * @param property
+ * the modified property
+ * @param element
+ * one element owning the stereotype
+ */
+ public ChangeIsStaticFeatureDialog(Shell shell, Stereotype stereotype, Property property, Element element) {
+ super(shell, DIALOG_TITLE, ProfileMigrationPreferenceConstants.CHANGE_IS_STATIC_FEATURE_PROPERTY);
+ this.stereotype = stereotype;
+ this.property = property;
+ this.element = element;
+ }
+
+ @Override
+ protected String getDecription() {
+ return NLS.bind(Messages.ChangeIsStaticFeatureDialog_Description, property.getName(), stereotype.getName());
+ }
+
+ @Override
+ protected void getMigrationActionSectionContent(Composite body, FormToolkit toolkit) {
+ editor = new EStructuralFeatureEditor(body, 0);
+ EStructuralFeatureUtil.setValueToEditor(editor, element, property, stereotype);
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeLowerMultiplicityDialog.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeLowerMultiplicityDialog.java
new file mode 100644
index 00000000000..aaf934432c9
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeLowerMultiplicityDialog.java
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Messages;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.NamedElement;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * Dialog to ask the user to modify the number of values to match with the new multiplicity
+ */
+public class ChangeLowerMultiplicityDialog extends AbstractChangeMultiplicityDialog {
+
+ /**
+ * The title of the dialog
+ */
+ private static final String DIALOG_TITLE = Messages.ChangeLowerMultiplicityDialog_Title;
+
+ /**
+ * Constructor.
+ *
+ * @param shell
+ * the active shell
+ * @param property
+ * the property whose multiplicity change
+ * @param oldValue
+ * the old value of the modified multiplicity
+ * @param newValue
+ * the new value of the modified multiplicity
+ * @param mapElementToStereotype
+ * the map of element with every stereotype application of stereotypes owning the modified property (and sub stereotypes)
+ */
+ public ChangeLowerMultiplicityDialog(Shell shell, Property property, int oldValue, int newValue, Map<Element, List<Stereotype>> mapElementToStereotype) {
+ super(shell, DIALOG_TITLE, ProfileMigrationPreferenceConstants.CHANGE_LOWER_MULTIPLICITY_PROPERTY, property, oldValue, newValue, mapElementToStereotype);
+ }
+
+ @Override
+ protected String getDecription() {
+ return NLS.bind(Messages.ChangeLowerMultiplicityDialog_Description, new Object[] { property.getName(), ((NamedElement) property.getOwner()).getName(), oldValue == -1 ? "*" : oldValue, newValue == -1 ? "*" : newValue }); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeUpperMultiplicityDialog.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeUpperMultiplicityDialog.java
new file mode 100644
index 00000000000..eca6e45d97f
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/ChangeUpperMultiplicityDialog.java
@@ -0,0 +1,59 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Messages;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.NamedElement;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * Dialog to ask the user to modify the number of values to match with the new multiplicity
+ */
+public class ChangeUpperMultiplicityDialog extends AbstractChangeMultiplicityDialog {
+
+ private static final String DIALOG_TITLE = Messages.ChangeUpperMultiplicityDialog_Title;
+
+ /**
+ * Constructor.
+ *
+ * @param shell
+ * the active shell
+ * @param property
+ * the property whose multiplicity change
+ * @param oldValue
+ * the old value of the modified multiplicity
+ * @param newValue
+ * the new value of the modified multiplicity
+ * @param mapElementToStereotype
+ * the map of element with every stereotype application of stereotypes owning the modified property (and sub stereotypes)
+ */
+ public ChangeUpperMultiplicityDialog(Shell shell, Property property, int oldValue, int newValue, Map<Element, List<Stereotype>> mapElementToStereotype) {
+ super(shell, DIALOG_TITLE, ProfileMigrationPreferenceConstants.CHANGE_UPPER_MULTIPLICITY_PROPERTY, property, oldValue, newValue, mapElementToStereotype);
+ }
+
+ @Override
+ protected String getDecription() {
+ return NLS.bind(Messages.ChangeUpperMultiplicityDialog_Description, new Object[] { property.getName(), ((NamedElement) property.getOwner()).getName(), oldValue == -1 ? "*" : oldValue, newValue == -1 ? "*" : newValue }); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/DeleteEnumerationLiteralFromEnumerationDialog.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/DeleteEnumerationLiteralFromEnumerationDialog.java
new file mode 100644
index 00000000000..01e55d2aa63
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/DeleteEnumerationLiteralFromEnumerationDialog.java
@@ -0,0 +1,77 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Messages;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.utils.EStructuralFeatureUtil;
+import org.eclipse.papyrus.uml.properties.widgets.EStructuralFeatureEditor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Enumeration;
+import org.eclipse.uml2.uml.EnumerationLiteral;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * Dialog to ask the user if he wants to modify values which was the deleted EnumerationLiteral
+ */
+public class DeleteEnumerationLiteralFromEnumerationDialog extends AbstractTabsProfileMigrationDialog {
+
+ private static final String DIALOG_TITLE = Messages.DeleteEnumerationLiteralFromEnumerationDialog_Title;
+
+ private Enumeration enumeration;
+
+ private EnumerationLiteral enumerationLiteral;
+
+ /**
+ * Constructor.
+ *
+ * @param shell
+ * the active shell
+ * @param enumeration
+ * the Enumeration owning the deleted EnumerationLiteral
+ * @param enumerationLiteral
+ * the deleted EnumerationLiteral
+ * @param mapElementToStereotype
+ * the map of element with every stereotype application of stereotypes owning a property type by the Enumeration (and sub stereotypes)
+ */
+ public DeleteEnumerationLiteralFromEnumerationDialog(Shell shell, Enumeration enumeration, EnumerationLiteral enumerationLiteral, Map<Element, List<Stereotype>> mapElementToStereotype) {
+ super(shell, DIALOG_TITLE, ProfileMigrationPreferenceConstants.DELETE_ENUM_LITERAL_FROM_ENUMERATION, mapElementToStereotype);
+ this.enumeration = enumeration;
+ this.enumerationLiteral = enumerationLiteral;
+ }
+
+ @Override
+ protected String getDecription() {
+ return NLS.bind(Messages.DeleteEnumerationLiteralFromEnumerationDialog_Description, enumerationLiteral.getName(), enumeration.getName());
+ }
+
+ @Override
+ protected void getMigrationActionTabContent(Composite body, Element element, Stereotype stereotype) {
+ for (Property property : stereotype.getAllAttributes()) {
+ if (property.getType() == enumeration) {
+ EStructuralFeatureEditor editor = new EStructuralFeatureEditor(body, 0);
+ EStructuralFeatureUtil.setValueToEditor(editor, element, property, stereotype);
+ }
+ }
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/MovePackageDialog.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/MovePackageDialog.java
new file mode 100644
index 00000000000..18c38f8dfca
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/MovePackageDialog.java
@@ -0,0 +1,53 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Messages;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.uml2.uml.Profile;
+
+/**
+ * Dialog to ask to user if he want to apply a profile or not
+ */
+public class MovePackageDialog extends AbstractApplyNewProfileDialog {
+
+ private static String DIALOG_TITLE = Messages.MovePackageDialog_title;
+
+ private org.eclipse.uml2.uml.Package movedPackage;
+
+ /**
+ * Constructor.
+ *
+ * @param shell
+ * the active shell
+ * @param movedPackage
+ * the moved package
+ * @param newProfile
+ * the new profile to apply
+ */
+ public MovePackageDialog(Shell shell, org.eclipse.uml2.uml.Package movedPackage, Profile newProfile) {
+ super(shell, DIALOG_TITLE, ProfileMigrationPreferenceConstants.PACKAGE_MOVE, newProfile);
+ this.movedPackage = movedPackage;
+ this.newProfile = newProfile;
+ }
+
+ @Override
+ protected String getDecription() {
+ return NLS.bind(Messages.MovePackageDialog_description, movedPackage.getName(), newProfile.getName());
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/MoveProfileDialog.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/MoveProfileDialog.java
new file mode 100644
index 00000000000..5c35222d35e
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/MoveProfileDialog.java
@@ -0,0 +1,51 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Messages;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.uml2.uml.Profile;
+
+/**
+ * Dialog to ask to user if he want to apply a profile or not
+ */
+public class MoveProfileDialog extends AbstractApplyNewProfileDialog {
+
+ private static String DIALOG_TITLE = Messages.MoveProfileDialog_title;
+
+ private Profile movedProfile;
+
+ /**
+ * Constructor.
+ *
+ * @param shell
+ * the active shell
+ * @param movedProfile
+ * the moved profile
+ * @param newProfile
+ * the new profile to apply
+ */
+ public MoveProfileDialog(Shell shell, Profile movedProfile, Profile newProfile) {
+ super(shell, DIALOG_TITLE, ProfileMigrationPreferenceConstants.PROFILE_MOVE, newProfile);
+ this.movedProfile = movedProfile;
+ }
+
+ @Override
+ protected String getDecription() {
+ return NLS.bind(Messages.MoveProfileDialog_description, movedProfile.getName(), newProfile.getName());
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/MoveStereotypeDialog.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/MoveStereotypeDialog.java
new file mode 100644
index 00000000000..be174dc8a72
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/dialogs/MoveStereotypeDialog.java
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Messages;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * Dialog to ask to user if he want to apply a profile or not
+ */
+public class MoveStereotypeDialog extends AbstractApplyNewProfileDialog {
+
+ private static String DIALOG_TITLE = Messages.MoveStereotypeDialog_title;
+
+ private Stereotype stereotype;
+
+ private Profile newProfile;
+
+ /**
+ * Constructor.
+ *
+ * @param shell
+ * the active shell
+ * @param stereotype
+ * the moved stereotype
+ * @param newProfile
+ * the new profile to apply
+ */
+ public MoveStereotypeDialog(Shell shell, Stereotype stereotype, Profile newProfile) {
+ super(shell, DIALOG_TITLE, ProfileMigrationPreferenceConstants.STEREOTYPE_MOVE, newProfile);
+ this.stereotype = stereotype;
+ this.newProfile = newProfile;
+ }
+
+ @Override
+ protected String getDecription() {
+ return NLS.bind(Messages.MoveStereotypeDialog_description, stereotype.getName(), newProfile.getName());
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/messages.properties b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/messages.properties
new file mode 100644
index 00000000000..88eb34f0262
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/messages.properties
@@ -0,0 +1,35 @@
+AbstractProfileMigrationDialog_description=Description
+AbstractProfileMigrationDialog_DoNotShowItAgain=Do not show this pop-up again
+AbstractProfileMigrationDialog_MigrateAction=Migration Action
+AddPropertyToStereotypeDialog_Description=The Property {0} has been added to the Stereotype {1}, but the multiplicity of this Property is [{2}..{3}] so a value is required and there is not default value.
+AddPropertyToStereotypeDialog_Title=A Property is added to a Stereotype
+ChangeIsAbstractFromStereotypeDialog_Description=The Stereotype {0} has become abstract so applications of this Stereotype will be deleted, you can select one or more sub Stereotypes as replacement.
+ChangeIsAbstractFromStereotypeDialog_Title=A Stereotype has become abstract
+ChangeIsStaticFeatureDialog_Description=The Property {0} of the Stereotype {1} has become static, you should select a value for every instance of this Property.
+ChangeIsStaticFeatureDialog_Title=A Property has become static
+ChangeLowerMultiplicityDialog_Description=The lower multiplicity of the Property {0} of the Stereotype {1} has been changed from {2} to {3}. You should add values to match with this constraint.
+ChangeLowerMultiplicityDialog_Title=Modified lower multiplicity of Property
+ChangeUpperMultiplicityDialog_Description=The upper multiplicity of the Property {0} of the Stereotype {1} has been changed from {2} to {3}. You should remove values to match with this constraint.
+ChangeUpperMultiplicityDialog_Title=Modified upper multiplicity of Property
+DeleteEnumerationLiteralFromEnumerationDialog_Description=The EnumerationLiteral {0} has been deleted from the Enumeration {1} you can replace it by a new EnumerationLiteral.
+DeleteEnumerationLiteralFromEnumerationDialog_Title=An EnumerationLiteral has been deleted from an Enumeration
+MovePackageDialog_description=The Package {0} has been moved into the Profile {1} which is not applied in the current model.
+MovePackageDialog_title=A Package has been moved
+MoveProfileDialog_description=The Profile {0} has been moved in the Profile {1}.
+MoveProfileDialog_title=A Profile has been moved
+MoveStereotypeDialog_content=Do you want to apply the Profile {0}?
+MoveStereotypeDialog_description=The Stereotype {0} has been moved into the Profile {1} which is not applied in the current model.
+MoveStereotypeDialog_No=no
+MoveStereotypeDialog_title=A Stereotype is moved
+MoveStereotypeDialog_Yes=yes
+ProfileMigrationPreferenceConstants_AddPropertyToStereotype=A property has been added to a stereotype (when the multiplicity is greater than 1 and there is no default value)
+ProfileMigrationPreferenceConstants_ChangeIsStaticFeatureOfProperty=IsStatic feature of Property has been modified
+ProfileMigrationPreferenceConstants_ChangeLowerMultiplicityOfProperty=The lower multiplicity of Property has been modified
+ProfileMigrationPreferenceConstants_ChangeUpperMultiplicityOfProperty=The upper multiplicity of Property has been modified
+ProfileMigrationPreferenceConstants_DeleteEnumLiteralFromEnumeration=An EnumerationLiteral has been deleted from an Enumeration
+ProfileMigrationPreferenceConstants_PackageMove=A Package has been moved into an unapplied Profile
+ProfileMigrationPreferenceConstants_ProfileMove=A Profile has been moved into an unapplied Profile
+ProfileMigrationPreferenceConstants_StereotypeMove=A Stereotype has been moved into an unapplied Profile
+ProfileMigrationPreferenceConstants_SuperStereotypeBecomingAbstract=IsAbstract feature of Stereotype has been modified
+ProfileMigrationPreferencePage_FileInCached=File names keep in cached
+ProfileMigrationPreferencePage_ShowDialogs=Show dialog for these actions
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/preferences/ProfileMigrationInitializer.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/preferences/ProfileMigrationInitializer.java
new file mode 100644
index 00000000000..826ad509500
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/preferences/ProfileMigrationInitializer.java
@@ -0,0 +1,54 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences;
+
+import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Activator;
+
+/**
+ * Initialize profile migration tool preferences
+ */
+public class ProfileMigrationInitializer extends AbstractPreferenceInitializer {
+
+ /**
+ * Constructor.
+ *
+ */
+ public ProfileMigrationInitializer() {
+ super();
+ }
+
+ /**
+ * Set default preference, true for all dialogs
+ */
+ @Override
+ public void initializeDefaultPreferences() {
+ IPreferenceStore store = getPreferenceStore();
+ for (String constPref : ProfileMigrationPreferenceConstants.mapPrefConstToLabel.keySet()) {
+ store.setDefault(constPref, true);
+ }
+ }
+
+ /**
+ * Get the preference store
+ *
+ * @return the preference store
+ */
+ protected IPreferenceStore getPreferenceStore() {
+ return Activator.getDefault().getPreferenceStore();
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/preferences/ProfileMigrationPreferenceConstants.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/preferences/ProfileMigrationPreferenceConstants.java
new file mode 100644
index 00000000000..018da30aeab
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/preferences/ProfileMigrationPreferenceConstants.java
@@ -0,0 +1,102 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Messages;
+
+/**
+ * Definition of preference constants for the profile migration tool
+ */
+abstract public class ProfileMigrationPreferenceConstants {
+
+ /**
+ * Map the preference constant and the displayed label
+ */
+ public static final Map<String, String> mapPrefConstToLabel = init();
+
+
+ /**
+ * @return a map with the preference constant and the displayed label
+ */
+ protected static Map<String, String> init() {
+ Map<String, String> map = new HashMap<>();
+ map.put(ProfileMigrationPreferenceConstants.ADD_PROPERTY_TO_STEREOTYPE,
+ Messages.ProfileMigrationPreferenceConstants_AddPropertyToStereotype);
+ map.put(ProfileMigrationPreferenceConstants.SUPER_STEREOTYPE_BECOMING_ABSTRACT,
+ Messages.ProfileMigrationPreferenceConstants_SuperStereotypeBecomingAbstract);
+ map.put(ProfileMigrationPreferenceConstants.STEREOTYPE_MOVE,
+ Messages.ProfileMigrationPreferenceConstants_StereotypeMove);
+ map.put(ProfileMigrationPreferenceConstants.CHANGE_LOWER_MULTIPLICITY_PROPERTY,
+ Messages.ProfileMigrationPreferenceConstants_ChangeLowerMultiplicityOfProperty);
+ map.put(ProfileMigrationPreferenceConstants.CHANGE_UPPER_MULTIPLICITY_PROPERTY,
+ Messages.ProfileMigrationPreferenceConstants_ChangeUpperMultiplicityOfProperty);
+ map.put(ProfileMigrationPreferenceConstants.CHANGE_IS_STATIC_FEATURE_PROPERTY,
+ Messages.ProfileMigrationPreferenceConstants_ChangeIsStaticFeatureOfProperty);
+ map.put(ProfileMigrationPreferenceConstants.DELETE_ENUM_LITERAL_FROM_ENUMERATION,
+ Messages.ProfileMigrationPreferenceConstants_DeleteEnumLiteralFromEnumeration);
+ map.put(ProfileMigrationPreferenceConstants.PACKAGE_MOVE,
+ Messages.ProfileMigrationPreferenceConstants_PackageMove);
+ map.put(ProfileMigrationPreferenceConstants.PROFILE_MOVE,
+ Messages.ProfileMigrationPreferenceConstants_ProfileMove);
+ return map;
+ }
+
+ /**
+ * Preference constant to show AddPropertyToStereotypeDialog
+ */
+ public static final String ADD_PROPERTY_TO_STEREOTYPE = "AddPropertyToStereotype"; //$NON-NLS-1$
+
+ /**
+ * Preference constant to show ChangeIsAbstractFromStereotypeDialog
+ */
+ public static final String SUPER_STEREOTYPE_BECOMING_ABSTRACT = "SuperStereotypeBecomingAbstract"; //$NON-NLS-1$
+
+ /**
+ * Preference constant to show MoveStereotypeDialog
+ */
+ public static final String STEREOTYPE_MOVE = "StereotypeMove"; //$NON-NLS-1$
+
+ /**
+ * Preference constant to show ChangeLowerMultiplicityDialog
+ */
+ public static final String CHANGE_LOWER_MULTIPLICITY_PROPERTY = "ChangeLowerMultiplicityOfProperty"; //$NON-NLS-1$
+
+ /**
+ * Preference constant to show ChangUpperMultiplicityDialog
+ */
+ public static final String CHANGE_UPPER_MULTIPLICITY_PROPERTY = "ChangeUpperMultiplicityOfProperty"; //$NON-NLS-1$
+
+ /**
+ * Preference constant to show ChangeIsStaticFeatureDialog
+ */
+ public static final String CHANGE_IS_STATIC_FEATURE_PROPERTY = "ChangeIsStaticFeatureOfProperty"; //$NON-NLS-1$
+
+ /**
+ * Preference constant to show DeleteEnumerationLiteralFromEnumerationDialog
+ */
+ public static final String DELETE_ENUM_LITERAL_FROM_ENUMERATION = "DeleteEnumLiteralFromEnumeration"; //$NON-NLS-1$
+
+ /**
+ * Preference constant to show MovePackageDialog
+ */
+ public static final String PACKAGE_MOVE = "PackageMove"; //$NON-NLS-1$
+
+ /**
+ * Preference constant to show MoveProfileDialog
+ */
+ public static final String PROFILE_MOVE = "ProfileMove"; //$NON-NLS-1$
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/preferences/ProfileMigrationPreferencePage.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/preferences/ProfileMigrationPreferencePage.java
new file mode 100644
index 00000000000..e9ee859121a
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/preferences/ProfileMigrationPreferencePage.java
@@ -0,0 +1,244 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map.Entry;
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.papyrus.infra.widgets.providers.CollectionContentProvider;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Messages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * Define the preference page for configuring the Profile migration tool
+ *
+ * ----------------------
+ * list of check button to activate or not pop-up
+ * ----------------------
+ * list of cached file with a remove button
+ *
+ */
+public class ProfileMigrationPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
+
+ /** ID of delete button. */
+ private static final int DELETE_BUTTON_ID = 1;
+
+ /** Icon for delete action button. */
+ private static final Image DELETE_ICON = AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.papyrus.infra.widgets", "icons/Delete_12x12.gif").createImage(); //$NON-NLS-1$ //$NON-NLS-2$
+
+ /** The list of files in cache */
+ private static List<String> cachedFiles = new ArrayList<>();
+
+ /** The list of booleanFieldEditor one for each dialog type */
+ private List<BooleanFieldEditor> booleanFieldEditor;
+
+ /** The treeViewer to display cached files */
+ private TreeViewer cachedFilesTreeViewer;
+
+ /** The main container */
+ private Composite mainContainer;
+
+ /**
+ * Constructor.
+ *
+ */
+ public ProfileMigrationPreferencePage() {
+ booleanFieldEditor = new ArrayList<>();
+ }
+
+ @Override
+ public void init(IWorkbench workbench) {
+ setPreferenceStore(Activator.getDefault().getPreferenceStore());
+ }
+
+ @Override
+ protected Control createContents(Composite parent) {
+ mainContainer = parent;
+ createFieldEditors();
+
+ Group group = new Group(mainContainer, SWT.SCROLL_PAGE);
+ group.setLayout(new GridLayout());
+ group.setText(Messages.ProfileMigrationPreferencePage_FileInCached);
+ createTreeActionButtons(group);
+ createCachedFilesPart(group);
+
+ refreshTreeviewer();
+
+ initialize();
+ checkState();
+
+ return mainContainer;
+ }
+
+ @Override
+ protected void createFieldEditors() {
+ Group group = new Group(mainContainer, SWT.SCROLL_PAGE);
+ group.setLayout(new GridLayout());
+ group.setText(Messages.ProfileMigrationPreferencePage_ShowDialogs);
+ for (Entry<String, String> entry : ProfileMigrationPreferenceConstants.mapPrefConstToLabel.entrySet()) {
+ BooleanFieldEditor editor = new BooleanFieldEditor(entry.getKey(), entry.getValue(), group);
+ booleanFieldEditor.add(editor);
+ addField(editor);
+ editor.setPreferenceStore(Activator.getDefault().getPreferenceStore());
+ }
+ }
+
+
+ /**
+ * Create actions associate to tree viewer.
+ *
+ * @param parent
+ * Composite where action buttons will be added
+ */
+ private void createTreeActionButtons(Composite parent) {
+ Composite buttonsPanel = new Composite(parent, SWT.NONE);
+ buttonsPanel.setLayout(new GridLayout());
+ buttonsPanel.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, true, false, 1, 1));
+
+ createButton(buttonsPanel, DELETE_BUTTON_ID, DELETE_ICON, null);
+
+ }
+
+ /**
+ * Create cached file list
+ *
+ * @param parent
+ * Composite where the treeViewer will be added
+ */
+ private void createCachedFilesPart(Composite parent) {
+ // Create viewer
+ cachedFilesTreeViewer = new TreeViewer(parent, SWT.BORDER);
+
+ // Set standard collection content provider
+ cachedFilesTreeViewer.setContentProvider(CollectionContentProvider.instance);
+ cachedFilesTreeViewer.setLabelProvider(new LabelProvider());
+
+ // Set layout
+ Tree tree = cachedFilesTreeViewer.getTree();
+ tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
+ }
+
+ /**
+ * Method to create a button with an icon and no label.
+ *
+ * @param parent
+ * the composite parent
+ * @param id
+ * the id of the new button
+ * @param icon
+ * an icon associate to the button (could be null)
+ * @param label
+ * a label associate to the button (could be null)
+ * @return the newly created button
+ */
+ protected Button createButton(Composite parent, int id, Image icon, String label) {
+ ((GridLayout) parent.getLayout()).numColumns++;
+ Button button = new Button(parent, SWT.PUSH);
+ button.setFont(JFaceResources.getDialogFont());
+ button.setData(new Integer(id));
+ button.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ buttonPressed();
+ }
+ });
+
+ if (label != null) {
+ button.setText(label);
+ }
+ if (icon != null) {
+ button.setImage(icon);
+ }
+ setButtonLayoutData(button);
+ return button;
+ }
+
+ /**
+ * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
+ *
+ * @param buttonId
+ */
+ protected void buttonPressed() {
+ deleteAction();
+ }
+
+ /**
+ * Delete current selection of tree viewer.
+ */
+ private void deleteAction() {
+ ISelection selection = cachedFilesTreeViewer.getSelection();
+
+ if (selection instanceof IStructuredSelection) {
+ Object selectedElement = ((IStructuredSelection) selection).getFirstElement();
+ if (selectedElement instanceof String) {
+ cachedFiles.remove(selectedElement);
+ }
+ refreshTreeviewer();
+ }
+ }
+
+ /**
+ * Refresh content of tree viewer according to selected theme/
+ *
+ * @param currentTheme
+ * Current theme
+ */
+ private void refreshTreeviewer() {
+ // Set mirroring list as viewer input
+ cachedFilesTreeViewer.getTree().setEnabled(true);
+ cachedFilesTreeViewer.setInput(cachedFiles);
+ }
+
+ /**
+ * Add file to the cache
+ *
+ * @param fileName
+ */
+ public static void addFile(String fileName) {
+ cachedFiles.add(fileName);
+ }
+
+ /**
+ * Get the cache file list
+ *
+ * @return the cache file list
+ */
+ public static List<String> getCachedFiles() {
+ return cachedFiles;
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/utils/EStructuralFeatureUtil.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/utils/EStructuralFeatureUtil.java
new file mode 100644
index 00000000000..99f765d67c8
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration.ui/src/org/eclipse/papyrus/toolsmiths/profilemigration/ui/utils/EStructuralFeatureUtil.java
@@ -0,0 +1,99 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.ui.utils;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.papyrus.infra.emf.utils.HistoryUtil;
+import org.eclipse.papyrus.infra.properties.ui.providers.FeatureContentProvider;
+import org.eclipse.papyrus.infra.ui.emf.providers.EMFGraphicalContentProvider;
+import org.eclipse.papyrus.infra.ui.emf.providers.EMFLabelProvider;
+import org.eclipse.papyrus.infra.ui.emf.utils.ProviderHelper;
+import org.eclipse.papyrus.uml.properties.creation.UMLPropertyEditorFactory;
+import org.eclipse.papyrus.uml.properties.widgets.EStructuralFeatureEditor;
+import org.eclipse.papyrus.uml.tools.providers.UMLContainerContentProvider;
+import org.eclipse.papyrus.uml.tools.providers.UMLContentProvider;
+import org.eclipse.papyrus.uml.tools.providers.UMLFilteredLabelProvider;
+import org.eclipse.papyrus.uml.tools.providers.UMLLabelProvider;
+import org.eclipse.uml2.common.util.UML2Util;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * Util method to use EStructuralFeatureEditor
+ */
+public class EStructuralFeatureUtil {
+
+
+ /**
+ * Change displayed values according to the new element
+ *
+ * @param editor
+ * @param stereotypedElement
+ * @param property
+ * @param stereotype
+ *
+ */
+ public static void setValueToEditor(EStructuralFeatureEditor editor, Element stereotypedElement, Property property, Stereotype stereotype) {
+ EObject stereotypeApplication = stereotypedElement.getStereotypeApplication(stereotype);
+ EStructuralFeature structuralFeature = getFeature(stereotypeApplication, property);
+ editor.setProviders(new UMLContentProvider(stereotypeApplication, structuralFeature, stereotype), new UMLLabelProvider());
+ if (structuralFeature instanceof EReference) {
+ editor.setValueFactory(getUMLPropertyEditorFactory(stereotypeApplication, (EReference) structuralFeature));
+ }
+
+ editor.setFeatureToEdit(property.getName(), structuralFeature, stereotypeApplication);
+
+ }
+
+ /**
+ * Get the structural feature according to the stereotype application and the property
+ *
+ * @param stereotypeApplication
+ * @return
+ */
+ private static EStructuralFeature getFeature(EObject stereotypeApplication, Property property) {
+ return stereotypeApplication.eClass().getEStructuralFeature(UML2Util.getValidJavaIdentifier(property.getName()));
+ }
+
+ /**
+ * Get an UMLPropertyEditorFactory
+ *
+ * @param stereotypeApplication
+ * @param reference
+ * @return
+ */
+ private static UMLPropertyEditorFactory getUMLPropertyEditorFactory(EObject stereotypeApplication, EReference reference) {
+ UMLPropertyEditorFactory factory = new UMLPropertyEditorFactory(reference);
+ EClass type = reference.getEReferenceType();
+
+ factory.setContainerLabelProvider(new UMLFilteredLabelProvider());
+ factory.setReferenceLabelProvider(new EMFLabelProvider());
+
+ ITreeContentProvider contentProvider = new UMLContainerContentProvider(stereotypeApplication, reference);
+
+ EMFGraphicalContentProvider provider = ProviderHelper.encapsulateProvider(contentProvider, stereotypeApplication.eResource().getResourceSet(), HistoryUtil.getHistoryID(stereotypeApplication, reference, "container")); //$NON-NLS-1$
+
+ factory.setContainerContentProvider(provider);
+ factory.setReferenceContentProvider(new FeatureContentProvider(type));
+
+ return factory;
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.classpath b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.classpath
new file mode 100644
index 00000000000..eca7bdba8f0
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.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.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.project b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.project
new file mode 100644
index 00000000000..d1a07d36f08
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.toolsmiths.profilemigration</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/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.core.resources.prefs b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000000..896a9a53a53
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8 \ No newline at end of file
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.core.runtime.prefs b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 00000000000..5a0ad22d2a7
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.jdt.core.prefs b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..b3aa6d60f94
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.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.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
+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/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.jdt.ui.prefs b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 00000000000..954281dbc31
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.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/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.pde.api.tools.prefs b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 00000000000..b2260f87129
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,104 @@
+ANNOTATION_ELEMENT_TYPE_ADDED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+API_USE_SCAN_FIELD_SEVERITY=Error
+API_USE_SCAN_METHOD_SEVERITY=Error
+API_USE_SCAN_TYPE_SEVERITY=Error
+CLASS_ELEMENT_TYPE_ADDED_FIELD=Warning
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Warning
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Warning
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_DEFAULT_METHOD=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Ignore
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_ANNOTATION=Ignore
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+MISSING_EE_DESCRIPTIONS=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Warning
+automatically_removed_unused_problem_filters=Enabled
+changed_execution_env=Warning
+eclipse.preferences.version=1
+incompatible_api_component_version=Warning
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+incompatible_api_component_version_report_major_without_breaking_change=Error
+incompatible_api_component_version_report_minor_without_api_change=Error
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/META-INF/MANIFEST.MF b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..ba9d6d75158
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/META-INF/MANIFEST.MF
@@ -0,0 +1,27 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.toolsmiths.profilemigration;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Bundle-ClassPath: .
+Require-Bundle: org.eclipse.ui,
+ com.google.guava;bundle-version="21.0.0",
+ org.eclipse.uml2.uml;bundle-version="[5.3.0,6.0.0)",
+ org.eclipse.emf.compare;bundle-version="[3.3.0,4.0.0)",
+ org.eclipse.papyrus.uml.service.types;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.toolsmiths.profilemigration.ui;bundle-version="[0.0.0,1.0.0)",
+ org.eclipse.papyrus.uml.tools;bundle-version="[4.0.0,5.0.0)"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.papyrus.toolsmiths.profilemigration,
+ org.eclipse.papyrus.toolsmiths.profilemigration.factory,
+ org.eclipse.papyrus.toolsmiths.profilemigration.migrators,
+ org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic,
+ org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.enumeration,
+ org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.packages,
+ org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.profile,
+ org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.property,
+ org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.stereotype
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.papyrus.toolsmiths.profilemigration.Activator
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/ProfileMigrationTool_usecases.md b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/ProfileMigrationTool_usecases.md
new file mode 100644
index 00000000000..4dbcc4ae781
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/ProfileMigrationTool_usecases.md
@@ -0,0 +1,20 @@
+# Profile migration tool
+## Migrations
+### Migration about properties
+* Property\_modify\_lowerValue: If the loverValue feature of a property is modified then the migration tool shall maintain the validity of the model. If the lower value is increase, means that as many as the lowerValue values are mandatory the migration tool shall upgrade each application of the stereotype owning this property. The upgrade consist in asking the designer which value he want to set on the slot corresponding of this property. If the lower value is decreased the migration tool shall not do anything. - **IChangeLowerMultiplicityFromPropertyMigrator**
+* Property\_modify\_upperValue: If the upper value of a property is modified then the migration tool shall maintain the validity of the model. If the upper value is decrease the migration tool shall upgrade each application of the stereotype owning this property. The upgrade consist in asking the designer which values he wants to keep for the slot corresponding of this property. If the upper value is increased the migration tool shall not do anything. - **IChangeUpperMultiplicityFromPropertyMigrator**
+* Property\_modify\_isStatic: If the property becomes static then the migration tool shall change the value of every slop corresponding to this property. To determine which value the system shall set, it shall ask the designer which value he wants. - **IChangeIsStaticFromPropertyMigrator**
+
+### Migration about stereotypes
+* Stereotype\_add\_property: If a Stereotype is updated with a new property then a slot for this property shall be available for each application of the stereotype in the profile model. If the new property has a default value then each application of the modified stereotype in the profiled model has its corresponding slot set with the default value. If the new property has no default value but a value is required (the minimal multiplicity is greater or equal than 1) then each application of the modified stereotype in the profiled model has its corresponding slot, the migration tool shall ask the designer to know which value he wants to set. If the new property has no default value and a value is optional (the minimal multiplicity is equal to 0) then each application of the modified stereotype in the profiled model has it corresponding slot set to null. - **IAddPropertyToStereotypeMigrator**
+* Stereotype\_modify\_isAbstract: If a Stereotype becomes abstract the migration tool shall ask the designer if he wants to replace applications of this stereotype by one or many Stereotypes pick in a list. This list is defined by all specializations of the abstract Stereotype available on applied profiles. If the answer is "no" then the application of this stereotype is delete, otherwise selected stereotypes are applied and inherited slot are preserved. - **IChangeIsAbstractFromStereotype**
+* Stereotype\_move: If a Stereotype is moved to another profile then the migration tool shall focus on the preservation of the stereotype applications available at the profiled model. If the stereotype was moved in a profile that is already applied on the profiled model then the migration is trivial and every application of this stereotype shall remain If the stereotype was moved in a profile that is not already applied on the profiled model then the migration tool asks the designer if the profile should be applied. If the designer answers 'yes' every application of this stereotype shall remain conversely if the answer is 'no' then every application of this stereotype shall be deleted. - **IMoveStereotypeMigrator**
+
+### Migration about profile
+* Profile\_move: If a profile is moved to another profile then the migration tool shall focus on the preservation of the stereotype applications available at the profiled model. If the profile was moved in a profile that is already applied on the profiled model then the migration is trivial and every stereotype application shall remain.If the profile was moved in a profile that is not already applied on the profiled model then the migration tool asks the designer if the moved profile should be reapplied. If the designer answers 'yes' every stereotype application shall remain conversely if the answer is 'no' then every stereotype application shall be deleted. - **IMoveProfileMigrator.java**
+
+### Migration about package
+* Package\_move: If a package is moved to another profile then the migration tool shall focus on the preservation of the stereotype applications available at the profiled model. If the package was moved in a profile that is already applied on the profiled model then the migration is trivial and every stereotype application shall remain. If the package was moved in a profile that is not already applied on the profiled model then the migration tool asks the designer if the profile should be applied. If the designer answers 'yes' every stereotype application shall remain conversely if the answer is 'no' then every stereotype application shall be deleted. - **IMovePackageMigrator.java**
+
+### Migration about Enumeration
+* Enumeration\_delete\_EnumerationLitteral: If an enumeration literal is deleted from an enumeration in the profile specification and this enumeration is used to type one or many properties of stereotypes then all stereotype applications corresponding to the affected stereotype shall be upgraded. The upgrade consists for each stereotype application in providing the designer with the possibility to update the enumeration literal affected to the property whose specification was changed. - **IDeleteEnumerationLiteralFromEnumeration.java** \ No newline at end of file
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/about.html b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/about.html
new file mode 100755
index 00000000000..598b3684879
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/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>May 12, 2008</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> \ No newline at end of file
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/build.properties b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/build.properties
new file mode 100644
index 00000000000..ac08f6316e6
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+ META-INF/,\
+ .,\
+ about.html
+src.includes = about.html
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/model.di b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/model.di
new file mode 100644
index 00000000000..f784d67691a
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/model.di
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<architecture:ArchitectureDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:architecture="http://www.eclipse.org/papyrus/infra/core/architecture" contextId="org.eclipse.papyrus.sysml.architecture.SysML14"/>
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/model.notation b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/model.notation
new file mode 100644
index 00000000000..5c0d4d24c43
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/model.notation
@@ -0,0 +1,1251 @@
+<?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:css="http://www.eclipse.org/papyrus/infra/gmfdiag/css" 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:nattablestyle="http://www.eclipse.org/papyrus/nattable/model/table/nattablestyle" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/papyrus/infra/gmfdiag/style" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="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 http://www.eclipse.org/papyrus/nattable/model/table/nattablestyle http://www.eclipse.org/papyrus/nattable/model#//nattablestyle">
+ <notation:Diagram xmi:id="_yPpQ0J4REee5QOeiHCkWLg" type="PapyrusUMLClassDiagram" name="FunctionnalRequirementDiagram" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_NbSGQJ4TEee5QOeiHCkWLg" type="Class_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_NbStUJ4TEee5QOeiHCkWLg" type="Class_NameLabel"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_NbStUZ4TEee5QOeiHCkWLg" type="Class_FloatingNameLabel">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_NbStUp4TEee5QOeiHCkWLg" y="15"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_NbStU54TEee5QOeiHCkWLg" type="Class_AttributeCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_NbStVJ4TEee5QOeiHCkWLg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_NbStVZ4TEee5QOeiHCkWLg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_NbStVp4TEee5QOeiHCkWLg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_NbStV54TEee5QOeiHCkWLg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_NbStWJ4TEee5QOeiHCkWLg" type="Class_OperationCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_NbStWZ4TEee5QOeiHCkWLg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_NbStWp4TEee5QOeiHCkWLg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_NbStW54TEee5QOeiHCkWLg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_NbStXJ4TEee5QOeiHCkWLg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_NbStXZ4TEee5QOeiHCkWLg" type="Class_NestedClassifierCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_NbStXp4TEee5QOeiHCkWLg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_NbStX54TEee5QOeiHCkWLg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_NbStYJ4TEee5QOeiHCkWLg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_NbStYZ4TEee5QOeiHCkWLg"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_Na-kQJ4TEee5QOeiHCkWLg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_NbSGQZ4TEee5QOeiHCkWLg" x="700" y="40" width="301" height="121"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_NbbQMJ4TEee5QOeiHCkWLg" type="StereotypeComment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_NbbQMZ4TEee5QOeiHCkWLg"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_NbbQM54TEee5QOeiHCkWLg" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_Na-kQJ4TEee5QOeiHCkWLg"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_NbbQMp4TEee5QOeiHCkWLg" x="200"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gdohUJ7NEeeE49hrEZE2jQ" type="Class_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_gdohUp7NEeeE49hrEZE2jQ" type="Class_NameLabel"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_gdohU57NEeeE49hrEZE2jQ" type="Class_FloatingNameLabel">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gdohVJ7NEeeE49hrEZE2jQ" y="15"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_gdohVZ7NEeeE49hrEZE2jQ" type="Class_AttributeCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_gdohVp7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gdohV57NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gdohWJ7NEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gdohWZ7NEeeE49hrEZE2jQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_gdohWp7NEeeE49hrEZE2jQ" type="Class_OperationCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_gdohW57NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gdohXJ7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gdohXZ7NEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gdohXp7NEeeE49hrEZE2jQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_gdohX57NEeeE49hrEZE2jQ" type="Class_NestedClassifierCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_gdohYJ7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_gdohYZ7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_gdohYp7NEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gdohY57NEeeE49hrEZE2jQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_gdLOUJ7NEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gdohUZ7NEeeE49hrEZE2jQ" x="360" y="40" width="281" height="121"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gdsyw57NEeeE49hrEZE2jQ" type="StereotypeComment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_gdsyxJ7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_gdsyxp7NEeeE49hrEZE2jQ" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_gdLOUJ7NEeeE49hrEZE2jQ"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_gdsyxZ7NEeeE49hrEZE2jQ" x="200"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_v45VcJ7NEeeE49hrEZE2jQ" type="Class_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_v458gJ7NEeeE49hrEZE2jQ" type="Class_NameLabel"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_v458gZ7NEeeE49hrEZE2jQ" type="Class_FloatingNameLabel">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_v458gp7NEeeE49hrEZE2jQ" y="15"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_v458g57NEeeE49hrEZE2jQ" type="Class_AttributeCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_v458hJ7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_v458hZ7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_v458hp7NEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v458h57NEeeE49hrEZE2jQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_v458iJ7NEeeE49hrEZE2jQ" type="Class_OperationCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_v458iZ7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_v458ip7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_v458i57NEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v458jJ7NEeeE49hrEZE2jQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_v458jZ7NEeeE49hrEZE2jQ" type="Class_NestedClassifierCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_v458jp7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_v458j57NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_v458kJ7NEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v458kZ7NEeeE49hrEZE2jQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_v4XJ8J7NEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v45VcZ7NEeeE49hrEZE2jQ" x="40" y="260" width="281" height="121"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_v4-1A57NEeeE49hrEZE2jQ" type="StereotypeComment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_v4-1BJ7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_v4-1Bp7NEeeE49hrEZE2jQ" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_v4XJ8J7NEeeE49hrEZE2jQ"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_v4-1BZ7NEeeE49hrEZE2jQ" x="200"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_5ObhcJ7NEeeE49hrEZE2jQ" type="Class_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_5OcIgJ7NEeeE49hrEZE2jQ" type="Class_NameLabel"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_5OcIgZ7NEeeE49hrEZE2jQ" type="Class_FloatingNameLabel">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_5OcIgp7NEeeE49hrEZE2jQ" y="15"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5OcIg57NEeeE49hrEZE2jQ" type="Class_AttributeCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5OcIhJ7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5OcIhZ7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5OcIhp7NEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5OcIh57NEeeE49hrEZE2jQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5OcIiJ7NEeeE49hrEZE2jQ" type="Class_OperationCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5OcIiZ7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5OcIip7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5OcIi57NEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5OcIjJ7NEeeE49hrEZE2jQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5OcIjZ7NEeeE49hrEZE2jQ" type="Class_NestedClassifierCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5OcIjp7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5OcIj57NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5OcIkJ7NEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5OcIkZ7NEeeE49hrEZE2jQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_5OEVEJ7NEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5ObhcZ7NEeeE49hrEZE2jQ" x="360" y="260" width="281" height="121"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_5OgZ8J7NEeeE49hrEZE2jQ" type="StereotypeComment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5OgZ8Z7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_5OgZ857NEeeE49hrEZE2jQ" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_5OEVEJ7NEeeE49hrEZE2jQ"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5OgZ8p7NEeeE49hrEZE2jQ" x="200"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_m8wEAKq5EeecK7SK84ftVA" type="Class_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_m8wEAqq5EeecK7SK84ftVA" type="Class_NameLabel"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_m8wEA6q5EeecK7SK84ftVA" type="Class_FloatingNameLabel">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_m8wEBKq5EeecK7SK84ftVA" y="15"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_m8wrEKq5EeecK7SK84ftVA" type="Class_AttributeCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_m8wrEaq5EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_m8wrEqq5EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_m8wrE6q5EeecK7SK84ftVA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_m8wrFKq5EeecK7SK84ftVA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_m8wrFaq5EeecK7SK84ftVA" type="Class_OperationCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_m8wrFqq5EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_m8wrF6q5EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_m8wrGKq5EeecK7SK84ftVA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_m8wrGaq5EeecK7SK84ftVA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_m8wrGqq5EeecK7SK84ftVA" type="Class_NestedClassifierCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_m8wrG6q5EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_m8wrHKq5EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_m8wrHaq5EeecK7SK84ftVA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_m8wrHqq5EeecK7SK84ftVA"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_m8YQkKq5EeecK7SK84ftVA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_m8wEAaq5EeecK7SK84ftVA" x="1060" y="40" width="300" height="120"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_m82KoKq5EeecK7SK84ftVA" type="StereotypeComment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_m82Koaq5EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_m82Ko6q5EeecK7SK84ftVA" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_m8YQkKq5EeecK7SK84ftVA"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_m82Koqq5EeecK7SK84ftVA" x="200"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_qA7xQKq6EeecK7SK84ftVA" type="Class_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_qA7xQqq6EeecK7SK84ftVA" type="Class_NameLabel"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_qA7xQ6q6EeecK7SK84ftVA" type="Class_FloatingNameLabel">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_qA7xRKq6EeecK7SK84ftVA" y="15"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_qA7xRaq6EeecK7SK84ftVA" type="Class_AttributeCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_qA7xRqq6EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_qA7xR6q6EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_qA7xSKq6EeecK7SK84ftVA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qA7xSaq6EeecK7SK84ftVA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_qA7xSqq6EeecK7SK84ftVA" type="Class_OperationCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_qA7xS6q6EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_qA7xTKq6EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_qA7xTaq6EeecK7SK84ftVA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qA7xTqq6EeecK7SK84ftVA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_qA7xT6q6EeecK7SK84ftVA" type="Class_NestedClassifierCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_qA7xUKq6EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_qA7xUaq6EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_qA7xUqq6EeecK7SK84ftVA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qA7xU6q6EeecK7SK84ftVA"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_qAqrgKq6EeecK7SK84ftVA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qA7xQaq6EeecK7SK84ftVA" x="680" y="460" width="300" height="120"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_qBACtaq6EeecK7SK84ftVA" type="StereotypeComment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_qBACtqq6EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_qBACuKq6EeecK7SK84ftVA" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_qAqrgKq6EeecK7SK84ftVA"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_qBACt6q6EeecK7SK84ftVA" x="200"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_rAsIoKq7EeecK7SK84ftVA" type="Class_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_rAsIoqq7EeecK7SK84ftVA" type="Class_NameLabel"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_rAsIo6q7EeecK7SK84ftVA" type="Class_FloatingNameLabel">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_rAsIpKq7EeecK7SK84ftVA" y="15"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_rAsIpaq7EeecK7SK84ftVA" type="Class_AttributeCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_rAsIpqq7EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_rAsIp6q7EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_rAsIqKq7EeecK7SK84ftVA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rAsIqaq7EeecK7SK84ftVA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_rAsIqqq7EeecK7SK84ftVA" type="Class_OperationCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_rAsIq6q7EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_rAsIrKq7EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_rAsIraq7EeecK7SK84ftVA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rAsIrqq7EeecK7SK84ftVA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_rAsIr6q7EeecK7SK84ftVA" type="Class_NestedClassifierCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_rAsIsKq7EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_rAsIsaq7EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_rAsIsqq7EeecK7SK84ftVA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rAsIs6q7EeecK7SK84ftVA"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_rAYmoKq7EeecK7SK84ftVA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rAsIoaq7EeecK7SK84ftVA" x="1060" y="260" width="299" height="120"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_rAyPQ6q7EeecK7SK84ftVA" type="StereotypeComment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_rAyPRKq7EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_rAyPRqq7EeecK7SK84ftVA" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_rAYmoKq7EeecK7SK84ftVA"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_rAyPRaq7EeecK7SK84ftVA" x="200"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_b9XxsKzwEeekPI6hsC9IeA" type="Class_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_b9YYwKzwEeekPI6hsC9IeA" type="Class_NameLabel"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_b9YYwazwEeekPI6hsC9IeA" type="Class_FloatingNameLabel">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_b9YYwqzwEeekPI6hsC9IeA" y="15"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_b9YYw6zwEeekPI6hsC9IeA" type="Class_AttributeCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_b9YYxKzwEeekPI6hsC9IeA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_b9YYxazwEeekPI6hsC9IeA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_b9YYxqzwEeekPI6hsC9IeA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_b9YYx6zwEeekPI6hsC9IeA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_b9Y_0KzwEeekPI6hsC9IeA" type="Class_OperationCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_b9Y_0azwEeekPI6hsC9IeA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_b9Y_0qzwEeekPI6hsC9IeA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_b9Y_06zwEeekPI6hsC9IeA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_b9Y_1KzwEeekPI6hsC9IeA"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_b9Y_1azwEeekPI6hsC9IeA" type="Class_NestedClassifierCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_b9Y_1qzwEeekPI6hsC9IeA"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_b9Y_16zwEeekPI6hsC9IeA"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_b9Y_2KzwEeekPI6hsC9IeA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_b9Y_2azwEeekPI6hsC9IeA"/>
+ </children>
+ <element xmi:type="uml:Class" href="model.uml#_b87s0KzwEeekPI6hsC9IeA"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_b9XxsazwEeekPI6hsC9IeA" x="680" y="260" width="280" height="120"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_b9dRQ6zwEeekPI6hsC9IeA" type="StereotypeComment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_b9dRRKzwEeekPI6hsC9IeA"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_b9dRRqzwEeekPI6hsC9IeA" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_b87s0KzwEeekPI6hsC9IeA"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_b9dRRazwEeekPI6hsC9IeA" x="200"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_yPpQ0Z4REee5QOeiHCkWLg" name="diagram_compatibility_version" stringValue="1.3.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_yPpQ0p4REee5QOeiHCkWLg"/>
+ <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_yPpQ054REee5QOeiHCkWLg" diagramKindId="org.eclipse.papyrus.sysml14.diagram.requirement">
+ <owner xmi:type="uml:Package" href="model.uml#_TR6-4J7WEeeE49hrEZE2jQ"/>
+ </styles>
+ <styles xmi:type="notation:EObjectListValueStyle" xmi:id="_FDb6MZ7GEeeE49hrEZE2jQ" name="css_stylesheets" eObjectListValue="_FDb6MJ7GEeeE49hrEZE2jQ"/>
+ <element xmi:type="uml:Model" href="model.uml#_uHM0wJ4REee5QOeiHCkWLg"/>
+ <edges xmi:type="notation:Connector" xmi:id="_NbbQNJ4TEee5QOeiHCkWLg" type="StereotypeCommentLink" source="_NbSGQJ4TEee5QOeiHCkWLg" target="_NbbQMJ4TEee5QOeiHCkWLg">
+ <styles xmi:type="notation:FontStyle" xmi:id="_NbbQNZ4TEee5QOeiHCkWLg"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_Nbb3Qp4TEee5QOeiHCkWLg" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_Na-kQJ4TEee5QOeiHCkWLg"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_NbbQNp4TEee5QOeiHCkWLg" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Nbb3QJ4TEee5QOeiHCkWLg"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Nbb3QZ4TEee5QOeiHCkWLg"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_gdsyx57NEeeE49hrEZE2jQ" type="StereotypeCommentLink" source="_gdohUJ7NEeeE49hrEZE2jQ" target="_gdsyw57NEeeE49hrEZE2jQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_gdsyyJ7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_gdsyzJ7NEeeE49hrEZE2jQ" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_gdLOUJ7NEeeE49hrEZE2jQ"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_gdsyyZ7NEeeE49hrEZE2jQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gdsyyp7NEeeE49hrEZE2jQ"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_gdsyy57NEeeE49hrEZE2jQ"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_v4-1B57NEeeE49hrEZE2jQ" type="StereotypeCommentLink" source="_v45VcJ7NEeeE49hrEZE2jQ" target="_v4-1A57NEeeE49hrEZE2jQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_v4-1CJ7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_v4_cEp7NEeeE49hrEZE2jQ" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_v4XJ8J7NEeeE49hrEZE2jQ"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_v4-1CZ7NEeeE49hrEZE2jQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4_cEJ7NEeeE49hrEZE2jQ"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_v4_cEZ7NEeeE49hrEZE2jQ"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_5OgZ9J7NEeeE49hrEZE2jQ" type="StereotypeCommentLink" source="_5ObhcJ7NEeeE49hrEZE2jQ" target="_5OgZ8J7NEeeE49hrEZE2jQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_5OgZ9Z7NEeeE49hrEZE2jQ"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_5OgZ-Z7NEeeE49hrEZE2jQ" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_5OEVEJ7NEeeE49hrEZE2jQ"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5OgZ9p7NEeeE49hrEZE2jQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5OgZ957NEeeE49hrEZE2jQ"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_5OgZ-J7NEeeE49hrEZE2jQ"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_b7G0gJ7REeeE49hrEZE2jQ" type="Element_ContainmentEdge" source="_gdohUJ7NEeeE49hrEZE2jQ" target="_v45VcJ7NEeeE49hrEZE2jQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_b7G0gZ7REeeE49hrEZE2jQ"/>
+ <element xsi:nil="true"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_b7G0gp7REeeE49hrEZE2jQ"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_b7wUwJ7REeeE49hrEZE2jQ" id="(0.21352313167259787,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_b7wUwZ7REeeE49hrEZE2jQ" id="(0.498220640569395,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_cP_fYJ7REeeE49hrEZE2jQ" type="Element_ContainmentEdge" source="_gdohUJ7NEeeE49hrEZE2jQ" target="_5ObhcJ7NEeeE49hrEZE2jQ">
+ <styles xmi:type="notation:FontStyle" xmi:id="_cP_fYZ7REeeE49hrEZE2jQ"/>
+ <element xsi:nil="true"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_cP_fYp7REeeE49hrEZE2jQ"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cQxigJ7REeeE49hrEZE2jQ" id="(0.498220640569395,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_cQxigZ7REeeE49hrEZE2jQ" id="(0.498220640569395,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_m82KpKq5EeecK7SK84ftVA" type="StereotypeCommentLink" source="_m8wEAKq5EeecK7SK84ftVA" target="_m82KoKq5EeecK7SK84ftVA">
+ <styles xmi:type="notation:FontStyle" xmi:id="_m82Kpaq5EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_m82xsqq5EeecK7SK84ftVA" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_m8YQkKq5EeecK7SK84ftVA"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_m82Kpqq5EeecK7SK84ftVA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_m82xsKq5EeecK7SK84ftVA"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_m82xsaq5EeecK7SK84ftVA"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_qBACuaq6EeecK7SK84ftVA" type="StereotypeCommentLink" source="_qA7xQKq6EeecK7SK84ftVA" target="_qBACtaq6EeecK7SK84ftVA">
+ <styles xmi:type="notation:FontStyle" xmi:id="_qBACuqq6EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_qBACvqq6EeecK7SK84ftVA" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_qAqrgKq6EeecK7SK84ftVA"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qBACu6q6EeecK7SK84ftVA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qBACvKq6EeecK7SK84ftVA"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_qBACvaq6EeecK7SK84ftVA"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_rAyPR6q7EeecK7SK84ftVA" type="StereotypeCommentLink" source="_rAsIoKq7EeecK7SK84ftVA" target="_rAyPQ6q7EeecK7SK84ftVA">
+ <styles xmi:type="notation:FontStyle" xmi:id="_rAyPSKq7EeecK7SK84ftVA"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_rAyPTKq7EeecK7SK84ftVA" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_rAYmoKq7EeecK7SK84ftVA"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_rAyPSaq7EeecK7SK84ftVA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rAyPSqq7EeecK7SK84ftVA"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rAyPS6q7EeecK7SK84ftVA"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_b9dRR6zwEeekPI6hsC9IeA" type="StereotypeCommentLink" source="_b9XxsKzwEeekPI6hsC9IeA" target="_b9dRQ6zwEeekPI6hsC9IeA">
+ <styles xmi:type="notation:FontStyle" xmi:id="_b9dRSKzwEeekPI6hsC9IeA"/>
+ <styles xmi:type="notation:EObjectValueStyle" xmi:id="_b9dRTKzwEeekPI6hsC9IeA" name="BASE_ELEMENT">
+ <eObjectValue xmi:type="uml:Class" href="model.uml#_b87s0KzwEeekPI6hsC9IeA"/>
+ </styles>
+ <element xsi:nil="true"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_b9dRSazwEeekPI6hsC9IeA" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_b9dRSqzwEeekPI6hsC9IeA"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_b9dRS6zwEeekPI6hsC9IeA"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_BKehgKzxEeekPI6hsC9IeA" type="Element_ContainmentEdge" source="_gdohUJ7NEeeE49hrEZE2jQ" target="_b9XxsKzwEeekPI6hsC9IeA">
+ <styles xmi:type="notation:FontStyle" xmi:id="_BKehgazxEeekPI6hsC9IeA"/>
+ <element xsi:nil="true"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_BKehgqzxEeekPI6hsC9IeA"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BLEXYKzxEeekPI6hsC9IeA" id="(0.7829181494661922,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_BLEXYazxEeekPI6hsC9IeA" id="(0.5,0.0)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_GvZioKzxEeekPI6hsC9IeA" type="Element_ContainmentEdge" source="_b9XxsKzwEeekPI6hsC9IeA" target="_qA7xQKq6EeecK7SK84ftVA">
+ <styles xmi:type="notation:FontStyle" xmi:id="_GvZioazxEeekPI6hsC9IeA"/>
+ <element xsi:nil="true"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GvZioqzxEeekPI6hsC9IeA" points="[820, 380, -643984, -643984]$[820, 460, -643984, -643984]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_GwE4EKzxEeekPI6hsC9IeA" id="(0.5,1.0)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_GwE4EazxEeekPI6hsC9IeA" id="(0.4666666666666667,0.0)"/>
+ </edges>
+ </notation:Diagram>
+ <css:StyleSheetReference xmi:id="_FDb6MJ7GEeeE49hrEZE2jQ" path="/zzzz/style.css"/>
+ <notation:Diagram xmi:id="_zNZ8sJ7ZEeeE49hrEZE2jQ" type="PapyrusUMLClassDiagram" name="General PackageDiagram" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_0ovSQJ7ZEeeE49hrEZE2jQ" type="Package_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_0ov5UJ7ZEeeE49hrEZE2jQ" type="Package_NameLabel"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_0ov5UZ7ZEeeE49hrEZE2jQ" type="Package_PackagedElementCompartment">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_0ov5Up7ZEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0ov5U57ZEeeE49hrEZE2jQ"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_TR6-4J7WEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0ovSQZ7ZEeeE49hrEZE2jQ" x="40" y="40" width="501" height="161"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_zNZ8sZ7ZEeeE49hrEZE2jQ" name="diagram_compatibility_version" stringValue="1.3.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_zNZ8sp7ZEeeE49hrEZE2jQ"/>
+ <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_zNZ8s57ZEeeE49hrEZE2jQ" diagramKindId="org.eclipse.papyrus.sysml14.diagram.package">
+ <owner xmi:type="uml:Model" href="model.uml#_uHM0wJ4REee5QOeiHCkWLg"/>
+ </styles>
+ <element xmi:type="uml:Model" href="model.uml#_uHM0wJ4REee5QOeiHCkWLg"/>
+ </notation:Diagram>
+ <css:StyleSheetReference xmi:id="_zKSsYJ7bEeeE49hrEZE2jQ" path="/zzzz/style.css"/>
+ <css:StyleSheetReference xmi:id="_a56m0J7dEeeE49hrEZE2jQ" path="/zzzz/style.css"/>
+ <notation:Diagram xmi:id="_ugWHgJ9kEeeYB7FiL01XdQ" type="PapyrusUMLClassDiagram" name="NonFunctionnalRequirementDiagram" measurementUnit="Pixel">
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_ugWHgZ9kEeeYB7FiL01XdQ" name="diagram_compatibility_version" stringValue="1.3.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_ugWHgp9kEeeYB7FiL01XdQ"/>
+ <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_ugWHg59kEeeYB7FiL01XdQ" diagramKindId="org.eclipse.papyrus.sysml14.diagram.requirement">
+ <owner xmi:type="uml:Package" href="model.uml#_TR6-4J7WEeeE49hrEZE2jQ"/>
+ </styles>
+ <styles xmi:type="notation:EObjectListValueStyle" xmi:id="_L6q6sJ9pEeeIcPIv0XaAgg" name="css_stylesheets" eObjectListValue="_L6pskJ9pEeeIcPIv0XaAgg"/>
+ <element xmi:type="uml:Package" href="model.uml#_TR6-4J7WEeeE49hrEZE2jQ"/>
+ </notation:Diagram>
+ <nattable:Table xmi:id="_dDS6cJ9nEeeIcPIv0XaAgg" name="RequirementTreeTable" currentRowAxisProvider="_dDS6dZ9nEeeIcPIv0XaAgg" currentColumnAxisProvider="_dDS6cp9nEeeIcPIv0XaAgg" tableKindId="org.eclipse.papyrus.sysml14.table.requirementTree">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_dDUvoJ9nEeeIcPIv0XaAgg" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_dDUvoZ9nEeeIcPIv0XaAgg" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:IntListValueStyle" xmi:id="_dDS6cZ9nEeeIcPIv0XaAgg" name="hiddenCategoriesByDepth">
+ <intListValue>0</intListValue>
+ <intListValue>1</intListValue>
+ <intListValue>2</intListValue>
+ <intListValue>3</intListValue>
+ <intListValue>4</intListValue>
+ </styles>
+ <context xmi:type="uml:Package" href="model.uml#_TR6-4J7WEeeE49hrEZE2jQ"/>
+ <owner xmi:type="uml:Package" href="model.uml#_TR6-4J7WEeeE49hrEZE2jQ"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_dDS6cp9nEeeIcPIv0XaAgg" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_dDS6c59nEeeIcPIv0XaAgg" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_dDS6dJ9nEeeIcPIv0XaAgg" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_gqgRsJ9nEeeIcPIv0XaAgg" name="axisWidth" intValue="760"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_dDS6dZ9nEeeIcPIv0XaAgg" description="This axis provider manages the rows, according to the wanted hierarchy" name="HierarchicalRowAxisManager" disconnectSlave="true"/>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_l9PWoJ9nEeeIcPIv0XaAgg" indexStyle="NUMERIC" displayIndex="false">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_l9QkwJ9nEeeIcPIv0XaAgg" name="rowLabelWidth" intValue="179"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <css:StyleSheetReference xmi:id="_L6pskJ9pEeeIcPIv0XaAgg" path="/zzzz/style.css"/>
+ <nattable:Table xmi:id="_jAJesKdPEee2pt2XW3Ky2w" name="PackageRequirementTreeTable" currentRowAxisProvider="_jAJetadPEee2pt2XW3Ky2w" currentColumnAxisProvider="_jAJesqdPEee2pt2XW3Ky2w" tableKindId="org.eclipse.papyrus.sysml14.table.requirementTree">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_jAKs0KdPEee2pt2XW3Ky2w" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_jAKs0adPEee2pt2XW3Ky2w" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:IntListValueStyle" xmi:id="_jAJesadPEee2pt2XW3Ky2w" name="hiddenCategoriesByDepth">
+ <intListValue>0</intListValue>
+ <intListValue>1</intListValue>
+ <intListValue>2</intListValue>
+ <intListValue>3</intListValue>
+ <intListValue>4</intListValue>
+ </styles>
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_5FF9UKzFEeekPI6hsC9IeA" name="rowHeaderWidth" intValue="273"/>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_kR5SAK0DEeekPI6hsC9IeA" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Package" href="model.uml#_7oxPsKdOEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Package" href="model.uml#_7oxPsKdOEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_jAJesqdPEee2pt2XW3Ky2w" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_jAJes6dPEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_jAJetKdPEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_mhHEAKdPEee2pt2XW3Ky2w" name="axisWidth" intValue="658"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_jAJetadPEee2pt2XW3Ky2w" description="This axis provider manages the rows, according to the wanted hierarchy" name="HierarchicalRowAxisManager" disconnectSlave="true"/>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_mMgtAKdPEee2pt2XW3Ky2w" indexStyle="NUMERIC" displayIndex="false">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_mMiiMKdPEee2pt2XW3Ky2w" name="rowLabelWidth" intValue="273"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <notation:Diagram xmi:id="_wkt28KdPEee2pt2XW3Ky2w" type="PapyrusUMLClassDiagram" name="CompositionPackageDiagram" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_w-874KdPEee2pt2XW3Ky2w" type="Package_Shape">
+ <children xmi:type="notation:DecorationNode" xmi:id="_w-874qdPEee2pt2XW3Ky2w" type="Package_NameLabel"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_w-8746dPEee2pt2XW3Ky2w" type="Package_PackagedElementCompartment">
+ <children xmi:type="notation:Shape" xmi:id="_yafFwKdPEee2pt2XW3Ky2w" type="Package_Shape_CN">
+ <children xmi:type="notation:DecorationNode" xmi:id="_yafFwqdPEee2pt2XW3Ky2w" type="Package_NameLabel_CN"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_yafFw6dPEee2pt2XW3Ky2w" type="Package_PackagedElementCompartment_CN">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yafFxKdPEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yafFxadPEee2pt2XW3Ky2w"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_7oxPsKdOEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yafFwadPEee2pt2XW3Ky2w" x="14" y="12"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_3Fe1QKdPEee2pt2XW3Ky2w" type="Package_Shape_CN">
+ <children xmi:type="notation:DecorationNode" xmi:id="_3Fe1QqdPEee2pt2XW3Ky2w" type="Package_NameLabel_CN"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_3Fe1Q6dPEee2pt2XW3Ky2w" type="Package_PackagedElementCompartment_CN">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_3Fe1RKdPEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3Fe1RadPEee2pt2XW3Ky2w"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_3FUdMKdPEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3Fe1QadPEee2pt2XW3Ky2w" x="234" y="12"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_5psecKdPEee2pt2XW3Ky2w" type="Package_Shape_CN">
+ <children xmi:type="notation:DecorationNode" xmi:id="_5ptFgKdPEee2pt2XW3Ky2w" type="Package_NameLabel_CN"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5ptFgadPEee2pt2XW3Ky2w" type="Package_PackagedElementCompartment_CN">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5ptFgqdPEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5ptFg6dPEee2pt2XW3Ky2w"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_5pj7kKdPEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5psecadPEee2pt2XW3Ky2w" x="234" y="132"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_7F-2QKdPEee2pt2XW3Ky2w" type="Package_Shape_CN">
+ <children xmi:type="notation:DecorationNode" xmi:id="_7F-2QqdPEee2pt2XW3Ky2w" type="Package_NameLabel_CN"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_7F-2Q6dPEee2pt2XW3Ky2w" type="Package_PackagedElementCompartment_CN">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_7F-2RKdPEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7F-2RadPEee2pt2XW3Ky2w"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_7FzQEKdPEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7F-2QadPEee2pt2XW3Ky2w" x="454" y="252"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_9zzucKdPEee2pt2XW3Ky2w" type="Package_Shape_CN">
+ <children xmi:type="notation:DecorationNode" xmi:id="_9zzucqdPEee2pt2XW3Ky2w" type="Package_NameLabel_CN"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_9z0VgKdPEee2pt2XW3Ky2w" type="Package_PackagedElementCompartment_CN">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_9z0VgadPEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9z0VgqdPEee2pt2XW3Ky2w"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_9zpWYKdPEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_9zzucadPEee2pt2XW3Ky2w" x="674" y="372"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="__rQ_UKdPEee2pt2XW3Ky2w" type="Package_Shape_CN">
+ <children xmi:type="notation:DecorationNode" xmi:id="__rQ_UqdPEee2pt2XW3Ky2w" type="Package_NameLabel_CN"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="__rQ_U6dPEee2pt2XW3Ky2w" type="Package_PackagedElementCompartment_CN">
+ <styles xmi:type="notation:TitleStyle" xmi:id="__rQ_VKdPEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__rQ_VadPEee2pt2XW3Ky2w"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#__rFZIKdPEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__rQ_UadPEee2pt2XW3Ky2w" x="454" y="372"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_A8UXgKdQEee2pt2XW3Ky2w" type="Package_Shape_CN">
+ <children xmi:type="notation:DecorationNode" xmi:id="_A8UXgqdQEee2pt2XW3Ky2w" type="Package_NameLabel_CN"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_A8UXg6dQEee2pt2XW3Ky2w" type="Package_PackagedElementCompartment_CN">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_A8UXhKdQEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_A8UXhadQEee2pt2XW3Ky2w"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_A8GVEKdQEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_A8UXgadQEee2pt2XW3Ky2w" x="14" y="132"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Cw8W0KdQEee2pt2XW3Ky2w" type="Package_Shape_CN">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Cw894KdQEee2pt2XW3Ky2w" type="Package_NameLabel_CN"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Cw894adQEee2pt2XW3Ky2w" type="Package_PackagedElementCompartment_CN">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Cw894qdQEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Cw8946dQEee2pt2XW3Ky2w"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_CwtGQKdQEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Cw8W0adQEee2pt2XW3Ky2w" x="14" y="252"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_HP-G4KdQEee2pt2XW3Ky2w" type="Package_Shape_CN">
+ <children xmi:type="notation:DecorationNode" xmi:id="_HP-G4qdQEee2pt2XW3Ky2w" type="Package_NameLabel_CN"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HP-G46dQEee2pt2XW3Ky2w" type="Package_PackagedElementCompartment_CN">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HP-G5KdQEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HP-G5adQEee2pt2XW3Ky2w"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_HPxSkKdQEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HP-G4adQEee2pt2XW3Ky2w" x="234" y="372"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Iak40KdQEee2pt2XW3Ky2w" type="Package_Shape_CN">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Iak40qdQEee2pt2XW3Ky2w" type="Package_NameLabel_CN"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Iak406dQEee2pt2XW3Ky2w" type="Package_PackagedElementCompartment_CN">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Iak41KdQEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Iak41adQEee2pt2XW3Ky2w"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_IaVoQKdQEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Iak40adQEee2pt2XW3Ky2w" x="14" y="372"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_w-875KdPEee2pt2XW3Ky2w"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_w-875adPEee2pt2XW3Ky2w"/>
+ </children>
+ <element xmi:type="uml:Package" href="model.uml#_TR6-4J7WEeeE49hrEZE2jQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_w-874adPEee2pt2XW3Ky2w" width="1121" height="521"/>
+ </children>
+ <styles xmi:type="notation:StringValueStyle" xmi:id="_wkt28adPEee2pt2XW3Ky2w" name="diagram_compatibility_version" stringValue="1.3.0"/>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_wkt28qdPEee2pt2XW3Ky2w"/>
+ <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_wkt286dPEee2pt2XW3Ky2w" diagramKindId="org.eclipse.papyrus.sysml14.diagram.package">
+ <owner xmi:type="uml:Package" href="model.uml#_TR6-4J7WEeeE49hrEZE2jQ"/>
+ </styles>
+ <element xmi:type="uml:Package" href="model.uml#_TR6-4J7WEeeE49hrEZE2jQ"/>
+ </notation:Diagram>
+ <nattable:Table xmi:id="_9fC9YKdlEee2pt2XW3Ky2w" name="ProfileRequirementTreeTable" currentRowAxisProvider="_9fC9ZadlEee2pt2XW3Ky2w" currentColumnAxisProvider="_9fC9YqdlEee2pt2XW3Ky2w" tableKindId="org.eclipse.papyrus.sysml14.table.requirementTree">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_9fDkcKdlEee2pt2XW3Ky2w" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_9fDkcadlEee2pt2XW3Ky2w" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:IntListValueStyle" xmi:id="_9fC9YadlEee2pt2XW3Ky2w" name="hiddenCategoriesByDepth">
+ <intListValue>0</intListValue>
+ <intListValue>1</intListValue>
+ <intListValue>2</intListValue>
+ <intListValue>3</intListValue>
+ <intListValue>4</intListValue>
+ </styles>
+ <context xmi:type="uml:Package" href="model.uml#_3FUdMKdPEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Package" href="model.uml#_3FUdMKdPEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_9fC9YqdlEee2pt2XW3Ky2w" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_9fC9Y6dlEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_9fC9ZKdlEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_QQLZwKdpEee2pt2XW3Ky2w" name="axisWidth" intValue="1310"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_9fC9ZadlEee2pt2XW3Ky2w" description="This axis provider manages the rows, according to the wanted hierarchy" name="HierarchicalRowAxisManager" disconnectSlave="true"/>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_vUAy4KzHEeekPI6hsC9IeA" indexStyle="NUMERIC" displayIndex="false">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_vUAy4azHEeekPI6hsC9IeA" name="rowLabelWidth" intValue="299"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_AuVj4KdmEee2pt2XW3Ky2w" name="EnumerationRequirementTreeTable" currentRowAxisProvider="_AuVj5admEee2pt2XW3Ky2w" currentColumnAxisProvider="_AuVj4qdmEee2pt2XW3Ky2w" tableKindId="org.eclipse.papyrus.sysml14.table.requirementTree">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_AuWK8KdmEee2pt2XW3Ky2w" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_AuWK8admEee2pt2XW3Ky2w" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:IntListValueStyle" xmi:id="_AuVj4admEee2pt2XW3Ky2w" name="hiddenCategoriesByDepth">
+ <intListValue>0</intListValue>
+ <intListValue>1</intListValue>
+ <intListValue>2</intListValue>
+ <intListValue>3</intListValue>
+ <intListValue>4</intListValue>
+ </styles>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_rAyL4K0DEeekPI6hsC9IeA" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Package" href="model.uml#_5pj7kKdPEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Package" href="model.uml#_5pj7kKdPEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_AuVj4qdmEee2pt2XW3Ky2w" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_AuVj46dmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_AuVj5KdmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_RQsbkKdpEee2pt2XW3Ky2w" name="axisWidth" intValue="727"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_AuVj5admEee2pt2XW3Ky2w" description="This axis provider manages the rows, according to the wanted hierarchy" name="HierarchicalRowAxisManager" disconnectSlave="true"/>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_DWdPwK6EEeexmuCIN6Rutw" indexStyle="NUMERIC" displayIndex="false">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_DWdPwa6EEeexmuCIN6Rutw" name="rowLabelWidth" intValue="321"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_DlunwKdmEee2pt2XW3Ky2w" name="EnumerationLitteralRequirementTreeTable" currentRowAxisProvider="_DlunxadmEee2pt2XW3Ky2w" currentColumnAxisProvider="_DlunwqdmEee2pt2XW3Ky2w" tableKindId="org.eclipse.papyrus.sysml14.table.requirementTree">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DlvO0KdmEee2pt2XW3Ky2w" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_DlvO0admEee2pt2XW3Ky2w" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:IntListValueStyle" xmi:id="_DlunwadmEee2pt2XW3Ky2w" name="hiddenCategoriesByDepth">
+ <intListValue>0</intListValue>
+ <intListValue>1</intListValue>
+ <intListValue>2</intListValue>
+ <intListValue>3</intListValue>
+ <intListValue>4</intListValue>
+ </styles>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_uzWekK0DEeekPI6hsC9IeA" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Package" href="model.uml#_7FzQEKdPEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Package" href="model.uml#_7FzQEKdPEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_DlunwqdmEee2pt2XW3Ky2w" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_Dlunw6dmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_DlunxKdmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_S7P44KdpEee2pt2XW3Ky2w" name="axisWidth" intValue="994"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_DlunxadmEee2pt2XW3Ky2w" description="This axis provider manages the rows, according to the wanted hierarchy" name="HierarchicalRowAxisManager" disconnectSlave="true"/>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_mSDagK6FEeexmuCIN6Rutw" indexStyle="NUMERIC" displayIndex="false">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_mSEBkK6FEeexmuCIN6Rutw" name="rowLabelWidth" intValue="330"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_GYoNMKdmEee2pt2XW3Ky2w" name="ElementImportRequirementTreeTable" currentRowAxisProvider="_GYoNNadmEee2pt2XW3Ky2w" currentColumnAxisProvider="_GYoNMqdmEee2pt2XW3Ky2w" tableKindId="org.eclipse.papyrus.sysml14.table.requirementTree">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GYo0QKdmEee2pt2XW3Ky2w" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GYo0QadmEee2pt2XW3Ky2w" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:IntListValueStyle" xmi:id="_GYoNMadmEee2pt2XW3Ky2w" name="hiddenCategoriesByDepth">
+ <intListValue>0</intListValue>
+ <intListValue>1</intListValue>
+ <intListValue>2</intListValue>
+ <intListValue>3</intListValue>
+ <intListValue>4</intListValue>
+ </styles>
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_oO90EKzNEeekPI6hsC9IeA" name="rowHeaderWidth" intValue="287"/>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_Egvn4K6gEeexmuCIN6Rutw" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Package" href="model.uml#_9zpWYKdPEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Package" href="model.uml#_9zpWYKdPEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_GYoNMqdmEee2pt2XW3Ky2w" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_GYoNM6dmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_l2b2cKzNEeekPI6hsC9IeA" name="axisWidth" intValue="137"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_GYoNNKdmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_UAuTMKdpEee2pt2XW3Ky2w" name="axisWidth" intValue="788"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_GYoNNadmEee2pt2XW3Ky2w" description="This axis provider manages the rows, according to the wanted hierarchy" name="HierarchicalRowAxisManager" disconnectSlave="true"/>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_n0HEEKzNEeekPI6hsC9IeA" indexStyle="NUMERIC" displayIndex="false">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_n0ISMKzNEeekPI6hsC9IeA" name="rowLabelWidth" intValue="358"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_IS4TYKdmEee2pt2XW3Ky2w" name="PackageImportRequirementTreeTable" currentRowAxisProvider="_IS4TZadmEee2pt2XW3Ky2w" currentColumnAxisProvider="_IS4TYqdmEee2pt2XW3Ky2w" tableKindId="org.eclipse.papyrus.sysml14.table.requirementTree">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_IS46cKdmEee2pt2XW3Ky2w" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_IS46cadmEee2pt2XW3Ky2w" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:IntListValueStyle" xmi:id="_IS4TYadmEee2pt2XW3Ky2w" name="hiddenCategoriesByDepth">
+ <intListValue>0</intListValue>
+ <intListValue>1</intListValue>
+ <intListValue>2</intListValue>
+ <intListValue>3</intListValue>
+ <intListValue>4</intListValue>
+ </styles>
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_NueigKzOEeekPI6hsC9IeA" name="rowHeaderWidth" intValue="337"/>
+ <context xmi:type="uml:Package" href="model.uml#__rFZIKdPEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Package" href="model.uml#__rFZIKdPEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_IS4TYqdmEee2pt2XW3Ky2w" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_IS4TY6dmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_IS4TZKdmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_U2myUKdpEee2pt2XW3Ky2w" name="axisWidth" intValue="651"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_IS4TZadmEee2pt2XW3Ky2w" description="This axis provider manages the rows, according to the wanted hierarchy" name="HierarchicalRowAxisManager" disconnectSlave="true"/>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_ldfycKdxEee5y8oYKlImkQ" indexStyle="NUMERIC" displayIndex="false">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_ldhAkKdxEee5y8oYKlImkQ" name="rowLabelWidth" intValue="363"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_LReLcKdmEee2pt2XW3Ky2w" name="StereotypeRequirementTreeTable" currentRowAxisProvider="_LReLdadmEee2pt2XW3Ky2w" currentColumnAxisProvider="_LReLcqdmEee2pt2XW3Ky2w" tableKindId="org.eclipse.papyrus.sysml14.table.requirementTree">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_LReygKdmEee2pt2XW3Ky2w" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_LReygadmEee2pt2XW3Ky2w" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:IntListValueStyle" xmi:id="_LReLcadmEee2pt2XW3Ky2w" name="hiddenCategoriesByDepth">
+ <intListValue>0</intListValue>
+ <intListValue>1</intListValue>
+ <intListValue>2</intListValue>
+ <intListValue>3</intListValue>
+ <intListValue>4</intListValue>
+ </styles>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_HTQNwK6KEeexmuCIN6Rutw" name="autoResizeCellHeight" booleanValue="true"/>
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_iQM8YK6KEeexmuCIN6Rutw" name="rowHeaderWidth" intValue="307"/>
+ <context xmi:type="uml:Package" href="model.uml#_A8GVEKdQEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Package" href="model.uml#_A8GVEKdQEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_LReLcqdmEee2pt2XW3Ky2w" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_LReLc6dmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_LReLdKdmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_V80zgKdpEee2pt2XW3Ky2w" name="axisWidth" intValue="772"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_6Sp2gK6PEeexmuCIN6Rutw" element="property_of_stereotype:/SysML::Requirements::Requirement::refinedBy">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_LReLdadmEee2pt2XW3Ky2w" description="This axis provider manages the rows, according to the wanted hierarchy" name="HierarchicalRowAxisManager" disconnectSlave="true"/>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_WRAmgK6KEeexmuCIN6Rutw" indexStyle="NUMERIC" displayIndex="false">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_WRAmga6KEeexmuCIN6Rutw" name="rowLabelWidth" intValue="307"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_Nzy-QKdmEee2pt2XW3Ky2w" name="PropertyRequirementTreeTable" currentRowAxisProvider="_Nzy-RadmEee2pt2XW3Ky2w" currentColumnAxisProvider="_Nzy-QqdmEee2pt2XW3Ky2w" tableKindId="org.eclipse.papyrus.sysml14.table.requirementTree">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Nzy-RqdmEee2pt2XW3Ky2w" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Nzy-R6dmEee2pt2XW3Ky2w" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:IntListValueStyle" xmi:id="_Nzy-QadmEee2pt2XW3Ky2w" name="hiddenCategoriesByDepth">
+ <intListValue>0</intListValue>
+ <intListValue>1</intListValue>
+ <intListValue>2</intListValue>
+ <intListValue>3</intListValue>
+ <intListValue>4</intListValue>
+ </styles>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_0E3aYK6WEeexmuCIN6Rutw" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Package" href="model.uml#_CwtGQKdQEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Package" href="model.uml#_CwtGQKdQEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_Nzy-QqdmEee2pt2XW3Ky2w" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_Nzy-Q6dmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_2nXzYK6WEeexmuCIN6Rutw" name="axisWidth" intValue="114"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_Nzy-RKdmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_Ww-0UKdpEee2pt2XW3Ky2w" name="axisWidth" intValue="792"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_Nzy-RadmEee2pt2XW3Ky2w" description="This axis provider manages the rows, according to the wanted hierarchy" name="HierarchicalRowAxisManager" disconnectSlave="true"/>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_O7w_kKzPEeekPI6hsC9IeA" indexStyle="NUMERIC" displayIndex="false">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_O7xmoKzPEeekPI6hsC9IeA" name="rowLabelWidth" intValue="242"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_ceIrwKdmEee2pt2XW3Ky2w" name="ExtensionRequirementTreeTable" currentRowAxisProvider="_ceIrxadmEee2pt2XW3Ky2w" currentColumnAxisProvider="_ceIrwqdmEee2pt2XW3Ky2w" tableKindId="org.eclipse.papyrus.sysml14.table.requirementTree">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ceJS0KdmEee2pt2XW3Ky2w" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ceJS0admEee2pt2XW3Ky2w" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:IntListValueStyle" xmi:id="_ceIrwadmEee2pt2XW3Ky2w" name="hiddenCategoriesByDepth">
+ <intListValue>0</intListValue>
+ <intListValue>1</intListValue>
+ <intListValue>2</intListValue>
+ <intListValue>3</intListValue>
+ <intListValue>4</intListValue>
+ </styles>
+ <context xmi:type="uml:Package" href="model.uml#_HPxSkKdQEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Package" href="model.uml#_HPxSkKdQEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_ceIrwqdmEee2pt2XW3Ky2w" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_ceIrw6dmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_ceIrxKdmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_bFjA0KdpEee2pt2XW3Ky2w" name="axisWidth" intValue="536"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_ceIrxadmEee2pt2XW3Ky2w" description="This axis provider manages the rows, according to the wanted hierarchy" name="HierarchicalRowAxisManager" disconnectSlave="true"/>
+ </nattable:Table>
+ <nattable:Table xmi:id="_ert9oKdmEee2pt2XW3Ky2w" name="GeneralizationRequirementTreeTable" currentRowAxisProvider="_ert9padmEee2pt2XW3Ky2w" currentColumnAxisProvider="_ert9oqdmEee2pt2XW3Ky2w" tableKindId="org.eclipse.papyrus.sysml14.table.requirementTree">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ert9pqdmEee2pt2XW3Ky2w" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ert9p6dmEee2pt2XW3Ky2w" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:IntListValueStyle" xmi:id="_ert9oadmEee2pt2XW3Ky2w" name="hiddenCategoriesByDepth">
+ <intListValue>0</intListValue>
+ <intListValue>1</intListValue>
+ <intListValue>2</intListValue>
+ <intListValue>3</intListValue>
+ <intListValue>4</intListValue>
+ </styles>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_Qso1MK8dEeee2YU5cusFOw" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Package" href="model.uml#_IaVoQKdQEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Package" href="model.uml#_IaVoQKdQEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_ert9oqdmEee2pt2XW3Ky2w" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_ert9o6dmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_ert9pKdmEee2pt2XW3Ky2w" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_cS7Z8KdpEee2pt2XW3Ky2w" name="axisWidth" intValue="529"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_ert9padmEee2pt2XW3Ky2w" description="This axis provider manages the rows, according to the wanted hierarchy" name="HierarchicalRowAxisManager" disconnectSlave="true"/>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_iJ4IIK8dEeee2YU5cusFOw" indexStyle="NUMERIC" displayIndex="false">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_iJ4vMK8dEeee2YU5cusFOw" name="rowLabelWidth" intValue="464"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_ZCEQQKzGEeekPI6hsC9IeA" name="PackageRequirements" currentRowAxisProvider="_ZCEQQqzGEeekPI6hsC9IeA" currentColumnAxisProvider="_ZCEQQazGEeekPI6hsC9IeA" tableKindId="org.eclipse.papyrus.uml.table.generic">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ZCE3UKzGEeekPI6hsC9IeA" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ZCE3UazGEeekPI6hsC9IeA" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_yqsBsKzxEeekPI6hsC9IeA" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Class" href="model.uml#_KfP7wKdPEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Class" href="model.uml#_KfP7wKdPEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_ZCEQQazGEeekPI6hsC9IeA" description="This axis provider provides available columns according to the rows of the table (features of the object displayed on the other axis)" name="UML Feature axis provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_LV6qV68sEeee2YU5cusFOw" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_LV6qVq8sEeee2YU5cusFOw" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_fbt68K8sEeee2YU5cusFOw" name="axisWidth" intValue="670"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_ZCEQQqzGEeekPI6hsC9IeA" description="This axis provider contains the object dropped by the user into the table" name="DroppedElementAxisProvider">
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_rxTEqKzIEeekPI6hsC9IeA">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_mKhpYKzIEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_rxTErazIEeekPI6hsC9IeA">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_mM0vcKzIEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_LVvrMK8sEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_N5QLAK6CEeexmuCIN6Rutw"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_LVvrMa8sEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_JqrdQKzLEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_LVvrMq8sEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_JqsEUKzLEeekPI6hsC9IeA"/>
+ </axis>
+ </rowAxisProvidersHistory>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_Ngxh4KzHEeekPI6hsC9IeA" indexStyle="NUMERIC">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_NgywAKzHEeekPI6hsC9IeA" name="rowLabelWidth" intValue="311"/>
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_D3dMUKzJEeekPI6hsC9IeA" name="rowIndexWidth" intValue="36"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_fpGZMKzHEeekPI6hsC9IeA" name="ProfileRequirements" currentRowAxisProvider="_fpGZN6zHEeekPI6hsC9IeA" currentColumnAxisProvider="_fpGZM6zHEeekPI6hsC9IeA" tableKindId="org.eclipse.papyrus.uml.table.generic">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_fpGZMazHEeekPI6hsC9IeA" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_fpGZMqzHEeekPI6hsC9IeA" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_Ti7_MKz0EeekPI6hsC9IeA" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Class" href="model.uml#_KfP7wKdPEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Class" href="model.uml#_KqNOkKdPEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_fpGZM6zHEeekPI6hsC9IeA" description="This axis provider provides available columns according to the rows of the table (features of the object displayed on the other axis)" name="UML Feature axis provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_uSZcl66CEeexmuCIN6Rutw" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_uSZcmK6CEeexmuCIN6Rutw" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_9C-bEK8pEeee2YU5cusFOw" name="axisWidth" intValue="660"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_fpGZN6zHEeekPI6hsC9IeA" description="This axis provider contains the object dropped by the user into the table" name="DroppedElementAxisProvider">
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_OOmJ2KzKEeekPI6hsC9IeA">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_H9MdMKzKEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_OOmJ3azKEeekPI6hsC9IeA">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_H_zFQKzKEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_qnyzEK6CEeexmuCIN6Rutw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_N5QLAK6CEeexmuCIN6Rutw"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_uSY1gK6CEeexmuCIN6Rutw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_JqrdQKzLEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_uSY1ga6CEeexmuCIN6Rutw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_JqsEUKzLEeekPI6hsC9IeA"/>
+ </axis>
+ </rowAxisProvidersHistory>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_fpGZPKzHEeekPI6hsC9IeA" indexStyle="NUMERIC">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_fpGZPazHEeekPI6hsC9IeA" name="rowLabelWidth" intValue="358"/>
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_zN_8MKzHEeekPI6hsC9IeA" name="rowIndexWidth" intValue="32"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_3347oKzLEeekPI6hsC9IeA" name="EnumerationRequirements" currentRowAxisProvider="_3347p6zLEeekPI6hsC9IeA" currentColumnAxisProvider="_3347o6zLEeekPI6hsC9IeA" tableKindId="org.eclipse.papyrus.uml.table.generic">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_3347oazLEeekPI6hsC9IeA" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_3347oqzLEeekPI6hsC9IeA" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_dGDewKz1EeekPI6hsC9IeA" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Class" href="model.uml#_KfP7wKdPEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Class" href="model.uml#_Kz9AcKdPEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_3347o6zLEeekPI6hsC9IeA" description="This axis provider provides available columns according to the rows of the table (features of the object displayed on the other axis)" name="UML Feature axis provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_QDwCt6zMEeekPI6hsC9IeA" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_cKmjIKz1EeekPI6hsC9IeA" name="axisWidth" intValue="126"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_QDwCtKzMEeekPI6hsC9IeA" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_cnD1oKz1EeekPI6hsC9IeA" name="axisWidth" intValue="614"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_3347p6zLEeekPI6hsC9IeA" description="This axis provider contains the object dropped by the user into the table" name="DroppedElementAxisProvider">
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_QDm4wazMEeekPI6hsC9IeA">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_LeUIoKzMEeekPI6hsC9IeA"/>
+ </axis>
+ </rowAxisProvidersHistory>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_3347qKzLEeekPI6hsC9IeA" indexStyle="NUMERIC">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_3347qazLEeekPI6hsC9IeA" name="rowLabelWidth" intValue="353"/>
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_tB6F8K2OEeeWzbvclvEimw" name="rowIndexWidth" intValue="32"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_s8kysKzNEeekPI6hsC9IeA" name="ElementImportRequirements" currentRowAxisProvider="_s8kyt6zNEeekPI6hsC9IeA" currentColumnAxisProvider="_s8kys6zNEeekPI6hsC9IeA" tableKindId="org.eclipse.papyrus.uml.table.generic">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_s8kysazNEeekPI6hsC9IeA" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_s8kysqzNEeekPI6hsC9IeA" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_raFIkKz2EeekPI6hsC9IeA" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Class" href="model.uml#_KfP7wKdPEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Class" href="model.uml#_K27b8KdPEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_s8kys6zNEeekPI6hsC9IeA" description="This axis provider provides available columns according to the rows of the table (features of the object displayed on the other axis)" name="UML Feature axis provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_uO0dt6zNEeekPI6hsC9IeA" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_2E5wcK2OEeeWzbvclvEimw" name="axisWidth" intValue="116"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_uO0dtKzNEeekPI6hsC9IeA" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_fdPjIKz2EeekPI6hsC9IeA" name="axisWidth" intValue="507"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_s8kyt6zNEeekPI6hsC9IeA" description="This axis provider contains the object dropped by the user into the table" name="DroppedElementAxisProvider">
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_uOqFoazNEeekPI6hsC9IeA">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_lJX8IKzNEeekPI6hsC9IeA"/>
+ </axis>
+ </rowAxisProvidersHistory>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_s8kyuKzNEeekPI6hsC9IeA" indexStyle="NUMERIC">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_s8kyuazNEeekPI6hsC9IeA" name="rowLabelWidth" intValue="350"/>
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_2mNtwK2OEeeWzbvclvEimw" name="rowIndexWidth" intValue="36"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_uwJzsKzOEeekPI6hsC9IeA" name="StereotypeRequirements" currentRowAxisProvider="_uwJzt6zOEeekPI6hsC9IeA" currentColumnAxisProvider="_uwJzs6zOEeekPI6hsC9IeA" tableKindId="org.eclipse.papyrus.uml.table.generic">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_uwJzsazOEeekPI6hsC9IeA" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_uwJzsqzOEeekPI6hsC9IeA" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_4toXYKz4EeekPI6hsC9IeA" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Class" href="model.uml#_KfP7wKdPEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Class" href="model.uml#_K8FBsKdPEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_uwJzs6zOEeekPI6hsC9IeA" description="This axis provider provides available columns according to the rows of the table (features of the object displayed on the other axis)" name="UML Feature axis provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_Fqwo568tEeee2YU5cusFOw" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_NngdAK8tEeee2YU5cusFOw" name="axisWidth" intValue="157"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_Fqwo5q8tEeee2YU5cusFOw" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_MLJzwK8tEeee2YU5cusFOw" name="axisWidth" intValue="574"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_uwJzt6zOEeekPI6hsC9IeA" description="This axis provider contains the object dropped by the user into the table" name="DroppedElementAxisProvider">
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_8Evw4K8sEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_B3U7IK6LEeexmuCIN6Rutw"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_8Evw4a8sEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_mS1CEKzOEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_8Evw4q8sEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_mTV_cKzOEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_8Evw468sEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_mT4yAKzOEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_-Mv_MK8sEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_mUcLoKzOEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_FquzsK8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_mVvzMKzOEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_Fquzsa8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_mWWQIKzOEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_Fquzsq8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_mY_UcKzOEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_Fquzs68tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_mbB70KzOEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_FquztK8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_bO8fIK6VEeexmuCIN6Rutw"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_Fquzta8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_bagO4K6VEeexmuCIN6Rutw"/>
+ </axis>
+ </rowAxisProvidersHistory>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_uwJzuKzOEeekPI6hsC9IeA" indexStyle="NUMERIC">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_uwJzuazOEeekPI6hsC9IeA" name="rowLabelWidth" intValue="465"/>
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_2y0CkKzOEeekPI6hsC9IeA" name="rowIndexWidth" intValue="26"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_RTrSIKzPEeekPI6hsC9IeA" name="PropertyRequirements" currentRowAxisProvider="_RTrSJ6zPEeekPI6hsC9IeA" currentColumnAxisProvider="_RTrSI6zPEeekPI6hsC9IeA" tableKindId="org.eclipse.papyrus.uml.table.generic">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_RTrSIazPEeekPI6hsC9IeA" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_RTrSIqzPEeekPI6hsC9IeA" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_SukCUKz8EeekPI6hsC9IeA" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Class" href="model.uml#_KfP7wKdPEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Class" href="model.uml#_LB584KdPEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_RTrSI6zPEeekPI6hsC9IeA" description="This axis provider provides available columns according to the rows of the table (features of the object displayed on the other axis)" name="UML Feature axis provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_n3YqR68tEeee2YU5cusFOw" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_n3YqRq8tEeee2YU5cusFOw" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_waPcIK8tEeee2YU5cusFOw" name="axisWidth" intValue="693"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_RTrSJ6zPEeekPI6hsC9IeA" description="This axis provider contains the object dropped by the user into the table" name="DroppedElementAxisProvider">
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDMK8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_F3MnwKzPEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDMa8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_F3wocKzPEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDOq8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_F8bGAKzPEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDPK8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_HeyKgK6ZEeexmuCIN6Rutw"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDPa8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_F9akgKzPEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDPq8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_F95ssKzPEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDP68tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_UIHXoK6bEeexmuCIN6Rutw"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDQK8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_F-Y04KzPEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDQq8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_F_YTYKzPEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDQ68tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_tP2mMK6dEeexmuCIN6Rutw"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDRK8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_F_3bkKzPEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDRa8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_GAWjwKzPEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDR68tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_GCTrkKzPEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_n3YDSK8tEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_GC0B4KzPEeekPI6hsC9IeA"/>
+ </axis>
+ </rowAxisProvidersHistory>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_RTrSKKzPEeekPI6hsC9IeA" indexStyle="NUMERIC">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_RTrSKazPEeekPI6hsC9IeA" name="rowLabelWidth" intValue="405"/>
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_V4u4QKz8EeekPI6hsC9IeA" name="rowIndexWidth" intValue="45"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_UA538KzQEeekPI6hsC9IeA" name="GeneralizationRequirements" currentRowAxisProvider="_UA5396zQEeekPI6hsC9IeA" currentColumnAxisProvider="_UA5386zQEeekPI6hsC9IeA" tableKindId="org.eclipse.papyrus.uml.table.generic">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UA538azQEeekPI6hsC9IeA" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_UA538qzQEeekPI6hsC9IeA" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_WAeswK0BEeekPI6hsC9IeA" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Class" href="model.uml#_KfP7wKdPEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Class" href="model.uml#_Lyvj8KdPEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_UA5386zQEeekPI6hsC9IeA" description="This axis provider provides available columns according to the rows of the table (features of the object displayed on the other axis)" name="UML Feature axis provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_Qtx0968uEeee2YU5cusFOw" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_YQvQEK8uEeee2YU5cusFOw" name="axisWidth" intValue="163"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_Qtx09q8uEeee2YU5cusFOw" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_UZdcgK8uEeee2YU5cusFOw" name="axisWidth" intValue="557"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_UA5396zQEeekPI6hsC9IeA" description="This axis provider contains the object dropped by the user into the table" name="DroppedElementAxisProvider">
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_QtpSEK8uEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_VUVuMK8fEeee2YU5cusFOw"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_QtpSEa8uEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_VJZKAKzQEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_QtpSEq8uEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_VJ7VgKzQEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_QtpSE68uEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_VKdhAKzQEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_QtpSFK8uEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_VK93UKzQEeekPI6hsC9IeA"/>
+ </axis>
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_QtpSFq8uEeee2YU5cusFOw">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_VL8HsKzQEeekPI6hsC9IeA"/>
+ </axis>
+ </rowAxisProvidersHistory>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_UA53-KzQEeekPI6hsC9IeA" indexStyle="NUMERIC">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_UA53-azQEeekPI6hsC9IeA" name="rowLabelWidth" intValue="459"/>
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_chRWgKzQEeekPI6hsC9IeA" name="rowIndexWidth" intValue="25"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_qM7OYKz1EeekPI6hsC9IeA" name="EnumerationLiteralRequirements" currentRowAxisProvider="_qM7OZ6z1EeekPI6hsC9IeA" currentColumnAxisProvider="_qM7OY6z1EeekPI6hsC9IeA" tableKindId="org.eclipse.papyrus.uml.table.generic">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_qM7OYaz1EeekPI6hsC9IeA" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_qM7OYqz1EeekPI6hsC9IeA" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:BooleanValueStyle" xmi:id="_2pGbMKz1EeekPI6hsC9IeA" name="autoResizeCellHeight" booleanValue="true"/>
+ <context xmi:type="uml:Class" href="model.uml#_KfP7wKdPEee2pt2XW3Ky2w"/>
+ <owner xmi:type="uml:Class" href="model.uml#_K1i74KdPEee2pt2XW3Ky2w"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_qM7OY6z1EeekPI6hsC9IeA" description="This axis provider provides available columns according to the rows of the table (features of the object displayed on the other axis)" name="UML Feature axis provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_svl_cKz1EeekPI6hsC9IeA" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_zmgl8K2PEeeWzbvclvEimw" name="axisWidth" intValue="116"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_svl_c6z1EeekPI6hsC9IeA" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_06FUoKz1EeekPI6hsC9IeA" name="axisWidth" intValue="593"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_qM7OZ6z1EeekPI6hsC9IeA" description="This axis provider contains the object dropped by the user into the table" name="DroppedElementAxisProvider">
+ <axis xmi:type="nattableaxis:EObjectAxis" xmi:id="_svcOcKz1EeekPI6hsC9IeA">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.uml.nattable.generic.config/configs/generic.nattableconfiguration#//@rowHeaderAxisConfiguration/@axisManagers.0"/>
+ <element xmi:type="uml:Class" href="model.uml#_Ks7SgKzNEeekPI6hsC9IeA"/>
+ </axis>
+ </rowAxisProvidersHistory>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_qM7OaKz1EeekPI6hsC9IeA" indexStyle="NUMERIC">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_qM7Oaaz1EeekPI6hsC9IeA" name="rowLabelWidth" intValue="315"/>
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_0e0G8K2PEeeWzbvclvEimw" name="rowIndexWidth" intValue="25"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+ <nattable:Table xmi:id="_KXTDIK0BEeekPI6hsC9IeA" name="AssociationRequirementTreeTable" currentRowAxisProvider="_KXTDJa0BEeekPI6hsC9IeA" currentColumnAxisProvider="_KXTDIq0BEeekPI6hsC9IeA" tableKindId="org.eclipse.papyrus.sysml14.table.requirementTree">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_KXTqMK0BEeekPI6hsC9IeA" source="http://www.eclipse.org/papyrus/infra/nattable/version">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_KXTqMa0BEeekPI6hsC9IeA" key="version" value="1.3.0"/>
+ </eAnnotations>
+ <styles xmi:type="nattablestyle:IntListValueStyle" xmi:id="_KXTDIa0BEeekPI6hsC9IeA" name="hiddenCategoriesByDepth">
+ <intListValue>0</intListValue>
+ <intListValue>1</intListValue>
+ <intListValue>2</intListValue>
+ <intListValue>3</intListValue>
+ <intListValue>4</intListValue>
+ </styles>
+ <context xmi:type="uml:Package" href="model.uml#_oErHcK0AEeekPI6hsC9IeA"/>
+ <owner xmi:type="uml:Package" href="model.uml#_oErHcK0AEeekPI6hsC9IeA"/>
+ <tableConfiguration xmi:type="nattableconfiguration:TableConfiguration" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#/"/>
+ <columnAxisProvidersHistory xmi:type="nattableaxisprovider:SlaveObjectAxisProvider" xmi:id="_KXTDIq0BEeekPI6hsC9IeA" description="Provides the columns of the tables with a default configuration" name="Requirements Feature Columns Provider">
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_KXTDI60BEeekPI6hsC9IeA" element="property_of_stereotype:/SysML::Requirements::Requirement::id">
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ <axis xmi:type="nattableaxis:FeatureIdAxis" xmi:id="_KXTDJK0BEeekPI6hsC9IeA" element="property_of_stereotype:/SysML::Requirements::Requirement::text">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_LRT0UK0BEeekPI6hsC9IeA" name="axisWidth" intValue="557"/>
+ <manager xmi:type="nattableaxisconfiguration:AxisManagerRepresentation" href="platform:/plugin/org.eclipse.papyrus.sysml14.nattable.requirement/resources/requirementTree.nattableconfiguration#//@columnHeaderAxisConfiguration/@axisManagers.1"/>
+ </axis>
+ </columnAxisProvidersHistory>
+ <rowAxisProvidersHistory xmi:type="nattableaxisprovider:MasterObjectAxisProvider" xmi:id="_KXTDJa0BEeekPI6hsC9IeA" description="This axis provider manages the rows, according to the wanted hierarchy" name="HierarchicalRowAxisManager" disconnectSlave="true"/>
+ <localRowHeaderAxisConfiguration xmi:type="nattableaxisconfiguration:LocalTableHeaderAxisConfiguration" xmi:id="_L576kK0BEeekPI6hsC9IeA" indexStyle="NUMERIC" displayIndex="false">
+ <styles xmi:type="nattablestyle:IntValueStyle" xmi:id="_L58hoK0BEeekPI6hsC9IeA" name="rowLabelWidth" intValue="249"/>
+ </localRowHeaderAxisConfiguration>
+ </nattable:Table>
+</xmi:XMI>
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/model.uml b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/model.uml
new file mode 100644
index 00000000000..65284f140b1
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/model.uml
@@ -0,0 +1,382 @@
+<?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:Requirements="http://www.eclipse.org/papyrus/sysml/1.4/SysML/Requirements" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/papyrus/sysml/1.4/SysML/Requirements http://www.eclipse.org/papyrus/sysml/1.4/SysML#//requirements">
+ <uml:Model xmi:id="_uHM0wJ4REee5QOeiHCkWLg" name="model">
+ <packageImport xmi:type="uml:PackageImport" xmi:id="_uZXi0J4REee5QOeiHCkWLg">
+ <importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
+ </packageImport>
+ <packageImport xmi:type="uml:PackageImport" xmi:id="_uZxygJ4REee5QOeiHCkWLg">
+ <importedPackage xmi:type="uml:Package" href="pathmap://SysML14_LIBRARIES/SysML-Standard-Library.uml#SysML.package_packagedElement_Libraries"/>
+ </packageImport>
+ <packagedElement xmi:type="uml:Package" xmi:id="_TR6-4J7WEeeE49hrEZE2jQ" name="Requirements">
+ <packagedElement xmi:type="uml:Class" xmi:id="_gdLOUJ7NEeeE49hrEZE2jQ" name="Manage_profile_evolution">
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_v4XJ8J7NEeeE49hrEZE2jQ" name="Report_profile_evolution"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_5OEVEJ7NEeeE49hrEZE2jQ" name="Migrate"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_b87s0KzwEeekPI6hsC9IeA" name="Provide_UI">
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_qAqrgKq6EeecK7SK84ftVA" name="UI_choice_apply_on_others"/>
+ </nestedClassifier>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_Na-kQJ4TEee5QOeiHCkWLg" name="Report_modifications"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_m8YQkKq5EeecK7SK84ftVA" name="Visibility_no_impact"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rAYmoKq7EeecK7SK84ftVA" name="NamedElement_modify_name"/>
+ <packagedElement xmi:type="uml:Package" xmi:id="_7oxPsKdOEee2pt2XW3Ky2w" name="Package">
+ <packagedElement xmi:type="uml:Class" xmi:id="_KfP7wKdPEee2pt2XW3Ky2w" name="Package_modifications">
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mG01IKzIEeekPI6hsC9IeA" name="Package_add_Stereotype"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mHSvMKzIEeekPI6hsC9IeA" name="Package_add_ElementImport"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mHwpQKzIEeekPI6hsC9IeA" name="Package_add_PackageImport"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mIN8QKzIEeekPI6hsC9IeA" name="Package_add_Association"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mIrPQKzIEeekPI6hsC9IeA" name="Package_add_Enumeration"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mJJJUKzIEeekPI6hsC9IeA" name="Package_add_Extension"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mJo4kKzIEeekPI6hsC9IeA" name="Package_add_Package"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mKE9cKzIEeekPI6hsC9IeA" name="Package_add_Profile"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mKhpYKzIEeekPI6hsC9IeA" name="Package_delete_Stereotype"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mLB_sKzIEeekPI6hsC9IeA" name="Package_delete_ElementImport"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mLeroKzIEeekPI6hsC9IeA" name="Package_delete_PackageImport"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mL7XkKzIEeekPI6hsC9IeA" name="Package_delete_Association"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mMXccKzIEeekPI6hsC9IeA" name="Package_delete_Enumeration"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mM0vcKzIEeekPI6hsC9IeA" name="Package_delete_Extension"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mNSpgKzIEeekPI6hsC9IeA" name="Package_delete_Package"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mNvVcKzIEeekPI6hsC9IeA" name="Package_delete_Profile"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_h6v8sK59EeexmuCIN6Rutw" name="Package_move"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mOrwoKzIEeekPI6hsC9IeA" name="Package_move_into_ProfileAlreadyApply"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mPQ_cKzIEeekPI6hsC9IeA" name="Package_move_into_ProfileNotApplyYet"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mQK-YKzIEeekPI6hsC9IeA" name="Package_modify_URI"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_7nNo8K5_EeexmuCIN6Rutw" name="Refine1" client="_mOrwoKzIEeekPI6hsC9IeA" supplier="_h6v8sK59EeexmuCIN6Rutw"/>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_8yLnQK5_EeexmuCIN6Rutw" name="Refine2" client="_mPQ_cKzIEeekPI6hsC9IeA" supplier="_h6v8sK59EeexmuCIN6Rutw"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_3FUdMKdPEee2pt2XW3Ky2w" name="Profile">
+ <packagedElement xmi:type="uml:Class" xmi:id="_KqNOkKdPEee2pt2XW3Ky2w" name="Profile_modification">
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H5Q_cKzKEeekPI6hsC9IeA" name="Profile_add_Stereotype"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H50ZEKzKEeekPI6hsC9IeA" name="Profile_add_ElementImport"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H6S6MKzKEeekPI6hsC9IeA" name="Profile_add_PackageImport"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H6yCYKzKEeekPI6hsC9IeA" name="Profile_add_Association"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H7QjgKzKEeekPI6hsC9IeA" name="Profile_add_Enumeration"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H7vrsKzKEeekPI6hsC9IeA" name="Profile_add_Extension"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H8Oz4KzKEeekPI6hsC9IeA" name="Profile_add_Package"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H8ujIKzKEeekPI6hsC9IeA" name="Profile_add_Profile"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H9MdMKzKEeekPI6hsC9IeA" name="Profile_delete_Stereotype"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H9q-UKzKEeekPI6hsC9IeA" name="Profile_delete_ElementImport"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H-JfcKzKEeekPI6hsC9IeA" name="Profile_delete_PackageImport"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H-zmwKzKEeekPI6hsC9IeA" name="Profile_delete_Association"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H_UkIKzKEeekPI6hsC9IeA" name="Profile_delete_Enumeration"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_H_zFQKzKEeekPI6hsC9IeA" name="Profile_delete_Extension"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_IARmYKzKEeekPI6hsC9IeA" name="Profile_delete_Package"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_IAwHgKzKEeekPI6hsC9IeA" name="Profile_delete_Profile"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_N5QLAK6CEeexmuCIN6Rutw" name="Profile_move"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_JqrdQKzLEeekPI6hsC9IeA" name="Profile_move_into_ProfileAlreadyApply"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_JqsEUKzLEeekPI6hsC9IeA" name="Profile_move_into_ProfileNotApplyYet"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_ICRKcKzKEeekPI6hsC9IeA" name="Profile_modify_URI"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_5_2iMK6CEeexmuCIN6Rutw" name="Refine1" client="_JqsEUKzLEeekPI6hsC9IeA" supplier="_N5QLAK6CEeexmuCIN6Rutw"/>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_7A-oAK6CEeexmuCIN6Rutw" name="Refine2" client="_JqrdQKzLEeekPI6hsC9IeA" supplier="_N5QLAK6CEeexmuCIN6Rutw"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_5pj7kKdPEee2pt2XW3Ky2w" name="Enumeration">
+ <packagedElement xmi:type="uml:Class" xmi:id="_Kz9AcKdPEee2pt2XW3Ky2w" name="Enumeration_modification">
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_LdykMKzMEeekPI6hsC9IeA" name="Enumeration_add_EnumerationLitteral"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_LeUIoKzMEeekPI6hsC9IeA" name="Enumeration_delete_EnumerationLitteral"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_Lez34KzMEeekPI6hsC9IeA" name="Enumeration_move"/>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_7FzQEKdPEee2pt2XW3Ky2w" name="EnumerationLiteral">
+ <packagedElement xmi:type="uml:Class" xmi:id="_K1i74KdPEee2pt2XW3Ky2w" name="EnumerationLiteral_modifications">
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_Ks7SgKzNEeekPI6hsC9IeA" name="EnumerationLitteral_move"/>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_9zpWYKdPEee2pt2XW3Ky2w" name="ElementImport">
+ <packagedElement xmi:type="uml:Class" xmi:id="_K27b8KdPEee2pt2XW3Ky2w" name="ElementImport_modifications">
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_lI2XsKzNEeekPI6hsC9IeA" name="ElementImport_modify_alias"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_lJX8IKzNEeekPI6hsC9IeA" name="ElementImport_modify_importedElement"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_lJ3EUKzNEeekPI6hsC9IeA" name="ElementImport_modify_source"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_lKVlcKzNEeekPI6hsC9IeA" name="ElementImport_modify_target"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_lLBh8KzNEeekPI6hsC9IeA" name="ElementImport_move"/>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="__rFZIKdPEee2pt2XW3Ky2w" name="PackageImport">
+ <packagedElement xmi:type="uml:Class" xmi:id="_K5tqMKdPEee2pt2XW3Ky2w" name="PackageImport_modification">
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_G70i8KzOEeekPI6hsC9IeA" name="PackageImport_modify_importedPackage"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_G8USMKzOEeekPI6hsC9IeA" name="PackageImport_modify_source"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_G8yzUKzOEeekPI6hsC9IeA" name="PackageImport_modify_target"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_G9TwsKzOEeekPI6hsC9IeA" name="PackageImport_move"/>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_A8GVEKdQEee2pt2XW3Ky2w" name="Stereotype">
+ <packagedElement xmi:type="uml:Class" xmi:id="_K8FBsKdPEee2pt2XW3Ky2w" name="Stereotype_modifications">
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_B3U7IK6LEeexmuCIN6Rutw" name="Stereotype_add_property"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mS1CEKzOEeekPI6hsC9IeA" name="Stereotype_add_Property_defaultValue"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mTV_cKzOEeekPI6hsC9IeA" name="Stereotype_add_Property_noDefaultValue_requiredValue"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mT4yAKzOEeekPI6hsC9IeA" name="Stereotype_add_Property_noDefaultValue_optionalValue"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mUcLoKzOEeekPI6hsC9IeA" name="Stereotype_add_Generalization"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mVvzMKzOEeekPI6hsC9IeA" name="Stereotype_delete_Property"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mWWQIKzOEeekPI6hsC9IeA" name="Stereotype_delete_Generalization"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mYSJ0KzOEeekPI6hsC9IeA" name="Stereotype_modify_isAbstract_trueToFalse"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mY_UcKzOEeekPI6hsC9IeA" name="Stereotype_modify_isAbstract_falseToTrue"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mZsfEKzOEeekPI6hsC9IeA" name="Stereotype_modify_isFinalSpecification"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_maX0gKzOEeekPI6hsC9IeA" name="Stereotype_modify_redefinedClassifier"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_mbB70KzOEeekPI6hsC9IeA" name="Stereotype_move"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_bO8fIK6VEeexmuCIN6Rutw" name="Stereotype_move_into_profileAlreadyApply"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_bagO4K6VEeexmuCIN6Rutw" name="Stereotype_move_into_profileNotApplyYet"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_swTooK6LEeexmuCIN6Rutw" name="Refine1" client="_mTV_cKzOEeekPI6hsC9IeA" supplier="_B3U7IK6LEeexmuCIN6Rutw"/>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_txhOAK6LEeexmuCIN6Rutw" name="Refine2" client="_mS1CEKzOEeekPI6hsC9IeA" supplier="_B3U7IK6LEeexmuCIN6Rutw"/>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_u9TrsK6LEeexmuCIN6Rutw" name="Refine3" client="_mT4yAKzOEeekPI6hsC9IeA" supplier="_B3U7IK6LEeexmuCIN6Rutw"/>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_RIsLYK6WEeexmuCIN6Rutw" name="Refine4" client="_bagO4K6VEeexmuCIN6Rutw" supplier="_mbB70KzOEeekPI6hsC9IeA"/>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_SEaz0K6WEeexmuCIN6Rutw" name="Refine5" client="_bO8fIK6VEeexmuCIN6Rutw" supplier="_mbB70KzOEeekPI6hsC9IeA"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_CwtGQKdQEee2pt2XW3Ky2w" name="Property">
+ <packagedElement xmi:type="uml:Class" xmi:id="_LB584KdPEee2pt2XW3Ky2w" name="Property_modifications">
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F3MnwKzPEeekPI6hsC9IeA" name="Property_modify_isReadOnly"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F3wocKzPEeekPI6hsC9IeA" name="Property_modify_isDerived_falseToTrue"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_sZJxMKz8EeekPI6hsC9IeA" name="Property_modify_isDerived_trueToFalse"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F4QXsKzPEeekPI6hsC9IeA" name="Property_modify_isDerivedUnion"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F4_XgKzPEeekPI6hsC9IeA" name="Property_modify_aggregation"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F5efsKzPEeekPI6hsC9IeA" name="Property_modify_isID"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F59n4KzPEeekPI6hsC9IeA" name="Property_modify_redefinedProperty"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F6dXIKzPEeekPI6hsC9IeA" name="Property_modify_subsettedProperty"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F674QKzPEeekPI6hsC9IeA" name="Property_modify_defaultValue"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F7bngKzPEeekPI6hsC9IeA" name="Property_modify_isOrdered"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F8bGAKzPEeekPI6hsC9IeA" name="Property_modify_isUnique_falseToTrue"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F87cUKzPEeekPI6hsC9IeA" name="Property_modify_isUnique_trueToFalse"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_HeyKgK6ZEeexmuCIN6Rutw" name="Property_modify_lowerValue"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F9akgKzPEeekPI6hsC9IeA" name="Property_modify_lowerValue_increase"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F95ssKzPEeekPI6hsC9IeA" name="Property_modify_lowerValue_decrease"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_UIHXoK6bEeexmuCIN6Rutw" name="Property_modify_upperValue"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F-Y04KzPEeekPI6hsC9IeA" name="Property_modify_upperValue_decrease"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F_YTYKzPEeekPI6hsC9IeA" name="Property_modify_upperValue_increase"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_tP2mMK6dEeexmuCIN6Rutw" name="Property_modify_type"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_F_3bkKzPEeekPI6hsC9IeA" name="Property_modify_type_isConvertible"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_GAWjwKzPEeekPI6hsC9IeA" name="Property_modify_type_isNotConvertible"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_GBzVQKzPEeekPI6hsC9IeA" name="Property_modify_isLeaf"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_GCTrkKzPEeekPI6hsC9IeA" name="Property_modify_isStatic"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_GC0B4KzPEeekPI6hsC9IeA" name="Property_move"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_OgxUoK6bEeexmuCIN6Rutw" name="Refine1" client="_F95ssKzPEeekPI6hsC9IeA" supplier="_HeyKgK6ZEeexmuCIN6Rutw"/>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_QIHF4K6bEeexmuCIN6Rutw" name="Refine2" client="_F9akgKzPEeekPI6hsC9IeA" supplier="_HeyKgK6ZEeexmuCIN6Rutw"/>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_fpphIK6bEeexmuCIN6Rutw" name="Refine3" client="_F_YTYKzPEeekPI6hsC9IeA" supplier="_UIHXoK6bEeexmuCIN6Rutw"/>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_g5Z40K6bEeexmuCIN6Rutw" name="Refine5" client="_F-Y04KzPEeekPI6hsC9IeA" supplier="_UIHXoK6bEeexmuCIN6Rutw"/>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_A-_qUK6eEeexmuCIN6Rutw" name="Refine6" client="_GAWjwKzPEeekPI6hsC9IeA" supplier="_tP2mMK6dEeexmuCIN6Rutw"/>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_CHGh4K6eEeexmuCIN6Rutw" name="Refine7" client="_F_3bkKzPEeekPI6hsC9IeA" supplier="_tP2mMK6dEeexmuCIN6Rutw"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_oErHcK0AEeekPI6hsC9IeA" name="Association">
+ <packagedElement xmi:type="uml:Class" xmi:id="_qxujkK0AEeekPI6hsC9IeA" name="Association_modifications">
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_qxujka0AEeekPI6hsC9IeA" name="Association_move"/>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_HPxSkKdQEee2pt2XW3Ky2w" name="Extension">
+ <packagedElement xmi:type="uml:Class" xmi:id="_LvYG4KdPEee2pt2XW3Ky2w" name="Extension_modifications">
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_DObZQKzQEeekPI6hsC9IeA" name="Extension_move"/>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_IaVoQKdQEee2pt2XW3Ky2w" name="Generalization">
+ <packagedElement xmi:type="uml:Class" xmi:id="_Lyvj8KdPEee2pt2XW3Ky2w" name="Generalization_modifications">
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_VUVuMK8fEeee2YU5cusFOw" name="Generalization_modify_general"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_VJZKAKzQEeekPI6hsC9IeA" name="Generalization_modify_general_oldType.isKindOf(newType)"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_VJ7VgKzQEeekPI6hsC9IeA" name="Generalization_modify_general_newType.isKindOf(oldType)"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_VKdhAKzQEeekPI6hsC9IeA" name="Generalization_modify_general_noHierarchicalLink"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_VK93UKzQEeekPI6hsC9IeA" name="Generalization_modify_specialization"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_VLc_gKzQEeekPI6hsC9IeA" name="Generalization_modify_isSubstituable"/>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_VL8HsKzQEeekPI6hsC9IeA" name="Generalization_move"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_GR-FwK8gEeee2YU5cusFOw" name="Refine1" client="_VKdhAKzQEeekPI6hsC9IeA" supplier="_VUVuMK8fEeee2YU5cusFOw"/>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_G97z4K8gEeee2YU5cusFOw" name="Refine2" client="_VJ7VgKzQEeekPI6hsC9IeA" supplier="_VUVuMK8fEeee2YU5cusFOw"/>
+ <packagedElement xmi:type="uml:Abstraction" xmi:id="_HZfHcK8gEeee2YU5cusFOw" name="Refine3" client="_VJZKAKzQEeekPI6hsC9IeA" supplier="_VUVuMK8fEeee2YU5cusFOw"/>
+ </packagedElement>
+ </packagedElement>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_uZDZwJ4REee5QOeiHCkWLg">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_uZISQJ4REee5QOeiHCkWLg" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#/"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_uZL8oJ4REee5QOeiHCkWLg">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_uZL8oZ4REee5QOeiHCkWLg" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//activities"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_Activities"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_uZPnAJ4REee5QOeiHCkWLg">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_uZPnAZ4REee5QOeiHCkWLg" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//allocations"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_Allocations"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_uZQOEJ4REee5QOeiHCkWLg">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_uZQOEZ4REee5QOeiHCkWLg" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//blocks"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_Blocks"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_uZQ1IJ4REee5QOeiHCkWLg">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_uZRcMJ4REee5QOeiHCkWLg" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//constraintblocks"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_ConstraintBlocks"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_uZSDQJ4REee5QOeiHCkWLg">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_uZSqUJ4REee5QOeiHCkWLg" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//deprecatedelements"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_DeprecatedElements"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_uZSqUZ4REee5QOeiHCkWLg">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_uZTRYJ4REee5QOeiHCkWLg" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//modelelements"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_ModelElements"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_uZT4cJ4REee5QOeiHCkWLg">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_uZT4cZ4REee5QOeiHCkWLg" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//portsandflows"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_Ports_u0026Flows"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_uZUfgJ4REee5QOeiHCkWLg">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_uZVGkJ4REee5QOeiHCkWLg" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/sysml/1.4/SysML#//requirements"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://SysML14_PROFILES/SysML.profile.uml#SysML.package_packagedElement_Requirements"/>
+ </profileApplication>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_uZVtoJ4REee5QOeiHCkWLg">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_uZWUsJ4REee5QOeiHCkWLg" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/uml2/5.0.0/UML/Profile/Standard#/"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://UML_PROFILES/Standard.profile.uml#_0"/>
+ </profileApplication>
+ </uml:Model>
+ <Requirements:Requirement xmi:id="_NbGgEJ4TEee5QOeiHCkWLg" base_Class="_Na-kQJ4TEee5QOeiHCkWLg" id="REQ02" text="The migration tool shall inform the user on which modification are done"/>
+ <Requirements:Requirement xmi:id="_gdXbkJ7NEeeE49hrEZE2jQ" base_Class="_gdLOUJ7NEeeE49hrEZE2jQ" id="REQ01" text="The migration tool shall be able to manage profile evolution"/>
+ <Requirements:Requirement xmi:id="_v4lzcJ7NEeeE49hrEZE2jQ" base_Class="_v4XJ8J7NEeeE49hrEZE2jQ" id="REQ01.1" text="The migration tool shall be able to make report about the evolution of the profile model"/>
+ <Requirements:Requirement xmi:id="_5OLp0J7NEeeE49hrEZE2jQ" base_Class="_5OEVEJ7NEeeE49hrEZE2jQ" id="REQ01.2" text="The migration tool shall be able to migrate model instance to the new version of the profile&#xA;"/>
+ <Requirements:Requirement xmi:id="_KfZswKdPEee2pt2XW3Ky2w" base_Class="_KfP7wKdPEee2pt2XW3Ky2w" id="REQ01.2.01" text="The migration tool shall be able to manage modifications of a Package"/>
+ <Requirements:Requirement xmi:id="_KqVxcKdPEee2pt2XW3Ky2w" base_Class="_KqNOkKdPEee2pt2XW3Ky2w" id="REQ01.2.02" text="The migration tool shall be able to manage modification of a Profile"/>
+ <Requirements:Requirement xmi:id="_K0FjUKdPEee2pt2XW3Ky2w" base_Class="_Kz9AcKdPEee2pt2XW3Ky2w" id="REQ01.2.03" text="The migration tool shall be able to manage modifications of an Enumeration"/>
+ <Requirements:Requirement xmi:id="_K1q3sKdPEee2pt2XW3Ky2w" base_Class="_K1i74KdPEee2pt2XW3Ky2w" id="REQ01.2.04" text="The migration tool shall be able to manage modification of an EnumerationLitteral"/>
+ <Requirements:Requirement xmi:id="_K3D-0KdPEee2pt2XW3Ky2w" base_Class="_K27b8KdPEee2pt2XW3Ky2w" id="REQ01.2.05" text="The migration tool shall be able to manage modification of an ElementImport"/>
+ <Requirements:Requirement xmi:id="_K520IKdPEee2pt2XW3Ky2w" base_Class="_K5tqMKdPEee2pt2XW3Ky2w" id="REQ01.2.06" text="The migration tool shall be able to manage modification of a PackageImport"/>
+ <Requirements:Requirement xmi:id="_K8NkkKdPEee2pt2XW3Ky2w" base_Class="_K8FBsKdPEee2pt2XW3Ky2w" id="REQ01.2.07" text="The migration tool shall be able to manage modification of a Stereotype"/>
+ <Requirements:Requirement xmi:id="_LCB4sKdPEee2pt2XW3Ky2w" base_Class="_LB584KdPEee2pt2XW3Ky2w" id="REQ01.2.08" text="The migration tool shall be able to manage modification of a Property"/>
+ <Requirements:Requirement xmi:id="_LvhQ0KdPEee2pt2XW3Ky2w" base_Class="_LvYG4KdPEee2pt2XW3Ky2w" id="REQ01.2.10" text="The migration tool shall be able to manage modification of an Extension"/>
+ <Requirements:Requirement xmi:id="_Ly4G0KdPEee2pt2XW3Ky2w" base_Class="_Lyvj8KdPEee2pt2XW3Ky2w" id="REQ01.2.11" text="The migration tool shall be able to manage modifications of a Generalization"/>
+ <Requirements:Requirement xmi:id="_m8gzcKq5EeecK7SK84ftVA" base_Class="_m8YQkKq5EeecK7SK84ftVA" id="REQ03" text="The migration tool shall not take into account the modification of the visibility feature"/>
+ <Requirements:Requirement xmi:id="_qAwyIKq6EeecK7SK84ftVA" base_Class="_qAqrgKq6EeecK7SK84ftVA" id="REQ01.3.1" text="The migration tool shall provide a way to configure the choice for many instance (checkbox &quot;apply this action for others&quot;)"/>
+ <Requirements:Requirement xmi:id="_rAfUUKq7EeecK7SK84ftVA" base_Class="_rAYmoKq7EeecK7SK84ftVA" id="REQ05" text="The migration tool shall be able to rename the element when the name is change"/>
+ <Requirements:Requirement xmi:id="_mG7i0KzIEeekPI6hsC9IeA" base_Class="_mG01IKzIEeekPI6hsC9IeA" id="REQ01.2.01.01" text="If a stereotype is added to a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mHZc4KzIEeekPI6hsC9IeA" base_Class="_mHSvMKzIEeekPI6hsC9IeA" id="REQ01.2.01.02" text="If an element import is added to a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mH3-AKzIEeekPI6hsC9IeA" base_Class="_mHwpQKzIEeekPI6hsC9IeA" id="REQ01.2.01.03" text="If a package import is added to a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mIVRAKzIEeekPI6hsC9IeA" base_Class="_mIN8QKzIEeekPI6hsC9IeA" id="REQ01.2.01.04" text="If an association is added to a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mIx88KzIEeekPI6hsC9IeA" base_Class="_mIrPQKzIEeekPI6hsC9IeA" id="REQ01.2.01.05" text="If an enumeration is added to a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mJSTQKzIEeekPI6hsC9IeA" base_Class="_mJJJUKzIEeekPI6hsC9IeA" id="REQ01.2.01.06" text="If an extension is added to a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mJvmQKzIEeekPI6hsC9IeA" base_Class="_mJo4kKzIEeekPI6hsC9IeA" id="REQ01.2.01.07" text="If a package is added to a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mKLrIKzIEeekPI6hsC9IeA" base_Class="_mKE9cKzIEeekPI6hsC9IeA" id="REQ01.2.01.08" text="If a stereotype is added to a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mKo-IKzIEeekPI6hsC9IeA" base_Class="_mKhpYKzIEeekPI6hsC9IeA" id="REQ01.2.01.09" text="If a stereotype is deleted from a Package the migration tool shall delete the stereotype application."/>
+ <Requirements:Requirement xmi:id="_mLItYKzIEeekPI6hsC9IeA" base_Class="_mLB_sKzIEeekPI6hsC9IeA" id="REQ01.2.01.10" text="If a stereotype is deleted from a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mLlZUKzIEeekPI6hsC9IeA" base_Class="_mLeroKzIEeekPI6hsC9IeA" id="REQ01.2.01.11" text="If a package import is deleted from a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mMCFQKzIEeekPI6hsC9IeA" base_Class="_mL7XkKzIEeekPI6hsC9IeA" id="REQ01.2.01.12" text="If an association is deleted from a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mMexMKzIEeekPI6hsC9IeA" base_Class="_mMXccKzIEeekPI6hsC9IeA" id="REQ01.2.01.13" text="If an enumeration is deleted from a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mM8rQKzIEeekPI6hsC9IeA" base_Class="_mM0vcKzIEeekPI6hsC9IeA" id="REQ01.2.01.14" text="If an extension is deleted from a Package the migration tool shall delete &#xA;the stereotype application of this stereotype or ask the designer if he want &#xA;to replace it by a specialization of this stereotype"/>
+ <Requirements:Requirement xmi:id="_mNYwIKzIEeekPI6hsC9IeA" base_Class="_mNSpgKzIEeekPI6hsC9IeA" id="REQ01.2.01.15" text="If a package is deleted from a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mN2DIKzIEeekPI6hsC9IeA" base_Class="_mNvVcKzIEeekPI6hsC9IeA" id="REQ01.2.01.16" text="If a profile is deleted from a package then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mOyeUKzIEeekPI6hsC9IeA" base_Class="_mOrwoKzIEeekPI6hsC9IeA" id="REQ01.2.01.17.1" text="If the package was moved in a profile that is already applied on the profiled &#xA;model then the migration is trivial and every stereotype application shall remain"/>
+ <Requirements:Requirement xmi:id="_mPXtIKzIEeekPI6hsC9IeA" base_Class="_mPQ_cKzIEeekPI6hsC9IeA" id="REQ01.2.01.17.2" text="If the package was moved in a profile that is not already applied on the&#xA;profiled model then the migration tool asks the designer if the profile should &#xA;be applied. If the designer answers 'yes' every stereotype application shall remain&#xA;conversely if the answer is 'no' then every stereotype application shall be deleted"/>
+ <Requirements:Requirement xmi:id="_mQRsEKzIEeekPI6hsC9IeA" base_Class="_mQK-YKzIEeekPI6hsC9IeA" id="REQ01.2.01.18" text="If the URI of a package is modified then the migration tool shall not to anything."/>
+ <Requirements:Requirement xmi:id="_H5dMsKzKEeekPI6hsC9IeA" base_Class="_H5Q_cKzKEeekPI6hsC9IeA" id="REQ01.2.02.01" text="If a stereotype is added to a Profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_H57t0KzKEeekPI6hsC9IeA" base_Class="_H50ZEKzKEeekPI6hsC9IeA" id="REQ01.2.02.02" text="If an element import is added to a Profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_H6aO8KzKEeekPI6hsC9IeA" base_Class="_H6S6MKzKEeekPI6hsC9IeA" id="REQ01.2.02.03" text="If a package import is added to a Profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_H65XIKzKEeekPI6hsC9IeA" base_Class="_H6yCYKzKEeekPI6hsC9IeA" id="REQ01.2.02.04" text="If an association is added to a Profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_H7X4QKzKEeekPI6hsC9IeA" base_Class="_H7QjgKzKEeekPI6hsC9IeA" id="REQ01.2.02.05" text="If an enumeration is added to a Profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_H73AcKzKEeekPI6hsC9IeA" base_Class="_H7vrsKzKEeekPI6hsC9IeA" id="REQ01.2.02.06" text="If an extension is added to a Profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_H8WIoKzKEeekPI6hsC9IeA" base_Class="_H8Oz4KzKEeekPI6hsC9IeA" id="REQ01.2.02.07" text="If a package is added to a Profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_H81Q0KzKEeekPI6hsC9IeA" base_Class="_H8ujIKzKEeekPI6hsC9IeA" id="REQ01.2.02.08" text="If a profile is added to a Profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_H9Tx8KzKEeekPI6hsC9IeA" base_Class="_H9MdMKzKEeekPI6hsC9IeA" id="REQ01.2.02.09" text="If a Stereotype is deleted from a Profile the migration tool shall delete the stereotype application."/>
+ <Requirements:Requirement xmi:id="_H9yTEKzKEeekPI6hsC9IeA" base_Class="_H9q-UKzKEeekPI6hsC9IeA" id="REQ01.2.02.10" text="If an element import is deleted from a Profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_H-Q0MKzKEeekPI6hsC9IeA" base_Class="_H-JfcKzKEeekPI6hsC9IeA" id="REQ01.2.02.11" text="If an package import is deleted from a Profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_H-67gKzKEeekPI6hsC9IeA" base_Class="_H-zmwKzKEeekPI6hsC9IeA" id="REQ01.2.02.12" text="If an association is deleted from a Profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_H_b44KzKEeekPI6hsC9IeA" base_Class="_H_UkIKzKEeekPI6hsC9IeA" id="REQ01.2.02.13" text="If an enumeration is deleted from a Profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_H_6aAKzKEeekPI6hsC9IeA" base_Class="_H_zFQKzKEeekPI6hsC9IeA" id="REQ01.2.02.14" text="If an extension is deleted from a profile the migration tool shall delete &#xA;the stereotype application of this stereotype or ask the designer if he want &#xA;to replace it by a specialization of this stereotype."/>
+ <Requirements:Requirement xmi:id="_IAYUEKzKEeekPI6hsC9IeA" base_Class="_IARmYKzKEeekPI6hsC9IeA" id="REQ01.2.02.15" text="If a package is deleted from a profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_IA3cQKzKEeekPI6hsC9IeA" base_Class="_IAwHgKzKEeekPI6hsC9IeA" id="REQ01.2.02.16" text="If a profile is deleted from a profile then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_ICZtUKzKEeekPI6hsC9IeA" base_Class="_ICRKcKzKEeekPI6hsC9IeA" id="REQ01.2.02.18" text="If the URI of a profile is modified then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_JqyyAKzLEeekPI6hsC9IeA" base_Class="_JqrdQKzLEeekPI6hsC9IeA" id="REQ01.2.01.17.1" text="If the profile was moved in a profile that is already applied on the profiled &#xA;model then the migration is trivial and every stereotype application shall remain."/>
+ <Requirements:Requirement xmi:id="_JrCCkKzLEeekPI6hsC9IeA" base_Class="_JqsEUKzLEeekPI6hsC9IeA" id="REQ01.2.01.17.2" text="If the profile was moved in a profile that is not already applied on the profiled model&#xA; then the migration tool asks the designer if the moved profile should be reapplied. &#xA;If the designer answers 'yes' every stereotype application shall remain conversely if &#xA;the answer is 'no' then every stereotype application shall be deleted."/>
+ <Requirements:Requirement xmi:id="_Ld88QKzMEeekPI6hsC9IeA" base_Class="_LdykMKzMEeekPI6hsC9IeA" id="REQ01.2.03.01" text="If an EnumerationLitteral is added to a Enumeration the migration tool shall not do anything"/>
+ <Requirements:Requirement xmi:id="_LebdYKzMEeekPI6hsC9IeA" base_Class="_LeUIoKzMEeekPI6hsC9IeA" id="REQ01.2.03.01" text="If an enumeration literal is deleted from an enumeration in the profile specification and this&#xA; enumeration is used to type one or many properties of stereotypes then all stereotype&#xA; applications corresponding to the affected stereotype shall be upgraded. The upgrade &#xA;consists for each stereotype application in providing the designer with the possibility to&#xA; update the enumeration literal affected to the property whose specification was changed."/>
+ <Requirements:Requirement xmi:id="_Le7MoKzMEeekPI6hsC9IeA" base_Class="_Lez34KzMEeekPI6hsC9IeA" id="REQ01.2.03.03" text="If the owner of an Enumeration is modified the migration tool shall not do anything"/>
+ <Requirements:Requirement xmi:id="_KtEccKzNEeekPI6hsC9IeA" base_Class="_Ks7SgKzNEeekPI6hsC9IeA" id="REQ01.2.04.01" text="If an EnumerationLiteral is moved to an other Enumeration and the original Enumeration&#xA; is used to type one or many properties of stereotypes then all stereotype applications &#xA;corresponding to the affected stereotype shall be upgraded.The upgrade consists for &#xA;each stereotype application in providing the designer with the possibility to update &#xA;(choose between all remains EnumerationLiteral) the enumeration literal affected to&#xA; the property whose specification was changed."/>
+ <Requirements:Requirement xmi:id="_lJAIsKzNEeekPI6hsC9IeA" base_Class="_lI2XsKzNEeekPI6hsC9IeA" id="REQ01.2.05.01" text="If the alias of a element import is modified then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_lJfQ4KzNEeekPI6hsC9IeA" base_Class="_lJX8IKzNEeekPI6hsC9IeA" id="REQ01.2.05.01" text="If the imported element of an ElementImport is modified and &#xA;the imported element is a type used to type stereotype properties &#xA;then all stereotype applications corresponding to the upgraded &#xA;stereotype specification shall be upgraded. For each stereotype &#xA;application the upgrade consists in the attempt of converting &#xA;(see requirement REQ01.2.08.15) the values referenced by the slot &#xA;corresponding to the property with the changed type. Such conversion &#xA;of values can only occur if the values are not references and the old type &#xA;and the new type are compatible. The compatibility rule between types is &#xA;specified in the UML specification."/>
+ <Requirements:Requirement xmi:id="_lJ-ZEKzNEeekPI6hsC9IeA" base_Class="_lJ3EUKzNEeekPI6hsC9IeA" id="REQ01.2.05.03" text="If the source of a element import is modified then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_lKc6MKzNEeekPI6hsC9IeA" base_Class="_lKVlcKzNEeekPI6hsC9IeA" id="REQ01.2.05.04" text="If the target of a element import is modified then the migration tool shall do as if the importedElement was modified."/>
+ <Requirements:Requirement xmi:id="_lLI2sKzNEeekPI6hsC9IeA" base_Class="_lLBh8KzNEeekPI6hsC9IeA" id="REQ01.2.05.05" text="If an element import is moved then the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_G78ewKzOEeekPI6hsC9IeA" base_Class="_G70i8KzOEeekPI6hsC9IeA" id="REQ01.2.06.01" text="If the imported package of a package import is modified the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_G8bm8KzOEeekPI6hsC9IeA" base_Class="_G8USMKzOEeekPI6hsC9IeA" id="REQ01.2.06.02" text="If the source of a package import is modified the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_G86vIKzOEeekPI6hsC9IeA" base_Class="_G8yzUKzOEeekPI6hsC9IeA" id="REQ01.2.06.03" text="If the target of a package import is modified the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_G9bFcKzOEeekPI6hsC9IeA" base_Class="_G9TwsKzOEeekPI6hsC9IeA" id="REQ01.2.06.04" text="If a package import is move from a package to an other one the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_mS9k8KzOEeekPI6hsC9IeA" base_Class="_mS1CEKzOEeekPI6hsC9IeA" id="REQ01.2.07.01.1" text="If the new property has a default value then each application of the modified &#xA;stereotype in the profiled model has its corresponding slot set with the default value."/>
+ <Requirements:Requirement xmi:id="_mTgXgKzOEeekPI6hsC9IeA" base_Class="_mTV_cKzOEeekPI6hsC9IeA" id="REQ01.2.07.01.2" text="If the new property has no default value but a value is required (the minimal&#xA; multiplicity is greater or equal than 1) then each application of the modified &#xA;stereotype in the profiled model has its corresponding slot, the migration tool &#xA;shall ask the designer to know which value he wants to set. "/>
+ <Requirements:Requirement xmi:id="_mUBU4KzOEeekPI6hsC9IeA" base_Class="_mT4yAKzOEeekPI6hsC9IeA" id="REQ01.2.07.01.3" text="If the new property has no default value and a value is optional (the minimal&#xA; multiplicity is equal to 0) then each application of the modified stereotype &#xA;in the profiled model has it corresponding slot set to null."/>
+ <Requirements:Requirement xmi:id="_mUjgYKzOEeekPI6hsC9IeA" base_Class="_mUcLoKzOEeekPI6hsC9IeA" id="REQ01.2.07.02" text="If a stereotype becomes a specialization of another stereotype then&#xA; any application of the specializing stereotype shall have slots for each&#xA; inherited property. The strategies to automatically set slot values&#xA; expressed in REQ01.2.07.01 and REQ01.2.07.02 shall apply."/>
+ <Requirements:Requirement xmi:id="_mV6LQKzOEeekPI6hsC9IeA" base_Class="_mVvzMKzOEeekPI6hsC9IeA" id="REQ01.2.07.03" text="If a property is deleted from a Stereotype then the migration tool&#xA; shall delete the slot representing this property in each application&#xA; of this stereotype."/>
+ <Requirements:Requirement xmi:id="_mWdk4KzOEeekPI6hsC9IeA" base_Class="_mWWQIKzOEeekPI6hsC9IeA" id="REQ01.2.07.04" text="If a generalization is deleted from a Stereotype then for each application&#xA; of this stereotype the migration tool shall delete each slot corresponding&#xA; of inherited properties."/>
+ <Requirements:Requirement xmi:id="_mYdI8KzOEeekPI6hsC9IeA" base_Class="_mYSJ0KzOEeekPI6hsC9IeA" id="REQ01.2.07.05" text="If a Stereotype becomes concrete then the migration tool should not do anything."/>
+ <Requirements:Requirement xmi:id="_mZKTkKzOEeekPI6hsC9IeA" base_Class="_mY_UcKzOEeekPI6hsC9IeA" id="REQ01.2.07.06" text="If a Stereotype becomes abstract the migration tool shall ask the designer&#xA; if he wants to replace applications of this stereotype by one or many &#xA;Stereotypes pick in a list. This list is defined by all specializations of the&#xA; abstract Stereotype available on applied profiles. If the answer is &quot;no&quot;&#xA; then the application of this stereotype is delete, otherwise selected&#xA; stereotypes are applied and inherited slot are preserved."/>
+ <Requirements:Requirement xmi:id="_mZ23IKzOEeekPI6hsC9IeA" base_Class="_mZsfEKzOEeekPI6hsC9IeA" id="REQ01.2.07.07" text="If the isFinalSpecification feature of a Stereotype is modified then the migration tool should not do anything."/>
+ <Requirements:Requirement xmi:id="_maiMkKzOEeekPI6hsC9IeA" base_Class="_maX0gKzOEeekPI6hsC9IeA" id="REQ01.2.07.08" text="If the redefinedClassifier feature of a Stereotype is modified then the migration tool should not do anything."/>
+ <Requirements:Requirement xmi:id="_mbLs0KzOEeekPI6hsC9IeA" base_Class="_mbB70KzOEeekPI6hsC9IeA" id="REQ01.2.07.09" text="If a Stereotype is moved to another profile then the migration tool shall focus&#xA; on the preservation of the stereotype applications available at the profiled model."/>
+ <Requirements:Requirement xmi:id="_F3YN8KzPEeekPI6hsC9IeA" base_Class="_F3MnwKzPEeekPI6hsC9IeA" id="REQ01.2.08.01" text="If the isReadOnly feature of a property is modified the migration &#xA;tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_F339MKzPEeekPI6hsC9IeA" base_Class="_F3wocKzPEeekPI6hsC9IeA" id="REQ01.2.08.02" text="If property of a stereotype becomes derived (i.e., its value is computed&#xA; based on a rule) then this latter is also immutable (i.e. read only). This &#xA;implies that any application of the stereotype owning the derived property&#xA; shall be upgraded. The upgrade consists in replacing the user defined&#xA; value (if any) with the value computed from the derivation rule &#xA;implemented for that property."/>
+ <Requirements:Requirement xmi:id="_F4XscKzPEeekPI6hsC9IeA" base_Class="_F4QXsKzPEeekPI6hsC9IeA" id="REQ01.2.08.04" text="If the isDerivedUnion feature of a property is modified the migration &#xA;tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_F5GsQKzPEeekPI6hsC9IeA" base_Class="_F4_XgKzPEeekPI6hsC9IeA" id="REQ01.2.08.05" text="If the aggregation feature of a property is modified the migration &#xA;tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_F5l0cKzPEeekPI6hsC9IeA" base_Class="_F5efsKzPEeekPI6hsC9IeA" id="REQ01.2.08.06" text="If the isID feature of a property is modified the migration &#xA;tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_F6E8oKzPEeekPI6hsC9IeA" base_Class="_F59n4KzPEeekPI6hsC9IeA" id="REQ01.2.08.07" text="If the redefinedProperty feature of a property is modified the migration &#xA;tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_F6kr4KzPEeekPI6hsC9IeA" base_Class="_F6dXIKzPEeekPI6hsC9IeA" id="REQ01.2.08.08" text="If the subsettedProperty feature of a property is modified the migration &#xA;tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_F7DNAKzPEeekPI6hsC9IeA" base_Class="_F674QKzPEeekPI6hsC9IeA" id="REQ01.2.08.09" text="If the default value of a property is modified the migration &#xA;tool shall not do anything"/>
+ <Requirements:Requirement xmi:id="_F7i8QKzPEeekPI6hsC9IeA" base_Class="_F7bngKzPEeekPI6hsC9IeA" id="REQ01.2.08.10" text="If the isOrdered feature of a property is modified the migration &#xA;tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_F8jo4KzPEeekPI6hsC9IeA" base_Class="_F8bGAKzPEeekPI6hsC9IeA" id="REQ01.2.08.11" text="If a property of a stereotype becomes unique and the difference between&#xA; its lower and upper multiplicity is greater than 0 this means that the&#xA; property works as a set (i.e., the same value cannot be referenced multiple&#xA; times by the property)&quot;. This implies that any application of the stereotype &#xA;owning the property that was modified shall ensure the unicity of values in the &#xA;slot corresponding to the property. If such unicity is not observed the any&#xA; duplicated occurrence of the same value is removed from the set. Conversely &#xA;if the unicity is observed then the set of values referenced in the slot remain unchanged."/>
+ <Requirements:Requirement xmi:id="_F9CxEKzPEeekPI6hsC9IeA" base_Class="_F87cUKzPEeekPI6hsC9IeA" id="REQ01.2.08.12" text="If the isUnique feature of a property becomes false the migration &#xA;tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_F9igUKzPEeekPI6hsC9IeA" base_Class="_F9akgKzPEeekPI6hsC9IeA" id="REQ01.2.08.13.1" text="If the lower value is increase, means that&#xA; as many as the lowerValue values are mandatory the migration tool &#xA;shall upgrade each application of the stereotype owning this property.&#xA; The upgrade consist in asking the designer which value he want to set &#xA;on the slot corresponding of this property."/>
+ <Requirements:Requirement xmi:id="_F-BBcKzPEeekPI6hsC9IeA" base_Class="_F95ssKzPEeekPI6hsC9IeA" id="REQ01.2.08.13.2" text="If the lower value is decreased the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_F-gJoKzPEeekPI6hsC9IeA" base_Class="_F-Y04KzPEeekPI6hsC9IeA" id="REQ01.2.08.14.1" text="If the upper value is decrease the migration&#xA; tool shall upgrade each application of the stereotype owning this &#xA;property. The upgrade consist in asking the designer which values he &#xA;wants to keep for the slot corresponding of this property."/>
+ <Requirements:Requirement xmi:id="_F_foIKzPEeekPI6hsC9IeA" base_Class="_F_YTYKzPEeekPI6hsC9IeA" id="REQ01.2.08.14.2" text="If the upper value is increased the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_F_-wUKzPEeekPI6hsC9IeA" base_Class="_F_3bkKzPEeekPI6hsC9IeA" id="REQ01.2.08.15.1" text="If the new type is convertible into the old one then the migration tool &#xA;shall set the convert value to all slot corresponding of the property &#xA;in each application of the owning stereotype. The compatibility rule &#xA;between types is specified in the UML specification."/>
+ <Requirements:Requirement xmi:id="_GAd4gKzPEeekPI6hsC9IeA" base_Class="_GAWjwKzPEeekPI6hsC9IeA" id="REQ01.2.08.15.2" text="If the new type is not convertible into the old one then the migration tool &#xA;shall set the default value to all slot corresponding of the property &#xA;in each application of the owning stereotype."/>
+ <Requirements:Requirement xmi:id="_GB6qAKzPEeekPI6hsC9IeA" base_Class="_GBzVQKzPEeekPI6hsC9IeA" id="REQ01.2.08.16" text="If the isLeaf feature of a property is modified the migration &#xA;tool shall not do anything"/>
+ <Requirements:Requirement xmi:id="_GCbnYKzPEeekPI6hsC9IeA" base_Class="_GCTrkKzPEeekPI6hsC9IeA" id="REQ01.2.08.17" text="If the property becomes static then the migration tool shall change the &#xA;value of every slop corresponding to this property. To determine which &#xA;value the system shall set, it shall ask the designer which value he wants."/>
+ <Requirements:Requirement xmi:id="_GC9y4KzPEeekPI6hsC9IeA" base_Class="_GC0B4KzPEeekPI6hsC9IeA" id="REQ01.2.08.18" text="If a property is moved from a stereotype to an other stereotype the migration &#xA;tool shall consider this change as a delete of the property and an add of the &#xA;same property to an other stereotype. Strategies to delete a property from &#xA;a stereotype (REQ01.2.07.03) and to add a property to a stereotype &#xA;(REQ01.2.07.01) shall apply."/>
+ <Requirements:Requirement xmi:id="_DOkjMKzQEeekPI6hsC9IeA" base_Class="_DObZQKzQEeekPI6hsC9IeA" id="REQ01.2.10.01" text="If an extension is move from a package to an other one the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_VJi7AKzQEeekPI6hsC9IeA" base_Class="_VJZKAKzQEeekPI6hsC9IeA" id="REQ01.2.11.01.1" text="If the generalizing stereotype is changed and the old general stereotype&#xA; generalize the new general stereotype then only property of the new &#xA;general stereotype shall be preserve other shall be deleted. This implies&#xA; that any application of the specializing stereotype or one of its &#xA;specialization shall be upgrade. The upgrade consists in the removal of &#xA;slot corresponding to properties which are not inherited from the new &#xA;general type or specific to the specializing stereotype. The rules describing&#xA; the strategy for the removal of property of a stereotype are described &#xA;in REQ01.2.07.03."/>
+ <Requirements:Requirement xmi:id="_VKCDMKzQEeekPI6hsC9IeA" base_Class="_VJ7VgKzQEeekPI6hsC9IeA" id="REQ01.2.11.01.2" text="If the generalizing stereotype is changed and the new general stereotype&#xA; generalize the old general stereotype then the properties of the new &#xA;general stereotype are inherited. This implies that any application of &#xA;the specializing stereotype or one of its specialization shall be upgrade. &#xA;The upgrade consists in the addition of slots corresponding to newly &#xA;inherited properties (if any). The rules describing the strategy to assign &#xA;values to the new slots are described in REQ01.2.07.01."/>
+ <Requirements:Requirement xmi:id="_VKk1wKzQEeekPI6hsC9IeA" base_Class="_VKdhAKzQEeekPI6hsC9IeA" id="REQ01.2.11.01.3" text="If the generalizing stereotype is changed without any relation of &#xA;generalization between the new general stereotype and the old one then &#xA;properties of the old general stereotype are not anymore accessible &#xA;while the properties of the new general stereotype are inherited. &#xA;This implies that any application of the specializing stereotype or one&#xA; of its specialization shall be upgraded. The upgrade consists in the &#xA;removal of slot corresponding to properties inherited from the old &#xA;general stereotype and the addition of slots corresponding to newly &#xA;inherited properties (if any). The rules describing the strategy to assign &#xA;values to the new slots are described in REQ01.2.07.01. The rules describing&#xA; the strategy for the removal of property of a stereotype are described &#xA;in REQ01.2.07.03."/>
+ <Requirements:Requirement xmi:id="_VLFMEKzQEeekPI6hsC9IeA" base_Class="_VK93UKzQEeekPI6hsC9IeA" id="REQ01.2.11.02" text="If a generalization relationship between stereotypes is modified in the &#xA;profile specification and this modification consists in changing the specializing&#xA; stereotype then all inherited property are not anymore accessible from the old&#xA; specialization and are now available from the new specialization. This implies that &#xA;two types of upgrade shall be done. The first one concern any application of the &#xA;old specializing stereotype or one of its specialization, where the upgrade consists&#xA; in the removal of slot corresponding to properties inherited from the old general&#xA; stereotype. The second upgrade concern any application of the new specializing &#xA;stereotype or one of its specialization where the upgrade consist in addition of &#xA;slots corresponding to newly inherited properties(if any). The rules describing &#xA;the strategy to assign values to the new slots are described in REQ01.2.07.01. &#xA;The rules describing the strategy for the removal of property of a stereotype &#xA;are described in REQ01.2.07.03."/>
+ <Requirements:Requirement xmi:id="_VLkUQKzQEeekPI6hsC9IeA" base_Class="_VLc_gKzQEeekPI6hsC9IeA" id="REQ01.2.11.03" text=" If the isSubstituable feature of a Generalization is modified then&#xA; the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_VMEqkKzQEeekPI6hsC9IeA" base_Class="_VL8HsKzQEeekPI6hsC9IeA" id="REQ01.2.11.04" text="If the generalization is move from a stereotype to another one means&#xA; that the specialization of this generalization is changed then the rule &#xA;describing the modification of the specialization in REQ01.2.11.02 &#xA;shall be apply."/>
+ <Requirements:Requirement xmi:id="_b9E2wKzwEeekPI6hsC9IeA" base_Class="_b87s0KzwEeekPI6hsC9IeA" id="REQ01.3" text="The migration tool shall provide a user interface to let the user make choices"/>
+ <Requirements:Requirement xmi:id="_sZPQwKz8EeekPI6hsC9IeA" base_Class="_sZJxMKz8EeekPI6hsC9IeA" id="REQ01.2.08.03" text="If the isDerived feature of a property becomes false the migration &#xA;tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_qx0qMK0AEeekPI6hsC9IeA" base_Class="_qxujkK0AEeekPI6hsC9IeA" id="REQ01.2.09" text="The migration tool shall be able to manage modification of an Association"/>
+ <Requirements:Requirement xmi:id="_qyFI4K0AEeekPI6hsC9IeA" base_Class="_qxujka0AEeekPI6hsC9IeA" id="REQ01.2.09.01" text="If an association is move from a package to an other one the migration tool shall not do anything."/>
+ <Requirements:Requirement xmi:id="_h6_0UK59EeexmuCIN6Rutw" base_Class="_h6v8sK59EeexmuCIN6Rutw" id="REQ01.2.01.17" text="If a package is moved to another profile then the migration tool shall focus&#xA;on the preservation of the stereotype applications available at the profiled model"/>
+ <Requirements:Refine xmi:id="_7nWL0K5_EeexmuCIN6Rutw" base_DirectedRelationship="_7nNo8K5_EeexmuCIN6Rutw" base_Abstraction="_7nNo8K5_EeexmuCIN6Rutw"/>
+ <Requirements:Refine xmi:id="_8yVYQK5_EeexmuCIN6Rutw" base_DirectedRelationship="_8yLnQK5_EeexmuCIN6Rutw" base_Abstraction="_8yLnQK5_EeexmuCIN6Rutw"/>
+ <Requirements:Requirement xmi:id="_N5YG0K6CEeexmuCIN6Rutw" base_Class="_N5QLAK6CEeexmuCIN6Rutw" id="REQ01.2.01.17" text="If a profile is moved to another profile then the migration tool shall focus&#xA;on the preservation of the stereotype applications available at the profiled model."/>
+ <Requirements:Refine xmi:id="_5_-eAK6CEeexmuCIN6Rutw" base_DirectedRelationship="_5_2iMK6CEeexmuCIN6Rutw" base_Abstraction="_5_2iMK6CEeexmuCIN6Rutw"/>
+ <Requirements:Refine xmi:id="_7BJAEK6CEeexmuCIN6Rutw" base_DirectedRelationship="_7A-oAK6CEeexmuCIN6Rutw" base_Abstraction="_7A-oAK6CEeexmuCIN6Rutw"/>
+ <Requirements:Requirement xmi:id="_B3esIK6LEeexmuCIN6Rutw" base_Class="_B3U7IK6LEeexmuCIN6Rutw" id="REQ01.2.07.01" text="If a Stereotype is updated with a new property then a slot for this &#xA;property shall be available for each application of the stereotype&#xA;in the profile model."/>
+ <Requirements:Refine xmi:id="_swcykK6LEeexmuCIN6Rutw" base_DirectedRelationship="_swTooK6LEeexmuCIN6Rutw" base_Abstraction="_swTooK6LEeexmuCIN6Rutw"/>
+ <Requirements:Refine xmi:id="_txrmEK6LEeexmuCIN6Rutw" base_DirectedRelationship="_txhOAK6LEeexmuCIN6Rutw" base_Abstraction="_txhOAK6LEeexmuCIN6Rutw"/>
+ <Requirements:Refine xmi:id="_u9cOkK6LEeexmuCIN6Rutw" base_DirectedRelationship="_u9TrsK6LEeexmuCIN6Rutw" base_Abstraction="_u9TrsK6LEeexmuCIN6Rutw"/>
+ <Requirements:Requirement xmi:id="_bPDz4K6VEeexmuCIN6Rutw" base_Class="_bO8fIK6VEeexmuCIN6Rutw" id="REQ01.2.07.09.1" text="If the stereotype was moved in a profile that is already applied on the &#xA;profiled model then the migration is trivial and every application of &#xA;this stereotype shall remain"/>
+ <Requirements:Requirement xmi:id="_banjoK6VEeexmuCIN6Rutw" base_Class="_bagO4K6VEeexmuCIN6Rutw" id="REQ01.2.07.09.2" text="If the stereotype was moved in a profile that is not already applied on the &#xA;profiled model then the migration tool asks the designer if the profile&#xA; should be applied. If the designer answers 'yes' every application of this &#xA;stereotype shall remain conversely if the answer is 'no' then every &#xA;application of this stereotype shall be deleted."/>
+ <Requirements:Refine xmi:id="_RI0uQK6WEeexmuCIN6Rutw" base_DirectedRelationship="_RIsLYK6WEeexmuCIN6Rutw" base_Abstraction="_RIsLYK6WEeexmuCIN6Rutw"/>
+ <Requirements:Refine xmi:id="_SEj9wK6WEeexmuCIN6Rutw" base_DirectedRelationship="_SEaz0K6WEeexmuCIN6Rutw" base_Abstraction="_SEaz0K6WEeexmuCIN6Rutw"/>
+ <Requirements:Requirement xmi:id="_He5fQK6ZEeexmuCIN6Rutw" base_Class="_HeyKgK6ZEeexmuCIN6Rutw" id="REQ01.2.08.13" text="If the loverValue feature of a property is modified then the migration &#xA;tool shall maintain the validity of the model."/>
+ <Requirements:Refine xmi:id="_Og6ekK6bEeexmuCIN6Rutw" base_DirectedRelationship="_OgxUoK6bEeexmuCIN6Rutw" base_Abstraction="_OgxUoK6bEeexmuCIN6Rutw"/>
+ <Requirements:Refine xmi:id="_QIPowK6bEeexmuCIN6Rutw" base_DirectedRelationship="_QIHF4K6bEeexmuCIN6Rutw" base_Abstraction="_QIHF4K6bEeexmuCIN6Rutw"/>
+ <Requirements:Requirement xmi:id="_UINeQK6bEeexmuCIN6Rutw" base_Class="_UIHXoK6bEeexmuCIN6Rutw" id="REQ01.2.08.14" text="If the upper value of a property is modified then the migration &#xA;tool shall maintain the validity of the model"/>
+ <Requirements:Refine xmi:id="_fpyrEK6bEeexmuCIN6Rutw" base_DirectedRelationship="_fpphIK6bEeexmuCIN6Rutw" base_Abstraction="_fpphIK6bEeexmuCIN6Rutw"/>
+ <Requirements:Refine xmi:id="_g5ibsK6bEeexmuCIN6Rutw" base_DirectedRelationship="_g5Z40K6bEeexmuCIN6Rutw" base_Abstraction="_g5Z40K6bEeexmuCIN6Rutw"/>
+ <Requirements:Requirement xmi:id="_tP9T4K6dEeexmuCIN6Rutw" base_Class="_tP2mMK6dEeexmuCIN6Rutw" id="REQ01.2.08.15" text="If the type of a property is changes the migration tool shall change the value &#xA;of the slot corresponding of the property in each application of the owning &#xA;stereotype."/>
+ <Requirements:Refine xmi:id="_A_INMK6eEeexmuCIN6Rutw" base_DirectedRelationship="_A-_qUK6eEeexmuCIN6Rutw" base_Abstraction="_A-_qUK6eEeexmuCIN6Rutw"/>
+ <Requirements:Refine xmi:id="_CHPEwK6eEeexmuCIN6Rutw" base_DirectedRelationship="_CHGh4K6eEeexmuCIN6Rutw" base_Abstraction="_CHGh4K6eEeexmuCIN6Rutw"/>
+ <Requirements:Requirement xmi:id="_VUamsK8fEeee2YU5cusFOw" base_Class="_VUVuMK8fEeee2YU5cusFOw" id="REQ01.2.11.01" text="If a generalization relationship between stereotypes is modified in the &#xA;profile specification and this modification consists in changing the generalizing&#xA; stereotype then the migration tool shall focus on the preservation of slot &#xA;corresponding to inherited properties."/>
+ <Requirements:Refine xmi:id="_GSMvQK8gEeee2YU5cusFOw" base_DirectedRelationship="_GR-FwK8gEeee2YU5cusFOw" base_Abstraction="_GR-FwK8gEeee2YU5cusFOw"/>
+ <Requirements:Refine xmi:id="_G-GL8K8gEeee2YU5cusFOw" base_DirectedRelationship="_G97z4K8gEeee2YU5cusFOw" base_Abstraction="_G97z4K8gEeee2YU5cusFOw"/>
+ <Requirements:Refine xmi:id="_HZo4cK8gEeee2YU5cusFOw" base_DirectedRelationship="_HZfHcK8gEeee2YU5cusFOw" base_Abstraction="_HZfHcK8gEeee2YU5cusFOw"/>
+</xmi:XMI>
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/style.css b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/style.css
new file mode 100644
index 00000000000..140e97bca1f
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/model/requirements/style.css
@@ -0,0 +1,24 @@
+Abstraction > Label:name{
+ visible:false;
+}
+
+UseCaseDiagram Class[appliedStereotypes~="Requirement"] > Compartment[type=StereotypeCompartment] {
+ visible:true;
+ showTitle:false;
+}
+
+UseCaseDiagram Class[appliedStereotypes~="Requirement"] > Compartment[type=Classifier_UseCaseCompartment] {
+ visible:false;
+}
+
+UseCaseDiagram Class[appliedStereotypes~="Requirement"] > Compartment[type=StereotypeCompartment] > [property="id"],
+UseCaseDiagram Class[appliedStereotypes~="Requirement"] > Compartment[type=StereotypeCompartment] > [property="derived"],
+UseCaseDiagram Class[appliedStereotypes~="Requirement"] > Compartment[type=StereotypeCompartment] > [property="derivedFrom"],
+UseCaseDiagram Class[appliedStereotypes~="Requirement"] > Compartment[type=StereotypeCompartment] > [property="satisfiedBy"],
+UseCaseDiagram Class[appliedStereotypes~="Requirement"] > Compartment[type=StereotypeCompartment] > [property="refinedBy"],
+UseCaseDiagram Class[appliedStereotypes~="Requirement"] > Compartment[type=StereotypeCompartment] > [property="tracedTo"],
+UseCaseDiagram Class[appliedStereotypes~="Requirement"] > Compartment[type=StereotypeCompartment] > [property="verifiedBy"],
+UseCaseDiagram Class[appliedStereotypes~="Requirement"] > Compartment[type=StereotypeCompartment] > [property="master"],
+UseCaseDiagram Class[appliedStereotypes~="Requirement"] > Compartment[kind="operations"] {
+ visible:false;
+} \ No newline at end of file
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/plugin.properties b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/plugin.properties
new file mode 100644
index 00000000000..1701c59d640
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = TreeNode Model
+providerName = www.example.org
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/plugin.xml b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/plugin.xml
new file mode 100644
index 00000000000..b26aa014c65
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/plugin.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+ <extension
+ point="org.eclipse.papyrus.uml.tools.profileApplicationDelegates">
+ <delegate
+ class="org.eclipse.papyrus.toolsmiths.profilemigration.internal.MigratorProfileApplicationDelegate">
+ </delegate>
+ </extension>
+
+
+</plugin>
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/pom.xml b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/pom.xml
new file mode 100644
index 00000000000..6cc09c3bc61
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/pom.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrus</groupId>
+ <artifactId>org.eclipse.papyrus.toolsmiths.profile-migration</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.papyrus.toolsmiths.profilemigration</artifactId>
+ <version>0.7.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/Activator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/Activator.java
new file mode 100644
index 00000000000..6bcc26fbfb5
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/Activator.java
@@ -0,0 +1,87 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ /**
+ * The plug-in ID
+ */
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.toolsmiths.profilemigration"; //$NON-NLS-1$
+
+ /**
+ * The log
+ */
+ public static LogHelper log;
+
+ /**
+ * The shared instance
+ */
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /**
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ log = new LogHelper(this);
+ }
+
+ /**
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+ /**
+ * Returns an image descriptor for the image file at the given
+ * plug-in relative path
+ *
+ * @param path
+ * the path
+ * @return the image descriptor
+ */
+ public static ImageDescriptor getImageDescriptor(String path) {
+ return imageDescriptorFromPlugin(PLUGIN_ID, path);
+ }
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/Messages.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/Messages.java
new file mode 100644
index 00000000000..1dfb8de52aa
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/Messages.java
@@ -0,0 +1,30 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+ private static final String BUNDLE_NAME = "org.eclipse.papyrus.toolsmiths.profilemigration.messages"; //$NON-NLS-1$
+ public static String MigratorProfileApplicationDelegate_PreferenceLabel;
+ public static String MigratorProfileApplicationDelegate_SelectFileDialogTitle;
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ private Messages() {
+ }
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/MigratorProfileApplication.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/MigratorProfileApplication.java
new file mode 100644
index 00000000000..d0a213b3e0b
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/MigratorProfileApplication.java
@@ -0,0 +1,303 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.compare.Comparison;
+import org.eclipse.emf.compare.EMFCompare;
+import org.eclipse.emf.compare.scope.DefaultComparisonScope;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.XMIResource;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.toolsmiths.profilemigration.factory.IMigratorFactory;
+import org.eclipse.papyrus.toolsmiths.profilemigration.factory.MigratorFactory;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationRegistry;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.AtomicMigratorComparator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.DifferenceTreeBuilder;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.ICompositeMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IAtomicMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferencePage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.Profile;
+
+/**
+ * The class is used to migrated the model to the new version of the profile
+ */
+public class MigratorProfileApplication {
+
+ /**
+ * The profiled model which is migrated
+ */
+ public static Package profiledModel;
+
+ /**
+ * The applied profile which is currently use for the migration
+ */
+ public static Profile appliedProfile;
+
+ /**
+ * The comparison of the two profile (output of EMF compare)
+ */
+ public static Comparison comparison;
+
+ /**
+ * The list of profile applied during the migration
+ */
+ public static Set<Profile> newAppliedProfile = new HashSet<>();
+
+ /**
+ * The list of stereotype applied during the migration
+ */
+ public static List<EObject> newStereotypeApplication = new ArrayList<>();
+
+ /**
+ * the list of atomic migration detected between the two files
+ */
+ protected List<IAtomicMigrator> atomicList;
+
+ /**
+ * the list of composite migration detected between the two files
+ */
+ protected List<ICompositeMigrator> compositeList;
+
+ /**
+ * The list of file already open which is keep to avoid asking the user to select the file each time
+ */
+ private static Map<String, String> cacheProfileToFile = new HashMap<>();
+
+ /**
+ * Constructor.
+ *
+ */
+ public MigratorProfileApplication() {
+ atomicList = new ArrayList<>();
+ compositeList = new ArrayList<>();
+ }
+
+ /**
+ * Reapply the profile on the package_
+ *
+ * @param package_
+ * package owning the stereotype application
+ * @param profile
+ * the profile which must be reapply
+ * @return the list of newly applied stereotype
+ */
+ public List<EObject> reapplyProfile(Package package_, Profile profile) {
+ Resource profileAfterResource = profile.eResource();
+
+ String path = getFileName(profile, profileAfterResource);
+ if (path != null) {
+ URI uri = URI.createFileURI(path);
+ ResourceSet profileBeforeResourceSet = new ResourceSetImpl();
+ Resource profileBeforeResource = profileBeforeResourceSet.getResource(uri, true);
+
+ migrateNewAppliedProfile(package_, profile, profileBeforeResource, profileAfterResource);
+ } else {
+ MessageDialog message = new MessageDialog(Display.getDefault().getActiveShell(), "Incorect file", null, "The selected path is incorect so the profile will just be reapply.", MessageDialog.INFORMATION, new String[] { "OK" }, 0); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ message.open();
+ package_.applyProfile(profile);
+ }
+ return newStereotypeApplication;
+ }
+
+ /**
+ * Migrate package_ to the new version of profile
+ *
+ * @param package_
+ * the package to migrate
+ * @param profile
+ * the new profile
+ * @param profileBeforeResource
+ * the resource corresponding to the profile before modification
+ * @param profileAfterResource
+ * the resource corresponding to the new profile
+ * @return the migrated package
+ */
+ public Package migrateNewAppliedProfile(Package package_, Profile profile, Resource profileBeforeResource, Resource profileAfterResource) {
+ profiledModel = package_;
+ appliedProfile = profile;
+ newAppliedProfile.clear();
+
+ try {
+ // 1] initialize treeNode and registry (save all necessary data)
+ TreeNode rootTreeNode = getTreeNode(profileBeforeResource, profileAfterResource);
+ if (rootTreeNode != null) {
+ new StereotypeApplicationRegistry(rootTreeNode, profiledModel);
+
+ // 2] migrate
+ migrateNewAppliedProfile(profiledModel, rootTreeNode, profile, true);
+ } else {
+ // this is the case where there is no modification in the profile
+ profiledModel.applyProfile(profile);
+ }
+ } catch (Exception e) {
+ Activator.log.error(e);
+ }
+ return profiledModel;
+ }
+
+ /**
+ * This method is used to get the treeNode from to files (before and after)
+ *
+ * @param before
+ * the resource for the model before modification
+ * @param after
+ * the resource for the model after modification
+ * @return the treeNode base on modifications
+ */
+ protected TreeNode getTreeNode(Notifier before, Notifier after) {
+ // get comparison model
+ DefaultComparisonScope scope = new DefaultComparisonScope(after, before, null);
+ EMFCompare comparator = EMFCompare.builder().build();
+ comparison = comparator.compare(scope);
+
+ // get TreeNode
+ DifferenceTreeBuilder builder = new DifferenceTreeBuilder(comparison);
+ TreeNode differenceTree = builder.buildMatchTree();
+
+ return differenceTree;
+ }
+
+ /**
+ * This method migrate to model to the new version of the profile
+ *
+ * @param model
+ * the profiled model to migrate
+ * @param treeNode
+ * the treeNode corresponding to differences between the profile before and after modifications
+ * @param profile
+ * the concerned profile
+ * @param shouldReapply
+ * true if we have to reapply the profile, false otherwise
+ */
+ protected void migrateNewAppliedProfile(Package model, TreeNode treeNode, Profile profile, boolean shouldReapply) {
+ // 1] clear lists
+ atomicList.clear();
+ compositeList.clear();
+
+ // 2] initialize lists
+ initAtomicList(treeNode, MigratorFactory.INSTANCE);
+ initCompositeList();
+
+ // 3] reapply profile if it is necessary
+ if (shouldReapply) {
+ model.applyProfile(appliedProfile);
+ }
+
+ // 4] migrate the initialize atomicList
+ for (IAtomicMigrator atomic : atomicList) {
+ atomic.migrationAction();
+ }
+
+ // 5] migrate for newly applied profiles (when move into new profile)
+ for (Profile newProfile : newAppliedProfile) {
+ newAppliedProfile.remove(newProfile);
+ migrateNewAppliedProfile(model, treeNode, newProfile, false);
+ }
+ }
+
+ /**
+ * Initialize the list of atomic migration
+ *
+ * @param treeNode
+ */
+ protected void initAtomicList(TreeNode treeNode, IMigratorFactory migratorFactory) {
+ atomicList.addAll(migratorFactory.instantiateMigrator(treeNode));
+ for (TreeNode childNode : treeNode.getChildren()) {
+ initAtomicList(childNode, migratorFactory);
+ }
+ atomicList.sort(new AtomicMigratorComparator());
+ }
+
+ /**
+ * Initialize the list of atomic migration from the list of atomic migration
+ */
+ protected void initCompositeList() {
+ // TODO [Composite migration] initialize this list of composite migration, a composite migration is composed of atomic migration, all atomic migration which compose it shall be remove from the atomic list
+ }
+
+ private static Shell getActiveShell() {
+ Display display = Display.getDefault();
+ Shell result = display.getActiveShell();
+
+ if (result == null) {
+ Shell[] shells = display.getShells();
+ for (Shell shell : shells) {
+ if (shell.getShells().length == 0) {
+ result = shell;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ private String getFileName(Profile profile, Resource profileAfterResource) {
+ if (cacheProfileToFile.containsKey(((XMIResource) profileAfterResource).getID(profile))) {
+ String path = cacheProfileToFile.get(((XMIResource) profileAfterResource).getID(profile));
+ if (ProfileMigrationPreferencePage.getCachedFiles().contains(path)) {
+ return path;
+ } else {
+ cacheProfileToFile.remove(((XMIResource) profileAfterResource).getID(profile));
+ }
+ }
+
+ FileDialog dialog = new FileDialog(getActiveShell(), SWT.OPEN);
+ dialog.setText(NLS.bind(Messages.MigratorProfileApplicationDelegate_SelectFileDialogTitle, profile.getName()));
+ dialog.setFilterExtensions(new String[] { "*.profile.uml", "*" }); //$NON-NLS-1$ //$NON-NLS-2$
+ dialog.setFilterNames(new String[] { "Profiles", "All" }); //$NON-NLS-1$ //$NON-NLS-2$
+ String path = dialog.open();
+
+ if (path != null) {
+ // add all profile to the cache
+ URI uri = URI.createFileURI(path);
+ ResourceSet profileBeforeResourceSet = new ResourceSetImpl();
+ Resource profileBeforeResource = profileBeforeResourceSet.getResource(uri, true);
+ TreeIterator<EObject> iter = profileBeforeResource.getAllContents();
+ while (iter.hasNext()) {
+ EObject object = iter.next();
+ if (object instanceof Package) {
+ if (object instanceof Profile) {
+ cacheProfileToFile.put(((XMIResource) profileBeforeResource).getID(object), path);
+ if (!ProfileMigrationPreferencePage.getCachedFiles().contains(path)) {
+ ProfileMigrationPreferencePage.addFile(path);
+ }
+ }
+ } else {
+ iter.prune();
+ }
+ }
+ }
+ return path;
+ }
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/factory/IMigratorFactory.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/factory/IMigratorFactory.java
new file mode 100644
index 00000000000..960559d8cce
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/factory/IMigratorFactory.java
@@ -0,0 +1,101 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.factory;
+
+import java.util.List;
+
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IAtomicMigrator;
+
+/**
+ * This factory instantiate IAtomicMigrator
+ */
+public interface IMigratorFactory {
+
+ /**
+ * Instantiate an IAtomicMigrator according to the specific TreeNode
+ * Create a list of each AtomicMigrator which are valid for this treeNode
+ *
+ * @param treeNode
+ * @return the list of IAtomicMigrator which are valid for this TreeNode
+ */
+ public List<IAtomicMigrator> instantiateMigrator(TreeNode treeNode);
+
+ // Properties
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when the lower multiplicity of a property has been changed
+ */
+ public IAtomicMigrator instantiateChangeLowerMultiplicityFromPropertyMigrator(TreeNode treeNode);
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when the upper multiplicity of a property has been changed
+ */
+ public IAtomicMigrator instantiateChangeUpperMultiplicityFromPropertyMigrator(TreeNode treeNode);
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when the isStatic feature of a property has been changed
+ */
+ public IAtomicMigrator instantiateChangeIsStaticFromPropertyMigrator(TreeNode treeNode);
+
+ // Stereotypes
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when the isAbstract feature of a stereotype has been changed
+ */
+ public IAtomicMigrator instantiateChangeIsAbstractFromStereotypeMigrator(TreeNode treeNode);
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when a property has been added
+ */
+ public IAtomicMigrator instantiateAddPropertyToStereotypeMigrator(TreeNode treeNode);
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when stereotype has been moved into a new container
+ */
+ public IAtomicMigrator instantiateMoveStereotypeMigrator(TreeNode treeNode);
+
+ // Enumeration
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when an enumerationLiteral has been deleted from a enumeration
+ */
+ public IAtomicMigrator instantiateDeleteEnumerationLiteralFromEnumerationMigrator(TreeNode treeNode);
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when an enumerationLiteral has been moved into a new enumeration
+ */
+ public IAtomicMigrator instantiateMoveEnumerationLiteralFromEnumerationMigrator(TreeNode treeNode);
+
+ // Package
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when package has been moved into a new container
+ */
+ public IAtomicMigrator instantiateMovePackageMigrator(TreeNode treeNode);
+
+ // Profile
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when profile has been moved into a new container
+ */
+ public IAtomicMigrator instantiateMoveProfileMigrator(TreeNode treeNode);
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/factory/MigratorFactory.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/factory/MigratorFactory.java
new file mode 100644
index 00000000000..3a3de8d9a7c
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/factory/MigratorFactory.java
@@ -0,0 +1,90 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.factory;
+
+import java.util.List;
+
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IAtomicMigrator;
+
+/**
+ * This factory instantiate IAtomicMigrator
+ */
+public class MigratorFactory implements IMigratorFactory {
+
+ public static final MigratorFactory INSTANCE = new MigratorFactory();
+
+ private static org.eclipse.papyrus.toolsmiths.profilemigration.internal.factory.AtomicMigratorsFactory internalMigratorFactory;
+
+ private MigratorFactory() {
+ internalMigratorFactory = org.eclipse.papyrus.toolsmiths.profilemigration.internal.factory.AtomicMigratorsFactory.INSTANCE;
+ }
+
+ @Override
+ public List<IAtomicMigrator> instantiateMigrator(TreeNode treeNode) {
+ return internalMigratorFactory.instantiateMigrator(treeNode);
+ }
+
+ @Override
+ public IAtomicMigrator instantiateChangeLowerMultiplicityFromPropertyMigrator(TreeNode treeNode) {
+ return internalMigratorFactory.instantiateChangeLowerMultiplicityFromPropertyMigrator(treeNode);
+ }
+
+ @Override
+ public IAtomicMigrator instantiateChangeUpperMultiplicityFromPropertyMigrator(TreeNode treeNode) {
+ return internalMigratorFactory.instantiateChangeUpperMultiplicityFromPropertyMigrator(treeNode);
+ }
+
+ @Override
+ public IAtomicMigrator instantiateChangeIsStaticFromPropertyMigrator(TreeNode treeNode) {
+ return internalMigratorFactory.instantiateChangeIsStaticFromPropertyMigrator(treeNode);
+ }
+
+ @Override
+ public IAtomicMigrator instantiateChangeIsAbstractFromStereotypeMigrator(TreeNode treeNode) {
+ return internalMigratorFactory.instantiateChangeIsAbstractFromStereotypeMigrator(treeNode);
+ }
+
+ @Override
+ public IAtomicMigrator instantiateAddPropertyToStereotypeMigrator(TreeNode treeNode) {
+ return internalMigratorFactory.instantiateAddPropertyToStereotypeMigrator(treeNode);
+ }
+
+ @Override
+ public IAtomicMigrator instantiateDeleteEnumerationLiteralFromEnumerationMigrator(TreeNode treeNode) {
+ return internalMigratorFactory.instantiateDeleteEnumerationLiteralFromEnumerationMigrator(treeNode);
+ }
+
+ @Override
+ public IAtomicMigrator instantiateMoveStereotypeMigrator(TreeNode treeNode) {
+ return internalMigratorFactory.instantiateMoveStereotypeMigrator(treeNode);
+ }
+
+ @Override
+ public IAtomicMigrator instantiateMovePackageMigrator(TreeNode treeNode) {
+ return internalMigratorFactory.instantiateMovePackageMigrator(treeNode);
+ }
+
+ @Override
+ public IAtomicMigrator instantiateMoveEnumerationLiteralFromEnumerationMigrator(TreeNode treeNode) {
+ return internalMigratorFactory.instantiateMoveEnumerationLiteralFromEnumerationMigrator(treeNode);
+ }
+
+ @Override
+ public IAtomicMigrator instantiateMoveProfileMigrator(TreeNode treeNode) {
+ return internalMigratorFactory.instantiateMoveProfileMigrator(treeNode);
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/MigratorProfileApplicationDelegate.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/MigratorProfileApplicationDelegate.java
new file mode 100644
index 00000000000..e5e5ecdaffd
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/MigratorProfileApplicationDelegate.java
@@ -0,0 +1,87 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.common.util.ECollections;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.toolsmiths.profilemigration.Messages;
+import org.eclipse.papyrus.toolsmiths.profilemigration.MigratorProfileApplication;
+import org.eclipse.papyrus.uml.tools.helper.IProfileApplicationDelegate;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.ProfileApplication;
+
+/**
+ * An implementation of the profile-application delegate protocol for externalize profile applications.
+ * FIXME: Not working with external stereotype application @see{org.eclipse.papyrus.uml.decoratormodel.internal.providers#ExternalizedProfileApplicationDelegate}
+ */
+public class MigratorProfileApplicationDelegate implements IProfileApplicationDelegate {
+
+ @Override
+ public EList<EObject> reapplyProfile(Package package_, Profile profile, IProgressMonitor monitor) {
+ EList<EObject> result = ECollections.<EObject> emptyEList();
+ MigratorProfileApplication migratorProfileApplication = new MigratorProfileApplication();
+ migratorProfileApplication.reapplyProfile(package_, profile);
+ // TODO: return every new stereotype application
+ return result;
+ }
+
+ @Override
+ public boolean appliesTo(Package package_) {
+ return true;
+ }
+
+ @Override
+ public boolean appliesTo(ProfileApplication profileApplication) {
+ return true;
+ }
+
+ @Override
+ public Iterable<ProfileApplication> getProfileApplications(Package package_) {
+ return package_.getProfileApplications();
+ }
+
+ @Override
+ public ProfileApplication getProfileApplication(Package package_, Profile profile) {
+ return package_.getProfileApplication(profile);
+ }
+
+ @Override
+ public EList<EObject> applyProfile(Package package_, Profile profile, Package context, IProgressMonitor monitor) {
+ return package_.applyProfile(profile);
+ }
+
+ @Override
+ public Package getApplyingPackage(ProfileApplication profileApplication) {
+ return profileApplication.getApplyingPackage();
+ }
+
+ @Override
+ public Profile getAppliedProfile(ProfileApplication profileApplication) {
+ return profileApplication.getAppliedProfile();
+ }
+
+ @Override
+ public String getPreferenceConstant() {
+ return "profile_migration_tool"; //$NON-NLS-1$
+ }
+
+ @Override
+ public String getPreferenceLabel() {
+ return Messages.MigratorProfileApplicationDelegate_PreferenceLabel;
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/data/structure/StereotypeApplicationDescriptor.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/data/structure/StereotypeApplicationDescriptor.java
new file mode 100644
index 00000000000..4883f4c8177
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/data/structure/StereotypeApplicationDescriptor.java
@@ -0,0 +1,116 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * This class is used to store a Stereotype application and keep the link between the
+ * object (Stereotype) store in the treeNode and the object store in the profiles model
+ */
+public class StereotypeApplicationDescriptor {
+
+ /**
+ * The stereotype store in the profiled model
+ */
+ private Stereotype stereotype;
+
+ /**
+ * The owner of the stereotype application
+ */
+ private Element owner;
+
+ /**
+ * Save the values link to the property before the migration
+ */
+ private Map<Property, Object> mapPropertyToApplicationValue;
+
+ /**
+ * Constructor
+ *
+ * @param treeNodeStereotype
+ * the stereotype store in the treeNode
+ * @param profiledModelStereotype
+ * the stereotype store in the profiled model
+ * @param owner
+ * the owner of the stereotype application
+ */
+ public StereotypeApplicationDescriptor(Stereotype profiledModelStereotype, Element owner) {
+ super();
+ this.stereotype = profiledModelStereotype;
+ this.owner = owner;
+ initMapPropertyToApplicationValue();
+ }
+
+ /**
+ * Initialize the map
+ */
+ private void initMapPropertyToApplicationValue() {
+ mapPropertyToApplicationValue = new HashMap<>();
+ for (Property attribute : stereotype.getAllAttributes()) {
+ if (attribute.getOwner() instanceof Stereotype) {
+ try {
+ Object value = owner.getValue(stereotype, attribute.getName());
+ mapPropertyToApplicationValue.put(attribute, value);
+ } catch (IllegalArgumentException e) {
+ // means that the attribute doesn't exist in the stereotype application (of the old version of the profile)
+ // ex: a new attribute has been add to a stereotype
+ }
+ }
+ }
+ }
+
+ /**
+ * @return the profiledModelStereotype
+ */
+ public Stereotype getStereotype() {
+ return stereotype;
+ }
+
+ /**
+ * @param profiledModelStereotype
+ * the profiledModelStereotype to set
+ */
+ public void setStereotype(Stereotype profiledModelStereotype) {
+ this.stereotype = profiledModelStereotype;
+ }
+
+ /**
+ * @return the owner
+ */
+ public Element getOwner() {
+ return owner;
+ }
+
+ /**
+ * @param owner
+ * the owner to set
+ */
+ public void setOwner(Element owner) {
+ this.owner = owner;
+ }
+
+ /**
+ * @return the mapPropertyToApplicationValue
+ */
+ public Map<Property, Object> getMapPropertyToApplicationValue() {
+ return mapPropertyToApplicationValue;
+ }
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/data/structure/StereotypeApplicationRegistry.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/data/structure/StereotypeApplicationRegistry.java
new file mode 100644
index 00000000000..3ae1b055ffb
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/data/structure/StereotypeApplicationRegistry.java
@@ -0,0 +1,175 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.compare.Match;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.ProfileUtil;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * Registry of each StereotypeApplicationDescriptor in the model
+ */
+public class StereotypeApplicationRegistry {
+
+ /**
+ * This list contain all stereotype application of the profiled model before the migration
+ */
+ public static List<StereotypeApplicationDescriptor> stereotypeApplicationList;
+
+ private static Package model;
+
+ /**
+ * Constructor, initialize the list of stereotype application
+ *
+ * @param treeNode
+ * @param profiledModel
+ */
+ public StereotypeApplicationRegistry(TreeNode treeNode, Package profiledModel) {
+ initList(treeNode, profiledModel);
+ StereotypeApplicationRegistry.model = profiledModel;
+ }
+
+ /**
+ * Get the list of StereotypeApplicationDescriptor corresponding to the stereotype
+ *
+ * @param stereotype
+ * a stereotype from the model
+ * @return the list of StereotypeApplicationDescriptor corresponding to the stereotype
+ */
+ public static List<StereotypeApplicationDescriptor> getStereotypeApplicationDescriptors(Stereotype stereotype) {
+ List<StereotypeApplicationDescriptor> result = new ArrayList<>();
+ for (StereotypeApplicationDescriptor descriptor : stereotypeApplicationList) {
+ if (descriptor.getStereotype().equals(stereotype)) {
+ result.add(descriptor);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Get the list of StereotypeApplicationDescriptor corresponding to the stereotype and sub stereotypes
+ * Warning: this method give only stereotype find is applied profiles
+ *
+ * @param stereotype
+ * a stereotype from the model
+ * @return the list of StereotypeApplicationDescriptor corresponding to the modelStereotype and sub stereotypes
+ */
+ public static List<StereotypeApplicationDescriptor> getAllStereotypeApplicationDescriptors(Stereotype stereotype) {
+ List<StereotypeApplicationDescriptor> result = new ArrayList<>();
+ for (StereotypeApplicationDescriptor descriptor : stereotypeApplicationList) {
+ for (Stereotype subStereotype : ProfileUtil.findAllSubStereotypes(stereotype, model, false)) {
+ if (descriptor.getStereotype().equals(subStereotype)) {
+ result.add(descriptor);
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Get the list of StereotypeApplicationDescriptor corresponding to stereotype application on the element
+ *
+ * @param element
+ *
+ * @return the list of StereotypeApplicationDescriptor corresponding to stereotype application on the element
+ */
+ public static List<StereotypeApplicationDescriptor> getAllStereotypeApplicationDescriptorsFromOwner(Element element) {
+ List<StereotypeApplicationDescriptor> result = new ArrayList<>();
+ for (StereotypeApplicationDescriptor descriptor : stereotypeApplicationList) {
+ if (descriptor.getOwner().equals(element)) {
+ result.add(descriptor);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Get the StereotypeApplicationDescriptor corresponding to the application of the stereotype on the owner
+ *
+ * @param owner
+ * the owner of the stereotype
+ * @param stereotype
+ * a stereotype from the model
+ * @return the StereotypeApplicationDescriptor corresponding to the application of the stereotype on the owner
+ */
+ public static StereotypeApplicationDescriptor getStereotypeApplicationDescriptors(Element owner, Stereotype stereotype) {
+ StereotypeApplicationDescriptor result = null;
+ for (StereotypeApplicationDescriptor descriptor : stereotypeApplicationList) {
+ if (descriptor.getOwner().equals(owner) && descriptor.getStereotype().equals(stereotype)) {
+ result = descriptor;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Initialize the list of stereotype application in the specified model
+ *
+ * @param treeNode
+ * @param profiledModel
+ */
+ private void initList(TreeNode treeNode, Package profiledModel) {
+ // get all stereotypes in the treeNode
+ Set<Stereotype> treeNodeStereotypes = new HashSet<>();
+ getStereotypes(treeNode, treeNodeStereotypes);
+
+ // fill the list
+ stereotypeApplicationList = new ArrayList<>();
+ TreeIterator<EObject> iter = profiledModel.eAllContents();
+ while (iter.hasNext()) {
+ EObject object = iter.next();
+ if (object instanceof Element) {
+ Element element = (Element) object;
+ for (Stereotype stereotype : element.getAppliedStereotypes()) {
+ stereotypeApplicationList.add(new StereotypeApplicationDescriptor(stereotype, element));
+ }
+ }
+ }
+ }
+
+ /**
+ * Get all stereotype find in the treeNode
+ *
+ * @param treeNode
+ * @param result
+ * the set of finding stereotype
+ */
+ private void getStereotypes(TreeNode treeNode, Set<Stereotype> result) {
+ if (treeNode.getData() instanceof Match) {
+ if (((Match) treeNode.getData()).getRight() instanceof EAnnotation) {
+ return; // not interesting, this is the record of different version of the profile
+ }
+ if (((Match) treeNode.getData()).getLeft() instanceof Stereotype) {
+ result.add((Stereotype) ((Match) treeNode.getData()).getLeft());
+ } else if (((Match) treeNode.getData()).getRight() instanceof Stereotype) {
+ result.add((Stereotype) ((Match) treeNode.getData()).getRight());
+ }
+ }
+ for (TreeNode child : treeNode.getChildren()) {
+ getStereotypes(child, result);
+ }
+ }
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/factory/AtomicMigratorsFactory.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/factory/AtomicMigratorsFactory.java
new file mode 100644
index 00000000000..949f464b554
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/factory/AtomicMigratorsFactory.java
@@ -0,0 +1,170 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.enumeration.DeleteEnumerationLiteralFromEnumerationMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.enumeration.MoveEnumerationLiteralFromEnumerationMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.packages.MovePackageMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.profile.MoveProfileMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.property.ChangeIsStaticFromPropertyMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.property.ChangeLowerMultiplicityFromPropertyMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.property.ChangeUpperMultiplicityFromPropertyMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.stereotype.AddPropertyToStereotypeMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.stereotype.ChangeIsAbstractFromStereotypeMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.stereotype.MoveStereotypeMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IAtomicMigrator;
+
+/**
+ * This factory instantiate IAtomicMigrator
+ */
+public class AtomicMigratorsFactory {
+
+ public static final AtomicMigratorsFactory INSTANCE = new AtomicMigratorsFactory();
+
+ /**
+ * Constructor
+ *
+ * @param profile
+ */
+ private AtomicMigratorsFactory() {
+
+ }
+
+ /**
+ * Instantiate an IAtomicMigrator according to the specific TreeNode
+ * Create a list of each AtomicMigrator which are valid for this treeNode
+ *
+ * @param treeNode
+ * @return the list of IAtomicMigrator which are valid for this TreeNode
+ */
+ public List<IAtomicMigrator> instantiateMigrator(TreeNode treeNode) {
+ List<IAtomicMigrator> result = new ArrayList<>();
+ if (ChangeLowerMultiplicityFromPropertyMigrator.isValid(treeNode)) {
+ result.add(instantiateChangeLowerMultiplicityFromPropertyMigrator(treeNode));
+ }
+ if (ChangeUpperMultiplicityFromPropertyMigrator.isValid(treeNode)) {
+ result.add(instantiateChangeUpperMultiplicityFromPropertyMigrator(treeNode));
+ }
+ if (ChangeIsStaticFromPropertyMigrator.isValid(treeNode)) {
+ result.add(instantiateChangeIsStaticFromPropertyMigrator(treeNode));
+ }
+ if (ChangeIsAbstractFromStereotypeMigrator.isValid(treeNode)) {
+ result.add(instantiateChangeIsAbstractFromStereotypeMigrator(treeNode));
+ }
+ if (AddPropertyToStereotypeMigrator.isValid(treeNode)) {
+ result.add(instantiateAddPropertyToStereotypeMigrator(treeNode));
+ }
+ if (DeleteEnumerationLiteralFromEnumerationMigrator.isValid(treeNode)) {
+ result.add(instantiateDeleteEnumerationLiteralFromEnumerationMigrator(treeNode));
+ }
+ if (MoveStereotypeMigrator.isValid(treeNode)) {
+ result.add(instantiateMoveStereotypeMigrator(treeNode));
+ }
+ if (MovePackageMigrator.isValid(treeNode)) {
+ result.add(instantiateMovePackageMigrator(treeNode));
+ }
+ if (MoveEnumerationLiteralFromEnumerationMigrator.isValid(treeNode)) {
+ result.add(instantiateMoveEnumerationLiteralFromEnumerationMigrator(treeNode));
+ }
+ if (MoveProfileMigrator.isValid(treeNode)) {
+ result.add(instantiateMoveProfileMigrator(treeNode));
+ }
+ return result;
+ }
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when the lower multiplicity of a property has been changed
+ */
+ public IAtomicMigrator instantiateChangeLowerMultiplicityFromPropertyMigrator(TreeNode treeNode) {
+ return new ChangeLowerMultiplicityFromPropertyMigrator(treeNode);
+ }
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when the upper multiplicity of a property has been changed
+ */
+ public IAtomicMigrator instantiateChangeUpperMultiplicityFromPropertyMigrator(TreeNode treeNode) {
+ return new ChangeUpperMultiplicityFromPropertyMigrator(treeNode);
+ }
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when the isStatic feature of a property has been changed
+ */
+ public IAtomicMigrator instantiateChangeIsStaticFromPropertyMigrator(TreeNode treeNode) {
+ return new ChangeIsStaticFromPropertyMigrator(treeNode);
+ }
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when the isAbstract feature of a stereotype has been changed
+ */
+ public IAtomicMigrator instantiateChangeIsAbstractFromStereotypeMigrator(TreeNode treeNode) {
+ return new ChangeIsAbstractFromStereotypeMigrator(treeNode);
+ }
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when a property has been added
+ */
+ public IAtomicMigrator instantiateAddPropertyToStereotypeMigrator(TreeNode treeNode) {
+ return new AddPropertyToStereotypeMigrator(treeNode);
+ }
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when an enumerationLiteral has been deleted from a enumeration
+ */
+ public IAtomicMigrator instantiateDeleteEnumerationLiteralFromEnumerationMigrator(TreeNode treeNode) {
+ return new DeleteEnumerationLiteralFromEnumerationMigrator(treeNode);
+ }
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when stereotype has been moved into a new container
+ */
+ public IAtomicMigrator instantiateMoveStereotypeMigrator(TreeNode treeNode) {
+ return new MoveStereotypeMigrator(treeNode);
+ }
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when package has been moved into a new container
+ */
+ public IAtomicMigrator instantiateMovePackageMigrator(TreeNode treeNode) {
+ return new MovePackageMigrator(treeNode);
+ }
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when an enumerationLiteral has been moved into a new enumeration
+ */
+ public IAtomicMigrator instantiateMoveEnumerationLiteralFromEnumerationMigrator(TreeNode treeNode) {
+ return new MoveEnumerationLiteralFromEnumerationMigrator(treeNode);
+ }
+
+ /**
+ * @param treeNode
+ * @return the migrator responsible of the migration when profile has been moved into a new container
+ */
+ public IAtomicMigrator instantiateMoveProfileMigrator(TreeNode treeNode) {
+ return new MoveProfileMigrator(treeNode);
+ }
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/enumeration/DeleteEnumerationLiteralFromEnumerationMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/enumeration/DeleteEnumerationLiteralFromEnumerationMigrator.java
new file mode 100644
index 00000000000..3dbac3ea0d4
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/enumeration/DeleteEnumerationLiteralFromEnumerationMigrator.java
@@ -0,0 +1,215 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.enumeration;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EEnumLiteral;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.toolsmiths.profilemigration.MigratorProfileApplication;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationDescriptor;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationRegistry;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.TreeNodeUtils;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.AbstractMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.enumeration.IDeleteEnumerationLiteralFromEnumeration;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.DeleteEnumerationLiteralFromEnumerationDialog;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Enumeration;
+import org.eclipse.uml2.uml.EnumerationLiteral;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * If an enumeration literal is deleted from an enumeration in the profile specification and this
+ * enumeration is used to type one or many properties of stereotypes then all stereotype
+ * applications corresponding to the affected stereotype shall be upgraded. The upgrade
+ * consists for each stereotype application in providing the designer with the possibility to
+ * update the enumeration literal affected to the property whose specification was changed.
+ */
+public class DeleteEnumerationLiteralFromEnumerationMigrator extends AbstractMigrator implements IDeleteEnumerationLiteralFromEnumeration {
+
+ protected Enumeration enumeration;
+
+ protected EnumerationLiteral enumerationLiteral;
+
+ /**
+ * Constructor.
+ *
+ * @param treeNode
+ * the treeNode corresponding to this migrator
+ */
+ public DeleteEnumerationLiteralFromEnumerationMigrator(TreeNode treeNode) {
+ super(treeNode);
+ }
+
+ /**
+ * This method check if the specified treeNode is a node representing the current change
+ *
+ * Is valid if:
+ * 1] the treeNode is a deleted node
+ * 2] the deleted element is a EnumerationLiteral
+ *
+ * @param treeNode
+ * @return true if the treeNode represent the current change
+ */
+ public static boolean isValid(TreeNode treeNode) {
+ if (TreeNodeUtils.isDeleteType(treeNode, MigratorProfileApplication.appliedProfile)) {
+ EObject element = TreeNodeUtils.getDeletedElement(treeNode);
+ if (element instanceof EnumerationLiteral && ((EnumerationLiteral) element).getOwner() instanceof Enumeration) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * This method is used to evaluate if the specified node correspond to the
+ * change that we expect to manage with
+ *
+ * @return return true if the treeNode is the expected change, false otherwise
+ */
+ @Override
+ public boolean isValid() {
+ return isValid(treeNode);
+ }
+
+ /**
+ * For each stereotype application using this enumerationLiteral as value of a slot,
+ * we propose to change the value of the slot
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void migrationAction() {
+ if (isDisplayDialogPreference()) {
+ Map<Element, List<Stereotype>> mapElementToStereotype = new HashMap<>();
+ List<StereotypeApplicationDescriptor> descriptorList = StereotypeApplicationRegistry.stereotypeApplicationList;
+ for (StereotypeApplicationDescriptor descriptor : descriptorList) {
+ for (Property property : descriptor.getStereotype().getAllAttributes()) {
+ if (property.getType() == enumeration) {
+ if (descriptor.getMapPropertyToApplicationValue().get(property) instanceof Collection) {
+ for (EObject object : ((Collection<EObject>) descriptor.getMapPropertyToApplicationValue().get(property))) {
+ if (((EEnumLiteral) object).getName().equals(enumerationLiteral.getName())) {
+ if (mapElementToStereotype.containsKey(descriptor.getOwner())) {
+ mapElementToStereotype.get(descriptor.getOwner()).add(descriptor.getStereotype());
+ } else {
+ List<Stereotype> stereotypes = new ArrayList<>();
+ stereotypes.add(descriptor.getStereotype());
+ mapElementToStereotype.put(descriptor.getOwner(), stereotypes);
+ }
+ }
+ }
+ } else {
+ if (descriptor.getMapPropertyToApplicationValue().get(property) == enumerationLiteral || descriptor.getMapPropertyToApplicationValue().get(property) == null) {
+ if (mapElementToStereotype.containsKey(descriptor.getOwner())) {
+ mapElementToStereotype.get(descriptor.getOwner()).add(descriptor.getStereotype());
+ } else {
+ List<Stereotype> stereotypes = new ArrayList<>();
+ stereotypes.add(descriptor.getStereotype());
+ mapElementToStereotype.put(descriptor.getOwner(), stereotypes);
+ }
+ }
+ }
+ }
+ }
+ }
+ if (!mapElementToStereotype.isEmpty()) {
+ DeleteEnumerationLiteralFromEnumerationDialog dialog = new DeleteEnumerationLiteralFromEnumerationDialog(Display.getDefault().getActiveShell(), enumeration, enumerationLiteral, mapElementToStereotype);
+ dialog.open();
+ }
+ }
+ }
+
+ /**
+ * Initialize attributes from the treeNode
+ */
+ @Override
+ public void initAttributes() {
+ if (isValid()) {
+ enumerationLiteral = (EnumerationLiteral) TreeNodeUtils.getDeletedElement(treeNode);
+ enumeration = (Enumeration) TreeNodeUtils.getDeletedElementOwner(treeNode);
+ }
+ }
+
+ /**
+ * Get the priority, this priority will define the order of execution of migrators.
+ * If the priority is 0 it will be execute last.
+ *
+ * @return the priority
+ */
+ @Override
+ public int getPriority() {
+ return 50;
+ }
+
+ /**
+ * Get the value of the preference for the specific dialog
+ *
+ * @return true if the dialog should be display
+ */
+ private boolean isDisplayDialogPreference() {
+ final IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
+ return prefStore.getBoolean(ProfileMigrationPreferenceConstants.DELETE_ENUM_LITERAL_FROM_ENUMERATION);
+ }
+
+ /**
+ * Get the enumeration owning the deleted EnumerationLiteral
+ *
+ * @return the enumeration
+ */
+ @Override
+ public Enumeration getEnumeration() {
+ return enumeration;
+ }
+
+ /**
+ * Get the deleted EnumerationLiteral
+ *
+ * @return the enumerationLiteral
+ */
+ @Override
+ public EnumerationLiteral getEnumerationLiteral() {
+ return enumerationLiteral;
+ }
+
+ /**
+ * Get the deleted element
+ *
+ * @return the deleted element
+ */
+ @Override
+ public Element getDeletedElement() {
+ return getEnumerationLiteral();
+ }
+
+ /**
+ * Get the container of the element before its deletion
+ *
+ * @return the container of the element before its deletion
+ */
+ @Override
+ public Element getDeletedElementContainer() {
+ return getEnumeration();
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/enumeration/MoveEnumerationLiteralFromEnumerationMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/enumeration/MoveEnumerationLiteralFromEnumerationMigrator.java
new file mode 100644
index 00000000000..f091f459c14
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/enumeration/MoveEnumerationLiteralFromEnumerationMigrator.java
@@ -0,0 +1,120 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.enumeration;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.papyrus.toolsmiths.profilemigration.MigratorProfileApplication;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.TreeNodeUtils;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IMoveMigrator;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Enumeration;
+import org.eclipse.uml2.uml.EnumerationLiteral;
+
+/**
+ * If an enumeration literal is deleted from an enumeration in the profile specification and this
+ * enumeration is used to type one or many properties of stereotypes then all stereotype
+ * applications corresponding to the affected stereotype shall be upgraded. The upgrade
+ * consists for each stereotype application in providing the designer with the possibility to
+ * update the enumeration literal affected to the property whose specification was changed.
+ */
+public class MoveEnumerationLiteralFromEnumerationMigrator extends DeleteEnumerationLiteralFromEnumerationMigrator implements IMoveMigrator {
+
+ /**
+ * Constructor.
+ *
+ * @param treeNode
+ * the treeNode corresponding to this migrator
+ */
+ public MoveEnumerationLiteralFromEnumerationMigrator(TreeNode treeNode) {
+ super(treeNode);
+ }
+
+ /**
+ * This method check if the specified treeNode is a node representing the current change
+ *
+ * Is valid if:
+ * 1] the treeNode is a moved node
+ * 2] the moved element is a EnumerationLiteral
+ * 3] the new container is in the currently profile use for the migration
+ *
+ * @param treeNode
+ * @return true if the treeNode represent the current change
+ */
+ public static boolean isValid(TreeNode treeNode) {
+ if (TreeNodeUtils.isMoveChange(treeNode)) {
+ Object element = TreeNodeUtils.getMovedElement(treeNode);
+ EObject oldContainer = TreeNodeUtils.getMovedSourceContainer(treeNode, MigratorProfileApplication.comparison);
+ if (element instanceof EnumerationLiteral && oldContainer != null && oldContainer instanceof Enumeration) {
+ if (TreeNodeUtils.getNearestProfile(treeNode) == MigratorProfileApplication.appliedProfile) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * This method is used to evaluate if the specified node correspond to the
+ * change that we expect to manage with
+ *
+ * @return return true if the treeNode is the expected change, false otherwise
+ */
+ @Override
+ public boolean isValid() {
+ return isValid(treeNode);
+ }
+
+ /**
+ * Get the new container of the element
+ *
+ * @return the new container of the element
+ */
+ @Override
+ public Element getTargetContainer() {
+ return getEnumerationLiteral().getOwner();
+ }
+
+ /**
+ * Get the old container of the element (before the move)
+ *
+ * @return the old container of the element
+ */
+ @Override
+ public Element getSourceContainer() {
+ return getEnumeration();
+ }
+
+ /**
+ * Initialize attributes from the treeNode
+ */
+ @Override
+ public void initAttributes() {
+ if (isValid()) {
+ enumerationLiteral = (EnumerationLiteral) TreeNodeUtils.getMovedElement(treeNode);
+ enumeration = (Enumeration) TreeNodeUtils.getMovedSourceContainer(treeNode, MigratorProfileApplication.comparison);
+ }
+ }
+
+ /**
+ * Get the moved element
+ *
+ * @return the moved element
+ */
+ @Override
+ public Element getMovedElement() {
+ return getEnumerationLiteral();
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/packages/MovePackageMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/packages/MovePackageMigrator.java
new file mode 100644
index 00000000000..8eca05b817a
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/packages/MovePackageMigrator.java
@@ -0,0 +1,237 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.packages;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.toolsmiths.profilemigration.MigratorProfileApplication;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationDescriptor;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationRegistry;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.factory.AtomicMigratorsFactory;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.ProfileUtil;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.TreeNodeUtils;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.AbstractMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.packages.IMovePackageMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.MovePackageDialog;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ *
+ * If a package is moved to another profile then the migration tool shall focus
+ * on the preservation of the stereotype applications available at the profiled model.
+ *
+ * If the package was moved in a profile that is already applied on the profiled
+ * model then the migration is trivial and every stereotype application shall remain.
+ *
+ * If the package was moved in a profile that is not already applied on the
+ * profiled model then the migration tool asks the designer if the profile should
+ * be applied. If the designer answers 'yes' every stereotype application shall remain
+ * conversely if the answer is 'no' then every stereotype application shall be deleted.
+ *
+ */
+public class MovePackageMigrator extends AbstractMigrator implements IMovePackageMigrator {
+
+ Package movedPackage;
+
+ EObject newContainer;
+
+ /**
+ * Constructor.
+ *
+ * @param treeNode
+ * the treeNode corresponding to this migrator
+ */
+ public MovePackageMigrator(TreeNode treeNode) {
+ super(treeNode);
+ }
+
+ /**
+ * This method check if the specified treeNode is a node representing the current change
+ *
+ * Is valid if:
+ * 1] the treeNode is a moved node
+ * 2] the moved element is a Package and not a Profile
+ * 3] the new container is in the currently profile use for the migration
+ *
+ * @param treeNode
+ * @return true if the treeNode represent the current change
+ */
+ public static boolean isValid(TreeNode treeNode) {
+ if (TreeNodeUtils.isMoveChange(treeNode)) {
+ Object element = TreeNodeUtils.getMovedElement(treeNode);
+ if (element instanceof Package && !(element instanceof Profile)) {
+ if (TreeNodeUtils.getMovedSourceContainer(treeNode, MigratorProfileApplication.comparison) == MigratorProfileApplication.appliedProfile) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * This method is used to evaluate if the specified node correspond to the
+ * change that we expect to manage with
+ *
+ * @return return true if the treeNode is the expected change, false otherwise
+ */
+ @Override
+ public boolean isValid() {
+ return isValid(treeNode);
+ }
+
+ /**
+ * If the package new container is not yet applied in the model
+ * then we ask the user if he want to apply it, if his answer is yes we reapply it
+ * otherwise we remove every stereotype application of stereotype owned by the moved package
+ */
+ @Override
+ public void migrationAction() {
+ if (isDisplayDialogPreference()) {
+ if (newContainer instanceof Package) {
+ Profile nearestProfile = ProfileUtil.getNearestProfile((Package) newContainer);
+ Profile profile = getAppliedProfile(nearestProfile);
+ if (profile == null) { // the new container is in a profile which is not applied yet
+ MovePackageDialog dialog = new MovePackageDialog(Display.getDefault().getActiveShell(), movedPackage, nearestProfile);
+ dialog.open();
+ if (dialog.isReapply()) { // the answer is yes: apply profile
+ MigratorProfileApplication.profiledModel.applyProfile(nearestProfile);
+ MigratorProfileApplication.newAppliedProfile.add(nearestProfile);
+ } else { // the answer is no: delete stereotype application
+ List<Stereotype> ownedStereotype = new ArrayList<>();
+ ProfileUtil.findAllStereotypes(movedPackage, ownedStereotype);
+ for (Stereotype stereotype : ownedStereotype) {
+ List<StereotypeApplicationDescriptor> list = StereotypeApplicationRegistry.getStereotypeApplicationDescriptors(stereotype);
+ for (StereotypeApplicationDescriptor descriptor : list) {
+ descriptor.getOwner().unapplyStereotype(descriptor.getStereotype());
+ }
+ // remove the list of unapplied stereotype to avoid that later we try to migrate an unapplied stereotype
+ StereotypeApplicationRegistry.stereotypeApplicationList.removeAll(list);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Check if the profile in parameter is applied in the {@link AtomicMigratorsFactory#profiledModel}.
+ * This method check recursively if the profiled is applied. As it is says in the norm
+ * UML2.5 - 12.3.3.3 Applying a Profile means recursively applying all its nested and imported Profiles.
+ *
+ * @param profile
+ * @return return the applied profile if it is find, null otherwise
+ */
+ private Profile getAppliedProfile(Profile profile) {
+ Profile appliedProfile = MigratorProfileApplication.profiledModel.getAppliedProfile(profile.getQualifiedName(), true);
+ if (appliedProfile == null) {
+ if (profile.getOwner() != null && profile.getOwner() instanceof Package) {
+ return getAppliedProfile((Profile) profile.getOwner());
+ }
+ }
+ return appliedProfile;
+ }
+
+ /**
+ * Initialize attributes from the treeNode
+ */
+ @Override
+ public void initAttributes() {
+ if (isValid()) {
+ movedPackage = (Package) TreeNodeUtils.getMovedElement(treeNode);
+ newContainer = TreeNodeUtils.getMovedTargetContainer(treeNode);
+ }
+ }
+
+ /**
+ * Get the priority, this priority will define the order of execution of migrators.
+ * If the priority is 0 it will be execute last.
+ *
+ * @return the priority
+ */
+ @Override
+ public int getPriority() {
+ return 0;
+ }
+
+ /**
+ * Get the value of the preference for the specific dialog
+ *
+ * @return true if the dialog should be display
+ */
+ private boolean isDisplayDialogPreference() {
+ final IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
+ return prefStore.getBoolean(ProfileMigrationPreferenceConstants.PACKAGE_MOVE);
+ }
+
+ /**
+ * Get the moved package
+ *
+ * @return the movedPackage
+ */
+ @Override
+ public Package getMovedPackage() {
+ return movedPackage;
+ }
+
+ /**
+ * Get the new container
+ *
+ * @return the newContainer
+ */
+ @Override
+ public EObject getNewContainer() {
+ return newContainer;
+ }
+
+ /**
+ * Get the new container of the element
+ *
+ * @return the new container of the element
+ */
+ @Override
+ public Element getTargetContainer() {
+ return (Element) getNewContainer();
+ }
+
+ /**
+ * Get the old container of the element (before the move)
+ *
+ * @return the old container of the element
+ */
+ @Override
+ public Element getSourceContainer() {
+ return (Element) TreeNodeUtils.getMovedSourceContainer(treeNode, MigratorProfileApplication.comparison);
+ }
+
+ /**
+ * Get the moved element
+ *
+ * @return the moved element
+ */
+ @Override
+ public Element getMovedElement() {
+ return getMovedPackage();
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/profile/MoveProfileMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/profile/MoveProfileMigrator.java
new file mode 100644
index 00000000000..361975b6ce4
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/profile/MoveProfileMigrator.java
@@ -0,0 +1,201 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.profile;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.toolsmiths.profilemigration.MigratorProfileApplication;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationDescriptor;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationRegistry;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.ProfileUtil;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.TreeNodeUtils;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.AbstractMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.profile.IMoveProfileMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.MoveProfileDialog;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * If a profile is moved to another profile then the migration tool shall focus
+ * on the preservation of the stereotype applications available at the profiled model.
+ *
+ * If the profile was moved in a profile that is already applied on the profiled
+ * model then the migration is trivial and every stereotype application shall remain.
+ *
+ * If the profile was moved in a profile that is not already applied on the profiled model
+ * then the migration tool asks the designer if the moved profile should be reapplied.
+ * If the designer answers 'yes' every stereotype application shall remain conversely if
+ * the answer is 'no' then every stereotype application shall be deleted.
+ */
+public class MoveProfileMigrator extends AbstractMigrator implements IMoveProfileMigrator {
+
+ private Profile movedProfile;
+
+ private Package newContainer;
+
+ /**
+ * Constructor.
+ *
+ * @param treeNode
+ * the treeNode corresponding to this migrator
+ */
+ public MoveProfileMigrator(TreeNode treeNode) {
+ super(treeNode);
+ }
+
+ /**
+ * This method check if the specified treeNode is a node representing the current change
+ *
+ * Is valid if:
+ * 1] the treeNode is a moved node
+ * 2] the moved element is a Profile
+ * 3] the moved profile is the currently profile use for the migration
+ *
+ * @param treeNode
+ * @return true if the treeNode represent the current change
+ */
+ public static boolean isValid(TreeNode treeNode) {
+ if (TreeNodeUtils.isMoveChange(treeNode)) {
+ Object element = TreeNodeUtils.getMovedElement(treeNode);
+ if (element instanceof Profile) {
+ if (element == MigratorProfileApplication.appliedProfile) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * This method is used to evaluate if the specified node correspond to the
+ * change that we expect to manage with
+ *
+ * @return return true if the treeNode is the expected change, false otherwise
+ */
+ @Override
+ public boolean isValid() {
+ return isValid(treeNode);
+ }
+
+ /**
+ * If the profile new container is not yet applied in the model
+ * then we ask the designer if the moved profile should be reapplied
+ * otherwise we remove every stereotype application of stereotypes owned by the moved profile
+ */
+ @Override
+ public void migrationAction() {
+ if (isDisplayDialogPreference()) {
+ Profile nearestProfile = ProfileUtil.getNearestProfile(newContainer);
+ if (MigratorProfileApplication.profiledModel.getProfileApplication(nearestProfile) == null) {
+ MoveProfileDialog dialog = new MoveProfileDialog(Display.getDefault().getActiveShell(), movedProfile, nearestProfile);
+ dialog.open();
+ if (dialog.isReapply()) {
+ MigratorProfileApplication.profiledModel.applyProfile(movedProfile);
+ } else { // the answer is no: delete stereotype application
+ List<Stereotype> ownedStereotype = new ArrayList<>();
+ ProfileUtil.findAllStereotypes(movedProfile, ownedStereotype);
+ for (Stereotype stereotype : ownedStereotype) {
+ List<StereotypeApplicationDescriptor> list = StereotypeApplicationRegistry.getStereotypeApplicationDescriptors(stereotype);
+ for (StereotypeApplicationDescriptor descriptor : list) {
+ descriptor.getOwner().unapplyStereotype(descriptor.getStereotype());
+ }
+ // remove the list of unapplied stereotype to avoid that later we try to migrate an unapplied stereotype
+ StereotypeApplicationRegistry.stereotypeApplicationList.removeAll(list);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Initialize attributes from the treeNode
+ */
+ @Override
+ public void initAttributes() {
+ if (isValid()) {
+ movedProfile = (Profile) TreeNodeUtils.getMovedElement(treeNode);
+ newContainer = (Package) TreeNodeUtils.getMovedTargetContainer(treeNode);
+ }
+ }
+
+ /**
+ * Get the priority, this priority will define the order of execution of migrators.
+ * If the priority is 0 it will be execute last.
+ *
+ * @return the priority
+ */
+ @Override
+ public int getPriority() {
+ return 100;
+ }
+
+ /**
+ * Get the value of the preference for the specific dialog
+ *
+ * @return true if the dialog should be display
+ */
+ private boolean isDisplayDialogPreference() {
+ final IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
+ return prefStore.getBoolean(ProfileMigrationPreferenceConstants.PROFILE_MOVE);
+ }
+
+ /**
+ * Get the new container of the element
+ *
+ * @return the new container of the element
+ */
+ @Override
+ public Element getTargetContainer() {
+ return (Element) newContainer;
+ }
+
+ /**
+ * Get the old container of the element (before the move)
+ *
+ * @return the old container of the element
+ */
+ @Override
+ public Element getSourceContainer() {
+ return (Element) TreeNodeUtils.getMovedSourceContainer(treeNode, MigratorProfileApplication.comparison);
+ }
+
+ /**
+ * Get the moved element
+ *
+ * @return the moved element
+ */
+ @Override
+ public Element getMovedElement() {
+ return movedProfile;
+ }
+
+ /**
+ * Get the moved profile
+ *
+ * @return the moved profile
+ */
+ @Override
+ public Profile getProfile() {
+ return movedProfile;
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/property/ChangeIsStaticFromPropertyMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/property/ChangeIsStaticFromPropertyMigrator.java
new file mode 100644
index 00000000000..8b654336ff3
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/property/ChangeIsStaticFromPropertyMigrator.java
@@ -0,0 +1,207 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.property;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.toolsmiths.profilemigration.MigratorProfileApplication;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationDescriptor;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationRegistry;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.TreeNodeUtils;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.AbstractMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.property.IChangeIsStaticFromPropertyMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.ChangeIsStaticFeatureDialog;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+import org.eclipse.uml2.uml.UMLPackage;
+
+/**
+ * If the property becomes static then the migration tool shall change the
+ * value of every slop corresponding to this property. To determine which
+ * value the system shall set, it shall ask the designer which value he wants.
+ */
+public class ChangeIsStaticFromPropertyMigrator extends AbstractMigrator implements IChangeIsStaticFromPropertyMigrator {
+
+ private Property property;
+
+ private Stereotype stereotype;
+
+ private boolean isStatic;
+
+ /**
+ * Constructor.
+ *
+ * @param treeNode
+ * the treeNode corresponding to this migrator
+ */
+ public ChangeIsStaticFromPropertyMigrator(TreeNode treeNode) {
+ super(treeNode);
+ }
+
+ /**
+ * This method check if the specified treeNode is a node representing the current change
+ *
+ * Is valid if:
+ * 1] the treeNode is a changed node
+ * 2] the modified element is a Property
+ * 3] the changed structural feature is the feature isStatic of a Property
+ *
+ * @param treeNode
+ * @return true if the treeNode represent the current change
+ */
+ public static boolean isValid(TreeNode treeNode) {
+ if (TreeNodeUtils.isChangeType(treeNode, MigratorProfileApplication.appliedProfile)) {
+ EObject element = TreeNodeUtils.getChangedElement(treeNode);
+ EStructuralFeature structuralFeature = TreeNodeUtils.getChangedAttribute(treeNode);
+ if (element instanceof Property && structuralFeature == UMLPackage.eINSTANCE.getFeature_IsStatic()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * This method is used to evaluate if the specified node correspond to the
+ * change that we expect to manage with
+ *
+ * @return return true if the treeNode is the expected change, false otherwise
+ */
+ @Override
+ public boolean isValid() {
+ return isValid(treeNode);
+ }
+
+ /**
+ * We ask the user if he want use a unique value for each slot corresponding to this property
+ */
+ @Override
+ public void migrationAction() {
+ if (isDisplayDialogPreference()) {
+ if (isStatic) {
+ List<StereotypeApplicationDescriptor> list = StereotypeApplicationRegistry.getAllStereotypeApplicationDescriptors(stereotype);
+ if (!list.isEmpty()) {
+ ChangeIsStaticFeatureDialog dialog = new ChangeIsStaticFeatureDialog(Display.getDefault().getActiveShell(), list.get(0).getStereotype(), property, list.get(0).getOwner());
+ dialog.open();
+ Object selectedValue = list.get(0).getOwner().getValue(list.get(0).getStereotype(), property.getName());
+ for (int i = 1; i < list.size(); i++) {
+ list.get(i).getOwner().setValue(list.get(i).getStereotype(), property.getName(), selectedValue);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Initialize attributes from the treeNode
+ */
+ @Override
+ public void initAttributes() {
+ if (isValid()) {
+ EObject element = TreeNodeUtils.getChangedElement(treeNode);
+ property = (Property) element;
+ stereotype = (Stereotype) property.getOwner();
+ isStatic = property.isStatic();
+ }
+ }
+
+ /**
+ * Get the priority, this priority will define the order of execution of migrators.
+ * If the priority is 0 it will be execute last.
+ *
+ * @return the priority
+ */
+ @Override
+ public int getPriority() {
+ return 47;
+ }
+
+ /**
+ * Get the value of the preference for the specific dialog
+ *
+ * @return true if the dialog should be display
+ */
+ private boolean isDisplayDialogPreference() {
+ final IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
+ return prefStore.getBoolean(ProfileMigrationPreferenceConstants.CHANGE_IS_STATIC_FEATURE_PROPERTY);
+ }
+
+ /**
+ * Get the modified property
+ *
+ * @return the property
+ */
+ @Override
+ public Property getProperty() {
+ return property;
+ }
+
+ /**
+ * Get the stereotype owning the modified property
+ *
+ * @return the stereotype
+ */
+ @Override
+ public Stereotype getStereotype() {
+ return stereotype;
+ }
+
+ /**
+ * Get the new value of the feature isStatic
+ *
+ * @return the isStatic
+ */
+ @Override
+ public boolean getValue() {
+ return isStatic;
+ }
+
+ /**
+ * Get the changed element
+ *
+ * @return the changed element
+ */
+ @Override
+ public Element getChangedElement() {
+ return getProperty();
+ }
+
+ /**
+ * Get the new value of the feature
+ *
+ * @return the new value of the feature
+ */
+ @Override
+ public Object getNewValue() {
+ return getValue();
+ }
+
+ /**
+ * Get the structural feature which is modified
+ *
+ * @return the structural feature which is modified
+ */
+ @Override
+ public EStructuralFeature getChangedStructuralFeature() {
+ return UMLPackage.eINSTANCE.getFeature_IsStatic();
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/property/ChangeLowerMultiplicityFromPropertyMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/property/ChangeLowerMultiplicityFromPropertyMigrator.java
new file mode 100644
index 00000000000..d850c554d98
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/property/ChangeLowerMultiplicityFromPropertyMigrator.java
@@ -0,0 +1,278 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.property;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.toolsmiths.profilemigration.MigratorProfileApplication;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationDescriptor;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationRegistry;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.TreeNodeUtils;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.AbstractMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.property.IChangeLowerMultiplicityFromPropertyMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.AbstractChangeMultiplicityDialog;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.ChangeLowerMultiplicityDialog;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.uml2.common.util.UML2Util;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.LiteralInteger;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+import org.eclipse.uml2.uml.UMLPackage;
+
+/**
+ * If the loverValue feature of a property is modified then the migration tool shall maintain the validity of the model.
+ *
+ * If the lower value is changed from 0 to something else, means that as many as the lowerValue values are mandatory
+ * the migration tool shall upgrade each application of the stereotype owning this property. The upgrade consist in
+ * asking the designer which value he want to set on the slot corresponding of this property.
+ *
+ * If the lower value is changed from something to 0 the migration tool shall not do anything.
+ *
+ */
+public class ChangeLowerMultiplicityFromPropertyMigrator extends AbstractMigrator implements IChangeLowerMultiplicityFromPropertyMigrator {
+
+ private int newValue;
+
+ private int oldValue;
+
+ private Property property;
+
+ /**
+ * Constructor.
+ *
+ * @param treeNode
+ * the treeNode corresponding to this migrator
+ */
+ public ChangeLowerMultiplicityFromPropertyMigrator(TreeNode treeNode) {
+ super(treeNode);
+ }
+
+ /**
+ * This method check if the specified treeNode is a node representing the current change
+ *
+ * Is valid if:
+ * 1] the treeNode is a changed node
+ * 1.2] the modified element is a LiteralInteger
+ * 1.3] the changed structural feature is the feature value of a LiteralInteger
+ * 1.4] the LiteralInteger is owned by a property as a lowerValue
+ * 2] the treeNode is a added node
+ * 2.1] the added element is a LiteraglInteger
+ * 2.3] the structural feature referencing this added element is the lowerValue of a Property
+ *
+ * @param treeNode
+ * @return true if the treeNode represent the current change
+ */
+ public static boolean isValid(TreeNode treeNode) {
+ if (TreeNodeUtils.isChangeType(treeNode, MigratorProfileApplication.appliedProfile)) {
+ EObject element = TreeNodeUtils.getChangedElement(treeNode);
+ EStructuralFeature structuralFeature = TreeNodeUtils.getChangedAttribute(treeNode);
+ if (element instanceof LiteralInteger && structuralFeature == UMLPackage.eINSTANCE.getLiteralInteger_Value()) {
+ Element property = ((LiteralInteger) element).getOwner();
+ if (property instanceof Property) {
+ // check if the added LiteralInteger is the lower multiplicity
+ if (((Property) property).getLowerValue() == element) {
+ Object oldElement = TreeNodeUtils.getChangedOldElement(treeNode);
+ if (oldElement instanceof LiteralInteger) {
+ Element oldProperty = ((LiteralInteger) oldElement).getOwner();
+ if (oldProperty instanceof Property) {
+ if (((Property) oldProperty).getLowerValue() == oldElement) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ } else if (TreeNodeUtils.isAddType(treeNode, MigratorProfileApplication.appliedProfile)) { // on first modification of the multiplicity, the lieteralInteget is add
+ EObject element = TreeNodeUtils.getAddedElement(treeNode);
+ if (element instanceof LiteralInteger) {
+ EStructuralFeature structuralFeature = TreeNodeUtils.getAddedStructuralFeature(treeNode);
+ if (structuralFeature == UMLPackage.eINSTANCE.getMultiplicityElement_LowerValue()) {
+ if (!(TreeNodeUtils.isAddType(treeNode.getParent(), MigratorProfileApplication.appliedProfile) && TreeNodeUtils.getAddedElement(treeNode.getParent()) instanceof Property)) { // when it is not an newly add property
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * This method is used to evaluate if the specified node correspond to the
+ * change that we expect to manage with
+ *
+ * @return return true if the treeNode is the expected change, false otherwise
+ */
+ @Override
+ public boolean isValid() {
+ return isValid(treeNode);
+ }
+
+ /**
+ * Initialize attributes from the treeNode
+ */
+ @Override
+ public void initAttributes() {
+ if (isValid()) {
+ if (TreeNodeUtils.isChangeType(treeNode, MigratorProfileApplication.appliedProfile)) {
+ EObject element = TreeNodeUtils.getChangedElement(treeNode);
+ newValue = ((LiteralInteger) element).getValue();
+ property = (Property) ((LiteralInteger) element).getOwner();
+ EObject oldElement = TreeNodeUtils.getChangedOldElement(treeNode);
+ oldValue = ((LiteralInteger) oldElement).getValue();
+ } else if (TreeNodeUtils.isAddType(treeNode, MigratorProfileApplication.appliedProfile)) { // on first modification of the multiplicity, the lieteralInteget is add
+ EObject element = TreeNodeUtils.getAddedElement(treeNode);
+ newValue = ((LiteralInteger) element).getValue();
+ oldValue = 1; // defaultValue
+ property = (Property) ((LiteralInteger) element).getOwner();
+ }
+ }
+ }
+
+ /**
+ * For each stereotype application of the stereotype owning the modified property,
+ * we ask the use to add values to match with the new multiplicity
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void migrationAction() {
+ if (isDisplayDialogPreference()) {
+ if (newValue > oldValue) { // means that the slot needs more values
+ if (property.getOwner() instanceof Stereotype) {
+ List<StereotypeApplicationDescriptor> list = StereotypeApplicationRegistry.getAllStereotypeApplicationDescriptors((Stereotype) property.getOwner());
+ if (!list.isEmpty()) {
+ // get the map of elements
+ Map<Element, List<Stereotype>> mapElementToStereotype = new HashMap<>();
+ for (StereotypeApplicationDescriptor descriptor : list) {
+ EObject stereotypeApplication = descriptor.getOwner().getStereotypeApplication(descriptor.getStereotype());
+ if (stereotypeApplication != null) {
+ EStructuralFeature feature = stereotypeApplication.eClass().getEStructuralFeature(UML2Util.getValidJavaIdentifier(property.getName()));
+ if (feature != null) {
+ Object values = stereotypeApplication.eGet(feature);
+ if (values instanceof List) {
+ if (((List<Object>) values).size() < newValue) {
+ if (mapElementToStereotype.get(descriptor.getOwner()) == null) {
+ List<Stereotype> stereotypes = new ArrayList<>();
+ stereotypes.add(descriptor.getStereotype());
+ mapElementToStereotype.put(descriptor.getOwner(), stereotypes);
+ } else {
+ mapElementToStereotype.get(descriptor.getOwner()).add(descriptor.getStereotype());
+ }
+ }
+ }
+ }
+ }
+ }
+ if (!mapElementToStereotype.isEmpty()) {
+ AbstractChangeMultiplicityDialog dialog = new ChangeLowerMultiplicityDialog(Display.getDefault().getActiveShell(), property, oldValue, newValue, mapElementToStereotype);
+ dialog.open();
+ }
+ }
+ }
+ }
+ }
+ // otherwise the minimum number of value decrease to the constraint is less important
+ }
+
+ /**
+ * @see org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IAtomicMigrator#getPriority()
+ *
+ */
+ @Override
+ public int getPriority() {
+ return 49;
+ }
+
+ /**
+ * Get the value of the preference for the specific dialog
+ *
+ * @return true if the dialog should be display
+ */
+ private boolean isDisplayDialogPreference() {
+ final IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
+ return prefStore.getBoolean(ProfileMigrationPreferenceConstants.CHANGE_LOWER_MULTIPLICITY_PROPERTY);
+ }
+
+ /**
+ * Get the new multiplicity
+ *
+ * @return the newValue
+ */
+ @Override
+ public int getValue() {
+ return newValue;
+ }
+
+ /**
+ * Get the old multiplicity
+ *
+ * @return the oldValue
+ */
+ @Override
+ public int getOldValue() {
+ return oldValue;
+ }
+
+ /**
+ * Get the modified property
+ *
+ * @return the property
+ */
+ @Override
+ public Property getProperty() {
+ return property;
+ }
+
+ /**
+ * Get the changed element
+ *
+ * @return the changed element
+ */
+ @Override
+ public Element getChangedElement() {
+ return getProperty();
+ }
+
+ /**
+ * Get the new value of the feature
+ *
+ * @return the new value of the feature
+ */
+ @Override
+ public Object getNewValue() {
+ return getValue();
+ }
+
+ /**
+ * Get the structural feature which is modified
+ *
+ * @return the structural feature which is modified
+ */
+ @Override
+ public EStructuralFeature getChangedStructuralFeature() {
+ return UMLPackage.eINSTANCE.getMultiplicityElement_LowerValue();
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/property/ChangeUpperMultiplicityFromPropertyMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/property/ChangeUpperMultiplicityFromPropertyMigrator.java
new file mode 100644
index 00000000000..4a5e82d213d
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/property/ChangeUpperMultiplicityFromPropertyMigrator.java
@@ -0,0 +1,278 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.property;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.toolsmiths.profilemigration.MigratorProfileApplication;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationDescriptor;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationRegistry;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.TreeNodeUtils;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.AbstractMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.property.IChangeUpperMultiplicityFromPropertyMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.AbstractChangeMultiplicityDialog;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.ChangeUpperMultiplicityDialog;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.uml2.common.util.UML2Util;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.LiteralUnlimitedNatural;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+import org.eclipse.uml2.uml.UMLPackage;
+
+/**
+ * If the upper value of a property is modified then the migration
+ * tool shall maintain the validity of the model.
+ *
+ * If the upper value is decrease the migration
+ * tool shall upgrade each application of the stereotype owning this
+ * property. The upgrade consist in asking the designer which values he
+ * wants to keep for the slot corresponding of this property.
+ *
+ * If the upper value is increased the migration tool shall not do anything.
+ */
+public class ChangeUpperMultiplicityFromPropertyMigrator extends AbstractMigrator implements IChangeUpperMultiplicityFromPropertyMigrator {
+
+ private int newValue;
+
+ private Property property;
+
+ private int oldValue;
+
+ /**
+ * Constructor.
+ *
+ * @param treeNode
+ * the treeNode corresponding to this migrator
+ */
+ public ChangeUpperMultiplicityFromPropertyMigrator(TreeNode treeNode) {
+ super(treeNode);
+ }
+
+ /**
+ * This method check if the specified treeNode is a node representing the current change
+ *
+ * Is valid if:
+ * 1] the treeNode is a changed node
+ * 1.2] the modified element is a LiteralUnlimitedNatural
+ * 1.3] the changed structural feature is the feature value of a LiteralInteger
+ * 1.4] the LiteralUnlimitedNatural is owned by a property as a upperValue
+ * 2] the treeNode is a added node
+ * 2.1] the added element is a LiteralUnlimitedNatural
+ * 2.3] the structural feature referencing this added element is the upperValue of a Property
+ *
+ * @param treeNode
+ * @return true if the treeNode represent the current change
+ */
+ public static boolean isValid(TreeNode treeNode) {
+ if (TreeNodeUtils.isChangeType(treeNode, MigratorProfileApplication.appliedProfile)) {
+ EObject element = TreeNodeUtils.getChangedElement(treeNode);
+ EStructuralFeature structuralFeature = TreeNodeUtils.getChangedAttribute(treeNode);
+ if (element instanceof LiteralUnlimitedNatural && structuralFeature == UMLPackage.eINSTANCE.getLiteralUnlimitedNatural_Value()) {
+ Element property = ((LiteralUnlimitedNatural) element).getOwner();
+ if (property instanceof Property) {
+ // check if the added LiteralUnlimitedNatural is the upper multiplicity
+ if (((Property) property).getUpperValue() == element) {
+ Object oldElement = TreeNodeUtils.getChangedOldElement(treeNode);
+ if (oldElement instanceof LiteralUnlimitedNatural) {
+ Element oldProperty = ((LiteralUnlimitedNatural) oldElement).getOwner();
+ if (oldProperty instanceof Property) {
+ if (((Property) oldProperty).getUpperValue() == oldElement) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ } else if (TreeNodeUtils.isAddType(treeNode, MigratorProfileApplication.appliedProfile)) { // on first modification of the multiplicity, the lieteralInteget is add
+ EObject element = TreeNodeUtils.getAddedElement(treeNode);
+ if (element instanceof LiteralUnlimitedNatural) {
+ EStructuralFeature structuralFeature = TreeNodeUtils.getAddedStructuralFeature(treeNode);
+ if (structuralFeature == UMLPackage.eINSTANCE.getMultiplicityElement_UpperValue()) {
+ if (!(TreeNodeUtils.isAddType(treeNode.getParent(), MigratorProfileApplication.appliedProfile) && TreeNodeUtils.getAddedElement(treeNode.getParent()) instanceof Property)) { // when it is not an newly add property
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * This method is used to evaluate if the specified node correspond to the
+ * change that we expect to manage with
+ *
+ * @return return true if the treeNode is the expected change, false otherwise
+ */
+ @Override
+ public boolean isValid() {
+ return isValid(treeNode);
+ }
+
+ /**
+ * For each stereotype application of the stereotype owning the modified property,
+ * we ask the use to remove values to match with the new multiplicity
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void migrationAction() {
+ if (isDisplayDialogPreference()) {
+ if ((newValue < oldValue || oldValue == -1) && newValue != -1) { // means that the slot needs more values
+ if (property.getOwner() instanceof Stereotype) {
+ List<StereotypeApplicationDescriptor> list = StereotypeApplicationRegistry.getAllStereotypeApplicationDescriptors((Stereotype) property.getOwner());
+ if (!list.isEmpty()) {
+ // get the list of elements
+ Map<Element, List<Stereotype>> mapElementToStereotype = new HashMap<>();
+ for (StereotypeApplicationDescriptor descriptor : list) {
+ EObject stereotypeApplication = descriptor.getOwner().getStereotypeApplication(descriptor.getStereotype());
+ if (stereotypeApplication != null) {
+ EStructuralFeature feature = stereotypeApplication.eClass().getEStructuralFeature(UML2Util.getValidJavaIdentifier(property.getName()));
+ Object values = stereotypeApplication.eGet(feature);
+ if (values instanceof List) {
+ if (((List<Object>) values).size() > newValue) {
+ if (mapElementToStereotype.get(descriptor.getOwner()) == null) {
+ List<Stereotype> stereotypeList = new ArrayList<>();
+ stereotypeList.add(descriptor.getStereotype());
+ mapElementToStereotype.put(descriptor.getOwner(), stereotypeList);
+ } else {
+ mapElementToStereotype.get(descriptor.getOwner()).add(descriptor.getStereotype());
+ }
+ }
+ }
+ }
+ }
+ if (!mapElementToStereotype.isEmpty()) {
+ AbstractChangeMultiplicityDialog dialog = new ChangeUpperMultiplicityDialog(Display.getDefault().getActiveShell(), property, oldValue, newValue, mapElementToStereotype);
+ dialog.open();
+ }
+ }
+ }
+ }
+ }
+ // otherwise the minimum number of value decrease to the constraint is less important
+ }
+
+ /**
+ * Initialize attributes from the treeNode
+ */
+ @Override
+ public void initAttributes() {
+ if (isValid()) {
+ if (TreeNodeUtils.isChangeType(treeNode, MigratorProfileApplication.appliedProfile)) {
+ EObject element = TreeNodeUtils.getChangedElement(treeNode);
+ newValue = ((LiteralUnlimitedNatural) element).getValue();
+ property = (Property) ((LiteralUnlimitedNatural) element).getOwner();
+ EObject oldElement = TreeNodeUtils.getChangedOldElement(treeNode);
+ oldValue = ((LiteralUnlimitedNatural) oldElement).getValue();
+ } else if (TreeNodeUtils.isAddType(treeNode, MigratorProfileApplication.appliedProfile)) { // on first modification of the multiplicity, the lieteralInteget is add
+ EObject element = TreeNodeUtils.getAddedElement(treeNode);
+ newValue = ((LiteralUnlimitedNatural) element).getValue();
+ oldValue = 1; // defaultValue
+ property = (Property) ((LiteralUnlimitedNatural) element).getOwner();
+ }
+ }
+ }
+
+ /**
+ * Get the priority, this priority will define the order of execution of migrators.
+ * If the priority is 0 it will be execute last.
+ *
+ * @return the priority
+ */
+ @Override
+ public int getPriority() {
+ return 48;
+ }
+
+ /**
+ * Get the value of the preference for the specific dialog
+ *
+ * @return true if the dialog should be display
+ */
+ private boolean isDisplayDialogPreference() {
+ final IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
+ return prefStore.getBoolean(ProfileMigrationPreferenceConstants.CHANGE_UPPER_MULTIPLICITY_PROPERTY);
+ }
+
+ /**
+ * Get the new multiplicity
+ *
+ * @return the newValue
+ */
+ @Override
+ public int getValue() {
+ return newValue;
+ }
+
+ /**
+ * Get the old multiplicity
+ *
+ * @return the oldValue
+ */
+ @Override
+ public int getOldValue() {
+ return oldValue;
+ }
+
+ /**
+ * Get the modified property
+ *
+ * @return the property
+ */
+ @Override
+ public Property getProperty() {
+ return property;
+ }
+
+ /**
+ * Get the changed element
+ *
+ * @return the changed element
+ */
+ @Override
+ public Element getChangedElement() {
+ return getProperty();
+ }
+
+ /**
+ * Get the new value of the feature
+ *
+ * @return the new value of the feature
+ */
+ @Override
+ public Object getNewValue() {
+ return getValue();
+ }
+
+ /**
+ * Get the structural feature which is modified
+ *
+ * @return the structural feature which is modified
+ */
+ @Override
+ public EStructuralFeature getChangedStructuralFeature() {
+ return UMLPackage.eINSTANCE.getMultiplicityElement_UpperValue();
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/stereotype/AddPropertyToStereotypeMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/stereotype/AddPropertyToStereotypeMigrator.java
new file mode 100644
index 00000000000..3228b198ac5
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/stereotype/AddPropertyToStereotypeMigrator.java
@@ -0,0 +1,189 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.stereotype;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.papyrus.toolsmiths.profilemigration.MigratorProfileApplication;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationDescriptor;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationRegistry;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.TreeNodeUtils;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.AbstractMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.stereotype.IAddPropertyToStereotypeMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.AddPropertyToStereotypeDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Extension;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * If a Stereotype is updated with a new property then a slot for this
+ * property shall be available for each application of the stereotype
+ * in the profile model.
+ *
+ * If the new property has a default value then each application of the modified
+ * stereotype in the profiled model has its corresponding slot set with the default value.
+ *
+ * If the new property has no default value but a value is required (the minimal
+ * multiplicity is greater or equal than 1) then each application of the modified
+ * stereotype in the profiled model has its corresponding slot, the migration tool
+ * shall ask the designer to know which value he wants to set.
+ *
+ * If the new property has no default value and a value is optional (the minimal
+ * multiplicity is equal to 0) then each application of the modified stereotype
+ * in the profiled model has it corresponding slot set to null.
+ */
+public class AddPropertyToStereotypeMigrator extends AbstractMigrator implements IAddPropertyToStereotypeMigrator {
+
+ Stereotype stereotype;
+
+ Property property;
+
+ /**
+ * Constructor.
+ *
+ * @param treeNode
+ * the treeNode corresponding to this migrator
+ */
+ public AddPropertyToStereotypeMigrator(TreeNode treeNode) {
+ super(treeNode);
+ }
+
+ /**
+ * This method check if the specified treeNode is a node representing the current change
+ *
+ * Is valid if:
+ * 1] the treeNode is an added node
+ * 2] the added element is a Property
+ * 3] the added property has a lower multiplicity greater than one
+ * 4] the added property has no default value
+ *
+ * @param treeNode
+ * @return true if the treeNode represent the current change
+ */
+ public static boolean isValid(TreeNode treeNode) {
+ if (TreeNodeUtils.isAddType(treeNode, MigratorProfileApplication.appliedProfile)) {
+ EObject element = TreeNodeUtils.getAddedElement(treeNode);
+ if (element instanceof Property) {
+ if (((Property) element).getLower() > 0 && ((Property) element).getDefaultValue() == null && !(((Property) element).getAssociation() instanceof Extension)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * This method is used to evaluate if the specified node correspond to the
+ * change that we expect to manage with
+ *
+ * @return return true if the treeNode is the expected change, false otherwise
+ */
+ @Override
+ public boolean isValid() {
+ return isValid(treeNode);
+ }
+
+ /**
+ * For each slot corresponding to the added property we ask the user to choose a value
+ */
+ @Override
+ public void migrationAction() {
+ List<StereotypeApplicationDescriptor> list = StereotypeApplicationRegistry.getAllStereotypeApplicationDescriptors(stereotype);
+ Map<Element, List<Stereotype>> mapElementToStereotype = new HashMap<>();
+ for (StereotypeApplicationDescriptor descriptor : list) {
+ if (mapElementToStereotype.get(descriptor.getOwner()) == null) {
+ List<Stereotype> stereotypes = new ArrayList<>();
+ stereotypes.add(descriptor.getStereotype());
+ mapElementToStereotype.put(descriptor.getOwner(), stereotypes);
+ } else {
+ mapElementToStereotype.get(descriptor.getOwner()).add(descriptor.getStereotype());
+ }
+ }
+ if (!mapElementToStereotype.isEmpty()) {
+ AddPropertyToStereotypeDialog dialog = new AddPropertyToStereotypeDialog(Display.getDefault().getActiveShell(), stereotype, property, mapElementToStereotype);
+ dialog.open();
+ }
+ }
+
+ /**
+ * Initialize attributes from the treeNode
+ */
+ @Override
+ public void initAttributes() {
+ if (isValid()) {
+ property = (Property) TreeNodeUtils.getAddedElement(treeNode);
+ stereotype = (Stereotype) property.getOwner();
+ }
+ }
+
+ /**
+ * Get the priority, this priority will define the order of execution of migrators.
+ * If the priority is 0 it will be execute last.
+ *
+ * @return the priority
+ */
+ @Override
+ public int getPriority() {
+ return 50;
+ }
+
+ /**
+ * Get the stereotype owning the new property
+ *
+ * @return the stereotype
+ */
+ @Override
+ public Stereotype getStereotype() {
+ return stereotype;
+ }
+
+ /**
+ * Get the Added property
+ *
+ * @return the property
+ */
+ @Override
+ public Property getProperty() {
+ return property;
+ }
+
+ /**
+ * Get the added element
+ *
+ * @return the added element
+ */
+ @Override
+ public Element getAddedElement() {
+ return getProperty();
+ }
+
+ /**
+ * Get the added element container
+ *
+ * @return the added element container
+ */
+ @Override
+ public Element getAddedElementContainer() {
+ return getStereotype();
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/stereotype/ChangeIsAbstractFromStereotypeMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/stereotype/ChangeIsAbstractFromStereotypeMigrator.java
new file mode 100644
index 00000000000..fd60906bf47
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/stereotype/ChangeIsAbstractFromStereotypeMigrator.java
@@ -0,0 +1,237 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.stereotype;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.toolsmiths.profilemigration.MigratorProfileApplication;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationDescriptor;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationRegistry;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.ProfileUtil;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.TreeNodeUtils;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.AbstractMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.stereotype.IChangeIsAbstractFromStereotypeMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.ChangeIsAbstractFromStereotypeDialog;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+import org.eclipse.uml2.uml.UMLPackage;
+
+/**
+ * If a Stereotype becomes abstract the migration tool shall ask the designer
+ * if he wants to replace applications of this stereotype by one or many
+ * Stereotypes pick in a list. This list is defined by all specializations of the
+ * abstract Stereotype available on applied profiles. If the answer is "no"
+ * then the application of this stereotype is delete, otherwise selected
+ * stereotypes are applied and inherited slot are preserved.
+ *
+ * If a Stereotype becomes concrete then the migration tool should not do anything.
+ *
+ */
+public class ChangeIsAbstractFromStereotypeMigrator extends AbstractMigrator implements IChangeIsAbstractFromStereotypeMigrator {
+
+ private Stereotype stereotype;
+
+ private boolean isAbstract;
+
+ /**
+ * Constructor.
+ *
+ * @param treeNode
+ * the treeNode corresponding to this migrator
+ */
+ public ChangeIsAbstractFromStereotypeMigrator(TreeNode treeNode) {
+ super(treeNode);
+ }
+
+ /**
+ * This method check if the specified treeNode is a node representing the current change
+ *
+ * Is valid if:
+ * 1] the treeNode is a changed node
+ * 2] the modified element is a Stereotype
+ * 3] the changed structural feature is the feature isAbstract from a Stereotype
+ *
+ * @param treeNode
+ * @return true if the treeNode represent the current change
+ */
+ public static boolean isValid(TreeNode treeNode) {
+ if (TreeNodeUtils.isChangeType(treeNode, MigratorProfileApplication.appliedProfile)) {
+ EObject element = TreeNodeUtils.getChangedElement(treeNode);
+ EStructuralFeature structuralFeature = TreeNodeUtils.getChangedAttribute(treeNode);
+ if (element instanceof Stereotype && structuralFeature == UMLPackage.eINSTANCE.getClassifier_IsAbstract()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * This method is used to evaluate if the specified node correspond to the
+ * change that we expect to manage with
+ *
+ * @return return true if the treeNode is the expected change, false otherwise
+ */
+ @Override
+ public boolean isValid() {
+ return isValid(treeNode);
+ }
+
+ /**
+ * We propose to the user to change each stereotype application of the modified stereotype
+ * by one or many stereotype application of a sub stereotype
+ */
+ @Override
+ public void migrationAction() {
+ if (isAbstract) {
+ List<Stereotype> subStereotypes = ProfileUtil.findAllSubStereotypes(stereotype, MigratorProfileApplication.profiledModel, true);
+ List<StereotypeApplicationDescriptor> list = StereotypeApplicationRegistry.getStereotypeApplicationDescriptors(stereotype);
+ if (!list.isEmpty()) {
+ if (isDisplayDialogPreference()) {
+ // 1] get the list of elements
+ Map<Element, List<Stereotype>> mapElementToStereotype = new HashMap<>();
+ for (StereotypeApplicationDescriptor descriptor : list) {
+ if (mapElementToStereotype.get(descriptor.getOwner()) == null) {
+ List<Stereotype> stereotypes = new ArrayList<>();
+ stereotypes.add(descriptor.getStereotype());
+ mapElementToStereotype.put(descriptor.getOwner(), stereotypes);
+ } else {
+ mapElementToStereotype.get(descriptor.getOwner()).add(descriptor.getStereotype());
+ }
+ }
+ ChangeIsAbstractFromStereotypeDialog dialog = new ChangeIsAbstractFromStereotypeDialog(Display.getDefault().getActiveShell(), stereotype, subStereotypes, mapElementToStereotype);
+ dialog.open();
+ // 2] add sub stereotype if necessary
+ for (Entry<Element, List<Stereotype>> entry : dialog.getResult().entrySet()) {
+ Element element = entry.getKey();
+ List<Stereotype> newStereotypeList = entry.getValue();
+ StereotypeApplicationDescriptor stereotypeApplicationDescriptor = StereotypeApplicationRegistry.getStereotypeApplicationDescriptors(element, stereotype);
+ if (stereotypeApplicationDescriptor != null) {
+ for (Stereotype newStereotype : newStereotypeList) {
+ if (stereotypeApplicationDescriptor.getOwner().isStereotypeApplicable(newStereotype)) {
+ // 2.1] apply new stereotype
+ EObject stereotypeApplication = stereotypeApplicationDescriptor.getOwner().applyStereotype(newStereotype);
+ MigratorProfileApplication.newStereotypeApplication.add(stereotypeApplication);
+ // 2.2] update descriptor registry
+ StereotypeApplicationDescriptor descriptor = new StereotypeApplicationDescriptor(newStereotype, element);
+ StereotypeApplicationRegistry.stereotypeApplicationList.add(descriptor);
+ for (Entry<Property, Object> values : stereotypeApplicationDescriptor.getMapPropertyToApplicationValue().entrySet()) {
+ // 2.3] set inherited values to the new stereotype
+ stereotypeApplicationDescriptor.getOwner().setValue(newStereotype, values.getKey().getName(), values.getValue());
+ // 2.4] update descriptor registry values
+ for (Property attribute : newStereotype.getAttributes()) {
+ Object value = descriptor.getOwner().getValue(newStereotype, attribute.getName());
+ descriptor.getMapPropertyToApplicationValue().put(attribute, value);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ // 3] remove the list of unapplied stereotype to avoid that later we try to migrate an unapplied stereotype
+ StereotypeApplicationRegistry.stereotypeApplicationList.removeAll(list);
+ }
+ }
+ }
+
+ @Override
+ public void initAttributes() {
+ if (isValid()) {
+ EObject element = TreeNodeUtils.getChangedElement(treeNode);
+ stereotype = (Stereotype) element;
+ isAbstract = stereotype.isAbstract();
+ }
+ }
+
+ @Override
+ public int getPriority() {
+ // should be done before others because we add stereotype application to the model so migrators
+ // should manage with those new stereotype applications
+ return 100;
+ }
+
+ /**
+ * Get the value of the preference for the specific dialog
+ *
+ * @return true if the dialog should be display
+ */
+ private boolean isDisplayDialogPreference() {
+ final IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
+ return prefStore.getBoolean(ProfileMigrationPreferenceConstants.SUPER_STEREOTYPE_BECOMING_ABSTRACT);
+ }
+
+ /**
+ * Get the stereotype becoming abstract
+ *
+ * @return the stereotype
+ */
+ @Override
+ public Stereotype getStereotype() {
+ return stereotype;
+ }
+
+ /**
+ * Get the new value of the feature isAbstract
+ *
+ * @return the isAbstract
+ */
+ @Override
+ public boolean getValue() {
+ return isAbstract;
+ }
+
+ /**
+ * Get the changed element
+ *
+ * @return the changed element
+ */
+ @Override
+ public Element getChangedElement() {
+ return getStereotype();
+ }
+
+ /**
+ * Get the new value of the feature
+ *
+ * @return the new value of the feature
+ */
+ @Override
+ public Object getNewValue() {
+ return getValue();
+ }
+
+ /**
+ * Get the structural feature which is modified
+ *
+ * @return the structural feature which is modified
+ */
+ @Override
+ public EStructuralFeature getChangedStructuralFeature() {
+ return UMLPackage.eINSTANCE.getClassifier_IsAbstract();
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/stereotype/MoveStereotypeMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/stereotype/MoveStereotypeMigrator.java
new file mode 100644
index 00000000000..0018f2da42f
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/migrators/atomic/stereotype/MoveStereotypeMigrator.java
@@ -0,0 +1,229 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.migrators.atomic.stereotype;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.toolsmiths.profilemigration.MigratorProfileApplication;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationDescriptor;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.data.structure.StereotypeApplicationRegistry;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils.TreeNodeUtils;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.AbstractMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.stereotype.IMoveStereotypeMigrator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.dialogs.MoveStereotypeDialog;
+import org.eclipse.papyrus.toolsmiths.profilemigration.ui.preferences.ProfileMigrationPreferenceConstants;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * If a Stereotype is moved to another profile then the migration tool shall focus
+ * on the preservation of the stereotype applications available at the profiled model.
+ *
+ * If the stereotype was moved in a profile that is already applied on the
+ * profiled model then the migration is trivial and every application of
+ * this stereotype shall remain.
+ *
+ * If the stereotype was moved in a profile that is not already applied on the
+ * profiled model then the migration tool asks the designer if the profile
+ * should be applied. If the designer answers 'yes' every application of this
+ * stereotype shall remain conversely if the answer is 'no' then every
+ * application of this stereotype shall be deleted.
+ */
+public class MoveStereotypeMigrator extends AbstractMigrator implements IMoveStereotypeMigrator {
+
+ private EObject newContainer;
+
+ private Stereotype stereotype;
+
+ /**
+ * Constructor.
+ *
+ * @param treeNode
+ * the treeNode corresponding to this migrator
+ */
+ public MoveStereotypeMigrator(TreeNode treeNode) {
+ super(treeNode);
+ }
+
+ /**
+ * This method check if the specified treeNode is a node representing the current change
+ *
+ * Is valid if:
+ * 1] the treeNode is a moved node
+ * 2] the moved element is a Stereotype
+ * 3] the new container is in the currently profile use for the migration
+ *
+ * @param node
+ * @return true if the treeNode represent the current change
+ */
+ public static boolean isValid(TreeNode node) {
+ if (TreeNodeUtils.isMoveChange(node)) {
+ Object elt = TreeNodeUtils.getMovedElement(node);
+ if (elt instanceof Stereotype) {
+ if (TreeNodeUtils.getMovedSourceContainer(node, MigratorProfileApplication.comparison) == MigratorProfileApplication.appliedProfile) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * This method is used to evaluate if the specified node correspond to the
+ * change that we expect to manage with
+ *
+ * @return return true if the treeNode is the expected change, false otherwise
+ */
+ @Override
+ public boolean isValid() {
+ return isValid(treeNode);
+ }
+
+ /**
+ * If the new container of the stereotype is not applied in the model yet
+ * then we ask the user if he want to apply it, if his answer is yes we reapply it
+ * otherwise we remove every stereotype application of this stereotype
+ */
+ @Override
+ public void migrationAction() {
+ if (isDisplayDialogPreference()) {
+ if (newContainer instanceof Package) {
+ Profile nearestProfile = getNearestProfile((Package) newContainer);
+ Profile profile = getAppliedProfile(nearestProfile);
+ if (profile == null) { // the new container is in a profile which is not applied yet
+ MoveStereotypeDialog dialog = new MoveStereotypeDialog(Display.getDefault().getActiveShell(), stereotype, nearestProfile);
+ dialog.open();
+ if (dialog.isReapply()) { // the answer is yes: apply profile
+ MigratorProfileApplication.profiledModel.applyProfile(nearestProfile);
+ MigratorProfileApplication.newAppliedProfile.add(nearestProfile);
+ } else { // the answer is no: delete stereotype application
+ List<StereotypeApplicationDescriptor> list = StereotypeApplicationRegistry.getStereotypeApplicationDescriptors(stereotype);
+ for (StereotypeApplicationDescriptor descriptor : list) {
+ descriptor.getOwner().unapplyStereotype(descriptor.getStereotype());
+ }
+ // remove the list of unapplied stereotype to avoid that later we try to migrate an unapplied stereotype
+ StereotypeApplicationRegistry.stereotypeApplicationList.removeAll(list);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Check if the profile in parameter is applied in the {@link MigratorProfileApplication#profiledModel}.
+ *
+ * @param profile
+ * @return return the applied profile if it is find, null otherwise
+ */
+ private Profile getAppliedProfile(Profile profile) {
+ return MigratorProfileApplication.profiledModel.getAppliedProfile(profile.getQualifiedName(), true);
+ }
+
+ /**
+ * Retrieves the nearest profile that owns (either directly or indirectly) this element, or the element itself (if it is a profile)
+ *
+ * @param package1
+ * @return the nearest profile that owns this element
+ */
+ private Profile getNearestProfile(Package package1) {
+ if (package1 instanceof Profile) {
+ return (Profile) package1;
+ }
+ if (package1.getOwner() instanceof Package) {
+ return getNearestProfile((Package) package1.getOwner());
+ }
+ return null;
+ }
+
+ /**
+ * @see org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.AbstractMigrator#initAttributes()
+ */
+ @Override
+ public void initAttributes() {
+ if (isValid()) {
+ Object elt = TreeNodeUtils.getMovedElement(treeNode);
+ newContainer = TreeNodeUtils.getMovedTargetContainer(treeNode);
+ stereotype = (Stereotype) elt;
+ }
+ }
+
+ /**
+ * Get the value of the preference for the specific dialog
+ *
+ * @return true if the dialog should be display
+ */
+ private boolean isDisplayDialogPreference() {
+ final IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
+ return prefStore.getBoolean(ProfileMigrationPreferenceConstants.STEREOTYPE_MOVE);
+ }
+
+ /**
+ * Get the moved stereotype
+ *
+ * @return the stereotype
+ */
+ @Override
+ public Stereotype getStereotype() {
+ return stereotype;
+ }
+
+ /**
+ * Get the priority, this priority will define the order of execution of migrators.
+ * If the priority is 0 it will be execute last.
+ *
+ * @return the priority
+ */
+ @Override
+ public int getPriority() {
+ return 0;
+ }
+
+ /**
+ * Get the new container of the element
+ *
+ * @return the new container of the element
+ */
+ @Override
+ public Element getTargetContainer() {
+ return (Element) newContainer;
+ }
+
+ /**
+ * Get the old container of the element (before the move)
+ *
+ * @return the old container of the element
+ */
+ @Override
+ public Element getSourceContainer() {
+ return (Element) TreeNodeUtils.getMovedSourceContainer(treeNode, MigratorProfileApplication.comparison);
+ }
+
+ /**
+ * Get the moved element
+ *
+ * @return the moved element
+ */
+ @Override
+ public Element getMovedElement() {
+ return getStereotype();
+ }
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/ConflictNode.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/ConflictNode.java
new file mode 100644
index 00000000000..60d19a60a99
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/ConflictNode.java
@@ -0,0 +1,77 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.nodes;
+
+import org.eclipse.emf.compare.Conflict;
+import org.eclipse.emf.edit.tree.impl.TreeNodeImpl;
+
+import com.google.common.collect.Iterables;
+
+/**
+ * This class is wrapper for TreeNode used to represent a conflict TreeNode.
+ *
+ */
+public class ConflictNode extends TreeNodeImpl {
+
+ /**
+ * Constructor.
+ *
+ * @param conflict
+ * The conflict represented by this TreeNode
+ */
+ public ConflictNode(Conflict conflict) {
+ setData(conflict);
+ }
+
+ /**
+ * Add the given MatchNode to the children of this ConflictNode.
+ *
+ * @param matchNode
+ * The MatchNode to add
+ * @return <code>true</code> if the MatchNode has been added
+ */
+ public boolean addConflictingTree(MatchNode matchNode) {
+ return getChildren().add(matchNode);
+ }
+
+ /**
+ * Remove the given MatchNode of the children of this ConflictNode.
+ *
+ * @param matchNode
+ * The MatchNode to remove
+ * @return <code>true</code> if the MatchNode has been removed
+ */
+ public boolean removeConflictingTree(MatchNode matchNode) {
+ return getChildren().remove(matchNode);
+ }
+
+ /**
+ * Getter for the conflict represented by this TreeNode.
+ *
+ * @return the conflict
+ */
+ public Conflict getConflict() {
+ return (Conflict) getData();
+ }
+
+ /**
+ * Get all the match trees that are part of the conflict
+ *
+ * @return an iterable of all MatchNode that are part of the conflict
+ */
+ public Iterable<MatchNode> getConflictingTrees() {
+ return Iterables.filter(getChildren(), MatchNode.class);
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/DiffNode.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/DiffNode.java
new file mode 100644
index 00000000000..618e5b76c9a
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/DiffNode.java
@@ -0,0 +1,78 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.nodes;
+
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.edit.tree.impl.TreeNodeImpl;
+
+import com.google.common.collect.Iterables;
+
+/**
+ * This class is wrapper for TreeNode used to represent a diff TreeNode.
+ */
+public class DiffNode extends TreeNodeImpl {
+
+ /**
+ * Constructor.
+ *
+ * @param diff
+ * The diff represented by this TreeNode
+ */
+ public DiffNode(Diff diff) {
+ setData(diff);
+ }
+
+ /**
+ * Add the given DiffNode to the children of this DiffNode. This is intended to be used only for refined
+ * diffs.
+ *
+ * @param diffNode
+ * The DiffNode to add
+ * @return <code>true</code> if the DiffNode has been added
+ */
+ public boolean addRefinedDiffNode(DiffNode diffNode) {
+ return getChildren().add(diffNode);
+ }
+
+ /**
+ * Remove the given DiffNode of the children of this DiffNode. This is intended to be used only for
+ * refined diffs.
+ *
+ * @param diffNode
+ * The DiffNode to remove
+ * @return <code>true</code> if the DiffNode has been removed
+ */
+ public boolean removeRefinedDiffNode(DiffNode diffNode) {
+ return getChildren().remove(diffNode);
+ }
+
+ /**
+ * Getter for the diff represented by this TreeNode.
+ *
+ * @return the diff
+ */
+ public Diff getDiff() {
+ return (Diff) getData();
+ }
+
+ /**
+ * Get all the refined DiffNode that are part of this DiffNode.
+ *
+ * @return an iterable of all refined DiffNode of this diff
+ */
+ public Iterable<DiffNode> getRefinedDiffs() {
+ return Iterables.filter(getChildren(), DiffNode.class);
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/MatchNode.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/MatchNode.java
new file mode 100644
index 00000000000..7723970c2b6
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/MatchNode.java
@@ -0,0 +1,107 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.nodes;
+
+import org.eclipse.emf.compare.Match;
+import org.eclipse.emf.edit.tree.impl.TreeNodeImpl;
+
+import com.google.common.collect.Iterables;
+
+/**
+ * This class is wrapper for TreeNode used to represent a match TreeNode.
+ */
+public class MatchNode extends TreeNodeImpl {
+
+ /**
+ * Constructor.
+ *
+ * @param match
+ * The match represented by this TreeNode
+ */
+ public MatchNode(Match match) {
+ setData(match);
+ }
+
+ /**
+ * Add the given MatchNode to the children of this MatchNode.
+ *
+ * @param matchNode
+ * The MatchNode to add
+ * @return <code>true</code> if the MatchNode has been added
+ */
+ public boolean addSubMatchNode(MatchNode matchNode) {
+ return getChildren().add(matchNode);
+ }
+
+ /**
+ * Add the given DiffNode to the children of this MatchNode.
+ *
+ * @param diffNode
+ * The DiffNode to add
+ * @return <code>true</code> if the DiffNode has been added
+ */
+ public boolean addDiffNode(DiffNode diffNode) {
+ return getChildren().add(diffNode);
+ }
+
+ /**
+ * Remove the given MatchNode of the children of this MatchNode.
+ *
+ * @param matchNode
+ * The MatchNode to remove
+ * @return <code>true</code> if the MatchNode has been removed
+ */
+ public boolean removeSubMatchNode(MatchNode matchNode) {
+ return getChildren().remove(matchNode);
+ }
+
+ /**
+ * Remove the given DiffNode of the children of this MatchNode.
+ *
+ * @param diffNode
+ * The DiffNode to remove
+ * @return <code>true</code> if the DiffNode has been removed
+ */
+ public boolean removeDiffNode(DiffNode diffNode) {
+ return getChildren().remove(diffNode);
+ }
+
+ /**
+ * Getter for the match represented by this TreeNode.
+ *
+ * @return the match
+ */
+ public Match getMatch() {
+ return (Match) getData();
+ }
+
+ /**
+ * Get all the match trees that are submatches of the match
+ *
+ * @return an iterable of all submatches
+ */
+ public Iterable<MatchNode> getSubMatchNodes() {
+ return Iterables.filter(getChildren(), MatchNode.class);
+ }
+
+ /**
+ * Get all the diffs that are part of the match
+ *
+ * @return an iterable of all directly contained diffs
+ */
+ public Iterable<DiffNode> getDiffNodes() {
+ return Iterables.filter(getChildren(), DiffNode.class);
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/MatchResourceNode.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/MatchResourceNode.java
new file mode 100644
index 00000000000..a44b0489021
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/nodes/MatchResourceNode.java
@@ -0,0 +1,98 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.nodes;
+
+import org.eclipse.emf.compare.MatchResource;
+import org.eclipse.emf.edit.tree.impl.TreeNodeImpl;
+
+import com.google.common.collect.Iterables;
+
+/**
+ * This class is wrapper for TreeNode used to represent a match resource TreeNode.
+ */
+public class MatchResourceNode extends TreeNodeImpl {
+
+ /**
+ * Constructor.
+ *
+ * @param matchResource
+ * The matchResource represented by this TreeNode
+ */
+ public MatchResourceNode(MatchResource matchResource) {
+ setData(matchResource);
+ }
+
+ /**
+ * Add the given DiffNode to the direct children of this MatchResourceNode.
+ *
+ * @param diffNode
+ * The DiffNode to add
+ * @return <code>true</code> if the MatchNode has been added
+ */
+ public boolean addDiffNode(DiffNode diffNode) {
+ return getChildren().add(diffNode);
+ }
+
+ /**
+ * Add the given MatchNode to the children of this MatchResourceNode.
+ *
+ * @param matchNode
+ * The MatchNode to add
+ * @return <code>true</code> if the MatchNode has been added
+ */
+ public boolean addMatchNode(MatchNode matchNode) {
+ return getChildren().add(matchNode);
+ }
+
+ /**
+ * Remove the given DiffNode of the direct children of this MatchResourceNode.
+ *
+ * @param diffNode
+ * The DiffNode to remove
+ * @return <code>true</code> if the DiffNode has been removed
+ */
+ public boolean removeDiffNode(DiffNode diffNode) {
+ return getChildren().remove(diffNode);
+ }
+
+ /**
+ * Remove the given MatchNode of the children of this MatchResourceNode.
+ *
+ * @param matchNode
+ * The MatchNode to remove
+ * @return <code>true</code> if the MatchNode has been removed
+ */
+ public boolean removeMatchNode(MatchNode matchNode) {
+ return getChildren().remove(matchNode);
+ }
+
+ /**
+ * Getter for the match resource represented by this TreeNode.
+ *
+ * @return the matchResource
+ */
+ public MatchResource getMatchResource() {
+ return (MatchResource) getData();
+ }
+
+ /**
+ * Get all the match trees that are part of the MatchResource
+ *
+ * @return an iterable of all MatchNode that are part of the MatchResource
+ */
+ public Iterable<MatchNode> getMatches() {
+ return Iterables.filter(getChildren(), MatchNode.class);
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/AtomicMigratorComparator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/AtomicMigratorComparator.java
new file mode 100644
index 00000000000..f662f4ad041
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/AtomicMigratorComparator.java
@@ -0,0 +1,46 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils;
+
+import java.util.Comparator;
+
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IAtomicMigrator;
+
+/**
+ * A comparator for IAtomitMigrators, compare according to the priority
+ */
+public class AtomicMigratorComparator implements Comparator<IAtomicMigrator> {
+
+ /**
+ * Compare according to the priority
+ *
+ * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+ *
+ */
+ @Override
+ public int compare(IAtomicMigrator o1, IAtomicMigrator o2) {
+ if (o1.getPriority() == o2.getPriority()) {
+ // if it is the same priority we sort by name (to be sure that every migrator of the same type are grouped)
+ if (o1.getClass().getName().compareTo(o2.getClass().getName()) > 0) {
+ return 1;
+ } else if (o1.getClass().getName().compareTo(o2.getClass().getName()) < 0) {
+ return -1;
+ } else {
+ return 0;
+ }
+ }
+ return o1.getPriority() > o2.getPriority() ? -1 : 1;
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/DifferenceTreeBuilder.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/DifferenceTreeBuilder.java
new file mode 100644
index 00000000000..45f019058c8
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/DifferenceTreeBuilder.java
@@ -0,0 +1,285 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils;
+
+import static com.google.common.collect.Collections2.filter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.compare.Comparison;
+import org.eclipse.emf.compare.Conflict;
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.Match;
+import org.eclipse.emf.compare.MatchResource;
+import org.eclipse.emf.compare.ReferenceChange;
+import org.eclipse.emf.compare.ResourceAttachmentChange;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.nodes.ConflictNode;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.nodes.DiffNode;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.nodes.MatchNode;
+import org.eclipse.papyrus.toolsmiths.profilemigration.internal.nodes.MatchResourceNode;
+
+import com.google.common.base.Predicates;
+import com.google.common.collect.LinkedHashMultimap;
+import com.google.common.collect.Multimap;
+
+/**
+ * This class is uses to get the treeNode from the comparison
+ *
+ * This code is mostly take from {@link org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.BasicDifferenceGroupImpl}
+ */
+public class DifferenceTreeBuilder extends AdapterImpl {
+
+ private Comparison comparison;
+
+ /**
+ * Constructor
+ *
+ * @param comparison
+ * @param profile
+ */
+ public DifferenceTreeBuilder(Comparison comparison) {
+ this.comparison = comparison;
+ }
+
+ /**
+ * Get the treeNode
+ *
+ * @return the build treeNode
+ */
+ public TreeNode buildMatchTree() {
+ List<TreeNode> result = buildMatchTrees();
+ if (!result.isEmpty()) {
+ return result.get(0);
+ }
+ return null;
+ }
+
+
+
+ /**
+ * Compute a subTree for each root match of the comparison.
+ *
+ * @return the list of matchSubTrees
+ */
+ protected List<TreeNode> buildMatchTrees() {
+ final List<TreeNode> matchTrees = new ArrayList<TreeNode>();
+ for (Match match : getComparison().getMatches()) {
+ MatchNode matchNode = buildTree(match);
+ if (matchNode != null) {
+ matchTrees.add(matchNode);
+ }
+ }
+ return matchTrees;
+ }
+
+ private Comparison getComparison() {
+ return comparison;
+ }
+
+ /**
+ * Compute a tree for the given match.
+ *
+ * @param match
+ * The given match
+ * @return a list of subTree for this match, must not be <code>null</code>
+ */
+ protected MatchNode buildTree(Match match) {
+ MatchNode result = null;
+ MatchNode matchNode = createMatchNode(match);
+ populateMatchNode(matchNode);
+ if (!matchNode.getChildren().isEmpty()) {
+ result = matchNode;
+ }
+ return result;
+ }
+
+ /**
+ * Build the subtree for the given match.
+ *
+ * @param matchNode
+ * The root matchNode
+ */
+ protected void populateMatchNode(MatchNode matchNode) {
+ Match match = matchNode.getMatch();
+ Multimap<Match, Diff> diffsBySubMatch = LinkedHashMultimap.create();
+ for (Diff diff : filter(match.getDifferences(), Predicates.alwaysTrue())) {
+ // If a diff is part of a larger diff (is refined by), we don't want to add it to the tree. It
+ // will be added by the algorithm in a second step. This way we avoid duplication and all diffs
+ // that are part of a 'master' diff are grouped as children of this 'master' diff
+ if (isPartOfLargerDiff(diff)) {
+ Match targetMatch = getTargetMatch(diff);
+ if (match == targetMatch) {
+ addDiffNode(matchNode, diff);
+ } else if (match.getSubmatches().contains(targetMatch)) {
+ diffsBySubMatch.put(targetMatch, diff);
+ } else if (targetMatch != null) {
+ MatchNode targetMatchNode = createMatchNode(targetMatch);
+ matchNode.addSubMatchNode(targetMatchNode);
+ addDiffNode(targetMatchNode, diff);
+ }
+ }
+ }
+ for (Match subMatch : match.getSubmatches()) {
+ MatchNode subMatchNode = createMatchNode(subMatch);
+ for (Diff subMatchDiff : diffsBySubMatch.get(subMatch)) {
+ addDiffNode(subMatchNode, subMatchDiff);
+ }
+ diffsBySubMatch.removeAll(subMatch);
+ populateMatchNode(subMatchNode);
+ if (!subMatchNode.getChildren().isEmpty()) {
+ matchNode.addSubMatchNode(subMatchNode);
+ }
+ }
+ }
+
+ /**
+ * Add the diff in the given match. This method handles refined diffs and allows to customize the result.
+ *
+ * @param matchNode
+ * The given match node
+ * @param diff
+ * The diff to add
+ */
+ protected void addDiffNode(MatchNode matchNode, Diff diff) {
+ if (!(diff instanceof ResourceAttachmentChange)) {
+ DiffNode diffNode = createDiffNode(diff);
+ handleRefiningDiffs(diffNode);
+ matchNode.addDiffNode(diffNode);
+ }
+ }
+
+ /**
+ * Handle the diffs that refine the given diff. Refining diffs are added as children of the given diff,
+ * and so on recursively.
+ *
+ * @param diffNode
+ * The diff node to handle, which is not necessarily a child of a MatchNode since this method
+ * is called recursively.
+ */
+ protected void handleRefiningDiffs(DiffNode diffNode) {
+ Diff diff = diffNode.getDiff();
+ for (Diff refiningDiff : diff.getRefinedBy()) {
+ DiffNode refinedDiffNode = createDiffNode(refiningDiff);
+ diffNode.addRefinedDiffNode(refinedDiffNode);
+ handleRefiningDiffs(refinedDiffNode);
+ }
+ }
+
+ /**
+ * Does the given difference is part of a larger diff, means is refined by an other diff
+ *
+ * @param diff
+ * The diff
+ * @return <code>true</code> if the diff's node should be a child of a MatchNode.
+ */
+ protected boolean isPartOfLargerDiff(Diff diff) {
+ return diff.getRefines().isEmpty();
+ }
+
+ /**
+ * Provide the Match that should directly contain the given diff. If the given diff should not be a direct
+ * child of a Match, the method must return <code>null</code>. For a given strategy, a diff should only be
+ * displayed in the same Match (i.e. the {@link DiffNode}s that represent the diff should always be
+ * children of the {@link MatchNode}s that represent the returned Match.
+ *
+ * @param diff
+ * The difference
+ * @return The Match that is a direct parent of the given diff, can be <code>null</code>.
+ */
+ protected Match getTargetMatch(Diff diff) {
+ if (isPartOfLargerDiff(diff)) {
+ if (isContainmentRefChange(diff)) {
+ Match valueMatch = diff.getMatch().getComparison()
+ .getMatch(((ReferenceChange) diff).getValue());
+ return valueMatch; // This match may not be a sub-match because the child may have moved
+ } else if (isContainmentRefChange(diff.getPrimeRefining())) {
+ Match valueMatch = diff.getMatch().getComparison()
+ .getMatch(((ReferenceChange) diff.getPrimeRefining()).getValue());
+ return valueMatch; // This match may not be a sub-match because the child may have moved
+ }
+ return diff.getMatch();
+ }
+ return null;
+ }
+
+ /**
+ * Is it a containment reference change?
+ *
+ * @param diff
+ * The diff
+ * @return <code>true</code> if the diff is a {@link ReferenceChange} whose {@link EReference} is a
+ * containment reference.
+ */
+ protected boolean isContainmentRefChange(Diff diff) {
+ return diff instanceof ReferenceChange && ((ReferenceChange) diff).getReference().isContainment();
+ }
+
+ /**
+ * Create a diff node.
+ *
+ * @param diff
+ * The given diff
+ * @return the DiffNode
+ */
+ protected DiffNode createDiffNode(Diff diff) {
+ DiffNode diffNode = new DiffNode(diff);
+ diffNode.eAdapters().add(this);
+ return diffNode;
+ }
+
+ /**
+ * Create a match node.
+ *
+ * @param match
+ * The given match
+ * @return the MatchNode
+ */
+ protected MatchNode createMatchNode(Match match) {
+ MatchNode matchNode = new MatchNode(match);
+ matchNode.eAdapters().add(this);
+ return matchNode;
+ }
+
+ /**
+ * Create a conflict node.
+ *
+ * @param conflict
+ * The given conflict
+ * @return the ConflictNode
+ */
+ protected ConflictNode createConflictNode(Conflict conflict) {
+ ConflictNode conflictNode = new ConflictNode(conflict);
+ conflictNode.eAdapters().add(this);
+ return conflictNode;
+ }
+
+ /**
+ * Create a matchResource node.
+ *
+ * @param matchResource
+ * The given matchResource
+ * @return the MatchResourceNode
+ */
+ protected MatchResourceNode createMatchResourceNode(MatchResource matchResource) {
+ MatchResourceNode matchResourceNode = new MatchResourceNode(matchResource);
+ matchResourceNode.eAdapters().add(this);
+ return matchResourceNode;
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/ProfileUtil.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/ProfileUtil.java
new file mode 100644
index 00000000000..fda3783ad67
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/ProfileUtil.java
@@ -0,0 +1,118 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils;
+
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.eclipse.uml2.uml.Classifier;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.Profile;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * A class containing static utility method regarding UML profiles
+ */
+public class ProfileUtil {
+
+ /**
+ * find in every profile applied to umlPackage every sub stereotypes of parentStereotype
+ *
+ * @param parentStereotype
+ * the referenced stereotype
+ * @param umlPackage
+ * the package on which profiles are applied
+ * @param concreteOnly
+ * true if you want only concrete stereotype as result, false otherwise
+ * @return the list of sub-stereotype of parentStereotype
+ */
+ public static List<Stereotype> findAllSubStereotypes(Stereotype parentStereotype, Package umlPackage, boolean concreteOnly) {
+ Collection<Stereotype> result = new LinkedHashSet<>();
+
+ for (Profile profile : umlPackage.getAllAppliedProfiles()) {
+ List<Stereotype> allStereotypes = new LinkedList<>();
+ findAllStereotypes(profile, allStereotypes);
+ for (Stereotype stereotype : allStereotypes) {
+ if (concreteOnly && stereotype.isAbstract()) {
+ continue; // Skip abstract stereotypes
+ }
+
+ if (isSubStereotype(parentStereotype, stereotype)) {
+ result.add(stereotype);
+ }
+ }
+
+ }
+
+ return new LinkedList<>(result);
+ }
+
+ /**
+ * check if childStereotype is a sub-stereotype of parentStereotype
+ *
+ * @param parentStereotype
+ * @param childStereotype
+ * @return true if childStereotype is a sub-stereotype of parentStereotype, false otherwise
+ */
+ private static boolean isSubStereotype(Stereotype parentStereotype, Stereotype childStereotype) {
+ if (parentStereotype == childStereotype) {
+ return true;
+ }
+ if (childStereotype.getGenerals().contains(parentStereotype)) {
+ return true;
+ } else {
+ for (Classifier general : childStereotype.getGenerals()) {
+ if (general instanceof Stereotype) {
+ return isSubStereotype(parentStereotype, (Stereotype) general);
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Finds recursively all stereotypes contained in this profile
+ *
+ * @param profile
+ *
+ * @param result
+ */
+ public static void findAllStereotypes(Package profile, List<Stereotype> result) {
+ for (Stereotype stereotype : profile.getOwnedStereotypes()) {
+ result.add(stereotype);
+ }
+ for (Package subPackage : profile.getNestedPackages()) {
+ Package subProfile = subPackage;
+ findAllStereotypes(subProfile, result);
+ }
+ }
+
+ /**
+ * Retrieves the nearest profile that owns (either directly or indirectly) this element, or the element itself (if it is a profile)
+ *
+ * @param element
+ * @return the nearest profile that owns this element
+ */
+ public static Profile getNearestProfile(Element element) {
+ Package package_ = element.getNearestPackage();
+ if (package_ instanceof Profile) {
+ return (Profile) package_;
+ }
+ return getNearestProfile(package_);
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/TreeNodeUtils.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/TreeNodeUtils.java
new file mode 100644
index 00000000000..1cc1032ff27
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/internal/utils/TreeNodeUtils.java
@@ -0,0 +1,409 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.internal.utils;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.compare.AttributeChange;
+import org.eclipse.emf.compare.Comparison;
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.DifferenceKind;
+import org.eclipse.emf.compare.Match;
+import org.eclipse.emf.compare.ReferenceChange;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.tree.TreeNode;
+import org.eclipse.uml2.uml.Profile;
+
+/**
+ * Util methods to get information from the TreeNode structure
+ */
+public class TreeNodeUtils {
+
+ /**
+ * Check if the treeNode is a change of type Add
+ *
+ * @param treeNode
+ * @param profile
+ * @return true if the treeNode reference an add of something, false otherwise
+ */
+ public static boolean isAddType(TreeNode treeNode, Profile profile) {
+ if (getNearestProfile(treeNode) == profile) {
+ if (treeNode.getData() instanceof Match) {
+ Match match = (Match) treeNode.getData();
+ if (getNewElement(match) != null && getOldElement(match) == null) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Get the added element, this method return null if the change is not an add
+ *
+ * @param treeNode
+ * @return the added element or null if the treeNode is not an add change
+ */
+ public static EObject getAddedElement(TreeNode treeNode) {
+ if (treeNode.getData() instanceof Match) {
+ Match match = (Match) treeNode.getData();
+ if (getNewElement(match) != null && getOldElement(match) == null) {
+ return getNewElement(match);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get the structural feature where the element is added, this method return null if the change is not an add
+ *
+ * @param treeNode
+ * @return the added element or null if the treeNode is not an add change
+ */
+ public static EStructuralFeature getAddedStructuralFeature(TreeNode treeNode) {
+ if (treeNode.getData() instanceof Match) {
+ Match match = (Match) treeNode.getData();
+ if (getNewElement(match) != null && getOldElement(match) == null) {
+ for (TreeNode child : treeNode.getChildren()) {
+ if (child.getData() instanceof AttributeChange) {
+ AttributeChange attributeChange = (AttributeChange) child.getData();
+ return attributeChange.getAttribute();
+ } else if (child.getData() instanceof ReferenceChange) {
+ ReferenceChange referenceChange = (ReferenceChange) child.getData();
+ return referenceChange.getReference();
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Check if the treeNode is a change of type Delete
+ *
+ * @param treeNode
+ * @param profile
+ * @return true if the treeNode reference an delete of something, false otherwise
+ */
+ public static boolean isDeleteType(TreeNode treeNode, Profile profile) {
+ if (getNearestProfile(treeNode) == profile) {
+ if (treeNode.getData() instanceof Match) {
+ Match match = (Match) treeNode.getData();
+ if (getNewElement(match) == null && getOldElement(match) != null) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Get the deleted element, this method return null if the change is not a delete
+ * (warning: return the object from the oldModel, you can't use == with elements get from the model)
+ *
+ * @param treeNode
+ * @return the deleted element or null if the treeNode is not a delete change
+ */
+ public static EObject getDeletedElement(TreeNode treeNode) {
+ if (treeNode.getData() instanceof Match) {
+ Match match = (Match) treeNode.getData();
+ if (getNewElement(match) == null && getOldElement(match) != null) {
+ return getOldElement(match);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get the deleted element's owner, this method return null if the change is not a delete. This method
+ * return the element from the model if it is possible otherwise it return the element from the old model.
+ *
+ * @param treeNode
+ * @return the deleted element or null if the treeNode is not a delete change
+ */
+ public static EObject getDeletedElementOwner(TreeNode treeNode) {
+ if (treeNode.getData() instanceof Match) {
+ Match match = (Match) treeNode.getData();
+ if (getNewElement(match) == null && getOldElement(match) != null) {
+ if (match.eContainer() instanceof Match) {
+ if (getNewElement(((Match) match.eContainer())) != null) {
+ return getNewElement(((Match) match.eContainer()));
+ } else {
+ return getOldElement(((Match) match.eContainer()));
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get the structural feature where the element is deleted, this method return null if the change is not an add
+ *
+ * @param treeNode
+ * @return the added element or null if the treeNode is not an add change
+ */
+ public static EStructuralFeature getDeletedStructuralFeature(TreeNode treeNode) {
+ if (treeNode.getData() instanceof Match) {
+ Match match = (Match) treeNode.getData();
+ if (getNewElement(match) == null && getOldElement(match) != null) {
+ for (TreeNode child : treeNode.getChildren()) {
+ if (child.getData() instanceof AttributeChange) {
+ AttributeChange attributeChange = (AttributeChange) child.getData();
+ return attributeChange.getAttribute();
+ } else if (child.getData() instanceof ReferenceChange) {
+ ReferenceChange referenceChange = (ReferenceChange) child.getData();
+ return referenceChange.getReference();
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Check if the treeNode is a change of type Change
+ *
+ * @param treeNode
+ * @param profile
+ * @return true if the treeNode is a change reference of a feature, false otherwise
+ */
+ public static boolean isChangeType(TreeNode treeNode, Profile profile) {
+ if (getNearestProfile(treeNode) == profile) {
+ if (treeNode.getData() instanceof Diff) {
+ Diff diff = (Diff) treeNode.getData();
+ if (diff.getKind() == DifferenceKind.CHANGE) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Get the changed element, this method return null if the change is not a change
+ *
+ * @param treeNode
+ * @return the changed element or null if the treeNode is not a change
+ */
+ public static EObject getChangedElement(TreeNode treeNode) {
+ if (treeNode.getData() instanceof Diff) {
+ Diff diff = (Diff) treeNode.getData();
+ if (diff.getKind() == DifferenceKind.CHANGE) {
+ return getNewElement(diff.getMatch());
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get the old version of the changed element, this method return null if the change is not a change
+ *
+ * @param treeNode
+ * @return the old version of the changed element or null if the treeNode is not a change
+ */
+ public static EObject getChangedOldElement(TreeNode treeNode) {
+ if (treeNode.getData() instanceof Diff) {
+ Diff diff = (Diff) treeNode.getData();
+ if (diff.getKind() == DifferenceKind.CHANGE) {
+ return getOldElement(diff.getMatch());
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get the changed attribute, this method return null if the change is not a change
+ *
+ * @param treeNode
+ * @return the changed attribute or null if the treeNode is not a change
+ */
+ public static EStructuralFeature getChangedAttribute(TreeNode treeNode) {
+ if (treeNode.getData() instanceof Diff) {
+ Diff diff = (Diff) treeNode.getData();
+ if (diff.getKind() == DifferenceKind.CHANGE) {
+ if (diff instanceof AttributeChange) {
+ AttributeChange attributeChange = (AttributeChange) diff;
+ return attributeChange.getAttribute();
+ } else if (diff instanceof ReferenceChange) {
+ ReferenceChange referenceChange = (ReferenceChange) diff;
+ return referenceChange.getReference();
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Check if the treeNode is a change of type Move
+ *
+ * @param treeNode
+ * @return true if the treeNode is a move change, false otherwise
+ */
+ public static boolean isMoveChange(TreeNode treeNode) {
+ if (treeNode.getData() instanceof Diff) {
+ Diff diff = (Diff) treeNode.getData();
+ if (diff.getKind() == DifferenceKind.MOVE) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Get the element which has been moved, this method return null if the change is not a move
+ *
+ * @param treeNode
+ * @return the moved element or null if the treeNode is not a move
+ */
+ public static Object getMovedElement(TreeNode treeNode) {
+ if (treeNode.getData() instanceof Diff) {
+ Diff diff = (Diff) treeNode.getData();
+ if (diff.getKind() == DifferenceKind.MOVE) {
+ if (diff instanceof ReferenceChange) {
+ ReferenceChange attributeChange = (ReferenceChange) diff;
+ return attributeChange.getValue();
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get the new container, this method return null if the change is not a move
+ *
+ * @param treeNode
+ * @return the new container or null if the treeNode is not a move
+ */
+ public static EObject getMovedTargetContainer(TreeNode treeNode) {
+ if (treeNode.getData() instanceof Diff) {
+ Diff diff = (Diff) treeNode.getData();
+ if (diff.getKind() == DifferenceKind.MOVE) {
+ if (diff instanceof ReferenceChange) {
+ ReferenceChange attributeChange = (ReferenceChange) diff;
+ return attributeChange.getValue().eContainer();
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get the old container, this method return null if the change is not a move
+ *
+ * @param treeNode
+ * @param comparison
+ * the root treeNode it is used to search the match element in the new model from the old model
+ * @return the new container or null if the treeNode is not a move
+ */
+ public static EObject getMovedSourceContainer(TreeNode treeNode, Comparison comparison) {
+ if (treeNode.getData() instanceof Diff) {
+ Diff diff = (Diff) treeNode.getData();
+ if (diff.getKind() == DifferenceKind.MOVE) {
+ if (diff instanceof ReferenceChange) {
+ ReferenceChange attributeChange = (ReferenceChange) diff;
+ EObject newElement = attributeChange.getValue();
+ EObject oldElement = getOldElementFromNewElement(newElement, comparison.getMatches());
+ if (oldElement != null) {
+ EObject oldContainer = oldElement.eContainer();
+ return getNewElementFromOldElement(oldContainer, comparison.getMatches());
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get the element corresponding to the element of the old profile
+ *
+ * @param match
+ * @return return the element corresponding to the element of the old profile
+ */
+ public static EObject getOldElement(Match match) {
+ return match.getRight();
+ }
+
+ /**
+ * Get the element corresponding to the element of the new profile
+ *
+ * @param match
+ * @return return the element corresponding to the element of the new profile
+ */
+ public static EObject getNewElement(Match match) {
+ return match.getLeft();
+ }
+
+ /**
+ * This method try to find the math corresponding to the new element to get the associated old element
+ *
+ * @param element
+ * the new element we search
+ * @param matches
+ * the list of match we will run into
+ * @return the old element corresponding to the new one if any, return null if this element doesn't exist
+ */
+ private static EObject getOldElementFromNewElement(EObject element, EList<Match> matches) {
+ for (Match match : matches) {
+ if (getNewElement(match) == element) {
+ return getOldElement(match);
+ }
+ EObject result = getOldElementFromNewElement(element, match.getSubmatches());
+ if (result != null) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * This method try to find the math corresponding to the old element to get the associated new element
+ *
+ * @param element
+ * the old element we search
+ * @param matches
+ * the list of match we will run into
+ * @return the new element corresponding to the old one if any, return null if this element doesn't exist
+ */
+ private static EObject getNewElementFromOldElement(EObject element, EList<Match> matches) {
+ for (Match match : matches) {
+ if (getOldElement(match) == element) {
+ return getNewElement(match);
+ }
+ EObject result = getNewElementFromOldElement(element, match.getSubmatches());
+ if (result != null) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get the nearest profile owning the treeNode
+ *
+ * @param treeNode
+ * @return the nearest profile owning the treeNode
+ */
+ public static Profile getNearestProfile(TreeNode treeNode) {
+ if (treeNode.getData() instanceof Match) {
+ Match match = (Match) treeNode.getData();
+ if (match.getLeft() instanceof Profile) {
+ return (Profile) match.getLeft();
+ }
+ }
+ return getNearestProfile(treeNode.getParent());
+ }
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/messages.properties b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/messages.properties
new file mode 100644
index 00000000000..6164bd3b136
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/messages.properties
@@ -0,0 +1,2 @@
+MigratorProfileApplicationDelegate_PreferenceLabel=Profile migration tool
+MigratorProfileApplicationDelegate_SelectFileDialogTitle=Select the file corresponding to the profile {0} before modification
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/ICompositeMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/ICompositeMigrator.java
new file mode 100644
index 00000000000..33e8a70e743
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/ICompositeMigrator.java
@@ -0,0 +1,37 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+// --------------------------------------------------------
+// Code generated by Papyrus Java
+// --------------------------------------------------------
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators;
+
+import java.util.List;
+
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IAtomicMigrator;
+
+/**
+ * A CompositeMigrator is a migrator done from one or multiple AtomicMigrator
+ * This is a way to combine multiple AtomicMigrator to do an other action when those
+ * AtomicMigrator correspond to a specific case
+ */
+public interface ICompositeMigrator extends IMigrator {
+
+ /**
+ * Get the list of list of AtomicMigrator which compose the CompositeMigrator
+ *
+ * @return the list of list of AtomicMigrator which compose the CompositeMigrator
+ */
+ public List<IAtomicMigrator> getAtomicList();
+};
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/IMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/IMigrator.java
new file mode 100644
index 00000000000..cb1295a121c
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/IMigrator.java
@@ -0,0 +1,25 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators;
+
+/**
+ * A migrator is an object which migrate a part of the model according to modification in the profile
+ */
+public interface IMigrator {
+
+ /**
+ * The action of migration of this migrator
+ */
+ public void migrationAction();
+};
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/AbstractMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/AbstractMigrator.java
new file mode 100644
index 00000000000..4bfc3afeacd
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/AbstractMigrator.java
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic;
+
+import org.eclipse.emf.edit.tree.TreeNode;
+
+/**
+ * This abstract class is used to initialize attribute during the construction of the object
+ */
+public abstract class AbstractMigrator {
+
+ /**
+ * This is the treeNode corresponding to this migrator,
+ * this TreeNode represent the differences that this migrator expect
+ */
+ public TreeNode treeNode;
+
+ /**
+ * Constructor
+ *
+ * @param treeNode
+ * represent the differences that this migrator expect
+ */
+ public AbstractMigrator(TreeNode treeNode) {
+ this.treeNode = treeNode;
+ initAttributes();
+ }
+
+ /**
+ * Initialize attributes from the treeNode
+ */
+ public abstract void initAttributes();
+
+};
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IAddMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IAddMigrator.java
new file mode 100644
index 00000000000..5cbccec2563
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IAddMigrator.java
@@ -0,0 +1,37 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic;
+
+import org.eclipse.uml2.uml.Element;
+
+/**
+ * This is a migrator for the action of adding an element to a container
+ */
+public interface IAddMigrator extends IAtomicMigrator {
+
+ /**
+ * Get the added element
+ *
+ * @return the added element
+ */
+ public Element getAddedElement();
+
+ /**
+ * Get the added element container
+ *
+ * @return the added element container
+ */
+ public Element getAddedElementContainer();
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IAtomicMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IAtomicMigrator.java
new file mode 100644
index 00000000000..99afa60b107
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IAtomicMigrator.java
@@ -0,0 +1,39 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic;
+
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.IMigrator;
+
+/**
+ * An AtomicMigrator is a migrator which correspond to a difference find between the old and the new profile
+ */
+public interface IAtomicMigrator extends IMigrator {
+
+ /**
+ * This method is used to evaluate if the specified node correspond to the
+ * change that we expect to manage with
+ *
+ * @return return true if the treeNode is the expected change, false otherwise
+ */
+ public boolean isValid();
+
+ /**
+ * Get the priority, this priority will define the order of execution of migrators.
+ * If the priority is 0 it will be execute last.
+ *
+ * @return the priority
+ */
+ public int getPriority();
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IChangeMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IChangeMigrator.java
new file mode 100644
index 00000000000..41115d0bcf3
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IChangeMigrator.java
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.uml2.uml.Element;
+
+/**
+ * This is a migrator for the action of changing the value of the feature of an element
+ */
+public interface IChangeMigrator extends IAtomicMigrator {
+
+ /**
+ * Get the changed element
+ *
+ * @return the changed element
+ */
+ public Element getChangedElement();
+
+ /**
+ * Get the new value of the feature
+ *
+ * @return the new value of the feature
+ */
+ public Object getNewValue();
+
+ /**
+ * Get the structural feature which is modified
+ *
+ * @return the structural feature which is modified
+ */
+ public EStructuralFeature getChangedStructuralFeature();
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IDeleteMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IDeleteMigrator.java
new file mode 100644
index 00000000000..513ebc34649
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IDeleteMigrator.java
@@ -0,0 +1,37 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic;
+
+import org.eclipse.uml2.uml.Element;
+
+/**
+ * This is a migrator for the action of deleting an element from a container
+ */
+public interface IDeleteMigrator extends IAtomicMigrator {
+
+ /**
+ * Get the deleted element
+ *
+ * @return the deleted element
+ */
+ public Element getDeletedElement();
+
+ /**
+ * Get the container of the element before its deletion
+ *
+ * @return the container of the element before its deletion
+ */
+ public Element getDeletedElementContainer();
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IMoveMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IMoveMigrator.java
new file mode 100644
index 00000000000..75e9ad5b310
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/IMoveMigrator.java
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic;
+
+import org.eclipse.uml2.uml.Element;
+
+/**
+ * This is a migrator for the action of moving an element from a container to an other container
+ */
+public interface IMoveMigrator extends IAtomicMigrator {
+
+ /**
+ * Get the new container of the element
+ *
+ * @return the new container of the element
+ */
+ public Element getTargetContainer();
+
+ /**
+ * Get the old container of the element (before the move)
+ *
+ * @return the old container of the element
+ */
+ public Element getSourceContainer();
+
+ /**
+ * Get the moved element
+ *
+ * @return the moved element
+ */
+ public Element getMovedElement();
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/enumeration/IDeleteEnumerationLiteralFromEnumeration.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/enumeration/IDeleteEnumerationLiteralFromEnumeration.java
new file mode 100644
index 00000000000..bca7fa848b8
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/enumeration/IDeleteEnumerationLiteralFromEnumeration.java
@@ -0,0 +1,44 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.enumeration;
+
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IDeleteMigrator;
+import org.eclipse.uml2.uml.Enumeration;
+import org.eclipse.uml2.uml.EnumerationLiteral;
+
+/**
+ *
+ * If an enumeration literal is deleted from an enumeration in the profile specification and this
+ * enumeration is used to type one or many properties of stereotypes then all stereotype
+ * applications corresponding to the affected stereotype shall be upgraded. The upgrade
+ * consists for each stereotype application in providing the designer with the possibility to
+ * update the enumeration literal affected to the property whose specification was changed.
+ *
+ */
+public interface IDeleteEnumerationLiteralFromEnumeration extends IDeleteMigrator {
+ /**
+ * Get the enumeration owning the deleted EnumerationLiteral
+ *
+ * @return the enumeration
+ */
+ public Enumeration getEnumeration();
+
+ /**
+ * Get the deleted EnumerationLiteral
+ *
+ * @return the enumerationLiteral
+ */
+ public EnumerationLiteral getEnumerationLiteral();
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/packages/IMovePackageMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/packages/IMovePackageMigrator.java
new file mode 100644
index 00000000000..61517bc7c96
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/packages/IMovePackageMigrator.java
@@ -0,0 +1,52 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.packages;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IMoveMigrator;
+import org.eclipse.uml2.uml.Package;
+
+/**
+ *
+ * If a package is moved to another profile then the migration tool shall focus
+ * on the preservation of the stereotype applications available at the profiled model.
+ *
+ * If the package was moved in a profile that is already applied on the profiled
+ * model then the migration is trivial and every stereotype application shall remain.
+ *
+ * If the package was moved in a profile that is not already applied on the
+ * profiled model then the migration tool asks the designer if the profile should
+ * be applied. If the designer answers 'yes' every stereotype application shall remain
+ * conversely if the answer is 'no' then every stereotype application shall be deleted.
+ *
+ */
+public interface IMovePackageMigrator extends IMoveMigrator {
+
+
+ /**
+ * Get the moved package
+ *
+ * @return the movedPackage
+ */
+ public Package getMovedPackage();
+
+ /**
+ * Get the new container
+ *
+ * @return the newContainer
+ */
+ public EObject getNewContainer();
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/profile/IMoveProfileMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/profile/IMoveProfileMigrator.java
new file mode 100644
index 00000000000..90d62b2a96a
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/profile/IMoveProfileMigrator.java
@@ -0,0 +1,40 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.profile;
+
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IMoveMigrator;
+import org.eclipse.uml2.uml.Profile;
+
+/**
+ * If a profile is moved to another profile then the migration tool shall focus
+ * on the preservation of the stereotype applications available at the profiled model.
+ *
+ * If the profile was moved in a profile that is already applied on the profiled
+ * model then the migration is trivial and every stereotype application shall remain.
+ *
+ * If the profile was moved in a profile that is not already applied on the profiled model
+ * then the migration tool asks the designer if the moved profile should be reapplied.
+ * If the designer answers 'yes' every stereotype application shall remain conversely if
+ * the answer is 'no' then every stereotype application shall be deleted.
+ */
+public interface IMoveProfileMigrator extends IMoveMigrator {
+
+ /**
+ * Get the moved profile
+ *
+ * @return the moved profile
+ */
+ public Profile getProfile();
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/property/IChangeIsStaticFromPropertyMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/property/IChangeIsStaticFromPropertyMigrator.java
new file mode 100644
index 00000000000..3e89066c7fe
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/property/IChangeIsStaticFromPropertyMigrator.java
@@ -0,0 +1,50 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.property;
+
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IChangeMigrator;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * If the property becomes static then the migration tool shall change the
+ * value of every slop corresponding to this property. To determine which
+ * value the system shall set, it shall ask the designer which value he wants.
+ */
+public interface IChangeIsStaticFromPropertyMigrator extends IChangeMigrator {
+
+
+ /**
+ * Get the modified property
+ *
+ * @return the property
+ */
+ public Property getProperty();
+
+ /**
+ * Get the stereotype owning the modified property
+ *
+ * @return the stereotype
+ */
+ public Stereotype getStereotype();
+
+ /**
+ * Get the new value of the feature isStatic
+ *
+ * @return the isStatic
+ */
+ public boolean getValue();
+
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/property/IChangeLowerMultiplicityFromPropertyMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/property/IChangeLowerMultiplicityFromPropertyMigrator.java
new file mode 100644
index 00000000000..3a80152de88
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/property/IChangeLowerMultiplicityFromPropertyMigrator.java
@@ -0,0 +1,52 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.property;
+
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IChangeMigrator;
+import org.eclipse.uml2.uml.Property;
+
+/**
+ * If the loverValue feature of a property is modified then the migration tool shall maintain the validity of the model.
+ *
+ * If the lower value is changed from 0 to something else, means that as many as the lowerValue values are mandatory
+ * the migration tool shall upgrade each application of the stereotype owning this property. The upgrade consist in
+ * asking the designer which value he want to set on the slot corresponding of this property.
+ *
+ * If the lower value is changed from something to 0 the migration tool shall not do anything.
+ *
+ */
+public interface IChangeLowerMultiplicityFromPropertyMigrator extends IChangeMigrator {
+
+ /**
+ * Get the new multiplicity
+ *
+ * @return the newValue
+ */
+ public int getValue();
+
+ /**
+ * Get the old multiplicity
+ *
+ * @return the oldValue
+ */
+ public int getOldValue();
+
+ /**
+ * Get the modified property
+ *
+ * @return the property
+ */
+ public Property getProperty();
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/property/IChangeUpperMultiplicityFromPropertyMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/property/IChangeUpperMultiplicityFromPropertyMigrator.java
new file mode 100644
index 00000000000..5036c04975d
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/property/IChangeUpperMultiplicityFromPropertyMigrator.java
@@ -0,0 +1,53 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.property;
+
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IChangeMigrator;
+import org.eclipse.uml2.uml.Property;
+
+/**
+ * If the upper value of a property is modified then the migration
+ * tool shall maintain the validity of the model.
+ *
+ * If the upper value is decrease the migration
+ * tool shall upgrade each application of the stereotype owning this
+ * property. The upgrade consist in asking the designer which values he
+ * wants to keep for the slot corresponding of this property.
+ *
+ * If the upper value is increased the migration tool shall not do anything.
+ */
+public interface IChangeUpperMultiplicityFromPropertyMigrator extends IChangeMigrator {
+
+ /**
+ * Get the new multiplicity
+ *
+ * @return the newValue
+ */
+ public int getValue();
+
+ /**
+ * Get the old multiplicity
+ *
+ * @return the oldValue
+ */
+ public int getOldValue();
+
+ /**
+ * Get the modified property
+ *
+ * @return the property
+ */
+ public Property getProperty();
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/stereotype/IAddPropertyToStereotypeMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/stereotype/IAddPropertyToStereotypeMigrator.java
new file mode 100644
index 00000000000..2d8421aad8e
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/stereotype/IAddPropertyToStereotypeMigrator.java
@@ -0,0 +1,53 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.stereotype;
+
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IAddMigrator;
+import org.eclipse.uml2.uml.Property;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * If a Stereotype is updated with a new property then a slot for this
+ * property shall be available for each application of the stereotype
+ * in the profile model.
+ *
+ * If the new property has a default value then each application of the modified
+ * stereotype in the profiled model has its corresponding slot set with the default value.
+ *
+ * If the new property has no default value but a value is required (the minimal
+ * multiplicity is greater or equal than 1) then each application of the modified
+ * stereotype in the profiled model has its corresponding slot, the migration tool
+ * shall ask the designer to know which value he wants to set.
+ *
+ * If the new property has no default value and a value is optional (the minimal
+ * multiplicity is equal to 0) then each application of the modified stereotype
+ * in the profiled model has it corresponding slot set to null.
+ */
+public interface IAddPropertyToStereotypeMigrator extends IAddMigrator {
+
+ /**
+ * Get the stereotype owning the new property
+ *
+ * @return the stereotype
+ */
+ public Stereotype getStereotype();
+
+ /**
+ * Get the Added property
+ *
+ * @return the property
+ */
+ public Property getProperty();
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/stereotype/IChangeIsAbstractFromStereotypeMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/stereotype/IChangeIsAbstractFromStereotypeMigrator.java
new file mode 100644
index 00000000000..f5a529045ac
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/stereotype/IChangeIsAbstractFromStereotypeMigrator.java
@@ -0,0 +1,46 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.stereotype;
+
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IChangeMigrator;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * If a Stereotype becomes abstract the migration tool shall ask the designer
+ * if he wants to replace applications of this stereotype by one or many
+ * Stereotypes pick in a list. This list is defined by all specializations of the
+ * abstract Stereotype available on applied profiles. If the answer is "no"
+ * then the application of this stereotype is delete, otherwise selected
+ * stereotypes are applied and inherited slot are preserved.
+ *
+ * If a Stereotype becomes concrete then the migration tool should not do anything.
+ *
+ */
+public interface IChangeIsAbstractFromStereotypeMigrator extends IChangeMigrator {
+
+ /**
+ * Get the stereotype becoming abstract
+ *
+ * @return the stereotype
+ */
+ public Stereotype getStereotype();
+
+ /**
+ * Get the new value of the feature isAbstract
+ *
+ * @return the isAbstract
+ */
+ public boolean getValue();
+}
diff --git a/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/stereotype/IMoveStereotypeMigrator.java b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/stereotype/IMoveStereotypeMigrator.java
new file mode 100644
index 00000000000..5e8ce851f8e
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/org.eclipse.papyrus.toolsmiths.profilemigration/src/org/eclipse/papyrus/toolsmiths/profilemigration/migrators/atomic/stereotype/IMoveStereotypeMigrator.java
@@ -0,0 +1,42 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ *
+ *
+ * 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:
+ * Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.stereotype;
+
+import org.eclipse.papyrus.toolsmiths.profilemigration.migrators.atomic.IMoveMigrator;
+import org.eclipse.uml2.uml.Stereotype;
+
+/**
+ * If a Stereotype is moved to another profile then the migration tool shall focus
+ * on the preservation of the stereotype applications available at the profiled model.
+ *
+ * If the stereotype was moved in a profile that is already applied on the
+ * profiled model then the migration is trivial and every application of
+ * this stereotype shall remain.
+ *
+ * If the stereotype was moved in a profile that is not already applied on the
+ * profiled model then the migration tool asks the designer if the profile
+ * should be applied. If the designer answers 'yes' every application of this
+ * stereotype shall remain conversely if the answer is 'no' then every
+ * application of this stereotype shall be deleted.
+ */
+public interface IMoveStereotypeMigrator extends IMoveMigrator {
+
+ /**
+ * Get the moved stereotype
+ *
+ * @return the stereotype
+ */
+ public Stereotype getStereotype();
+}
diff --git a/plugins/toolsmiths/profilemigration/pom.xml b/plugins/toolsmiths/profilemigration/pom.xml
new file mode 100644
index 00000000000..933b658d4e9
--- /dev/null
+++ b/plugins/toolsmiths/profilemigration/pom.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrus</groupId>
+ <artifactId>org.eclipse.papyrus-toolsmiths</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <artifactId>org.eclipse.papyrus.toolsmiths.profile-migration</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <description>Tool to migrate to a new version of a profile</description>
+
+ <modules>
+ <module>org.eclipse.papyrus.toolsmiths.profilemigration</module>
+ <module>org.eclipse.papyrus.toolsmiths.profilemigration.ui</module>
+ </modules>
+</project>

Back to the top