Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas FAUVERGUE2016-11-24 06:20:54 -0500
committerGerrit Code Review @ Eclipse.org2016-11-29 05:57:50 -0500
commitb3141df23ca644573f8b2813ad8859722d418bd9 (patch)
tree6db261c6f918988a7117bfe93731af4ca17f0723
parent6d4f41d7e479bfa607ffde18b16fe8ebdae561c2 (diff)
downloadorg.eclipse.papyrus-b3141df23ca644573f8b2813ad8859722d418bd9.tar.gz
org.eclipse.papyrus-b3141df23ca644573f8b2813ad8859722d418bd9.tar.xz
org.eclipse.papyrus-b3141df23ca644573f8b2813ad8859722d418bd9.zip
Bug 496905: [Diagram][ModelExplorer][Table][Dialog] Papyrus must integrate
the internationalization feature provided by UML. https://bugs.eclipse.org/bugs/show_bug.cgi?id=496905 Commit of infra for internationalization. Change-Id: I1b1859bf111e1ef7a7522212fbe639cf2bd13890 Signed-off-by: Nicolas FAUVERGUE <nicolas.fauvergue@all4tec.net>
-rw-r--r--extraplugins/cdo/org.eclipse.papyrus.cdo.core/META-INF/MANIFEST.MF140
-rw-r--r--extraplugins/cdo/org.eclipse.papyrus.cdo.core/pom.xml26
-rw-r--r--extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/core/resource/CDOAwareModelSet.java3
-rw-r--r--features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/.project35
-rw-r--r--features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/build.properties7
-rw-r--r--features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/epl-v10.html304
-rw-r--r--features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/feature.properties132
-rw-r--r--features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/feature.xml29
-rw-r--r--features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/license.html107
-rw-r--r--features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/pom.xml12
-rw-r--r--features/papyrus-main-features/org.eclipse.papyrus.sdk.feature/feature.xml4
-rw-r--r--features/papyrus-main-features/pom.xml1
-rw-r--r--plugins/editor/org.eclipse.papyrus.editor/META-INF/MANIFEST.MF3
-rw-r--r--plugins/editor/org.eclipse.papyrus.editor/src/org/eclipse/papyrus/editor/commands/RenameNestedEditorCommand.java268
-rw-r--r--plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/META-INF/MANIFEST.MF3
-rw-r--r--plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/src/org/eclipse/papyrus/emf/facet/custom/ui/internal/query/LabelQuery.java285
-rw-r--r--plugins/infra/core/org.eclipse.papyrus.infra.core/META-INF/MANIFEST.MF2
-rw-r--r--plugins/infra/core/org.eclipse.papyrus.infra.core/pom.xml2
-rw-r--r--plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AbstractModelWithSharedResource.java5
-rw-r--r--plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AdjunctResourceModelSnippet.java28
-rw-r--r--plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/ModelSet.java10
-rw-r--r--plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/PapyrusProjectScope.java124
-rw-r--r--plugins/infra/emf/org.eclipse.papyrus.infra.emf.readonly/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/emf/org.eclipse.papyrus.infra.emf.readonly/src/org/eclipse/papyrus/infra/emf/readonly/internal/ControlledResourceTracker.java36
-rw-r--r--plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/commands/AddEAnnotationDetailCommand.java69
-rw-r--r--plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/commands/AddToResourceCommand.java71
-rw-r--r--plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/src/org/eclipse/papyrus/infra/ui/internal/emf/readonly/handlers/ReferencedModelReadOnlyHandler.java4
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/src/org/eclipse/papyrus/commands/RenameDiagramHandler.java450
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/AdvancedHLManager.java5
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.modelexplorer/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.modelexplorer/src/org/eclipse/papyrus/infra/gmfdiag/modelexplorer/handlers/RenameDiagramHandler.java56
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/META-INF/MANIFEST.MF4
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/notation/ui/SingleDiagram.xwt1
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/databinding/DiagramLabelObservableValue.java219
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/modelelement/GMFModelElement.java21
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.classpath7
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.project52
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.settings/org.eclipse.jdt.core.prefs296
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.settings/org.eclipse.jdt.ui.prefs68
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.settings/org.eclipse.pde.api.tools.prefs98
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/META-INF/MANIFEST.MF28
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/about.html28
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/build.properties22
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/model/environment.xmi12
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/model/general/internationalization.ctx22
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/model/general/ui/SingleInternationalization.xwt17
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/plugin.properties4
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/plugin.xml24
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/pom.xml12
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/Activator.java77
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/InternationalizationWelcomeModelElement.java115
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/InternationalizationWelcomeModelElementFactory.java51
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/LanguageObservableValue.java174
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/PrivateInternationalizationPreferenceObservableValue.java171
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/UseInternationalizationObservableValue.java165
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/widgets/LanguageDialog.java55
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/widgets/editors/LanguageDialog.java266
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/.classpath7
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/.project52
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/META-INF/MANIFEST.MF21
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/about.html28
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/build.properties11
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/plugin.properties4
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/plugin.xml9
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/pom.xml12
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/Activator.java153
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/command/LocaleInternationalizationPreferenceCommand.java98
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/command/UseInternationalizationPreferenceCommand.java98
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/editor/IInternationalizationEditor.java34
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationAnnotationResourceUtils.java49
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationPreferencesConstants.java41
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationPreferencesUtils.java296
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/LocaleNameResolver.java57
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/.classpath7
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/.project52
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/META-INF/MANIFEST.MF22
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/about.html28
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/build.properties9
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/plugin.properties4
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/plugin.xml22
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/pom.xml12
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/Activator.java78
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/ControlPropertiesCommand.java328
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/CreatePropertiesControlResourceCommand.java257
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/InternationalizationAnnotationControlCommand.java111
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/RemovePropertiesControlResourceCommand.java243
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/participants/InternationalizationAnnotationControlParticipant.java183
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/participants/PropertiesControlParticipant.java159
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/participants/PropertiesUncontrolParticipant.java249
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/utils/ControlPropertiesUtils.java25
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/.classpath8
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/.project52
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/META-INF/MANIFEST.MF18
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/about.html28
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/build.properties12
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/icons/full/obj16/InternationalizationEntry.gifbin0 -> 129 bytes
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/icons/full/obj16/InternationalizationLibrary.gifbin0 -> 129 bytes
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/plugin.properties25
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/plugin.xml22
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/pom.xml12
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationEditPlugin.java96
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationEntryItemProvider.java171
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationItemProviderAdapterFactory.java243
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationLibraryItemProvider.java141
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src/org/eclipse/papyrus/infra/internationalization/edit/provider/InternationalizationNotationItemProviderAdapterFactory.java57
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/.classpath7
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/.project52
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/META-INF/MANIFEST.MF22
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/about.html28
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/build.properties11
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/plugin.properties4
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/plugin.xml23
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/pom.xml12
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/src/org/eclipse/papyrus/infra/internationalization/ui/Activator.java77
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/src/org/eclipse/papyrus/infra/internationalization/ui/dialogs/InternationalizationDialog.java251
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/src/org/eclipse/papyrus/infra/internationalization/ui/handlers/InternationalizationCommandHandler.java167
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/.classpath7
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/.project52
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/META-INF/MANIFEST.MF25
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/about.html28
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/build.properties11
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/plugin.properties4
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/plugin.xml9
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/pom.xml12
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/Activator.java77
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/commands/InternationalizationPasteCommand.java84
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/InternationalizationConstants.java30
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/LabelInternationalization.java229
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/LabelInternationalizationPreferencesUtils.java64
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/LabelInternationalizationUtils.java259
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.classpath8
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.project52
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.settings/org.eclipse.core.resources.prefs5
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/META-INF/MANIFEST.MF29
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/about.html28
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/build.properties13
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/model/Internationalization.ecore13
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/model/Internationalization.genmodel21
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/plugin.properties4
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/plugin.xml32
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/pom.xml50
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationEntry.java86
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationFactory.java61
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationLibrary.java51
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationPackage.java274
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationEntryImpl.java236
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationFactoryImpl.java120
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationLibraryImpl.java146
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationPackageImpl.java252
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/util/InternationalizationAdapterFactory.java147
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/util/InternationalizationSwitch.java145
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/Activator.java77
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/commands/InternationalizationPreferenceCommandFactory.java211
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/commands/ResetNameCommand.java108
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/commands/ResetNameTransactionalCommand.java89
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/modelresource/AbstractInternationalizationPreferenceModelProvider.java78
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/modelresource/IInternationalizationPreferenceModelProvider.java56
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/modelresource/InternationalizationModelResource.java1494
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/modelresource/InternationalizationPreferenceModel.java606
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/modelresource/InternationalizationPreferenceModelProviderManager.java252
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/modelsnippet/PropertiesAdjunctResourceModelSnippet.java119
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/utils/EntryPartLabelSynchronizer.java167
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/utils/InternationalizationPreferenceModelUtils.java61
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/utils/PreferencePartLabelSynchronizer.java171
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/utils/PropertiesFilesUtils.java353
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/utils/QualifiedNameUtils.java162
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/utils/ResourceBundleAndURI.java87
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/site/mediawiki/images/InternationalizationPreferences.pngbin0 -> 15707 bytes
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/site/mediawiki/images/LabelsInternationalizationExample.pngbin0 -> 10402 bytes
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/site/mediawiki/images/PropertiesModelExplorer.pngbin0 -> 6347 bytes
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/site/mediawiki/internationalizationDev-toc.xml22
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/site/mediawiki/internationalizationDev.html266
-rw-r--r--plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/site/mediawiki/internationalizationDev.mediawiki197
-rw-r--r--plugins/infra/internationalization/pom.xml26
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.common/META-INF/MANIFEST.MF4
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.common/src/org/eclipse/papyrus/infra/nattable/common/editor/AbstractEMFNattableEditor.java48
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.common/src/org/eclipse/papyrus/infra/nattable/common/factory/AbstractNattableEditorFactory.java470
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.common/src/org/eclipse/papyrus/infra/nattable/common/handlers/RenameTableHandler.java355
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.model.edit/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.model.edit/src-gen/org/eclipse/papyrus/infra/nattable/model/nattable/provider/TableItemProvider.java793
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.modelexplorer/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.modelexplorer/src/org/eclipse/papyrus/infra/nattable/modelexplorer/handlers/RenameTableHandler.java48
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.properties/META-INF/MANIFEST.MF4
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.properties/model/ui/EObjectInFlatTable.xwt9
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.properties/model/ui/EObjectInTreeTable.xwt11
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.properties/model/ui/SingleTable.xwt9
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.properties/src/org/eclipse/papyrus/infra/nattable/properties/modelelement/NatTableModelElement.java11
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.properties/src/org/eclipse/papyrus/infra/nattable/properties/observable/TableLabelObservableValue.java216
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable.properties/src/org/eclipse/papyrus/infra/nattable/properties/utils/Constants.java3
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable/src/org/eclipse/papyrus/infra/nattable/manager/table/INattableModelManager.java8
-rwxr-xr-xplugins/infra/nattable/org.eclipse.papyrus.infra.nattable/src/org/eclipse/papyrus/infra/nattable/manager/table/NattableModelManager.java12
-rw-r--r--plugins/infra/nattable/org.eclipse.papyrus.infra.nattable/src/org/eclipse/papyrus/infra/nattable/provider/TableLabelProvider.java143
-rw-r--r--plugins/infra/onefile/org.eclipse.papyrus.infra.onefile/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/onefile/org.eclipse.papyrus.infra.onefile/src/org/eclipse/papyrus/infra/onefile/model/impl/PapyrusFile.java42
-rw-r--r--plugins/infra/onefile/org.eclipse.papyrus.infra.onefile/src/org/eclipse/papyrus/infra/onefile/model/impl/SubResourceFile.java15
-rw-r--r--plugins/infra/onefile/org.eclipse.papyrus.infra.onefile/src/org/eclipse/papyrus/infra/onefile/utils/OneFileUtils.java60
-rw-r--r--plugins/infra/pom.xml1
-rw-r--r--plugins/infra/services/org.eclipse.papyrus.infra.services.controlmode/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/services/org.eclipse.papyrus.infra.services.controlmode/pom.xml2
-rw-r--r--plugins/infra/services/org.eclipse.papyrus.infra.services.controlmode/src/org/eclipse/papyrus/infra/services/controlmode/commands/CreateControlResource.java16
-rw-r--r--plugins/infra/services/org.eclipse.papyrus.infra.services.controlmode/src/org/eclipse/papyrus/infra/services/controlmode/commands/RemoveControlResourceCommand.java28
-rw-r--r--plugins/infra/ui/org.eclipse.papyrus.infra.onefile.ui/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/ui/org.eclipse.papyrus.infra.onefile.ui/src/org/eclipse/papyrus/infra/onefile/internal/ui/action/PapyrusCopyFilesAndFoldersOperation.java33
-rwxr-xr-xplugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/META-INF/MANIFEST.MF3
-rw-r--r--plugins/infra/viewpoints/org.eclipse.papyrus.infra.viewpoints.policy/src/org/eclipse/papyrus/infra/viewpoints/policy/ViewPrototypeLabelProvider.java9
215 files changed, 16641 insertions, 1577 deletions
diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/META-INF/MANIFEST.MF b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/META-INF/MANIFEST.MF
index 80641f36eb4..3cebc626ea7 100644
--- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/META-INF/MANIFEST.MF
+++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/META-INF/MANIFEST.MF
@@ -1,70 +1,70 @@
-Manifest-Version: 1.0
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.emf.ecore;visibility:=reexport,
- org.eclipse.emf.ecore.xmi;visibility:=reexport,
- org.eclipse.emf.cdo.explorer;bundle-version="[4.3.0,5.0.0)";visibility:=reexport,
- org.eclipse.papyrus.infra.core;bundle-version="1.2.0";visibility:=reexport,
- org.eclipse.papyrus.infra.core.log;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.services.resourceloading;bundle-version="1.2.0";visibility:=reexport,
- org.eclipse.papyrus.infra.emf;bundle-version="1.2.0",
- org.eclipse.papyrus.infra.emf.readonly;bundle-version="1.2.0";visibility:=reexport,
- org.eclipse.emf.workspace;bundle-version="[1.5.1,2.0.0)",
- org.eclipse.papyrus.infra.gmfdiag.commands;bundle-version="1.2.0",
- org.eclipse.emf.cdo.dawn;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.emf.cdo.dawn.gmf;bundle-version="[2.1.0,3.0.0)",
- org.eclipse.emf.transaction;bundle-version="[1.4.0,2.0.0)";visibility:=reexport,
- org.eclipse.gmf.runtime.notation;bundle-version="[1.5.0,2.0.0)",
- org.eclipse.equinox.security;bundle-version="[1.1.100,2.0.0)",
- org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)",
- com.google.guava;bundle-version="11.0.0",
- org.eclipse.papyrus.infra.services.controlmode;bundle-version="1.2.0",
- org.eclipse.gmf.runtime.emf.commands.core;bundle-version="[1.7.0,2.0.0)",
- org.eclipse.gmf.runtime.emf.type.core;bundle-version="[1.7.0,2.0.0)",
- org.eclipse.papyrus.infra.services.localizer;bundle-version="1.2.0",
- org.eclipse.net4j;bundle-version="[4.3.0,5.0.0)",
- org.eclipse.emf.cdo.admin;bundle-version="[4.1.200,5.0.0)",
- org.eclipse.papyrus.infra.core.sashwindows.di;bundle-version="1.2.0"
-Export-Package: org.eclipse.papyrus.cdo.core,
- org.eclipse.papyrus.cdo.core.admin,
- org.eclipse.papyrus.cdo.core.exporter,
- org.eclipse.papyrus.cdo.core.importer,
- org.eclipse.papyrus.cdo.core.resource,
- org.eclipse.papyrus.cdo.core.util,
- org.eclipse.papyrus.cdo.internal.core; x-friends:="org.eclipse.papyrus.cdo.core.tests,
- org.eclipse.papyrus.cdo.ui,
- org.eclipse.papyrus.cdo.ui.tests,
- org.eclipse.papyrus.cdo.uml.diagram.ui,
- org.eclipse.papyrus.cdo.uml.ui,
- org.eclipse.papyrus.cdo.ui.customization.properties,
- org.eclipse.papyrus.cdo.uml.ui.tests,
- org.eclipse.papyrus.cdo.uml.search.ui,
- org.eclipse.papyrus.cdo.uml.search.ui.tests,
- org.eclipse.papyrus.cdo.ui.hyperlink",
- org.eclipse.papyrus.cdo.internal.core.controlmode;x-friends:="org.eclipse.papyrus.cdo.ui,
- org.eclipse.papyrus.cdo.core.tests",
- org.eclipse.papyrus.cdo.internal.core.exporter;x-friends:="org.eclipse.papyrus.cdo.core.tests,
- org.eclipse.papyrus.cdo.ui",
- org.eclipse.papyrus.cdo.internal.core.expressions;x-friends:="org.eclipse.papyrus.cdo.core.tests,
- org.eclipse.papyrus.cdo.ui",
- org.eclipse.papyrus.cdo.internal.core.importer;x-friends:="org.eclipse.papyrus.cdo.core.tests,
- org.eclipse.papyrus.cdo.ui",
- org.eclipse.papyrus.cdo.internal.core.l10n;x-internal:=true,
- org.eclipse.papyrus.cdo.internal.core.repositories;x-friends:="org.eclipse.papyrus.cdo.core.tests,
- org.eclipse.papyrus.cdo.ui",
- org.eclipse.papyrus.cdo.internal.core.repositories.impl;x-friends:="org.eclipse.papyrus.cdo.core.tests,
- org.eclipse.papyrus.cdo.ui",
- org.eclipse.papyrus.cdo.internal.core.repositories.util;x-friends:="org.eclipse.papyrus.cdo.core.tests,
- org.eclipse.papyrus.cdo.ui",
- org.eclipse.papyrus.cdo.internal.core.resource;x-internal:=true,
- org.eclipse.papyrus.cdo.internal.core.services.localizer;x-internal:=true
-Bundle-Vendor: %providerName
-Bundle-ActivationPolicy: lazy
-Bundle-ClassPath: .
-Bundle-Version: 1.2.0.qualifier
-Bundle-Localization: plugin
-Bundle-Name: %pluginName
-Bundle-Activator: org.eclipse.papyrus.cdo.internal.core.Activator
-Bundle-ManifestVersion: 2
-Bundle-Description: %pluginDescription
-Bundle-SymbolicName: org.eclipse.papyrus.cdo.core;singleton:=true
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Manifest-Version: 1.0
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.eclipse.emf.cdo.explorer;bundle-version="[4.3.0,5.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.infra.core;bundle-version="1.2.0";visibility:=reexport,
+ org.eclipse.papyrus.infra.core.log;bundle-version="1.2.0",
+ org.eclipse.papyrus.infra.services.resourceloading;bundle-version="1.2.0";visibility:=reexport,
+ org.eclipse.papyrus.infra.emf;bundle-version="1.2.0",
+ org.eclipse.papyrus.infra.emf.readonly;bundle-version="1.2.0";visibility:=reexport,
+ org.eclipse.emf.workspace;bundle-version="[1.5.1,2.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.commands;bundle-version="1.2.0",
+ org.eclipse.emf.cdo.dawn;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.emf.cdo.dawn.gmf;bundle-version="[2.1.0,3.0.0)",
+ org.eclipse.emf.transaction;bundle-version="[1.4.0,2.0.0)";visibility:=reexport,
+ org.eclipse.gmf.runtime.notation;bundle-version="[1.5.0,2.0.0)",
+ org.eclipse.equinox.security;bundle-version="[1.1.100,2.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)",
+ com.google.guava;bundle-version="11.0.0",
+ org.eclipse.papyrus.infra.services.controlmode;bundle-version="1.2.0",
+ org.eclipse.gmf.runtime.emf.commands.core;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.gmf.runtime.emf.type.core;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.papyrus.infra.services.localizer;bundle-version="1.2.0",
+ org.eclipse.net4j;bundle-version="[4.3.0,5.0.0)",
+ org.eclipse.emf.cdo.admin;bundle-version="[4.1.200,5.0.0)",
+ org.eclipse.papyrus.infra.core.sashwindows.di;bundle-version="1.2.0"
+Export-Package: org.eclipse.papyrus.cdo.core,
+ org.eclipse.papyrus.cdo.core.admin,
+ org.eclipse.papyrus.cdo.core.exporter,
+ org.eclipse.papyrus.cdo.core.importer,
+ org.eclipse.papyrus.cdo.core.resource,
+ org.eclipse.papyrus.cdo.core.util,
+ org.eclipse.papyrus.cdo.internal.core; x-friends:="org.eclipse.papyrus.cdo.core.tests,
+ org.eclipse.papyrus.cdo.ui,
+ org.eclipse.papyrus.cdo.ui.tests,
+ org.eclipse.papyrus.cdo.uml.diagram.ui,
+ org.eclipse.papyrus.cdo.uml.ui,
+ org.eclipse.papyrus.cdo.ui.customization.properties,
+ org.eclipse.papyrus.cdo.uml.ui.tests,
+ org.eclipse.papyrus.cdo.uml.search.ui,
+ org.eclipse.papyrus.cdo.uml.search.ui.tests,
+ org.eclipse.papyrus.cdo.ui.hyperlink",
+ org.eclipse.papyrus.cdo.internal.core.controlmode;x-friends:="org.eclipse.papyrus.cdo.ui,
+ org.eclipse.papyrus.cdo.core.tests",
+ org.eclipse.papyrus.cdo.internal.core.exporter;x-friends:="org.eclipse.papyrus.cdo.core.tests,
+ org.eclipse.papyrus.cdo.ui",
+ org.eclipse.papyrus.cdo.internal.core.expressions;x-friends:="org.eclipse.papyrus.cdo.core.tests,
+ org.eclipse.papyrus.cdo.ui",
+ org.eclipse.papyrus.cdo.internal.core.importer;x-friends:="org.eclipse.papyrus.cdo.core.tests,
+ org.eclipse.papyrus.cdo.ui",
+ org.eclipse.papyrus.cdo.internal.core.l10n;x-internal:=true,
+ org.eclipse.papyrus.cdo.internal.core.repositories;x-friends:="org.eclipse.papyrus.cdo.core.tests,
+ org.eclipse.papyrus.cdo.ui",
+ org.eclipse.papyrus.cdo.internal.core.repositories.impl;x-friends:="org.eclipse.papyrus.cdo.core.tests,
+ org.eclipse.papyrus.cdo.ui",
+ org.eclipse.papyrus.cdo.internal.core.repositories.util;x-friends:="org.eclipse.papyrus.cdo.core.tests,
+ org.eclipse.papyrus.cdo.ui",
+ org.eclipse.papyrus.cdo.internal.core.resource;x-internal:=true,
+ org.eclipse.papyrus.cdo.internal.core.services.localizer;x-internal:=true
+Bundle-Vendor: %providerName
+Bundle-ActivationPolicy: lazy
+Bundle-ClassPath: .
+Bundle-Version: 2.0.0.qualifier
+Bundle-Localization: plugin
+Bundle-Name: %pluginName
+Bundle-Activator: org.eclipse.papyrus.cdo.internal.core.Activator
+Bundle-ManifestVersion: 2
+Bundle-Description: %pluginDescription
+Bundle-SymbolicName: org.eclipse.papyrus.cdo.core;singleton:=true
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/pom.xml b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/pom.xml
index 0c46d1947dc..0aeea61111e 100644
--- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/pom.xml
+++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/pom.xml
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project>
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <artifactId>org.eclipse.papyrus.extra.releng</artifactId>
- <groupId>org.eclipse.papyrus</groupId>
- <version>3.0.0-SNAPSHOT</version>
- <relativePath>../../../releng/extra</relativePath>
- </parent>
- <artifactId>org.eclipse.papyrus.cdo.core</artifactId>
- <groupId>org.eclipse.papyrus</groupId>
- <version>1.2.0-SNAPSHOT</version>
- <packaging>eclipse-plugin</packaging>
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.papyrus.extra.releng</artifactId>
+ <groupId>org.eclipse.papyrus</groupId>
+ <version>3.0.0-SNAPSHOT</version>
+ <relativePath>../../../releng/extra</relativePath>
+ </parent>
+ <artifactId>org.eclipse.papyrus.cdo.core</artifactId>
+ <groupId>org.eclipse.papyrus</groupId>
+ <version>2.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
</project> \ No newline at end of file
diff --git a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/core/resource/CDOAwareModelSet.java b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/core/resource/CDOAwareModelSet.java
index f4ffeb54788..cf5e38ef10f 100644
--- a/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/core/resource/CDOAwareModelSet.java
+++ b/extraplugins/cdo/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/core/resource/CDOAwareModelSet.java
@@ -13,6 +13,7 @@
* Christian W. Damus (CEA) - bug 437052
* Christian W. Damus - bug 436998
* Eike Stepper (CEA) - bug 466520
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 496905
*
*****************************************************************************/
package org.eclipse.papyrus.cdo.core.resource;
@@ -386,7 +387,7 @@ public class CDOAwareModelSet extends OnDemandLoadingModelSet {
}
@Override
- protected boolean deleteResource(URI uri) {
+ public boolean deleteResource(URI uri) {
Resource res = getResource(uri, false);
boolean result = res instanceof CDOResource;
diff --git a/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/.project b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/.project
new file mode 100644
index 00000000000..1357edd30cd
--- /dev/null
+++ b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/.project
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.internationalization.feature</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.FeatureBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.oomph.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>check.maven.pom</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>ignore.lower.bound.dependency.ranges</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.papyrus.releng.main.release/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.FeatureNature</nature>
+ <nature>org.eclipse.oomph.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/build.properties b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/build.properties
new file mode 100644
index 00000000000..b9ce3341aac
--- /dev/null
+++ b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/build.properties
@@ -0,0 +1,7 @@
+bin.includes = feature.xml,\
+ build.properties,\
+ epl-v10.html,\
+ license.html,\
+ feature.properties
+src.includes = epl-v10.html,\
+ license.html
diff --git a/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/epl-v10.html b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/epl-v10.html
new file mode 100644
index 00000000000..cb1073a4bad
--- /dev/null
+++ b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+ {
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-font-pitch:variable;
+ mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p
+ {margin-right:0in;
+ mso-margin-top-alt:auto;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p.BalloonText, li.BalloonText, div.BalloonText
+ {mso-style-name:"Balloon Text";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:8.0pt;
+
+ }
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor (&quot;Commercial
+Contributor&quot;) hereby agrees to defend and indemnify every other
+Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
+costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html> \ No newline at end of file
diff --git a/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/feature.properties b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/feature.properties
new file mode 100644
index 00000000000..11ac9ede269
--- /dev/null
+++ b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/feature.properties
@@ -0,0 +1,132 @@
+# NLS_MESSAGEFORMAT_VAR
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+April 9, 2014\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+\t- Content may be structured and packaged into modules to facilitate delivering,\n\
+\t extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+\t plug-in fragments ("Fragments"), and features ("Features").\n\
+\t- Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+\t in a directory named "plugins".\n\
+\t- A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+\t Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+\t Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+\t numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+\t- Features may also include other Features ("Included Features"). Within a Feature, files\n\
+\t named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+\t- The top-level (root) directory\n\
+\t- Plug-in and Fragment directories\n\
+\t- Inside Plug-ins and Fragments packaged as JARs\n\
+\t- Sub-directories of the directory named "src" of certain Plug-ins\n\
+\t- Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+\t- Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+\t- Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+\t- Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+\t- Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+\t- Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+\t1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+\t the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+\t extending or updating the functionality of an Eclipse-based product.\n\
+\t2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+\t Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+\t3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+\t govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+\t Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+\t with the Specification. Such Installable Software Agreement must inform the user of the\n\
+\t terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+\t the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+\t indication of agreement by the user, the provisioning Technology will complete installation\n\
+\t of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/feature.xml b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/feature.xml
new file mode 100644
index 00000000000..632b1d82aac
--- /dev/null
+++ b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/feature.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><feature id="org.eclipse.papyrus.infra.internationalization.feature" label="Papyrus Internationalization" provider-name="Eclipse Modeling Project" version="1.0.0.qualifier">
+
+ <copyright url="epl-v10.html">
+ Copyright (c) 2016 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
+ </copyright>
+
+ <license url="%licenseURL">
+ %license
+ </license>
+
+ <plugin download-size="0" id="org.eclipse.papyrus.infra.internationalization" install-size="0" unpack="false" version="0.0.0"/>
+
+ <plugin download-size="0" id="org.eclipse.papyrus.infra.internationalization.edit" install-size="0" unpack="false" version="0.0.0"/>
+
+ <plugin download-size="0" id="org.eclipse.papyrus.infra.internationalization.utils" install-size="0" unpack="false" version="0.0.0"/>
+
+ <plugin download-size="0" id="org.eclipse.papyrus.infra.internationalization.ui" install-size="0" unpack="false" version="0.0.0"/>
+
+ <plugin download-size="0" id="org.eclipse.papyrus.infra.internationalization.controlmode" install-size="0" unpack="false" version="0.0.0"/>
+
+ <plugin download-size="0" id="org.eclipse.papyrus.infra.internationalization.common" install-size="0" unpack="false" version="0.0.0"/>
+
+ <plugin download-size="0" id="org.eclipse.papyrus.infra.editor.welcome.internationalization" install-size="0" unpack="false" version="0.0.0"/>
+</feature> \ No newline at end of file
diff --git a/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/license.html b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/license.html
new file mode 100644
index 00000000000..c3d34c3c21e
--- /dev/null
+++ b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/license.html
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!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>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>April 9, 2014</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY &quot;CONTENT&quot;). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation 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 provided with this Content and is also 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>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+ repository (&quot;Repository&quot;) in software modules (&quot;Modules&quot;) and made available as downloadable archives (&quot;Downloads&quot;).</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins (&quot;Plug-ins&quot;), plug-in fragments (&quot;Fragments&quot;), and features (&quot;Features&quot;).</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&trade; ARchive) in a directory named &quot;plugins&quot;.</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named &quot;features&quot;. Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features (&quot;Included Features&quot;). Within a Feature, files named &quot;feature.xml&quot; may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named &quot;about.html&quot; (&quot;Abouts&quot;). The terms and conditions governing Features and
+Included Features should be contained in files named &quot;license.html&quot; (&quot;Feature Licenses&quot;). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named &quot;src&quot; of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license (&quot;Feature Update License&quot;) during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the &quot;license&quot; property of files named &quot;feature.properties&quot; found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager (&quot;Provisioning Technology&quot;) for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively &quot;Installable Software&quot;). This capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <a
+ href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+ (&quot;Specification&quot;).</p>
+
+<p>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+ in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+ Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+ <li>A series of actions may occur (&quot;Provisioning Process&quot;) in which a user may execute the Provisioning Technology
+ on a machine (&quot;Target Machine&quot;) with the intent of installing, extending or updating the functionality of an Eclipse-based
+ product.</li>
+ <li>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</li>
+ <li>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+ Software (&quot;Installable Software Agreement&quot;) and such Installable Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+ the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+ indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+</body>
+</html>
diff --git a/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/pom.xml b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/pom.xml
new file mode 100644
index 00000000000..41a8d968098
--- /dev/null
+++ b/features/papyrus-main-features/org.eclipse.papyrus.infra.internationalization.feature/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrus</groupId>
+ <artifactId>org.eclipse.papyrus.features</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.papyrus.infra.internationalization.feature</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-feature</packaging>
+</project> \ No newline at end of file
diff --git a/features/papyrus-main-features/org.eclipse.papyrus.sdk.feature/feature.xml b/features/papyrus-main-features/org.eclipse.papyrus.sdk.feature/feature.xml
index a5d447dc29d..59fd99edd00 100644
--- a/features/papyrus-main-features/org.eclipse.papyrus.sdk.feature/feature.xml
+++ b/features/papyrus-main-features/org.eclipse.papyrus.sdk.feature/feature.xml
@@ -117,6 +117,10 @@ http://www.eclipse.org/legal/epl-v10.html
<includes
id="org.eclipse.papyrus.uml.xtext.integration.feature"
version="0.0.0"/>
+
+ <includes
+ id="org.eclipse.papyrus.infra.internationalization.feature"
+ version="0.0.0"/>
<includes
id="org.eclipse.papyrus.infra.nattable.feature"
diff --git a/features/papyrus-main-features/pom.xml b/features/papyrus-main-features/pom.xml
index 55d4495ec87..bd910ac2859 100644
--- a/features/papyrus-main-features/pom.xml
+++ b/features/papyrus-main-features/pom.xml
@@ -23,6 +23,7 @@
<module>org.eclipse.papyrus.infra.feature</module>
<module>org.eclipse.papyrus.infra.gmfdiag.css.feature</module>
<module>org.eclipse.papyrus.infra.gmfdiag.feature</module>
+ <module>org.eclipse.papyrus.infra.internationalization.feature</module>
<module>org.eclipse.papyrus.infra.nattable.feature</module>
<module>org.eclipse.papyrus.infra.services.feature</module>
<module>org.eclipse.papyrus.infra.ui.feature</module>
diff --git a/plugins/editor/org.eclipse.papyrus.editor/META-INF/MANIFEST.MF b/plugins/editor/org.eclipse.papyrus.editor/META-INF/MANIFEST.MF
index 72779849904..74335c6544c 100644
--- a/plugins/editor/org.eclipse.papyrus.editor/META-INF/MANIFEST.MF
+++ b/plugins/editor/org.eclipse.papyrus.editor/META-INF/MANIFEST.MF
@@ -2,7 +2,8 @@ Manifest-Version: 1.0
Export-Package: org.eclipse.papyrus.editor
Require-Bundle: org.eclipse.gmf.runtime.diagram.ui;bundle-version="[1.8.0,2.0.0)",
org.eclipse.papyrus.infra.ui;bundle-version="[2.0.0,3.0.0)";visibility:=reexport,
- org.eclipse.papyrus.infra.emf;bundle-version="[2.0.0,3.0.0)"
+ org.eclipse.papyrus.infra.emf;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.papyrus.infra.internationalization.utils;bundle-version="[1.0.0,2.0.0)"
Bundle-Vendor: %providerName
Bundle-ActivationPolicy: lazy
Bundle-Version: 2.0.0.qualifier
diff --git a/plugins/editor/org.eclipse.papyrus.editor/src/org/eclipse/papyrus/editor/commands/RenameNestedEditorCommand.java b/plugins/editor/org.eclipse.papyrus.editor/src/org/eclipse/papyrus/editor/commands/RenameNestedEditorCommand.java
index 2f963b10320..ed198c75175 100644
--- a/plugins/editor/org.eclipse.papyrus.editor/src/org/eclipse/papyrus/editor/commands/RenameNestedEditorCommand.java
+++ b/plugins/editor/org.eclipse.papyrus.editor/src/org/eclipse/papyrus/editor/commands/RenameNestedEditorCommand.java
@@ -1,124 +1,144 @@
-/**
- *
- */
-package org.eclipse.papyrus.editor.commands;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.transaction.RecordingCommand;
-import org.eclipse.emf.transaction.TransactionalEditingDomain;
-import org.eclipse.gmf.runtime.notation.Diagram;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.jface.window.Window;
-import org.eclipse.papyrus.editor.Activator;
-import org.eclipse.papyrus.infra.core.sasheditor.internal.SashWindowsContainer;
-import org.eclipse.papyrus.infra.core.services.ServiceException;
-import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
-import org.eclipse.papyrus.infra.core.utils.ServiceUtils;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IEditorPart;
-
-/**
- * A command to be used with the Eclipse Commands Framework.
- * This command is to be used with {@link SashWindowsContainer} implemented with the Di model.
- * This command allows to rename a nested editor.
- *
- * This command use a Transaction.
- * TODO Move to gmf adapter.
- *
- * @author cedric dumoulin
- *
- */
-public class RenameNestedEditorCommand extends AbstractHandler {
-
- /**
- * Check if the Command is enabled.
- */
- @Override
- public void setEnabled(Object evaluationContext) {
- // System.out.println("call to CloseDiagramCommand.setEnable(" + evaluationContext + ")");
- }
-
- /**
- * Execute the command. This method is called when the action is triggered.
- *
- */
- @Override
- public Object execute(ExecutionEvent event) throws ExecutionException {
-
- // try {
- // IEditorPart part = HandlerUtil.getActiveEditor(event);
- // IPageMngr pageMngr = (IPageMngr)part.getAdapter(IPageMngr.class);
- // ISashWindowsContainer container = (ISashWindowsContainer)part.getAdapter(ISashWindowsContainer.class);
- // IPage sashPage = container.getActiveSashWindowsPage();
- //
- // if(sashPage instanceof IEditorPage )
- // {
- // IEditorPage editorPage = (IEditorPage)sashPage;
- // execute(editorPage.getRawModel(), editorPage.getIEditorPart());
- // }
- // // Bug from sash Di to be corrected
- // if(pageIdentifier instanceof PageRef)
- // {
- // pageIdentifier = ((PageRef)pageIdentifier).getPageIdentifier();
- // }
- // execute(sashPage.getRawModel(), sashPage.);
- //
- // } catch (NullPointerException e) {
- // // PageMngr can't be found
- // return null;
- // }
-
-
-
- return null;
- }
-
- /**
- * Close selected page.
- *
- * @param pageMngr
- */
- public void execute(final Diagram diagram, final IEditorPart editorPart) {
- TransactionalEditingDomain editingDomain = null;
-
- if (editorPart instanceof IAdaptable) {
- ServicesRegistry registry = (ServicesRegistry) ((IAdaptable) editorPart).getAdapter(ServicesRegistry.class);
-
- if (registry == null) {
- editingDomain = (TransactionalEditingDomain) ((IAdaptable) editorPart).getAdapter(TransactionalEditingDomain.class);
- } else {
- try {
- editingDomain = ServiceUtils.getInstance().getTransactionalEditingDomain(registry);
- } catch (ServiceException ex) {
- Activator.log.error(ex);
- }
- }
- }
-
-
- if (editingDomain != null) {
- InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Rename an existing diagram", "New name:", diagram.getName(), null);
- if (dialog.open() == Window.OK) {
- final String name = dialog.getValue();
- if (name != null && name.length() > 0) {
-
- Command command = new RecordingCommand(editingDomain) {
-
-
- @Override
- protected void doExecute() {
- diagram.setName(name);
- }
- };
-
- editingDomain.getCommandStack().execute(command);
- }
- }
- }
- }
-
-}
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 496905
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.editor.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.editor.Activator;
+import org.eclipse.papyrus.infra.core.sasheditor.internal.SashWindowsContainer;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
+import org.eclipse.papyrus.infra.core.utils.ServiceUtils;
+import org.eclipse.papyrus.infra.internationalization.utils.utils.LabelInternationalization;
+import org.eclipse.papyrus.infra.internationalization.utils.utils.LabelInternationalizationUtils;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorPart;
+
+/**
+ * A command to be used with the Eclipse Commands Framework.
+ * This command is to be used with {@link SashWindowsContainer} implemented with the Di model.
+ * This command allows to rename a nested editor.
+ *
+ * This command use a Transaction.
+ * TODO Move to gmf adapter.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class RenameNestedEditorCommand extends AbstractHandler {
+
+ /**
+ * Check if the Command is enabled.
+ */
+ @Override
+ public void setEnabled(Object evaluationContext) {
+ // System.out.println("call to CloseDiagramCommand.setEnable(" + evaluationContext + ")");
+ }
+
+ /**
+ * Execute the command. This method is called when the action is triggered.
+ *
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+
+ // try {
+ // IEditorPart part = HandlerUtil.getActiveEditor(event);
+ // IPageMngr pageMngr = (IPageMngr)part.getAdapter(IPageMngr.class);
+ // ISashWindowsContainer container = (ISashWindowsContainer)part.getAdapter(ISashWindowsContainer.class);
+ // IPage sashPage = container.getActiveSashWindowsPage();
+ //
+ // if(sashPage instanceof IEditorPage )
+ // {
+ // IEditorPage editorPage = (IEditorPage)sashPage;
+ // execute(editorPage.getRawModel(), editorPage.getIEditorPart());
+ // }
+ // // Bug from sash Di to be corrected
+ // if(pageIdentifier instanceof PageRef)
+ // {
+ // pageIdentifier = ((PageRef)pageIdentifier).getPageIdentifier();
+ // }
+ // execute(sashPage.getRawModel(), sashPage.);
+ //
+ // } catch (NullPointerException e) {
+ // // PageMngr can't be found
+ // return null;
+ // }
+
+
+
+ return null;
+ }
+
+ /**
+ * Close selected page.
+ *
+ * @param pageMngr
+ */
+ public void execute(final Diagram diagram, final IEditorPart editorPart) {
+ TransactionalEditingDomain editingDomain = null;
+
+ if (editorPart instanceof IAdaptable) {
+ ServicesRegistry registry = (ServicesRegistry) ((IAdaptable) editorPart).getAdapter(ServicesRegistry.class);
+
+ if (registry == null) {
+ editingDomain = (TransactionalEditingDomain) ((IAdaptable) editorPart).getAdapter(TransactionalEditingDomain.class);
+ } else {
+ try {
+ editingDomain = ServiceUtils.getInstance().getTransactionalEditingDomain(registry);
+ } catch (ServiceException ex) {
+ Activator.log.error(ex);
+ }
+ }
+ }
+
+ if (editingDomain != null) {
+ // If the diagram label is available, modify this one.
+ final String diagramLabel = LabelInternationalization.getInstance().getDiagramLabelWithoutName(diagram);
+ if(null != diagramLabel){
+ InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Rename diagram label", "New label:", diagramLabel, null); //$NON-NLS-1$ //$NON-NLS-2$
+ if (Window.OK == dialog.open()) {
+ final String label = dialog.getValue();
+ editingDomain.getCommandStack().execute(LabelInternationalization.getInstance().getSetDiagramLabelCommand(editingDomain, diagram, label, null));
+ }
+ }else{
+ InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Rename an existing diagram", "New name:", diagram.getName(), null); //$NON-NLS-1$ //$NON-NLS-2$
+ if (dialog.open() == Window.OK) {
+ final String name = dialog.getValue();
+ if (name != null && name.length() > 0) {
+
+ Command command = new RecordingCommand(editingDomain) {
+
+
+ @Override
+ protected void doExecute() {
+ diagram.setName(name);
+ }
+ };
+
+ editingDomain.getCommandStack().execute(command);
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/META-INF/MANIFEST.MF b/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/META-INF/MANIFEST.MF
index 95629903d82..ebb63f5503d 100644
--- a/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/META-INF/MANIFEST.MF
+++ b/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/META-INF/MANIFEST.MF
@@ -14,7 +14,8 @@ Require-Bundle: org.eclipse.papyrus.emf.facet.custom.core;bundle-version="[2.0.0
org.eclipse.emf.edit.ui;bundle-version="[2.12.0,3.0.0)",
org.eclipse.papyrus.emf.facet.util.swt;bundle-version="[1.2.0,2.0.0)",
org.eclipse.papyrus.emf.facet.util.jface.ui;bundle-version="[1.2.0,2.0.0)",
- org.eclipse.papyrus.emf.facet.common.ui;bundle-version="[1.2.0,2.0.0)"
+ org.eclipse.papyrus.emf.facet.common.ui;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.papyrus.infra.internationalization.edit;bundle-version="[1.0.0,2.0.0)"
Bundle-Vendor: %Bundle-Vendor
Bundle-ActivationPolicy: lazy
Bundle-Version: 2.0.0.qualifier
diff --git a/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/src/org/eclipse/papyrus/emf/facet/custom/ui/internal/query/LabelQuery.java b/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/src/org/eclipse/papyrus/emf/facet/custom/ui/internal/query/LabelQuery.java
index 9961cae90ec..156d2ceab6a 100644
--- a/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/src/org/eclipse/papyrus/emf/facet/custom/ui/internal/query/LabelQuery.java
+++ b/plugins/facet/org.eclipse.papyrus.emf.facet.custom.ui/src/org/eclipse/papyrus/emf/facet/custom/ui/internal/query/LabelQuery.java
@@ -1,141 +1,144 @@
-/**
- * Copyright (c) 2011, 2014 Mia-Software, CEA, and others.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Gregoire Dupe (Mia-Software) - Bug 361794 - [Restructuring] EMF Facet customization meta-model
- * Gregoire Dupe (Mia-Software) - Bug 369987 - [Restructuring][Table] Switch to the new customization and facet framework
- * Gregoire Dupe (Mia-Software) - Bug 373078 - API Cleaning
- * Gregoire Dupe (Mia-Software) - Bug 375087 - [Table] ITableWidget.addColumn(List<ETypedElement>, List<FacetSet>)
- * Nicolas Bros (Mia-Software) - Bug 379683 - customizable Tree content provider
- * Christian W. Damus (CEA) - bug 410346
- */
-package org.eclipse.papyrus.emf.facet.custom.ui.internal.query;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.ETypedElement;
-import org.eclipse.emf.ecore.util.FeatureMap;
-import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.ReflectiveItemProvider;
-import org.eclipse.papyrus.emf.facet.efacet.core.IFacetManager;
-import org.eclipse.papyrus.emf.facet.efacet.core.exception.DerivedTypedElementException;
-import org.eclipse.papyrus.emf.facet.query.java.core.IJavaQuery2;
-import org.eclipse.papyrus.emf.facet.query.java.core.IParameterValueList2;
-import org.eclipse.papyrus.emf.facet.util.emf.core.ModelUtils;
-
-public class LabelQuery implements IJavaQuery2<EObject, String> {
-
- private static final String NAME = "name"; //$NON-NLS-1$
-
- public String evaluate(final EObject source,
- final IParameterValueList2 parameterValues,
- final IFacetManager facetManager)
- throws DerivedTypedElementException {
- ETypedElement sfParam = null;
- if (parameterValues != null) {
- sfParam = (ETypedElement) parameterValues
- .getParameterValueByName("eStructuralFeature").getValue(); //$NON-NLS-1$
- }
- String result = null;
- if (sfParam == null) {
- final ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(
- ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
-
- try {
- final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory.adapt(source, IItemLabelProvider.class);
- // We don't want to use a ReflectiveItemProvider because it provides
- // a string prefixed with the eObject's meta-class name.
- if (itemLabelProvider instanceof ReflectiveItemProvider) {
- result = LabelQuery.getDefaultName(source);
- } else if (itemLabelProvider == null) {
- result = ModelUtils.getDefaultName(source);
- } else {
- result = itemLabelProvider.getText(source);
- }
- } finally {
- // Dispose the adapter factory because it added an adapter that would leak, as nobody else will ever use it
- adapterFactory.dispose();
- }
- } else {
- try {
- if (sfParam instanceof EAttribute && sfParam.getUpperBound() == 1) {
- final Object object = facetManager.getOrInvoke(source, sfParam, Object.class);
- final String objectLabel = getObjectLabel(object, facetManager);
- result = sfParam.getName() + " = " + objectLabel; //$NON-NLS-1$
- } else {
- result = sfParam.getName();
- }
- } catch (final Exception e) {
- throw new DerivedTypedElementException(e);
- }
- }
- return result;
- }
-
- private String getObjectLabel(final Object object,
- final IFacetManager facetManager)
- throws DerivedTypedElementException {
- String result;
- if (object instanceof EObject) {
- final EObject eObject = (EObject) object;
- result = evaluate(eObject, null, facetManager);
- } else {
- result = String.valueOf(object);
- }
- return result;
- }
-
- /**
- * @return a default name based on a string feature of the given {@link EObject}
- */
- // from org.eclipse.papyrus.emf.facet.infra.common.core.internal.utils.ModelUtils
- public static String getDefaultName(final EObject eObject) {
- String result = ""; //$NON-NLS-1$
- // find a feature that can be used as a name
- final EStructuralFeature feature = LabelQuery.getLabelFeature(eObject
- .eClass());
- if (feature != null) {
- result = (String) eObject.eGet(feature);
- }
- return result;
- }
-
- /**
- * This method searches for a structural feature that can be used as a name
- *
- * @param eClass
- * in which class to search a structural feature that can be used as
- * a name
- * @return an EStructuralFeature
- */
- // Copied from org.eclipse.emf.edit.provider.ReflectiveItemProvider to org.eclipse.papyrus.emf.facet.infra.common.core.internal.utils.ModelUtils
- // Copied from org.eclipse.papyrus.emf.facet.infra.common.core.internal.utils.ModelUtils
- private static EStructuralFeature getLabelFeature(final EClass eClass) {
- EAttribute result = null;
- for (final EAttribute eAttribute : eClass.getEAllAttributes()) {
- if (!eAttribute.isMany()
- && eAttribute.getEType().getInstanceClass() != FeatureMap.Entry.class) {
- if (LabelQuery.NAME.equalsIgnoreCase(eAttribute
- .getName())) {
- result = eAttribute;
- break;
- } else if (result == null) {
- result = eAttribute;
- } else if (eAttribute.getEAttributeType().getInstanceClass() == String.class
- && result.getEAttributeType().getInstanceClass() != String.class) {
- result = eAttribute;
- }
- }
- }
- return result;
- }
-
-}
+/**
+ * Copyright (c) 2011, 2014 Mia-Software, CEA, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Gregoire Dupe (Mia-Software) - Bug 361794 - [Restructuring] EMF Facet customization meta-model
+ * Gregoire Dupe (Mia-Software) - Bug 369987 - [Restructuring][Table] Switch to the new customization and facet framework
+ * Gregoire Dupe (Mia-Software) - Bug 373078 - API Cleaning
+ * Gregoire Dupe (Mia-Software) - Bug 375087 - [Table] ITableWidget.addColumn(List<ETypedElement>, List<FacetSet>)
+ * Nicolas Bros (Mia-Software) - Bug 379683 - customizable Tree content provider
+ * Christian W. Damus (CEA) - bug 410346
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 496905
+ */
+package org.eclipse.papyrus.emf.facet.custom.ui.internal.query;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.ETypedElement;
+import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.ReflectiveItemProvider;
+import org.eclipse.papyrus.emf.facet.efacet.core.IFacetManager;
+import org.eclipse.papyrus.emf.facet.efacet.core.exception.DerivedTypedElementException;
+import org.eclipse.papyrus.emf.facet.query.java.core.IJavaQuery2;
+import org.eclipse.papyrus.emf.facet.query.java.core.IParameterValueList2;
+import org.eclipse.papyrus.emf.facet.util.emf.core.ModelUtils;
+import org.eclipse.papyrus.infra.internationalization.edit.provider.InternationalizationNotationItemProviderAdapterFactory;
+
+public class LabelQuery implements IJavaQuery2<EObject, String> {
+
+ private static final String NAME = "name"; //$NON-NLS-1$
+
+ public String evaluate(final EObject source,
+ final IParameterValueList2 parameterValues,
+ final IFacetManager facetManager)
+ throws DerivedTypedElementException {
+ ETypedElement sfParam = null;
+ if (parameterValues != null) {
+ sfParam = (ETypedElement) parameterValues
+ .getParameterValueByName("eStructuralFeature").getValue(); //$NON-NLS-1$
+ }
+ String result = null;
+ if (sfParam == null) {
+ final ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(
+ ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+ adapterFactory.insertAdapterFactory(new InternationalizationNotationItemProviderAdapterFactory());
+
+ try {
+ final IItemLabelProvider itemLabelProvider = (IItemLabelProvider) adapterFactory.adapt(source, IItemLabelProvider.class);
+ // We don't want to use a ReflectiveItemProvider because it provides
+ // a string prefixed with the eObject's meta-class name.
+ if (itemLabelProvider instanceof ReflectiveItemProvider) {
+ result = LabelQuery.getDefaultName(source);
+ } else if (itemLabelProvider == null) {
+ result = ModelUtils.getDefaultName(source);
+ } else {
+ result = itemLabelProvider.getText(source);
+ }
+ } finally {
+ // Dispose the adapter factory because it added an adapter that would leak, as nobody else will ever use it
+ adapterFactory.dispose();
+ }
+ } else {
+ try {
+ if (sfParam instanceof EAttribute && sfParam.getUpperBound() == 1) {
+ final Object object = facetManager.getOrInvoke(source, sfParam, Object.class);
+ final String objectLabel = getObjectLabel(object, facetManager);
+ result = sfParam.getName() + " = " + objectLabel; //$NON-NLS-1$
+ } else {
+ result = sfParam.getName();
+ }
+ } catch (final Exception e) {
+ throw new DerivedTypedElementException(e);
+ }
+ }
+ return result;
+ }
+
+ private String getObjectLabel(final Object object,
+ final IFacetManager facetManager)
+ throws DerivedTypedElementException {
+ String result;
+ if (object instanceof EObject) {
+ final EObject eObject = (EObject) object;
+ result = evaluate(eObject, null, facetManager);
+ } else {
+ result = String.valueOf(object);
+ }
+ return result;
+ }
+
+ /**
+ * @return a default name based on a string feature of the given {@link EObject}
+ */
+ // from org.eclipse.papyrus.emf.facet.infra.common.core.internal.utils.ModelUtils
+ public static String getDefaultName(final EObject eObject) {
+ String result = ""; //$NON-NLS-1$
+ // find a feature that can be used as a name
+ final EStructuralFeature feature = LabelQuery.getLabelFeature(eObject
+ .eClass());
+ if (feature != null) {
+ result = (String) eObject.eGet(feature);
+ }
+ return result;
+ }
+
+ /**
+ * This method searches for a structural feature that can be used as a name
+ *
+ * @param eClass
+ * in which class to search a structural feature that can be used as
+ * a name
+ * @return an EStructuralFeature
+ */
+ // Copied from org.eclipse.emf.edit.provider.ReflectiveItemProvider to org.eclipse.papyrus.emf.facet.infra.common.core.internal.utils.ModelUtils
+ // Copied from org.eclipse.papyrus.emf.facet.infra.common.core.internal.utils.ModelUtils
+ private static EStructuralFeature getLabelFeature(final EClass eClass) {
+ EAttribute result = null;
+ for (final EAttribute eAttribute : eClass.getEAllAttributes()) {
+ if (!eAttribute.isMany()
+ && eAttribute.getEType().getInstanceClass() != FeatureMap.Entry.class) {
+ if (LabelQuery.NAME.equalsIgnoreCase(eAttribute
+ .getName())) {
+ result = eAttribute;
+ break;
+ } else if (result == null) {
+ result = eAttribute;
+ } else if (eAttribute.getEAttributeType().getInstanceClass() == String.class
+ && result.getEAttributeType().getInstanceClass() != String.class) {
+ result = eAttribute;
+ }
+ }
+ }
+ return result;
+ }
+
+}
diff --git a/plugins/infra/core/org.eclipse.papyrus.infra.core/META-INF/MANIFEST.MF b/plugins/infra/core/org.eclipse.papyrus.infra.core/META-INF/MANIFEST.MF
index be0b3be7e36..8725c017613 100644
--- a/plugins/infra/core/org.eclipse.papyrus.infra.core/META-INF/MANIFEST.MF
+++ b/plugins/infra/core/org.eclipse.papyrus.infra.core/META-INF/MANIFEST.MF
@@ -30,7 +30,7 @@ Require-Bundle: org.eclipse.emf.workspace;bundle-version="[1.5.0,2.0.0)",
org.eclipse.core.resources;bundle-version="[3.11.0,4.0.0)";visibility:=reexport
Bundle-Vendor: %providerName
Bundle-ActivationPolicy: lazy
-Bundle-Version: 2.2.0.qualifier
+Bundle-Version: 2.3.0.qualifier
Bundle-Name: %pluginName
Bundle-Localization: plugin
Bundle-Activator: org.eclipse.papyrus.infra.core.Activator
diff --git a/plugins/infra/core/org.eclipse.papyrus.infra.core/pom.xml b/plugins/infra/core/org.eclipse.papyrus.infra.core/pom.xml
index 2524dc5f316..5511a52363f 100644
--- a/plugins/infra/core/org.eclipse.papyrus.infra.core/pom.xml
+++ b/plugins/infra/core/org.eclipse.papyrus.infra.core/pom.xml
@@ -7,6 +7,6 @@
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>org.eclipse.papyrus.infra.core</artifactId>
- <version>2.2.0-SNAPSHOT</version>
+ <version>2.3.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project> \ No newline at end of file
diff --git a/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AbstractModelWithSharedResource.java b/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AbstractModelWithSharedResource.java
index 884a997c7e4..2f2eaf40748 100644
--- a/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AbstractModelWithSharedResource.java
+++ b/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AbstractModelWithSharedResource.java
@@ -9,6 +9,7 @@
* Contributors:
* LIFL - Initial API and implementation
* Christian W. Damus - bugs 485220, 496299
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 496905
*
*****************************************************************************/
package org.eclipse.papyrus.infra.core.resource;
@@ -46,8 +47,10 @@ public abstract class AbstractModelWithSharedResource<T extends EObject> extends
/**
* Model kind.
+ *
+ * @since 2.0
*/
- private ModelKind modelKind;
+ protected ModelKind modelKind;
/**
*
diff --git a/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AdjunctResourceModelSnippet.java b/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AdjunctResourceModelSnippet.java
index 46a6003edc5..9b2709a4e9a 100644
--- a/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AdjunctResourceModelSnippet.java
+++ b/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/AdjunctResourceModelSnippet.java
@@ -8,6 +8,7 @@
*
* Contributors:
* Christian W. Damus - Initial API and implementation
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 496905
*
*****************************************************************************/
@@ -89,16 +90,29 @@ public class AdjunctResourceModelSnippet implements IModelSnippet {
if (converter.exists(adjunctURI, Collections.emptyMap())) {
// Best effort load. This must not interfere with other
// resource set operations
- try {
- resourceSet.getResource(adjunctURI, true);
- } catch (Exception e) {
- Activator.log.error(
- String.format("Failed to load %s resource", model.getModelFileExtension()), //$NON-NLS-1$
- e);
- }
+ loadResource(model, resourceSet, adjunctURI);
}
}
}
}
+ /**
+ * This allows to load the model.
+ *
+ * @param model The {@link EMFLogicalModel}.
+ * @param resourceSet The resource set.
+ * @param adjunctURI The adjunct URI.
+ *
+ * @since 2.3
+ */
+ protected void loadResource(final EMFLogicalModel model, final ResourceSet resourceSet, final URI adjunctURI){
+ try {
+ resourceSet.getResource(adjunctURI, true);
+ } catch (final Exception e) {
+ Activator.log.error(
+ String.format("Failed to load %s resource", model.getModelFileExtension()), //$NON-NLS-1$
+ e);
+ }
+ }
+
}
diff --git a/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/ModelSet.java b/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/ModelSet.java
index 85a7c146bca..b66c3aa0526 100644
--- a/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/ModelSet.java
+++ b/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/ModelSet.java
@@ -17,6 +17,7 @@
* Gabriel Pascual (ALL4TEC) gabriel.pascual@all4tec.net - Bug 436952
* Gabriel Pascual (ALL4TEC) gabriel.pascual@all4tec.net - Bug 436998
* Christian W. Damus - bugs 436998, 468030, 485220
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 496905
*
*****************************************************************************/
package org.eclipse.papyrus.infra.core.resource;
@@ -853,7 +854,14 @@ public class ModelSet extends ResourceSetImpl {
return result;
}
- protected boolean deleteResource(URI uri) {
+ /**
+ * This allows to delete a resource from the uri.
+ *
+ * @param uri The uri of the resource to delete.
+ * @return <code>true</code> if the resource is deleted, <code>false</code> otherwise.
+ * @since 2.3
+ */
+ public boolean deleteResource(final URI uri) {
boolean result = false;
try {
diff --git a/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/PapyrusProjectScope.java b/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/PapyrusProjectScope.java
new file mode 100644
index 00000000000..635d3388e7f
--- /dev/null
+++ b/plugins/infra/core/org.eclipse.papyrus.infra.core/src/org/eclipse/papyrus/infra/core/resource/PapyrusProjectScope.java
@@ -0,0 +1,124 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.resource;
+
+import org.eclipse.core.internal.preferences.AbstractScope;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+
+/**
+ * This papyrus scope for the papyrus project preference store.
+ * This need to manage the preference for the papyrus project with the papyrus project name (to retrieve the correct name).
+ *
+ * @since 2.2
+ */
+@SuppressWarnings("restriction")
+public class PapyrusProjectScope extends AbstractScope {
+
+ /**
+ * String constant (value of <code>"papyrusProject"</code>) used for the scope name for this preference scope.
+ */
+ public static final String SCOPE = "papyrusProject"; //$NON-NLS-1$
+
+ /**
+ * The papyrus project name.
+ */
+ private String papyrusProjectName;
+
+ /**
+ * The context project.
+ */
+ private IProject context;
+
+ /**
+ * Constructor.
+ *
+ * @param project
+ * The project.
+ * @param papyrusProjectName
+ * The name of the '.di' file.
+ */
+ public PapyrusProjectScope(final IProject project, final String papyrusProjectName) {
+ this.context = project;
+ this.papyrusProjectName = papyrusProjectName;
+ }
+
+ /**
+ * Default path hierarchy for nodes is /<scope>/<qualifier>.
+ *
+ * @param qualifier The qualifier.
+ * @return The path hierarchy.
+ */
+ @Override
+ public IEclipsePreferences getNode(final String qualifier) {
+ if (qualifier == null)
+ throw new IllegalArgumentException();
+ final StringBuilder node = new StringBuilder(context.getName());
+ node.append("/"); //$NON-NLS-1$
+ node.append(papyrusProjectName);
+ return (IEclipsePreferences) Platform.getPreferencesService().getRootNode().node(SCOPE).node(node.toString()).node(qualifier);
+ }
+
+ /**
+ * The papyrus scope name.
+ *
+ * @return The papyrus scope name.
+ */
+ @Override
+ public String getName() {
+ return SCOPE;
+ }
+
+ /**
+ * The location of the scope.
+ *
+ * @return The location of the scope.
+ */
+ @Override
+ public IPath getLocation() {
+ // This must not be save
+ return null;
+ }
+
+ /**
+ * This allows to determinate if the object in parameter is equals to the current.
+ *
+ * @param obj The object to compare.
+ * @return <code>true</code> if this is equals, <code>false</code> otherwise.
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj)
+ return true;
+ if (!super.equals(obj))
+ return false;
+ if (!(obj instanceof PapyrusProjectScope))
+ return false;
+ PapyrusProjectScope other = (PapyrusProjectScope) obj;
+ return context.equals(other.context) && papyrusProjectName.equals(other.papyrusProjectName);
+ }
+
+ /**
+ * This allows to define the int hash code.
+ *
+ * @return The int representing the hascode.
+ */
+ @Override
+ public int hashCode() {
+ return super.hashCode() + context.getFullPath().hashCode() + "/".hashCode() + papyrusProjectName.hashCode(); //$NON-NLS-1$
+ }
+
+}
diff --git a/plugins/infra/emf/org.eclipse.papyrus.infra.emf.readonly/META-INF/MANIFEST.MF b/plugins/infra/emf/org.eclipse.papyrus.infra.emf.readonly/META-INF/MANIFEST.MF
index 0436405a78f..d858787d465 100644
--- a/plugins/infra/emf/org.eclipse.papyrus.infra.emf.readonly/META-INF/MANIFEST.MF
+++ b/plugins/infra/emf/org.eclipse.papyrus.infra.emf.readonly/META-INF/MANIFEST.MF
@@ -6,7 +6,8 @@ Require-Bundle: org.eclipse.papyrus.infra.onefile;bundle-version="[2.0.0,3.0.0)"
org.eclipse.gmf.runtime.common.core;bundle-version="[1.7.0,2.0.0)";visibility:=reexport,
org.eclipse.papyrus.infra.emf.gmf;bundle-version="[1.2.0,2.0.0)",
org.eclipse.papyrus.infra.core;bundle-version="[2.0.0,3.0.0)";visibility:=reexport,
- org.eclipse.papyrus.infra.emf;bundle-version="[2.0.0,3.0.0)";visibility:=reexport
+ org.eclipse.papyrus.infra.emf;bundle-version="[2.0.0,3.0.0)";visibility:=reexport,
+ org.eclipse.pde.ui;bundle-version="[3.9.0,4.0.0)"
Bundle-Vendor: %providerName
Bundle-ActivationPolicy: lazy
Bundle-Version: 3.0.0.qualifier
diff --git a/plugins/infra/emf/org.eclipse.papyrus.infra.emf.readonly/src/org/eclipse/papyrus/infra/emf/readonly/internal/ControlledResourceTracker.java b/plugins/infra/emf/org.eclipse.papyrus.infra.emf.readonly/src/org/eclipse/papyrus/infra/emf/readonly/internal/ControlledResourceTracker.java
index d99fc22337e..a3db4d85c2e 100644
--- a/plugins/infra/emf/org.eclipse.papyrus.infra.emf.readonly/src/org/eclipse/papyrus/infra/emf/readonly/internal/ControlledResourceTracker.java
+++ b/plugins/infra/emf/org.eclipse.papyrus.infra.emf.readonly/src/org/eclipse/papyrus/infra/emf/readonly/internal/ControlledResourceTracker.java
@@ -9,6 +9,7 @@
* Contributors:
* Christian W. Damus (CEA) - Initial API and implementation
* Christian W. Damus - bugs 463631, 485220
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 496905
*
*/
package org.eclipse.papyrus.infra.emf.readonly.internal;
@@ -31,6 +32,7 @@ import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.emf.transaction.TransactionalEditingDomainEvent;
import org.eclipse.emf.transaction.TransactionalEditingDomainListener;
import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.pde.internal.ui.util.LocaleUtil;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Iterables;
@@ -45,6 +47,7 @@ import com.google.common.collect.Sets;
* is necessary to ensure that the ephemeral states during controlling and uncontrolling a sub-model don't fool the editing domain into thinking
* we're making changes to a read-only resource, triggering roll-back.
*/
+@SuppressWarnings("restriction")
public class ControlledResourceTracker extends AdapterImpl implements TransactionalEditingDomainListener {
// A resource may be a sub-unit of multiple parent units (it can have multiple roots that are
@@ -108,7 +111,7 @@ public class ControlledResourceTracker extends AdapterImpl implements Transactio
for (URI next = units.poll(); next != null; next = units.poll()) {
if (isRoot(next)) {
- result.add(next);
+ result.add(getFinalURI(uri, next));
} else {
Iterables.addAll(units, get(next));
}
@@ -116,6 +119,37 @@ public class ControlledResourceTracker extends AdapterImpl implements Transactio
return result;
}
+
+ /**
+ * Get the URI modified if necessary (for example, the properties file can have a locale at the end of the file).
+ *
+ * @param uri
+ * The URI of a resource that potentially is in a sub-model unit.
+ * @param initialURI
+ * The initial URI of the sub model unit.
+ * @return The modified URI (or not modified if don't needed).
+ */
+ private URI getFinalURI(final URI uri, final URI initialURI) {
+ URI result = initialURI;
+
+ // If this is a properties file, check if a locale is available at the end of the URI
+ if (uri.fileExtension().equals("properties")) { //$NON-NLS-1$
+ // Get the last segment
+ final String lastSegment = initialURI.lastSegment();
+ // Try to remove existing localization
+ final String withoutLocalization = LocaleUtil.trimLocalization(lastSegment);
+
+ // If the initial last segment and the segment without localization are not equals, localization exist
+ if (!lastSegment.equals(withoutLocalization)) {
+ // Remove the last segment
+ result = initialURI.trimSegments(1);
+ // Add the modified last segment
+ result = result.appendSegment(withoutLocalization);
+ }
+ }
+
+ return result;
+ }
/**
* Queries whether the given URI (without extension, thus representing the set of Papyrus resources comprising
diff --git a/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/commands/AddEAnnotationDetailCommand.java b/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/commands/AddEAnnotationDetailCommand.java
new file mode 100644
index 00000000000..4b490bccf42
--- /dev/null
+++ b/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/commands/AddEAnnotationDetailCommand.java
@@ -0,0 +1,69 @@
+/*****************************************************************************
+ * Copyright (c) 2015 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.emf.commands;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+
+/**
+ * This allows to add a detail into the annotation.
+ */
+public class AddEAnnotationDetailCommand extends RecordingCommand {
+
+ /**
+ * The owner annotation.
+ */
+ private EAnnotation eAnnotation;
+
+ /**
+ * The key to add.
+ */
+ private String detailKey;
+
+ /**
+ * The value of the detail key.
+ */
+ private String value;
+
+ /**
+ * Constructor.
+ *
+ * @param domain
+ * The editing domain.
+ * @param annotation
+ * The owner annotation.
+ * @param detailKey
+ * The key to add.
+ * @param value
+ * The value of the detail key.
+ */
+ public AddEAnnotationDetailCommand(final TransactionalEditingDomain domain, final EAnnotation annotation, final String detailKey, final String value) {
+ super(domain);
+ this.eAnnotation = annotation;
+ this.detailKey = detailKey;
+ this.value = value;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.transaction.RecordingCommand#doExecute()
+ */
+ @Override
+ protected void doExecute() {
+ eAnnotation.getDetails().put(detailKey, value);
+ }
+
+}
diff --git a/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/commands/AddToResourceCommand.java b/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/commands/AddToResourceCommand.java
index 76f2b533692..9daa7d391c3 100644
--- a/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/commands/AddToResourceCommand.java
+++ b/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/commands/AddToResourceCommand.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2012 CEA LIST.
+ * Copyright (c) 2016 CEA LIST.
*
*
* All rights reserved. This program and the accompanying materials
@@ -8,21 +8,24 @@
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * Vincent Lorenzo (CEA LIST) Vincent.Lorenzo@cea.fr - Initial API and implementation
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.infra.emf.commands;
-import org.eclipse.emf.common.command.AbstractCommand;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
/**
- *
* This command allows to add an EObject to a resource
- *
*/
-public class AddToResourceCommand extends AbstractCommand {
+public class AddToResourceCommand extends AbstractTransactionalCommand {
/**
* the resource
@@ -38,63 +41,27 @@ public class AddToResourceCommand extends AbstractCommand {
*
* Constructor.
*
+ * @param domain
+ * The editing domain.
* @param resource
* the resource
* @param toAdd
* the object to add to the resource
*/
- public AddToResourceCommand(final Resource resource, final EObject toAdd) {
+ public AddToResourceCommand(final TransactionalEditingDomain domain, final Resource resource, final EObject toAdd) {
+ super(domain, "Add an object to a resource", null);
this.resource = resource;
this.toAdd = toAdd;
- setLabel("Add an object to a resource");
- }
-
- /**
- *
- * @see org.eclipse.emf.common.command.Command#execute()
- *
- */
- public void execute() {
- this.resource.getContents().add(this.toAdd);
}
/**
- *
- * @see org.eclipse.emf.common.command.Command#redo()
- *
- */
- public void redo() {
- execute();
- }
-
- /**
- *
- * @see org.eclipse.emf.common.command.AbstractCommand#prepare()
- *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand#doExecuteWithResult(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
*/
@Override
- protected boolean prepare() {
- return true;
- }
-
-
- /**
- *
- * @see org.eclipse.emf.common.command.AbstractCommand#undo()
- *
- */
- @Override
- public void undo() {
- this.resource.getContents().remove(this.toAdd);
- }
-
- /**
- *
- * @see org.eclipse.emf.common.command.AbstractCommand#canExecute()
- *
- */
- @Override
- public boolean canExecute() {
- return super.canExecute() && this.resource != null;
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ this.resource.getContents().add(this.toAdd);
+ return CommandResult.newOKCommandResult();
}
}
diff --git a/plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/META-INF/MANIFEST.MF b/plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/META-INF/MANIFEST.MF
index 1926a6e9290..f4286b65a70 100644
--- a/plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/META-INF/MANIFEST.MF
+++ b/plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/META-INF/MANIFEST.MF
@@ -16,7 +16,8 @@ Require-Bundle: org.eclipse.emf.edit.ui;bundle-version="[2.12.0,3.0.0)";visibili
org.eclipse.papyrus.emf.facet.custom.core;bundle-version="[2.0.0,3.0.0)";visibility:=reexport,
org.eclipse.papyrus.infra.emf.readonly;bundle-version="[3.0.0,4.0.0)",
org.eclipse.papyrus.infra.onefile;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.papyrus.infra.ui;bundle-version="[2.0.0,3.0.0)";visibility:=reexport
+ org.eclipse.papyrus.infra.ui;bundle-version="[2.0.0,3.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.infra.internationalization.utils;bundle-version="[1.0.0,2.0.0)"
Bundle-Vendor: %pluginProvider
Bundle-ActivationPolicy: lazy
Bundle-Version: 2.0.0.qualifier
diff --git a/plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/src/org/eclipse/papyrus/infra/ui/internal/emf/readonly/handlers/ReferencedModelReadOnlyHandler.java b/plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/src/org/eclipse/papyrus/infra/ui/internal/emf/readonly/handlers/ReferencedModelReadOnlyHandler.java
index d08fdc7296f..62b05b49265 100644
--- a/plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/src/org/eclipse/papyrus/infra/ui/internal/emf/readonly/handlers/ReferencedModelReadOnlyHandler.java
+++ b/plugins/infra/emf/org.eclipse.papyrus.infra.ui.emf/src/org/eclipse/papyrus/infra/ui/internal/emf/readonly/handlers/ReferencedModelReadOnlyHandler.java
@@ -9,6 +9,7 @@
* Contributors:
* Christian W. Damus (CEA) - Initial API and implementation
* Christian W. Damus - bug 463631
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 496905
*
*/
package org.eclipse.papyrus.infra.ui.internal.emf.readonly.handlers;
@@ -188,7 +189,8 @@ public class ReferencedModelReadOnlyHandler extends AbstractReadOnlyHandler impl
Set<URI> rootURIs = resolveRootResourceURIs(modelSet, uri);
if (!rootURIs.isEmpty()) {
- result = modelSet.isUserModelResource(rootURIs.iterator().next())
+ URI next = rootURIs.iterator().next();
+ result = modelSet.isUserModelResource(next)
&& !rootURIs.contains(modelSet.getURIWithoutExtension());
}
}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/META-INF/MANIFEST.MF b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/META-INF/MANIFEST.MF
index a3d544e8994..247d2fbd75d 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/META-INF/MANIFEST.MF
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/META-INF/MANIFEST.MF
@@ -5,7 +5,8 @@ Require-Bundle: org.eclipse.emf.transaction.ui;bundle-version="[1.4.0,2.0.0)",
org.eclipse.papyrus.infra.viewpoints.policy;bundle-version="[1.2.0,2.0.0)";visibility:=reexport,
org.eclipse.gmf.runtime.diagram.ui.resources.editor;bundle-version="[1.7.0,2.0.0)",
org.eclipse.papyrus.infra.ui;bundle-version="[2.0.0,3.0.0)";visibility:=reexport,
- org.eclipse.papyrus.infra.emf.gmf;bundle-version="[1.2.0,2.0.0)";visibility:=reexport
+ org.eclipse.papyrus.infra.emf.gmf;bundle-version="[1.2.0,2.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.infra.internationalization.utils;bundle-version="[1.0.0,2.0.0)"
Export-Package: org.eclipse.papyrus.commands,
org.eclipse.papyrus.commands.util,
org.eclipse.papyrus.commands.wrappers
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/src/org/eclipse/papyrus/commands/RenameDiagramHandler.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/src/org/eclipse/papyrus/commands/RenameDiagramHandler.java
index 2ed0050da80..775298271b8 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/src/org/eclipse/papyrus/commands/RenameDiagramHandler.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.commands/src/org/eclipse/papyrus/commands/RenameDiagramHandler.java
@@ -1,218 +1,232 @@
-/*****************************************************************************
- * Copyright (c) 2013, 2016 Cedric Dumoulin, Christian W. Damus, and others.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
- * Christian W. Damus - bug 485220
- *
- *****************************************************************************/
-package org.eclipse.papyrus.commands;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.expressions.IEvaluationContext;
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.transaction.RecordingCommand;
-import org.eclipse.emf.transaction.TransactionalEditingDomain;
-import org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor;
-import org.eclipse.gmf.runtime.notation.Diagram;
-import org.eclipse.jface.dialogs.InputDialog;
-import org.eclipse.jface.window.Window;
-import org.eclipse.papyrus.commands.messages.Messages;
-import org.eclipse.papyrus.infra.core.sasheditor.editor.ISashWindowsContainer;
-import org.eclipse.papyrus.infra.core.services.ServiceException;
-import org.eclipse.papyrus.infra.ui.util.ServiceUtilsForIEvaluationContext;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IEditorPart;
-
-/**
- * This handler allows to rename a gmf diagram.
- * The handler is activated when the current selection denote a gmf diagram.
- *
- * <br>
- * There is another RenameHandler in Papyrus (for modelexplorer):
- * /org.eclipse.papyrus.infra.gmfdiag.modelexplorer/src/org/eclipse/papyrus/infra/gmfdiag/modelexplorer/handlers/RenameDiagramHandler.java
- *
- * @author cedric dumoulin
- *
- */
-public class RenameDiagramHandler extends AbstractHandler {
-
- /**
- * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
- * @param event
- * @return
- * @throws ExecutionException
- *
- */
- public Object execute(ExecutionEvent event) throws ExecutionException {
- executeTransaction(event);
-
- return null;
- }
-
- /**
- * Execute as transaction
- *
- * @param event
- */
- private void executeTransaction(ExecutionEvent event) {
-
- // Get requested objects
- final Diagram notationDiagramHelper;
- TransactionalEditingDomain editingDomain;
- try {
- IEvaluationContext context = getIEvaluationContext(event);
- notationDiagramHelper = lookupNotationDiagramChecked(context);
- editingDomain = lookupTransactionalEditingDomain(context);
- } catch (NotFoundException e) {
- // silently fails
- return;
- } catch (ServiceException e) {
- // silently fails
- return;
- }
-
- // Open the dialog to ask the new name
- String currentName = notationDiagramHelper.getName();
- String newName = null;
- InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), Messages.RenameDiagramHandler_RenameAnExistingDiagram, Messages.RenameDiagramHandler_NewName, currentName, null);
- if (dialog.open() == Window.OK) {
- newName = dialog.getValue();
- if (newName == null || newName.length() <= 0) {
- return;
- }
- } else {
- // cancelled
- return;
- }
-
- final String name = newName;
- Command cmd = new RecordingCommand(editingDomain, getCommandName()) {
-
- @Override
- protected void doExecute() {
- // Rename the diagram !
- notationDiagramHelper.setName(name);
- }
-
-
- };
-
- editingDomain.getCommandStack().execute(cmd);
-
- }
-
- /**
- * Get the name used in the {@link RecordingCommand}. This name will be visible in
- * undo/redo.
- *
- * @return The command name to show.
- */
- public String getCommandName() {
- return Messages.RenameDiagramHandler_RenameDiagram;
- }
-
- protected IEvaluationContext getIEvaluationContext(ExecutionEvent event) throws NotFoundException {
- try {
- return (IEvaluationContext) event.getApplicationContext();
- } catch (ClassCastException e) {
- throw new NotFoundException("IEvaluationContext can't be found."); //$NON-NLS-1$
- }
-
- }
-
- // /**
- // *
- // * @return
- // * @throws NotFoundException
- // */
- // protected LayerStackMngr lookupLayerStackMngrChecked() throws NotFoundException {
- //
- // return lookupLayersViewChecked().getLayerStackMngrChecked();
- //
- // }
-
- /**
- * Get the notation diagram helper.
- * This method can be used from {@link #execute(ExecutionEvent)} or {@link #setEnabled(Object)}.
- *
- * @return The
- * @throws NotFoundException
- * @throws ServiceException
- */
- protected Diagram lookupNotationDiagramChecked(IEvaluationContext context) throws NotFoundException, ServiceException {
-
-
- // Get page from the event !
- IEditorPart editor = ServiceUtilsForIEvaluationContext.getInstance().getService(ISashWindowsContainer.class, context).getActiveEditor();
-
- if (!(editor instanceof DiagramDocumentEditor)) {
- throw new NotFoundException("Selected editor do not contains Diagram"); //$NON-NLS-1$
- }
- DiagramDocumentEditor diagramEditor = (DiagramDocumentEditor) editor;
-
- Diagram diagram = diagramEditor.getDiagram();
- if (diagram == null) {
- throw new NotFoundException("Selected editor do not contains Diagram"); //$NON-NLS-1$
- }
-
- // Return a new instance of the Helper
- return diagram;
- }
-
- /**
- * Try to lookup the TransactionalEditingDomain.
- *
- * @return
- * @throws ServiceException
- * If the Editing domain can't be found.
- */
- protected TransactionalEditingDomain lookupTransactionalEditingDomain(IEvaluationContext context) throws ServiceException {
-
- // Get page from the event !
- // IWorkbenchPage page = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
-
- return ServiceUtilsForIEvaluationContext.getInstance().getTransactionalEditingDomain(context);
- }
-
- /**
- * Called by framework. Need to set the enabled flag.
- *
- * @see org.eclipse.core.commands.AbstractHandler#setEnabled(java.lang.Object)
- *
- * @param evaluationContext
- */
- @Override
- public void setEnabled(Object evaluationContext) {
-
- if (!(evaluationContext instanceof IEvaluationContext)) {
- setBaseEnabled(false);
- return;
- }
-
- IEvaluationContext context = (IEvaluationContext) evaluationContext;
-
- try {
- // Try to get the diagram
- lookupNotationDiagramChecked(context);
-
- // ok, we got it.
- setBaseEnabled(true);
-
- } catch (ServiceException e) {
- // Can't find ServiceRegistry: disable
- setBaseEnabled(false);
- } catch (NotFoundException e) {
- // Can't find ServiceRegistry: disable
- setBaseEnabled(false);
- }
-
- }
-}
+/*****************************************************************************
+ * Copyright (c) 2013, 2016 Cedric Dumoulin, Christian W. Damus, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ * Christian W. Damus - bug 485220
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 496905
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.commands.messages.Messages;
+import org.eclipse.papyrus.infra.core.sasheditor.editor.ISashWindowsContainer;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.internationalization.utils.utils.LabelInternationalization;
+import org.eclipse.papyrus.infra.internationalization.utils.utils.LabelInternationalizationPreferencesUtils;
+import org.eclipse.papyrus.infra.ui.util.ServiceUtilsForIEvaluationContext;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorPart;
+
+/**
+ * This handler allows to rename a gmf diagram.
+ * The handler is activated when the current selection denote a gmf diagram.
+ *
+ * <br>
+ * There is another RenameHandler in Papyrus (for modelexplorer):
+ * /org.eclipse.papyrus.infra.gmfdiag.modelexplorer/src/org/eclipse/papyrus/infra/gmfdiag/modelexplorer/handlers/RenameDiagramHandler.java
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class RenameDiagramHandler extends AbstractHandler {
+
+ /**
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ * @param event
+ * @return
+ * @throws ExecutionException
+ *
+ */
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ executeTransaction(event);
+
+ return null;
+ }
+
+ /**
+ * Execute as transaction
+ *
+ * @param event
+ */
+ private void executeTransaction(ExecutionEvent event) {
+
+ // Get requested objects
+ final Diagram notationDiagramHelper;
+ TransactionalEditingDomain editingDomain;
+ try {
+ IEvaluationContext context = getIEvaluationContext(event);
+ notationDiagramHelper = lookupNotationDiagramChecked(context);
+ editingDomain = lookupTransactionalEditingDomain(context);
+ } catch (NotFoundException e) {
+ // silently fails
+ return;
+ } catch (ServiceException e) {
+ // silently fails
+ return;
+ }
+
+ // If the diagram label is available, modify this one.
+ Command cmd = null;
+ final String diagramLabel = LabelInternationalization.getInstance().getDiagramLabelWithoutName(notationDiagramHelper);
+ if(null != diagramLabel && LabelInternationalizationPreferencesUtils.getInternationalizationPreference(notationDiagramHelper)){
+ InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Rename diagram label", "New label:", diagramLabel, null); //$NON-NLS-1$ //$NON-NLS-2$
+ if (Window.OK == dialog.open()) {
+ final String label = dialog.getValue();
+ cmd = LabelInternationalization.getInstance().getSetDiagramLabelCommand(editingDomain, notationDiagramHelper, label, null);
+ }
+ }else{
+ // Open the dialog to ask the new name
+ String currentName = notationDiagramHelper.getName();
+ String newName = null;
+ InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), Messages.RenameDiagramHandler_RenameAnExistingDiagram, Messages.RenameDiagramHandler_NewName, currentName, null);
+ if (dialog.open() == Window.OK) {
+ newName = dialog.getValue();
+ if (newName == null || newName.length() <= 0) {
+ return;
+ }
+ } else {
+ // cancelled
+ return;
+ }
+
+ final String name = newName;
+ cmd = new RecordingCommand(editingDomain, getCommandName()) {
+
+ @Override
+ protected void doExecute() {
+ // Rename the diagram !
+ notationDiagramHelper.setName(name);
+ }
+
+
+ };
+ }
+
+ editingDomain.getCommandStack().execute(cmd);
+
+ }
+
+ /**
+ * Get the name used in the {@link RecordingCommand}. This name will be visible in
+ * undo/redo.
+ *
+ * @return The command name to show.
+ */
+ public String getCommandName() {
+ return Messages.RenameDiagramHandler_RenameDiagram;
+ }
+
+ protected IEvaluationContext getIEvaluationContext(ExecutionEvent event) throws NotFoundException {
+ try {
+ return (IEvaluationContext) event.getApplicationContext();
+ } catch (ClassCastException e) {
+ throw new NotFoundException("IEvaluationContext can't be found."); //$NON-NLS-1$
+ }
+
+ }
+
+ // /**
+ // *
+ // * @return
+ // * @throws NotFoundException
+ // */
+ // protected LayerStackMngr lookupLayerStackMngrChecked() throws NotFoundException {
+ //
+ // return lookupLayersViewChecked().getLayerStackMngrChecked();
+ //
+ // }
+
+ /**
+ * Get the notation diagram helper.
+ * This method can be used from {@link #execute(ExecutionEvent)} or {@link #setEnabled(Object)}.
+ *
+ * @return The
+ * @throws NotFoundException
+ * @throws ServiceException
+ */
+ protected Diagram lookupNotationDiagramChecked(IEvaluationContext context) throws NotFoundException, ServiceException {
+
+
+ // Get page from the event !
+ IEditorPart editor = ServiceUtilsForIEvaluationContext.getInstance().getService(ISashWindowsContainer.class, context).getActiveEditor();
+
+ if (!(editor instanceof DiagramDocumentEditor)) {
+ throw new NotFoundException("Selected editor do not contains Diagram"); //$NON-NLS-1$
+ }
+ DiagramDocumentEditor diagramEditor = (DiagramDocumentEditor) editor;
+
+ Diagram diagram = diagramEditor.getDiagram();
+ if (diagram == null) {
+ throw new NotFoundException("Selected editor do not contains Diagram"); //$NON-NLS-1$
+ }
+
+ // Return a new instance of the Helper
+ return diagram;
+ }
+
+ /**
+ * Try to lookup the TransactionalEditingDomain.
+ *
+ * @return
+ * @throws ServiceException
+ * If the Editing domain can't be found.
+ */
+ protected TransactionalEditingDomain lookupTransactionalEditingDomain(IEvaluationContext context) throws ServiceException {
+
+ // Get page from the event !
+ // IWorkbenchPage page = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
+
+ return ServiceUtilsForIEvaluationContext.getInstance().getTransactionalEditingDomain(context);
+ }
+
+ /**
+ * Called by framework. Need to set the enabled flag.
+ *
+ * @see org.eclipse.core.commands.AbstractHandler#setEnabled(java.lang.Object)
+ *
+ * @param evaluationContext
+ */
+ @Override
+ public void setEnabled(Object evaluationContext) {
+
+ if (!(evaluationContext instanceof IEvaluationContext)) {
+ setBaseEnabled(false);
+ return;
+ }
+
+ IEvaluationContext context = (IEvaluationContext) evaluationContext;
+
+ try {
+ // Try to get the diagram
+ lookupNotationDiagramChecked(context);
+
+ // ok, we got it.
+ setBaseEnabled(true);
+
+ } catch (ServiceException e) {
+ // Can't find ServiceRegistry: disable
+ setBaseEnabled(false);
+ } catch (NotFoundException e) {
+ // Can't find ServiceRegistry: disable
+ setBaseEnabled(false);
+ }
+
+ }
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/META-INF/MANIFEST.MF b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/META-INF/MANIFEST.MF
index ddf6a8377e7..501ee1c8008 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/META-INF/MANIFEST.MF
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/META-INF/MANIFEST.MF
@@ -68,7 +68,8 @@ Require-Bundle: org.eclipse.emf.ecore.edit;bundle-version="[2.9.0,3.0.0)",
org.eclipse.papyrus.infra.services.edit.ui;bundle-version="[3.0.0,4.0.0)";visibility:=reexport,
org.eclipse.papyrus.infra.emf.gmf,
org.eclipse.papyrus.infra.ui;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.papyrus.infra.core;bundle-version="[2.2.0,3.0.0)"
+ org.eclipse.papyrus.infra.core;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.papyrus.infra.internationalization.utils;bundle-version="[1.0.0,2.0.0)"
Bundle-Vendor: %providerName
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: .
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/META-INF/MANIFEST.MF b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/META-INF/MANIFEST.MF
index 1d5325c5559..35c570d064d 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/META-INF/MANIFEST.MF
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/META-INF/MANIFEST.MF
@@ -3,7 +3,8 @@ Require-Bundle: org.eclipse.papyrus.infra.hyperlink;bundle-version="[3.0.0,4.0.0
org.eclipse.papyrus.infra.gmfdiag.common;bundle-version="[3.0.0,4.0.0)";visibility:=reexport,
org.eclipse.papyrus.infra.gmfdiag.navigation;bundle-version="[2.0.0,3.0.0)";visibility:=reexport,
org.eclipse.papyrus.infra.gmfdiag.preferences;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.papyrus.infra.gmfdiag.dnd;bundle-version="[1.2.0,2.0.0)"
+ org.eclipse.papyrus.infra.gmfdiag.dnd;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.papyrus.infra.internationalization.utils;bundle-version="[1.0.0,2.0.0)"
Export-Package: org.eclipse.papyrus.infra.gmfdiag.hyperlink,
org.eclipse.papyrus.infra.gmfdiag.hyperlink.editpolicies,
org.eclipse.papyrus.infra.gmfdiag.hyperlink.helper,
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/AdvancedHLManager.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/AdvancedHLManager.java
index aa68cc88e94..c93e62acfcd 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/AdvancedHLManager.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/AdvancedHLManager.java
@@ -12,6 +12,8 @@
* Arthur Daussy (Atos) arthur.daussy@atos.net - Bug 363827 - [Improvement] Diagram creation, remember the latest tab chosen
* Vincent Lorenzo (CEA-LIST) Vincent.lorenzo@cea.fr (refactoring of the hyperlink)
* Christian W. Damus - bug 488965
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 496905
+ *
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.hyperlink.ui;
@@ -30,6 +32,7 @@ import org.eclipse.papyrus.infra.gmfdiag.hyperlink.object.HyperLinkEditor;
import org.eclipse.papyrus.infra.hyperlink.helper.HyperLinkHelperFactory;
import org.eclipse.papyrus.infra.hyperlink.ui.AbstractHyperLinkTab;
import org.eclipse.papyrus.infra.hyperlink.ui.HyperLinkManagerShell;
+import org.eclipse.papyrus.infra.internationalization.utils.utils.LabelInternationalization;
import org.eclipse.papyrus.infra.ui.editorsfactory.IPageIconsRegistry;
import org.eclipse.swt.widgets.Shell;
@@ -81,7 +84,7 @@ public class AdvancedHLManager extends HyperLinkManagerShell {
HyperLinkEditor hyperLinkEditor = new HyperLinkEditor();
hyperLinkEditor.setObject(diagrams.get(i));
hyperLinkEditor.setIsDefault(true);
- hyperLinkEditor.setTooltipText(diagrams.get(i).getName());
+ hyperLinkEditor.setTooltipText(LabelInternationalization.getInstance().getDiagramLabel(diagrams.get(i)));
hyperLinkDiagrams.add(hyperLinkEditor);
}
return hyperLinkDiagrams;
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.modelexplorer/META-INF/MANIFEST.MF b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.modelexplorer/META-INF/MANIFEST.MF
index 60578c27e04..6c76cfaf435 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.modelexplorer/META-INF/MANIFEST.MF
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.modelexplorer/META-INF/MANIFEST.MF
@@ -3,7 +3,8 @@ Require-Bundle: org.eclipse.papyrus.infra.gmfdiag.common;bundle-version="[3.0.0,
org.eclipse.papyrus.infra.emf;bundle-version="[2.0.0,3.0.0)",
org.eclipse.papyrus.infra.emf;bundle-version="[2.0.0,3.0.0)",
org.eclipse.papyrus.infra.gmfdiag.common;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.papyrus.views.modelexplorer;bundle-version="[3.0.0,4.0.0)"
+ org.eclipse.papyrus.views.modelexplorer;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.internationalization.utils;bundle-version="[1.0.0,2.0.0)"
Bundle-Vendor: %providerName
Bundle-ActivationPolicy: lazy
Bundle-Version: 1.2.0.qualifier
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.modelexplorer/src/org/eclipse/papyrus/infra/gmfdiag/modelexplorer/handlers/RenameDiagramHandler.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.modelexplorer/src/org/eclipse/papyrus/infra/gmfdiag/modelexplorer/handlers/RenameDiagramHandler.java
index c8b292288bb..a318f4d1a89 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.modelexplorer/src/org/eclipse/papyrus/infra/gmfdiag/modelexplorer/handlers/RenameDiagramHandler.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.modelexplorer/src/org/eclipse/papyrus/infra/gmfdiag/modelexplorer/handlers/RenameDiagramHandler.java
@@ -10,6 +10,7 @@
* Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
* Christian W. Damus - bug 485220
* Fanch BONNABESSE (ALL4TEC) fanch.bonnabesse@all4tec.net - Bug 497289
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 496905
*
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.modelexplorer.handlers;
@@ -31,6 +32,8 @@ import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
import org.eclipse.papyrus.infra.gmfdiag.modelexplorer.messages.Messages;
+import org.eclipse.papyrus.infra.internationalization.utils.utils.LabelInternationalization;
+import org.eclipse.papyrus.infra.internationalization.utils.utils.LabelInternationalizationPreferencesUtils;
import org.eclipse.papyrus.views.modelexplorer.DirectEditorEditingSupport;
import org.eclipse.papyrus.infra.emf.gmf.command.GMFtoEMFCommandWrapper;
import org.eclipse.swt.widgets.Display;
@@ -51,18 +54,27 @@ public class RenameDiagramHandler extends AbstractDiagramCommandHandler {
if (editingDomain != null && diagrams.size() == 1) {
final Diagram diag = diagrams.get(0);
- final String currentName = diag.getName();
- if (currentName != null) {
-
- AbstractTransactionalCommand cmd = new AbstractTransactionalCommand(editingDomain, "RenameDiagramCommand", null) { //$NON-NLS-1$
-
+
+ final String diagramLabel = LabelInternationalization.getInstance().getDiagramLabelWithoutName(diag);
+ if(null != diagramLabel && LabelInternationalizationPreferencesUtils.getInternationalizationPreference(diag)){
+ AbstractTransactionalCommand cmd = new AbstractTransactionalCommand(editingDomain, "ChangeDiagramLabelCommand", null) { //$NON-NLS-1$
+
+ /**
+ *
+ * @see org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand#doExecuteWithResult(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+ *
+ * @param monitor
+ * @param info
+ * @return
+ * @throws ExecutionException
+ */
@Override
- protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
- InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), Messages.RenameDiagramHandler_RenameAnExistingDiagram, Messages.RenameDiagramHandler_NewName, currentName, null);
- if (dialog.open() == Window.OK) {
- final String name = dialog.getValue();
- if (name != null && name.length() > 0) {
- diag.setName(name);
+ protected CommandResult doExecuteWithResult(final IProgressMonitor monitor, final IAdaptable info) throws ExecutionException {
+ InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), "Rename diagram label...", "New label:", diagramLabel, null); //$NON-NLS-1$ //$NON-NLS-2$
+ if (Window.OK == dialog.open()) {
+ final String label = dialog.getValue();
+ if (label != null && label.length() > 0) {
+ LabelInternationalization.getInstance().setDiagramLabel(diag, label, null);
}
return CommandResult.newOKCommandResult();
} else {
@@ -71,6 +83,28 @@ public class RenameDiagramHandler extends AbstractDiagramCommandHandler {
}
};
return new GMFtoEMFCommandWrapper(cmd);
+ }else{
+ final String currentName = diag.getName();
+ if (currentName != null) {
+
+ AbstractTransactionalCommand cmd = new AbstractTransactionalCommand(editingDomain, "RenameDiagramCommand", null) { //$NON-NLS-1$
+
+ @Override
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ InputDialog dialog = new InputDialog(Display.getCurrent().getActiveShell(), Messages.RenameDiagramHandler_RenameAnExistingDiagram, Messages.RenameDiagramHandler_NewName, currentName, null);
+ if (dialog.open() == Window.OK) {
+ final String name = dialog.getValue();
+ if (name != null && name.length() > 0) {
+ diag.setName(name);
+ }
+ return CommandResult.newOKCommandResult();
+ } else {
+ return CommandResult.newCancelledCommandResult();
+ }
+ }
+ };
+ return new GMFtoEMFCommandWrapper(cmd);
+ }
}
}
return UnexecutableCommand.INSTANCE;
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/META-INF/MANIFEST.MF b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/META-INF/MANIFEST.MF
index 219350da220..76b8f339ba2 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/META-INF/MANIFEST.MF
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/META-INF/MANIFEST.MF
@@ -4,7 +4,9 @@ Export-Package: org.eclipse.papyrus.infra.gmfdiag.properties.extension,
Require-Bundle: org.eclipse.papyrus.infra.properties.ui;bundle-version="[2.0.0,3.0.0)";visibility:=reexport,
org.eclipse.core.databinding.beans;bundle-version="[1.3.0,2.0.0)",
org.eclipse.papyrus.infra.gmfdiag.preferences;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.papyrus.infra.gmfdiag.canonical;bundle-version="[2.0.0,3.0.0)"
+ org.eclipse.papyrus.infra.gmfdiag.canonical;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.papyrus.infra.internationalization.utils;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.papyrus.infra.internationalization;bundle-version="[1.0.0,2.0.0)"
Bundle-Vendor: %Bundle-Vendor
Bundle-ActivationPolicy: lazy;exclude:="org.eclipse.papyrus.infra.gmfdiag.properties.constraint"
Bundle-Version: 3.0.0.qualifier
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/notation/ui/SingleDiagram.xwt b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/notation/ui/SingleDiagram.xwt
index 840b846b6db..db294948335 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/notation/ui/SingleDiagram.xwt
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/model/notation/ui/SingleDiagram.xwt
@@ -11,6 +11,7 @@
<ppel:PropertiesLayout numColumns="1"></ppel:PropertiesLayout>
</Composite.layout>
<ppe:StringEditor input="{Binding}" property="notation:Diagram:name"></ppe:StringEditor>
+ <ppe:StringEditor input="{Binding}" property="notation:Diagram:label"></ppe:StringEditor>
<ppe:ReferenceLabel input="{Binding}" property="notation:View:prototype" readOnly="true" customLabel="View Type"></ppe:ReferenceLabel>
<ppe:ReferenceDialog input="{Binding}" property="notation:View:owner" customLabel="Owner"></ppe:ReferenceDialog>
<ppe:ReferenceDialog input="{Binding}" property="notation:View:element" customLabel="Root element"></ppe:ReferenceDialog>
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/databinding/DiagramLabelObservableValue.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/databinding/DiagramLabelObservableValue.java
new file mode 100644
index 00000000000..3b1ddfc7109
--- /dev/null
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/databinding/DiagramLabelObservableValue.java
@@ -0,0 +1,219 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.gmfdiag.properties.databinding;
+
+import org.eclipse.core.databinding.observable.Diffs;
+import org.eclipse.core.databinding.observable.IObserving;
+import org.eclipse.core.databinding.observable.Realm;
+import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
+import org.eclipse.core.databinding.observable.value.ValueDiff;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.papyrus.infra.gmfdiag.properties.Activator;
+import org.eclipse.papyrus.infra.internationalization.InternationalizationEntry;
+import org.eclipse.papyrus.infra.internationalization.InternationalizationPackage;
+import org.eclipse.papyrus.infra.internationalization.utils.utils.LabelInternationalization;
+import org.eclipse.papyrus.infra.internationalization.utils.utils.LabelInternationalizationUtils;
+import org.eclipse.papyrus.infra.tools.databinding.ReferenceCountedObservable;
+
+/**
+ * The observable value for the label of the {@link Diagram}.
+ */
+@SuppressWarnings("rawtypes")
+public class DiagramLabelObservableValue extends AbstractObservableValue implements IObserving, ReferenceCountedObservable {
+
+ /**
+ * The support reference counting on behalf of an {@code observable}.
+ */
+ private final ReferenceCountedObservable.Support refCount = new ReferenceCountedObservable.Support(this);
+
+ /**
+ * The diagram instance.
+ */
+ protected Diagram diagram;
+
+ /**
+ * The editing domain on which the commands will be executed.
+ */
+ protected EditingDomain domain;
+
+ /**
+ * The listener for the entry modification.
+ */
+ protected Adapter listener;
+
+ /**
+ * The internationalization entry corresponding to the diagram.
+ */
+ protected InternationalizationEntry entry;
+
+ /**
+ * Constructor.
+ *
+ * @param diagram
+ * The diagram.
+ * @param domain
+ * The editing domain.
+ */
+ public DiagramLabelObservableValue(final Diagram diagram, final EditingDomain domain) {
+ this(Realm.getDefault(), diagram, domain);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param realm
+ * The current Realm.
+ * @param diagram
+ * The diagram.
+ * @param domain
+ * The editing domain.
+ */
+ public DiagramLabelObservableValue(final Realm realm, final Diagram diagram, final EditingDomain domain) {
+ super(realm);
+ this.diagram = diagram;
+ this.domain = domain;
+ this.entry = LabelInternationalizationUtils.getInternationalizationEntry(diagram, diagram);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.AbstractObservable#dispose()
+ */
+ @Override
+ public synchronized void dispose() {
+ if (null != listener) {
+ entry.eAdapters().remove(listener);
+ listener = null;
+ }
+
+ entry = null;
+ diagram = null;
+ super.dispose();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.IObserving#getObserved()
+ */
+ public Object getObserved() {
+ return diagram;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.ChangeManager#firstListenerAdded()
+ */
+ @Override
+ protected void firstListenerAdded() {
+ if (null != entry) {
+ if (null == listener) {
+ listener = new AdapterImpl() {
+ @Override
+ public void notifyChanged(Notification notification) {
+ if (InternationalizationPackage.eINSTANCE.getInternationalizationEntry_Value() == notification.getFeature() && !notification.isTouch()) {
+ final ValueDiff diff = Diffs.createValueDiff(notification.getOldValue(), notification.getNewValue());
+ getRealm().exec(new Runnable() {
+ @SuppressWarnings("unchecked")
+ public void run() {
+ fireValueChange(diff);
+ }
+ });
+ }
+ }
+ };
+ }
+ entry.eAdapters().add(listener);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.value.AbstractObservableValue#doGetValue()
+ */
+ @Override
+ protected Object doGetValue() {
+ return LabelInternationalization.getInstance().getDiagramLabelWithoutName(diagram);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.value.AbstractObservableValue#doSetValue(java.lang.Object)
+ */
+ @Override
+ protected void doSetValue(final Object value) {
+ try {
+
+ // Remove the listener on entry
+ if (null != entry && null != listener) {
+ entry.eAdapters().remove(listener);
+ }
+
+ final Command emfCommand = LabelInternationalization.getInstance().getSetDiagramLabelCommand(domain, diagram, (String) value, null);
+ domain.getCommandStack().execute(emfCommand);
+
+ // Get the entry after the modification and try to apply listener if possible
+ this.entry = LabelInternationalizationUtils.getInternationalizationEntry(diagram, diagram);
+ firstListenerAdded();
+ } catch (Exception ex) {
+ Activator.log.error(ex);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.value.IObservableValue#getValueType()
+ */
+ public Object getValueType() {
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.tools.databinding.ReferenceCountedObservable#retain()
+ */
+ public void retain() {
+ refCount.retain();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.tools.databinding.ReferenceCountedObservable#release()
+ */
+ public void release() {
+ refCount.release();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.tools.databinding.ReferenceCountedObservable#autorelease()
+ */
+ public void autorelease() {
+ refCount.autorelease();
+ }
+
+}
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/modelelement/GMFModelElement.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/modelelement/GMFModelElement.java
index 27f0fb0c118..4d4cefbddf0 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/modelelement/GMFModelElement.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.properties/src/org/eclipse/papyrus/infra/gmfdiag/properties/modelelement/GMFModelElement.java
@@ -10,6 +10,7 @@
* Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation
* Gabriel Pascual (ALL4TEC) gabriel.pascual@all4tec.net - Bug 454891
* Christian W. Damus - bug 485220
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Bug 496905
*
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.properties.modelelement;
@@ -34,9 +35,11 @@ import org.eclipse.papyrus.infra.gmfdiag.common.databinding.GMFObservableList;
import org.eclipse.papyrus.infra.gmfdiag.common.databinding.GMFObservableValue;
import org.eclipse.papyrus.infra.gmfdiag.common.utils.DiagramUtils;
import org.eclipse.papyrus.infra.gmfdiag.properties.Activator;
+import org.eclipse.papyrus.infra.gmfdiag.properties.databinding.DiagramLabelObservableValue;
import org.eclipse.papyrus.infra.gmfdiag.properties.databinding.GradientObservableValue;
import org.eclipse.papyrus.infra.gmfdiag.properties.provider.ModelContentProvider;
import org.eclipse.papyrus.infra.gmfdiag.properties.util.LegacyOwnerObservable;
+import org.eclipse.papyrus.infra.internationalization.utils.utils.InternationalizationConstants;
import org.eclipse.papyrus.infra.properties.ui.modelelement.EMFModelElement;
import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService;
import org.eclipse.papyrus.infra.viewpoints.policy.PolicyChecker;
@@ -81,15 +84,23 @@ public class GMFModelElement extends EMFModelElement {
@Override
protected boolean isFeatureEditable(String propertyPath) {
- if (propertyPath.endsWith("owner")) {
- return true;
+ boolean result = true;
+ if(InternationalizationConstants.LABEL_PROPERTY_PATH.equals(propertyPath)){ //$NON-NLS-1$
+ result = true;
+ }else if (propertyPath.endsWith("owner")) { //$NON-NLS-1$
+ result = true;
+ }else{
+ result = super.isFeatureEditable(propertyPath);
}
- return super.isFeatureEditable(propertyPath);
+ return result;
}
@Override
protected IObservable doGetObservable(String propertyPath) {
- if (propertyPath.endsWith("owner")) {
+ if(InternationalizationConstants.LABEL_PROPERTY_PATH.equals(propertyPath)){ //$NON-NLS-1$
+ Diagram diagram = (Diagram) source;
+ return new DiagramLabelObservableValue(diagram, getDomain());
+ }else if (propertyPath.endsWith("owner")) {
Diagram diagram = (Diagram) source;
Style style = diagram.getStyle(StylePackage.Literals.PAPYRUS_VIEW_STYLE);
if (style != null) {
@@ -198,7 +209,7 @@ public class GMFModelElement extends EMFModelElement {
}
return super.getContentProvider(propertyPath);
}
-
+
/**
* Gets the root EObject from the given one
*
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.classpath b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.classpath
new file mode 100644
index 00000000000..eca7bdba8f0
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.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/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.project b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.project
new file mode 100644
index 00000000000..ae67e3eb938
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.project
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.editor.welcome.internationalization</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.oomph.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>check.maven.pom</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>ignore.lower.bound.dependency.ranges</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.papyrus.releng.main.release/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ <nature>org.eclipse.oomph.version.VersionNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.settings/org.eclipse.jdt.core.prefs b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..8ddd9a88d57
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,296 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+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/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.settings/org.eclipse.jdt.ui.prefs b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 00000000000..954281dbc31
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,68 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup.use_type_arguments=false
+cleanup_profile=_Papyrus
+cleanup_settings_version=2
+eclipse.preferences.version=1
+formatter_profile=_Papyrus
+formatter_settings_version=12
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * Constructor.\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*****************************************************************************\n * Copyright (c) ${year} CEA LIST and others.\n * \n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors\:\n * CEA LIST - Initial API and implementation\n * \n *****************************************************************************/\n</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/**\n * ${see_to_overridden}\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${see_to_target}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.settings/org.eclipse.pde.api.tools.prefs b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 00000000000..23fb95e120f
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,98 @@
+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=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Error
+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_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=Error
+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=Error
+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_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
+eclipse.preferences.version=1
+incompatible_api_component_version=Error
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Warning
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/META-INF/MANIFEST.MF b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..2dd006251fb
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/META-INF/MANIFEST.MF
@@ -0,0 +1,28 @@
+Manifest-Version: 1.0
+Export-Package: org.eclipse.papyrus.infra.editor.welcome.internationalization,
+ org.eclipse.papyrus.infra.editor.welcome.internationalization.modelelements,
+ org.eclipse.papyrus.infra.editor.welcome.internationalization.widgets,
+ org.eclipse.papyrus.infra.editor.welcome.internationalization.widgets.editors
+Require-Bundle: org.eclipse.emf.ecore;bundle-version="[2.12.0,3.0.0)";visibility:=reexport,
+ org.eclipse.ui;bundle-version="[3.107.0,4.0.0)";visibility:=reexport,
+ org.eclipse.core.databinding.observable;bundle-version="[1.6.0,2.0.0)";visibility:=reexport,
+ org.eclipse.nebula.widgets.nattable.core;bundle-version="[1.4.0,2.0.0)";visibility:=reexport,
+ org.eclipse.nebula.widgets.nattable.extension.glazedlists;bundle-version="[1.4.0,2.0.0)",
+ ca.odell.glazedlists;bundle-version="[1.9.0,2.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.infra.services.navigation;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.properties.ui;bundle-version="[2.0.0,3.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.infra.editor.welcome;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.papyrus.infra.internationalization;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.papyrus.infra.internationalization.common;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.papyrus.infra.internationalization.ui;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.common;bundle-version="[3.0.0,4.0.0)"
+Bundle-Vendor: %providerName
+Bundle-ActivationPolicy: lazy
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Localization: plugin
+Bundle-Name: %pluginName
+Bundle-Activator: org.eclipse.papyrus.infra.editor.welcome.internationalization.Activator
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.papyrus.infra.editor.welcome.internationalization;singleton:=true
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/about.html b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/about.html
new file mode 100644
index 00000000000..dd3c089a94c
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>November 14, 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/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/build.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/build.properties
new file mode 100644
index 00000000000..631423469dc
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/build.properties
@@ -0,0 +1,22 @@
+#
+# Copyright (c) 2015 Christian W. Damus and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Christian W. Damus - Initial API and implementation
+#
+
+bin.includes = META-INF/,\
+ .,\
+ about.html,\
+ plugin.properties,\
+ model/,\
+ plugin.xml
+output.. = bin/
+src.includes = about.html
+source.. = src/
+bin.. = bin/
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/model/environment.xmi b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/model/environment.xmi
new file mode 100644
index 00000000000..f0090784c71
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/model/environment.xmi
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="ASCII"?>
+<environment:Environment
+ xmi:version="2.0"
+ xmlns:xmi="http://www.omg.org/XMI"
+ xmlns:environment="http://www.eclipse.org/papyrus/properties/environment/0.9">
+ <modelElementFactories
+ name="InternationalizationWelcomeModelElementFactory"
+ factoryClass="org.eclipse.papyrus.infra.editor.welcome.internationalization.modelelements.InternationalizationWelcomeModelElementFactory"/>
+ <namespaces
+ name="ppewi"
+ value="org.eclipse.papyrus.infra.editor.welcome.internationalization.widgets"/>
+</environment:Environment>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/model/general/internationalization.ctx b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/model/general/internationalization.ctx
new file mode 100644
index 00000000000..04954fd8771
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/model/general/internationalization.ctx
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ASCII"?>
+<contexts:Context xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:constraints="http://www.eclipse.org/papyrus/constraints/0.9" xmlns:contexts="http://www.eclipse.org/papyrus/properties/contexts/0.9" xmi:id="_MPALcI7eEeWNa5T2Agi7uA" name="welcome-internationalization" label="Internationalization">
+ <tabs xmi:id="_SsfbQcElEeS_u7hIvAIReA" label="Internationalization" id="internationalization" category="org.eclipse.papyrus" priority="75">
+ <sections xmi:id="_SsgCV8ElEeS_u7hIvAIReA" name="Single Languages" sectionFile="ui/SingleInternationalization.xwt">
+ <widget href="ui/SingleInternationalization.xwt#/"/>
+ </sections>
+ </tabs>
+ <views xmi:id="_Ssiem8ElEeS_u7hIvAIReA" name="Single Languages" sections="_SsgCV8ElEeS_u7hIvAIReA" automaticContext="true" datacontexts="_SsmJGsElEeS_u7hIvAIReA">
+ <constraints xsi:type="constraints:SimpleConstraint" xmi:id="_SskT2cElEeS_u7hIvAIReA" name="isWelcomeElement">
+ <constraintType href="ppe:/environment/org.eclipse.papyrus.infra.editor.welcome/model/environment.xmi#//@constraintTypes.0"/>
+ <properties xsi:type="constraints:ValueProperty" xmi:id="_SskT2sElEeS_u7hIvAIReA" name="metaclassName" value="Welcome"/>
+ </constraints>
+ </views>
+ <dataContexts xmi:id="_SsmI-cElEeS_u7hIvAIReA" name="welcomeInternationalization" label="Welcome">
+ <elements xmi:id="_SsmJGsElEeS_u7hIvAIReA" name="Internationalization">
+ <properties xmi:id="_SsmJG8ElEeS_u7hIvAIReA" name="privateStorage" label="Private storage" type="Boolean" description="Determinates where the internationalization preference must be stored"/>
+ <properties xmi:id="_SsmJG8ElEeS_u7hIvAIReB" name="useInternationalization" label="Use internationalization" type="Boolean" description="Determinates if the internationalization must be used in the papyrus project"/>
+ <properties xmi:id="_SsmJG8ElEeS_u7hIvAIReC" name="language" label="Language" description="The language used for the internationalization"/>
+ </elements>
+ <modelElementFactory href="ppe:/environment/org.eclipse.papyrus.infra.editor.welcome.internationalization/model/environment.xmi#//@modelElementFactories.0"/>
+ </dataContexts>
+</contexts:Context>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/model/general/ui/SingleInternationalization.xwt b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/model/general/ui/SingleInternationalization.xwt
new file mode 100644
index 00000000000..66a074b448a
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/model/general/ui/SingleInternationalization.xwt
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Composite
+ xmlns:ppewi="clr-namespace:org.eclipse.papyrus.infra.editor.welcome.internationalization.widgets"
+ xmlns:x="http://www.eclipse.org/xwt" xmlns:ppe="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets"
+ xmlns="http://www.eclipse.org/xwt/presentation"
+ xmlns:ppel="clr-namespace:org.eclipse.papyrus.infra.properties.ui.widgets.layout"
+ xmlns:j="clr-namespace:java.lang">
+ <Composite.layout>
+ <ppel:PropertiesLayout></ppel:PropertiesLayout>
+ </Composite.layout>
+ <ppe:BooleanCheckbox input="{Binding}"
+ property="welcomeInternationalization:Internationalization:privateStorage"></ppe:BooleanCheckbox>
+ <ppe:BooleanCheckbox input="{Binding}"
+ property="welcomeInternationalization:Internationalization:useInternationalization"></ppe:BooleanCheckbox>
+ <ppewi:LanguageDialog input="{Binding}"
+ property="welcomeInternationalization:Internationalization:language"></ppewi:LanguageDialog>
+</Composite> \ No newline at end of file
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/plugin.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/plugin.properties
new file mode 100644
index 00000000000..556958d2ac1
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName=Papyrus Internationalization for Editor Welcome Page
+providerName=Eclipse Modeling Project
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/plugin.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/plugin.xml
new file mode 100644
index 00000000000..e5b77e9ba22
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/plugin.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+
+<plugin>
+ <extension
+ point="org.eclipse.papyrus.infra.properties.contexts">
+ <context
+ contextModel="model/general/internationalization.ctx">
+ </context>
+ </extension>
+ <extension
+ point="org.eclipse.papyrus.infra.properties.environments">
+ <environment
+ environmentModel="model/environment.xmi">
+ </environment>
+ </extension>
+ <extension
+ point="org.eclipse.papyrus.infra.properties.ui.context">
+ <preferencePageBinding
+ context="welcome-internationalization"
+ page="org.eclipse.papyrus.infra.editor.welcome.content">
+ </preferencePageBinding>
+ </extension>
+</plugin>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/pom.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/pom.xml
new file mode 100644
index 00000000000..b0450dffe5c
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrus</groupId>
+ <artifactId>org.eclipse.papyrus.infra-internationalization</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.papyrus.infra.editor.welcome.internationalization</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/Activator.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/Activator.java
new file mode 100644
index 00000000000..06e75c1c076
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/Activator.java
@@ -0,0 +1,77 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.editor.welcome.internationalization;
+
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+ /**
+ * The plug-in ID.
+ */
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.infra.editor.welcome.internationalization"; //$NON-NLS-1$
+
+ /**
+ * The shared instance.
+ */
+ private static Activator plugin;
+
+ /**
+ * The log helper.
+ */
+ public static LogHelper log;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(final BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ log = new LogHelper(this);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(final BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/InternationalizationWelcomeModelElement.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/InternationalizationWelcomeModelElement.java
new file mode 100644
index 00000000000..8696a73b925
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/InternationalizationWelcomeModelElement.java
@@ -0,0 +1,115 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.editor.welcome.internationalization.modelelements;
+
+import org.eclipse.core.databinding.observable.IObservable;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.papyrus.infra.properties.ui.modelelement.EMFModelElement;
+
+/**
+ * The internationalization welcome model element.
+ */
+public class InternationalizationWelcomeModelElement extends EMFModelElement {
+
+ /**
+ * The private storage identifier.
+ */
+ private final String PRIVATE_STORAGE = "privateStorage"; //$NON-NLS-1$
+
+ /**
+ * The useInternationalization identifier.
+ */
+ private final String USE_INTERNATIONALIZATION = "useInternationalization"; //$NON-NLS-1$
+
+ /**
+ * The language identifier.
+ */
+ private final String LANGUAGE = "language"; //$NON-NLS-1$
+
+ /**
+ * Constructor.
+ *
+ * @param source
+ * The source eObject.
+ * @param domain
+ * The current editing domain.
+ */
+ public InternationalizationWelcomeModelElement(final EObject source, final EditingDomain domain) {
+ super(source, domain);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.properties.ui.modelelement.EMFModelElement#doGetObservable(java.lang.String)
+ */
+ @Override
+ protected IObservable doGetObservable(final String propertyPath) {
+ IObservable result = null;
+
+ switch (propertyPath) {
+ case PRIVATE_STORAGE:
+ result = new PrivateInternationalizationPreferenceObservableValue(domain);
+ break;
+ case USE_INTERNATIONALIZATION:
+ result = new UseInternationalizationObservableValue(domain);
+ break;
+ case LANGUAGE:
+ result = new LanguageObservableValue(domain);
+ break;
+ default:
+ break;
+ }
+
+ return null != result ? result : super.doGetObservable(propertyPath);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.properties.ui.modelelement.EMFModelElement#isFeatureEditable(java.lang.String)
+ */
+ @Override
+ protected boolean isFeatureEditable(final String propertyPath) {
+ boolean result;
+
+ switch (propertyPath) {
+ case PRIVATE_STORAGE:
+ result = true;
+ break;
+ case USE_INTERNATIONALIZATION:
+ result = true;
+ break;
+ case LANGUAGE:
+ result = true;
+ break;
+ default:
+ result = super.isFeatureEditable(propertyPath);
+ break;
+ }
+
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.properties.ui.modelelement.EMFModelElement#isElementEditable()
+ */
+ @Override
+ protected boolean isElementEditable() {
+ return true;
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/InternationalizationWelcomeModelElementFactory.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/InternationalizationWelcomeModelElementFactory.java
new file mode 100644
index 00000000000..5dd2bdcc913
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/InternationalizationWelcomeModelElementFactory.java
@@ -0,0 +1,51 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.editor.welcome.internationalization.modelelements;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.papyrus.infra.editor.welcome.internationalization.Activator;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrus.infra.properties.contexts.DataContextElement;
+import org.eclipse.papyrus.infra.properties.ui.modelelement.AbstractEMFModelElementFactory;
+
+/**
+ * The internationalization welcome model element factory for the welcome properties of the internationalization.
+ */
+public class InternationalizationWelcomeModelElementFactory extends AbstractEMFModelElementFactory<InternationalizationWelcomeModelElement> {
+
+ /**
+ * Constructor.
+ */
+ public InternationalizationWelcomeModelElementFactory() {
+ super();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.properties.ui.modelelement.AbstractModelElementFactory#doCreateFromSource(java.lang.Object, org.eclipse.papyrus.infra.properties.contexts.DataContextElement)
+ */
+ @Override
+ protected InternationalizationWelcomeModelElement doCreateFromSource(final Object sourceElement, final DataContextElement context) {
+ final EObject source = EMFHelper.getEObject(sourceElement);
+ if (null == source) {
+ Activator.log.warn("Unable to resolve the selected element to an EObject"); //$NON-NLS-1$
+ return null;
+ }
+
+ final EditingDomain domain = EMFHelper.resolveEditingDomain(source);
+ return new InternationalizationWelcomeModelElement(source, domain);
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/LanguageObservableValue.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/LanguageObservableValue.java
new file mode 100644
index 00000000000..062a8556070
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/LanguageObservableValue.java
@@ -0,0 +1,174 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.editor.welcome.internationalization.modelelements;
+
+import org.eclipse.core.databinding.observable.IObserving;
+import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.emf.common.command.UnexecutableCommand;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.emf.commands.AddEAnnotationDetailCommand;
+import org.eclipse.papyrus.infra.emf.commands.AddToResourceCommand;
+import org.eclipse.papyrus.infra.emf.commands.RemoveEAnnotationDetailCommand;
+import org.eclipse.papyrus.infra.emf.commands.RemoveFromResourcecommand;
+import org.eclipse.papyrus.infra.emf.gmf.command.GMFtoEMFCommandWrapper;
+import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForResource;
+import org.eclipse.papyrus.infra.internationalization.common.command.LocaleInternationalizationPreferenceCommand;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationAnnotationResourceUtils;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesConstants;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesUtils;
+import org.eclipse.papyrus.infra.internationalization.modelresource.InternationalizationPreferenceModel;
+import org.eclipse.papyrus.infra.internationalization.ui.Activator;
+import org.eclipse.papyrus.infra.internationalization.utils.InternationalizationPreferenceModelUtils;
+
+/**
+ * The observable value for the language internationalization preference and annotation detail.
+ */
+public class LanguageObservableValue extends AbstractObservableValue<String> implements IObserving {
+
+ /**
+ * The editing domain to execute the command.
+ */
+ private EditingDomain domain;
+
+ /**
+ * Constructor.
+ *
+ * @param domain
+ * The editing domain.
+ */
+ public LanguageObservableValue(final EditingDomain domain) {
+ super();
+ this.domain = domain;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.IObserving#getObserved()
+ */
+ @Override
+ public Object getObserved() {
+ final InternationalizationPreferenceModel model = InternationalizationPreferenceModelUtils.getInternationalizationPreferenceModel((ModelSet) domain.getResourceSet());
+ return model.getPrivateResourceURI();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.value.IObservableValue#getValueType()
+ */
+ @Override
+ public Object getValueType() {
+ return String.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.value.AbstractObservableValue#doGetValue()
+ */
+ @Override
+ protected String doGetValue() {
+ final InternationalizationPreferenceModel model = InternationalizationPreferenceModelUtils.getInternationalizationPreferenceModel((ModelSet) domain.getResourceSet());
+ return InternationalizationPreferencesUtils.getLocalePreference(model.getPrivateResourceURI()).toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.value.AbstractObservableValue#doSetValue(java.lang.Object)
+ */
+ @Override
+ protected void doSetValue(final String value) {
+ final Command command = getSetCommand(value);
+ domain.getCommandStack().execute(command);
+ }
+
+ /**
+ * Returns the command used to edit the value.
+ *
+ * @param value
+ * The new value
+ * @return
+ * The Set command used to edit the value
+ */
+ protected Command getSetCommand(final String value) {
+ boolean needCreateAnnotation = true;
+
+ final InternationalizationPreferenceModel model = InternationalizationPreferenceModelUtils.getInternationalizationPreferenceModel((ModelSet) domain.getResourceSet());
+ final Resource resource = model.getResource();
+
+ // Search the internationalization annotation in the notation resource
+ EAnnotation annotation = InternationalizationAnnotationResourceUtils.getInternationalizationAnnotation(resource);
+
+ final CompoundCommand compoundCommand = new CompoundCommand("Create internationalization command"); //$NON-NLS-1$
+
+ if (null != annotation) {
+ if (annotation.getDetails().containsKey(InternationalizationPreferencesConstants.LANGUAGE_PREFERENCE)) {
+ try {
+ final TransactionalEditingDomain domainForResource = ServiceUtilsForResource.getInstance().getTransactionalEditingDomain(resource);
+
+ // Remove the details from annotation
+ compoundCommand.append(new RemoveEAnnotationDetailCommand(domainForResource, annotation, InternationalizationPreferencesConstants.LANGUAGE_PREFERENCE));
+
+ // If the detail is the only one, delete the annotation
+ if (1 == annotation.getDetails().size()) {
+ compoundCommand.append(new RemoveFromResourcecommand(domainForResource, resource, annotation));
+ } else {
+ needCreateAnnotation = false;
+ }
+ } catch (final ServiceException e) {
+ Activator.log.error(e);
+ }
+ } else {
+ needCreateAnnotation = false;
+ }
+ }
+
+ if (null != value) {
+ // Create the annotation if the internationalization value
+ // is not false
+ if (needCreateAnnotation) {
+ annotation = EcoreFactory.eINSTANCE.createEAnnotation();
+ annotation
+ .setSource(InternationalizationPreferencesConstants.INTERNATIONALIZATION_ANNOTATION_LABEL);
+ annotation.getDetails().put(InternationalizationPreferencesConstants.LANGUAGE_PREFERENCE,
+ value);
+ compoundCommand.append(new GMFtoEMFCommandWrapper(new AddToResourceCommand(((ModelSet) resource.getResourceSet()).getTransactionalEditingDomain(), resource, annotation)));
+ } else {
+ try {
+ final TransactionalEditingDomain domainForResource = ServiceUtilsForResource.getInstance().getTransactionalEditingDomain(resource);
+
+ compoundCommand.append(new AddEAnnotationDetailCommand(domainForResource, annotation, InternationalizationPreferencesConstants.LANGUAGE_PREFERENCE, value));
+ } catch (final ServiceException e) {
+ Activator.log.error(e);
+ }
+ }
+
+ // Manage the preference by command
+ compoundCommand.append(new LocaleInternationalizationPreferenceCommand(model.getPrivateResourceURI(),
+ value));
+ }
+
+ return !compoundCommand.getCommandList().isEmpty() ? compoundCommand : UnexecutableCommand.INSTANCE;
+ }
+} \ No newline at end of file
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/PrivateInternationalizationPreferenceObservableValue.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/PrivateInternationalizationPreferenceObservableValue.java
new file mode 100644
index 00000000000..8ec4e6ad70b
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/PrivateInternationalizationPreferenceObservableValue.java
@@ -0,0 +1,171 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.editor.welcome.internationalization.modelelements;
+
+import static org.eclipse.core.databinding.observable.Diffs.createValueDiff;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Objects;
+
+import org.eclipse.core.databinding.observable.Diffs;
+import org.eclipse.core.databinding.observable.Realm;
+import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.editor.welcome.internationalization.Activator;
+import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForResourceSet;
+import org.eclipse.papyrus.infra.internationalization.commands.InternationalizationPreferenceCommandFactory;
+import org.eclipse.papyrus.infra.internationalization.modelresource.InternationalizationPreferenceModel;
+import org.eclipse.papyrus.infra.internationalization.utils.InternationalizationPreferenceModelUtils;
+import org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor;
+
+/**
+ * Encapsulation of the "shared layout" property of the Papyrus Editor.
+ */
+public class PrivateInternationalizationPreferenceObservableValue extends AbstractObservableValue<Boolean> implements PropertyChangeListener {
+
+ /**
+ * The internationalization preference model.
+ */
+ private InternationalizationPreferenceModel internationalizationPrefModel;
+
+ /**
+ * The current editing domain.
+ */
+ protected final EditingDomain domain;
+
+ /**
+ * Constructor.
+ *
+ * @param domain
+ * The current editing domain.
+ */
+ public PrivateInternationalizationPreferenceObservableValue(final EditingDomain domain) {
+ this(Realm.getDefault(), domain);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param realm
+ * The {@link Realm}.
+ * @param domain
+ * The current editing domain.
+ */
+ public PrivateInternationalizationPreferenceObservableValue(final Realm realm, final EditingDomain domain) {
+ super(realm);
+
+ this.domain = domain;
+
+ internationalizationPrefModel = InternationalizationPreferenceModelUtils.getInternationalizationPreferenceModel((ModelSet) domain.getResourceSet());
+ if (null != internationalizationPrefModel) {
+ internationalizationPrefModel.addPropertyChangeListener(InternationalizationPreferenceModel.PROPERTY_LEGACY_MODE, this);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.AbstractObservable#dispose()
+ */
+ @Override
+ public synchronized void dispose() {
+ if (null != internationalizationPrefModel) {
+ internationalizationPrefModel.removePropertyChangeListener(InternationalizationPreferenceModel.PROPERTY_LEGACY_MODE, this);
+ internationalizationPrefModel = null;
+ }
+
+ super.dispose();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.value.AbstractObservableValue#doGetValue()
+ */
+ @Override
+ protected Boolean doGetValue() {
+ return internationalizationPrefModel.isLegacyMode();
+ }
+
+ /**
+ * Get the command for the private storage.
+ *
+ * @param factory
+ * The factory to create the command.
+ * @return The command to manage the private storage.
+ */
+ protected Command getToggleCommand(final InternationalizationPreferenceCommandFactory factory) {
+ return factory.createTogglePrivateStorageCommand();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.value.IObservableValue#getValueType()
+ */
+ @Override
+ public Object getValueType() {
+ return Boolean.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.value.AbstractObservableValue#doSetValue(java.lang.Object)
+ */
+ @Override
+ protected void doSetValue(final Boolean value) {
+ Boolean oldValue = getValue();
+ if (!Objects.equals(oldValue, value)) {
+ IMultiDiagramEditor editor;
+
+ try {
+ editor = ServiceUtilsForResourceSet.getInstance().getService(IMultiDiagramEditor.class, domain.getResourceSet());
+ final ModelSet modelSet = (ModelSet) editor.getAdapter(EditingDomain.class).getResourceSet();
+ final Command command = getToggleCommand(new InternationalizationPreferenceCommandFactory(modelSet));
+ if (command.canExecute()) {
+ // Don't do this in an undoable command on the history
+ try {
+ domain.getCommandStack().execute(command);
+ fireValueChange(Diffs.createValueDiff(oldValue, value));
+ } catch (Exception e) {
+ Activator.log.error("Failed to toggle editor page layout option", e); //$NON-NLS-1$
+ }
+ }
+ } catch (final ServiceException e) {
+ throw new IllegalStateException("No editor available in the service registry", e); //$NON-NLS-1$
+ }
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+ */
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ if (evt.getSource() == internationalizationPrefModel) {
+ switch (evt.getPropertyName()) {
+ case InternationalizationPreferenceModel.PROPERTY_LEGACY_MODE:
+ fireValueChange(createValueDiff(!(Boolean) evt.getOldValue(), !(Boolean) evt.getNewValue()));
+ break;
+ }
+ }
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/UseInternationalizationObservableValue.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/UseInternationalizationObservableValue.java
new file mode 100644
index 00000000000..d90e174f181
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/modelelements/UseInternationalizationObservableValue.java
@@ -0,0 +1,165 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.editor.welcome.internationalization.modelelements;
+
+import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.emf.common.command.UnexecutableCommand;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.emf.commands.AddEAnnotationDetailCommand;
+import org.eclipse.papyrus.infra.emf.commands.AddToResourceCommand;
+import org.eclipse.papyrus.infra.emf.commands.RemoveEAnnotationDetailCommand;
+import org.eclipse.papyrus.infra.emf.commands.RemoveFromResourcecommand;
+import org.eclipse.papyrus.infra.emf.gmf.command.GMFtoEMFCommandWrapper;
+import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForResource;
+import org.eclipse.papyrus.infra.internationalization.common.command.UseInternationalizationPreferenceCommand;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationAnnotationResourceUtils;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesConstants;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesUtils;
+import org.eclipse.papyrus.infra.internationalization.modelresource.InternationalizationPreferenceModel;
+import org.eclipse.papyrus.infra.internationalization.ui.Activator;
+import org.eclipse.papyrus.infra.internationalization.utils.InternationalizationPreferenceModelUtils;
+
+/**
+ * The observable value for the use internationalization preference and annotation detail.
+ */
+public class UseInternationalizationObservableValue extends AbstractObservableValue<Boolean> {
+
+ /**
+ * The editing domain to execute the command.
+ */
+ private EditingDomain domain;
+
+ /**
+ * Constructor.
+ *
+ * @param domain
+ * The editing domain.
+ */
+ public UseInternationalizationObservableValue(final EditingDomain domain) {
+ super();
+ this.domain = domain;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.value.IObservableValue#getValueType()
+ */
+ @Override
+ public Object getValueType() {
+ return Boolean.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.value.AbstractObservableValue#doGetValue()
+ */
+ @Override
+ protected Boolean doGetValue() {
+ final InternationalizationPreferenceModel model = InternationalizationPreferenceModelUtils.getInternationalizationPreferenceModel((ModelSet) domain.getResourceSet());
+ return InternationalizationPreferencesUtils.getInternationalizationPreference(model.getPrivateResourceURI());
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.databinding.observable.value.AbstractObservableValue#doSetValue(java.lang.Object)
+ */
+ @Override
+ protected void doSetValue(final Boolean value) {
+ final Command command = getSetCommand(value);
+ domain.getCommandStack().execute(command);
+ }
+
+ /**
+ * Returns the command used to edit the value.
+ *
+ * @param value
+ * The new value
+ * @return
+ * The Set command used to edit the value
+ */
+ protected Command getSetCommand(final Boolean value) {
+ boolean needCreateAnnotation = true;
+
+ final InternationalizationPreferenceModel model = InternationalizationPreferenceModelUtils.getInternationalizationPreferenceModel((ModelSet) domain.getResourceSet());
+ final Resource resource = model.getResource();
+
+ // Search the internationalization annotation in the notation resource
+ EAnnotation annotation = InternationalizationAnnotationResourceUtils.getInternationalizationAnnotation(resource);
+
+ final CompoundCommand compoundCommand = new CompoundCommand("Create internationalization command"); //$NON-NLS-1$
+
+ if (null != annotation) {
+ if (annotation.getDetails().containsKey(InternationalizationPreferencesConstants.USE_DETAIL_ANNOTATION_LABEL)) {
+ try {
+ final TransactionalEditingDomain domainForResource = ServiceUtilsForResource.getInstance().getTransactionalEditingDomain(resource);
+
+ // Remove the details from annotation
+ compoundCommand.append(new RemoveEAnnotationDetailCommand(domainForResource, annotation, InternationalizationPreferencesConstants.USE_DETAIL_ANNOTATION_LABEL));
+
+ // If the detail is the only one, delete the annotation
+ if (1 == annotation.getDetails().size()) {
+ compoundCommand.append(new RemoveFromResourcecommand(domainForResource, resource, annotation));
+ } else {
+ needCreateAnnotation = false;
+ }
+ } catch (final ServiceException e) {
+ Activator.log.error(e);
+ }
+
+ // Remove the preference by command
+ compoundCommand.append(new UseInternationalizationPreferenceCommand(model.getPrivateResourceURI(), false));
+ } else {
+ needCreateAnnotation = false;
+ }
+ }
+
+ if (value) {
+ // Create the annotation if the internationalization value
+ // is not false
+ if (needCreateAnnotation) {
+ annotation = EcoreFactory.eINSTANCE.createEAnnotation();
+ annotation.setSource(InternationalizationPreferencesConstants.INTERNATIONALIZATION_ANNOTATION_LABEL);
+ annotation.getDetails().put(
+ InternationalizationPreferencesConstants.USE_DETAIL_ANNOTATION_LABEL,
+ Boolean.toString(value));
+ compoundCommand.append(new GMFtoEMFCommandWrapper(new AddToResourceCommand(((ModelSet) resource.getResourceSet()).getTransactionalEditingDomain(), resource, annotation)));
+ } else {
+ try {
+ final TransactionalEditingDomain domainForResource = ServiceUtilsForResource.getInstance().getTransactionalEditingDomain(resource);
+
+ compoundCommand.append(new AddEAnnotationDetailCommand(domainForResource, annotation, InternationalizationPreferencesConstants.USE_DETAIL_ANNOTATION_LABEL, Boolean.toString(value)));
+ } catch (final ServiceException e) {
+ Activator.log.error(e);
+ }
+ }
+
+ // Manage the preference by command
+ compoundCommand.append(new UseInternationalizationPreferenceCommand(model.getPrivateResourceURI(),
+ value));
+ }
+
+ return !compoundCommand.getCommandList().isEmpty() ? compoundCommand : UnexecutableCommand.INSTANCE;
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/widgets/LanguageDialog.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/widgets/LanguageDialog.java
new file mode 100644
index 00000000000..240b2ed864f
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/widgets/LanguageDialog.java
@@ -0,0 +1,55 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.editor.welcome.internationalization.widgets;
+
+import org.eclipse.papyrus.infra.properties.ui.widgets.AbstractPropertyEditor;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * The language property dialog widget for the internationalization.
+ */
+public class LanguageDialog extends AbstractPropertyEditor {
+
+ /**
+ * The LanguageDialog widget.
+ */
+ protected org.eclipse.papyrus.infra.editor.welcome.internationalization.widgets.editors.LanguageDialog editor;
+
+ /**
+ * Constructor.
+ *
+ * @param parent
+ * The composite in which the widget will be displayed.
+ * @param style
+ * The style for the widget.
+ */
+ public LanguageDialog(final Composite parent, final int style) {
+ setEditor(createLanguageDialogEditor(parent, style));
+ }
+
+ /**
+ * Creates the language dialog.
+ *
+ * @param parent
+ * The composite in which the widget will be displayed.
+ * @param style
+ * The style for the widget.
+ * @return The language dialog.
+ */
+ protected org.eclipse.papyrus.infra.editor.welcome.internationalization.widgets.editors.LanguageDialog createLanguageDialogEditor(
+ final Composite parent, final int style) {
+ return editor = new org.eclipse.papyrus.infra.editor.welcome.internationalization.widgets.editors.LanguageDialog(parent, style);
+ }
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/widgets/editors/LanguageDialog.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/widgets/editors/LanguageDialog.java
new file mode 100644
index 00000000000..c5a7a4820c7
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.editor.welcome.internationalization/src/org/eclipse/papyrus/infra/editor/welcome/internationalization/widgets/editors/LanguageDialog.java
@@ -0,0 +1,266 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.editor.welcome.internationalization.widgets.editors;
+
+import java.util.Locale;
+
+import org.eclipse.core.databinding.observable.IObserving;
+import org.eclipse.core.databinding.observable.value.IObservableValue;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.fieldassist.ControlDecoration;
+import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesUtils;
+import org.eclipse.papyrus.infra.internationalization.ui.dialogs.InternationalizationDialog;
+import org.eclipse.papyrus.infra.widgets.Activator;
+import org.eclipse.papyrus.infra.widgets.editors.AbstractValueEditor;
+import org.eclipse.papyrus.infra.widgets.messages.Messages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * This allows to define the language editor.
+ */
+public class LanguageDialog extends AbstractValueEditor implements SelectionListener {
+
+ /**
+ * The CLabel displaying the current value.
+ */
+ protected final CLabel currentValueLabel;
+
+ /**
+ * The Button used to modify the value.
+ */
+ protected Button modifyValuesButton;
+
+ /**
+ * The dialog used to select the internationalization value.
+ */
+ protected final InternationalizationDialog dialog;
+
+ /**
+ * The current value for this editor
+ */
+ protected Object value;
+
+ /**
+ * Boolean to determinate if the editors are read-only.
+ */
+ protected boolean readOnly;
+
+ /**
+ * Constructs a new LanguageDialog in the given parent Composite. The style
+ * will be applied to the CLabel displaying the current value.
+ *
+ * @param parent
+ * The parent composite.
+ * @param style
+ * The style of the composites.
+ */
+ public LanguageDialog(final Composite parent, final int style) {
+ super(parent, style);
+ final GridData gridData = getDefaultLayoutData();
+
+ currentValueLabel = factory.createCLabel(this, null, factory.getBorderStyle() | style);
+ currentValueLabel.setLayoutData(gridData);
+ currentValueLabel.addMouseListener(new MouseAdapter() {
+
+ @Override
+ public void mouseDoubleClick(MouseEvent e) {
+ editAction();
+ }
+
+ });
+
+ dialog = createDialog(parent.getShell());
+
+ createButton();
+ updateControls();
+ controlDecoration = new ControlDecoration(currentValueLabel, SWT.TOP | SWT.LEFT);
+
+ gridData.horizontalIndent = FieldDecorationRegistry.getDefault().getMaximumDecorationWidth();
+ }
+
+ /**
+ * This allows to create the internationalization language dialog.
+ *
+ * @param shell
+ * The parent shell.
+ * @return The created dialog.
+ */
+ protected InternationalizationDialog createDialog(final Shell shell) {
+ return new InternationalizationDialog(shell, null, false);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.widgets.editors.AbstractValueEditor#setModelObservable(org.eclipse.core.databinding.observable.value.IObservableValue)
+ */
+ @SuppressWarnings("rawtypes")
+ @Override
+ public void setModelObservable(final IObservableValue modelProperty) {
+ super.setModelObservable(modelProperty);
+
+ if (modelProperty instanceof IObserving) {
+ Object observed = ((IObserving) modelProperty).getObserved();
+ if (observed instanceof URI) {
+ URI resourceURI = (URI) observed;
+ dialog.setResourceURI(resourceURI);
+
+ final String localeAsString = InternationalizationPreferencesUtils.getLocalePreference(resourceURI).toString();
+ currentValueLabel.setText(localeAsString);
+ }
+ }
+ }
+
+ /**
+ * This allow to create the buttons.
+ */
+ protected void createButton() {
+ ((GridLayout) getLayout()).numColumns += 1;
+
+ modifyValuesButton = factory.createButton(this, null, SWT.PUSH);
+ modifyValuesButton.setImage(Activator.getDefault().getImage("/icons/Edit_12x12.gif")); //$NON-NLS-1$
+ modifyValuesButton.setToolTipText(Messages.ReferenceDialog_EditValue);
+ modifyValuesButton.addSelectionListener(this);
+ }
+
+ /**
+ * The action executed when the "edit" button is selected Edits the object
+ * that is currently selected
+ */
+ protected void editAction() {
+ int result = dialog.open();
+ if (Window.OK == result) {
+ final Locale newValue = dialog.getLocaleValue();
+ if (null != newValue) {
+ setValue(newValue.toString());
+ }
+ }
+ }
+
+ /**
+ * This allows to update the controls.
+ */
+ protected void updateControls() {
+ modifyValuesButton.setEnabled(!readOnly);
+ }
+
+ /**
+ * This allows to update the label text.
+ */
+ protected void updateLabel() {
+ currentValueLabel.setText((String) getValue());
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.widgets.editors.AbstractValueEditor#getValue()
+ */
+ @Override
+ public Object getValue() {
+ if (modelProperty != null) {
+ return modelProperty.getValue();
+ }
+ return value;
+ }
+
+ /**
+ * Set the value.
+ *
+ * @param value
+ * The value to set.
+ */
+ @SuppressWarnings("unchecked")
+ protected void setValue(final Object value) {
+ this.value = value;
+ try {
+ if (modelProperty != null) {
+ modelProperty.setValue(value);
+ }
+ } catch (Exception e) {
+ // Do nothing
+ }
+
+ updateLabel();
+ commit();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.widgets.editors.AbstractEditor#getEditableType()
+ */
+ @Override
+ public Object getEditableType() {
+ return Object.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.widgets.editors.AbstractEditor#setReadOnly(boolean)
+ */
+ @Override
+ public void setReadOnly(final boolean readOnly) {
+ this.readOnly = readOnly;
+ updateControls();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.widgets.editors.AbstractEditor#isReadOnly()
+ */
+ @Override
+ public boolean isReadOnly() {
+ return readOnly;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ Widget widget = e.widget;
+ if (widget == modifyValuesButton) {
+ editAction();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetDefaultSelected(final SelectionEvent e) {
+ // Do nothing
+ }
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/.classpath b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/.classpath
new file mode 100644
index 00000000000..eca7bdba8f0
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/.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/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/.project b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/.project
new file mode 100644
index 00000000000..89db6d88791
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/.project
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.internationalization.common</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.oomph.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>check.maven.pom</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>ignore.lower.bound.dependency.ranges</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.papyrus.releng.main.release/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.oomph.version.VersionNature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/.settings/org.eclipse.jdt.core.prefs b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..0c68a61dca8
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+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
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/META-INF/MANIFEST.MF b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..d0413afa7d4
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.infra.internationalization.common;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.papyrus.infra.internationalization.common,
+ org.eclipse.papyrus.infra.internationalization.common.command,
+ org.eclipse.papyrus.infra.internationalization.common.editor,
+ org.eclipse.papyrus.infra.internationalization.common.utils
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.12.0,4.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.12.0,3.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.ui.workbench;bundle-version="[3.108.0,4.0.0)",
+ org.eclipse.papyrus.infra.ui;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.jface;bundle-version="[3.12.0,4.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.papyrus.infra.internationalization.common.Activator
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/about.html b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/about.html
new file mode 100644
index 00000000000..598b3684879
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/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/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/build.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/build.properties
new file mode 100644
index 00000000000..2964bc2d7b1
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/build.properties
@@ -0,0 +1,11 @@
+#
+
+bin.includes = .,\
+ META-INF/,\
+ about.html,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.includes = about.html
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/plugin.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/plugin.properties
new file mode 100644
index 00000000000..a4775a24081
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = Papyrus Internationalization Common
+providerName = Eclipse Modeling Project
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/plugin.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/plugin.xml
new file mode 100644
index 00000000000..7ac51d15095
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/plugin.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+</plugin>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/pom.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/pom.xml
new file mode 100644
index 00000000000..8f8eae08258
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.papyrus.infra-internationalization</artifactId>
+ <groupId>org.eclipse.papyrus</groupId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.papyrus.infra.internationalization.common</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/Activator.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/Activator.java
new file mode 100644
index 00000000000..ae1975d5007
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/Activator.java
@@ -0,0 +1,153 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.common;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.papyrus.infra.core.resource.PapyrusProjectScope;
+import org.eclipse.papyrus.infra.ui.preferences.PapyrusScopedPreferenceStore;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+ /**
+ * The plug-in ID.
+ */
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.infra.internationalization.common"; //$NON-NLS-1$
+
+ /**
+ * The internationalization preference node label.
+ */
+ public static final String INTERNATIONALIZATION_NODE_LABEL = "internationalization"; //$NON-NLS-1$
+
+ /**
+ * The shared instance.
+ */
+ private static Activator plugin;
+
+ /**
+ * The log helper.
+ */
+ public static LogHelper log;
+
+ /**
+ * Storage for preferences. Use a list of preference store (one preference
+ * store by internationalization of a project).
+ */
+ private List<IPreferenceStore> preferencesStore;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ preferencesStore = new ArrayList<IPreferenceStore>(0);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(final BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ log = new LogHelper(this);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(final BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Get the preference store and create it if necessary.
+ *
+ * @param project
+ * The current project
+ * @param papyrusProjectName
+ * The current papyrus project name.
+ * @return The preference store.
+ */
+ public IPreferenceStore getInternationalizationPreferenceStore(final IProject project,
+ final String papyrusProjectName) {
+ IPreferenceStore result = null;
+ final IScopeContext scope = new PapyrusProjectScope(project, papyrusProjectName);
+ if (!preferencesStore.isEmpty()) {
+ final IEclipsePreferences scopePreferenceNode = scope.getNode(INTERNATIONALIZATION_NODE_LABEL);
+ final Iterator<IPreferenceStore> preferenceStoreIterator = preferencesStore.iterator();
+ while (preferenceStoreIterator.hasNext() && null == result) {
+ final IPreferenceStore preferenceStore = preferenceStoreIterator.next();
+ if (preferenceStore instanceof PapyrusScopedPreferenceStore) {
+ final IEclipsePreferences[] preferenceNodes = ((PapyrusScopedPreferenceStore) preferenceStore)
+ .getPreferenceNodes(false);
+ for (int index = 0; index < preferenceNodes.length && null == result; index++) {
+ if (preferenceNodes[index].equals(scopePreferenceNode)) {
+ result = preferenceStore;
+ }
+ }
+ }
+ }
+ }
+
+ if (null == result) {
+ result = new PapyrusScopedPreferenceStore(scope, INTERNATIONALIZATION_NODE_LABEL);
+ preferencesStore.add(result); // $NON-NLS-1$
+ }
+
+ return result;
+ }
+
+ /**
+ * Get the first preference store if existing, else a scoped preference
+ * store must be created and added to the list of preferences store.
+ *
+ * @return The preference store.
+ */
+ public IPreferenceStore getInternationalizationPreferenceStore() {
+ // Create the preference store lazily.
+ if (preferencesStore.isEmpty()) {
+ preferencesStore.add(new ScopedPreferenceStore(InstanceScope.INSTANCE, getBundle().getSymbolicName()));
+ }
+ return preferencesStore.get(0);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/command/LocaleInternationalizationPreferenceCommand.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/command/LocaleInternationalizationPreferenceCommand.java
new file mode 100644
index 00000000000..4d907295efc
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/command/LocaleInternationalizationPreferenceCommand.java
@@ -0,0 +1,98 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.common.command;
+
+import org.eclipse.emf.common.command.AbstractCommand;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesUtils;
+
+/**
+ * The command to modify the internationalization preference. We can't use the
+ * RecordingCommand because the modification are not applied to a resource
+ * directly.
+ */
+public class LocaleInternationalizationPreferenceCommand extends AbstractCommand {
+
+ /**
+ * The current resource URI corresponding to the internationalization
+ * preference.
+ */
+ protected URI resourceURI;
+
+ /**
+ * The new language value.
+ */
+ protected String newLanguageValue;
+
+ /**
+ * The old language value.
+ */
+ protected String oldLanguageValue;
+
+ /**
+ * Constructor.
+ *
+ * @param resourceURI
+ * The current resource URI.
+ * @param newLanguageValue
+ * The new language value.
+ */
+ public LocaleInternationalizationPreferenceCommand(final URI resourceURI, final String newLanguageValue) {
+ super("Modify locale internationalization preference"); //$NON-NLS-1$
+ this.resourceURI = resourceURI;
+ this.newLanguageValue = newLanguageValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.command.Command#execute()
+ */
+ @Override
+ public void execute() {
+ oldLanguageValue = InternationalizationPreferencesUtils.getLocalePreference(resourceURI).toString();
+ InternationalizationPreferencesUtils.setLanguagePreference(resourceURI, newLanguageValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.command.AbstractCommand#undo()
+ */
+ @Override
+ public void undo() {
+ InternationalizationPreferencesUtils.setLanguagePreference(resourceURI, oldLanguageValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.command.Command#redo()
+ */
+ @Override
+ public void redo() {
+ InternationalizationPreferencesUtils.setLanguagePreference(resourceURI, newLanguageValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.command.AbstractCommand#prepare()
+ */
+ @Override
+ protected boolean prepare() {
+ return null != resourceURI;
+ }
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/command/UseInternationalizationPreferenceCommand.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/command/UseInternationalizationPreferenceCommand.java
new file mode 100644
index 00000000000..887e31d851c
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/command/UseInternationalizationPreferenceCommand.java
@@ -0,0 +1,98 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.common.command;
+
+import org.eclipse.emf.common.command.AbstractCommand;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesUtils;
+
+/**
+ * The command to modify the internationalization preference. We can't use the
+ * RecordingCommand because the modification are not applied to a resource
+ * directly.
+ */
+public class UseInternationalizationPreferenceCommand extends AbstractCommand {
+
+ /**
+ * The current resource URI corresponding to the internationalization
+ * preference.
+ */
+ protected URI resourceURI;
+
+ /**
+ * The new boolean value.
+ */
+ protected boolean newBooleanValue;
+
+ /**
+ * The old boolean value.
+ */
+ protected boolean oldBooleanValue;
+
+ /**
+ * Constructor.
+ *
+ * @param resourceURI
+ * The current resource URI.
+ * @param newBooleanValue
+ * The new boolean value.
+ */
+ public UseInternationalizationPreferenceCommand(final URI resourceURI, final boolean newBooleanValue) {
+ super("Modify use internationalization preference"); //$NON-NLS-1$
+ this.resourceURI = resourceURI;
+ this.newBooleanValue = newBooleanValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.command.Command#execute()
+ */
+ @Override
+ public void execute() {
+ oldBooleanValue = InternationalizationPreferencesUtils.getInternationalizationPreference(resourceURI);
+ InternationalizationPreferencesUtils.setInternationalizationPreference(resourceURI, newBooleanValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.command.AbstractCommand#undo()
+ */
+ @Override
+ public void undo() {
+ InternationalizationPreferencesUtils.setInternationalizationPreference(resourceURI, oldBooleanValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.command.Command#redo()
+ */
+ @Override
+ public void redo() {
+ InternationalizationPreferencesUtils.setInternationalizationPreference(resourceURI, newBooleanValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.command.AbstractCommand#prepare()
+ */
+ @Override
+ protected boolean prepare() {
+ return null != resourceURI;
+ }
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/editor/IInternationalizationEditor.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/editor/IInternationalizationEditor.java
new file mode 100644
index 00000000000..40b46182a1f
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/editor/IInternationalizationEditor.java
@@ -0,0 +1,34 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.common.editor;
+
+/**
+ * Interface to define if the editor support the internationalization and the corresponding label modification.
+ */
+public interface IInternationalizationEditor {
+
+ /**
+ * This allows to modify the part name.
+ *
+ * @param name
+ * The new name of the editor.
+ */
+ public void modifyPartName(final String name);
+
+ /**
+ * This allows to refresh the editor part.
+ */
+ public void refreshEditorPart();
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationAnnotationResourceUtils.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationAnnotationResourceUtils.java
new file mode 100644
index 00000000000..5da45e6d9fd
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationAnnotationResourceUtils.java
@@ -0,0 +1,49 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.common.utils;
+
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+
+/**
+ * Define the utils method corresponding to the internationalization annotation
+ * and its resource.
+ */
+public class InternationalizationAnnotationResourceUtils {
+
+ /**
+ * This allows to get the annotation corresponding to the
+ * internationalization in the resource in parameter if exists.
+ *
+ * @param resource
+ * The resource to check
+ * @return The internationalization annotation if exists, <code>null</code>
+ * otherwise.
+ */
+ public static EAnnotation getInternationalizationAnnotation(final Resource resource) {
+ EAnnotation result = null;
+
+ for (final EObject objectContent : resource.getContents()) {
+ if (objectContent instanceof EAnnotation
+ && InternationalizationPreferencesConstants.INTERNATIONALIZATION_ANNOTATION_LABEL
+ .equals(((EAnnotation) objectContent).getSource())) {
+ result = (EAnnotation) objectContent;
+ }
+ }
+
+ return result;
+ }
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationPreferencesConstants.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationPreferencesConstants.java
new file mode 100644
index 00000000000..b7bf90ed5c0
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationPreferencesConstants.java
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.common.utils;
+
+/**
+ * This class defines the constants for the internationalization preferences.
+ */
+public class InternationalizationPreferencesConstants {
+
+ /**
+ * The internationalization preference label.
+ */
+ public static final String USE_INTERNATIONALIZATION_PREFERENCE = "useInternationalization"; //$NON-NLS-1$
+
+ /**
+ * The label for the internationalization annotation.
+ */
+ public static final String INTERNATIONALIZATION_ANNOTATION_LABEL = "Internationalization"; //$NON-NLS-1$
+
+ /**
+ * The label of the internationalization annotation detail.
+ */
+ public static final String USE_DETAIL_ANNOTATION_LABEL = "use"; //$NON-NLS-1$
+
+ /**
+ * The language preference name.
+ */
+ public static final String LANGUAGE_PREFERENCE = "language"; //$NON-NLS-1$
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationPreferencesUtils.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationPreferencesUtils.java
new file mode 100644
index 00000000000..58cb94f1f35
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationPreferencesUtils.java
@@ -0,0 +1,296 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.common.utils;
+
+import java.util.Locale;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.CommonPlugin;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.papyrus.infra.internationalization.common.Activator;
+
+/**
+ * The internationalization preference utils methods which allow to get or
+ * change the internationalization preference value.
+ */
+public class InternationalizationPreferencesUtils {
+
+ /**
+ * Get the preference store for the project containing the {@link EObject}
+ * in parameter.
+ *
+ * @param eObject
+ * The eObject.
+ * @return The preference store for the project containing the EObject.
+ */
+ public static IPreferenceStore getPreferenceStore(final EObject eObject) {
+ return getPreferenceStore(getRootContainer(eObject).eResource());
+ }
+
+ /**
+ * Get the preference store for the project containing the {@link Resource}
+ * in parameter.
+ *
+ * @param resource
+ * The resource.
+ * @return The preference store for the project containing the Resource.
+ */
+ public static IPreferenceStore getPreferenceStore(final Resource resource) {
+ IPreferenceStore result = null;
+
+ if (null != resource) {
+ result = getPreferenceStore(resource.getURI());
+ }
+
+ return result;
+ }
+
+ /**
+ * Get the preference store for the project containing the resource
+ * {@link URI} in parameter.
+ *
+ * @param resource
+ * The resource.
+ * @return The preference store for the project containing the resource URI.
+ */
+ public static IPreferenceStore getPreferenceStore(final URI uri) {
+ IPreferenceStore result = null;
+
+ if (null != uri) {
+ final String filePathString = CommonPlugin.resolve(uri).toFileString();
+
+ if (null != filePathString) {
+ final IFile resourceFile = ResourcesPlugin.getWorkspace().getRoot()
+ .getFileForLocation(new Path(filePathString));
+
+ if (null != resourceFile) {
+ final IProject currentProject = resourceFile.getProject();
+ final String papyrusProjectName = uri.trimFileExtension().lastSegment();
+
+ if (null != currentProject && !papyrusProjectName.isEmpty()) {
+ result = Activator.getDefault().getInternationalizationPreferenceStore(currentProject,
+ papyrusProjectName);
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * This allows to modify the internationalization preference value.
+ *
+ * @param eObject
+ * The {@link EObject) corresponding (to get its resource).
+ * @param value
+ * The new preference value.
+ */
+ public static void setInternationalizationPreference(final EObject eObject, final boolean value) {
+ setInternationalizationPreference(getRootContainer(eObject).eResource(), value);
+ }
+
+ /**
+ * This allows to modify the internationalization preference value.
+ *
+ * @param resource
+ * The {@link Resource) to get the papyrus project preferences.
+ * @param value
+ * The new preference value.
+ */
+ public static void setInternationalizationPreference(final Resource resource, final boolean value) {
+ setInternationalizationPreference(resource.getURI(), value);
+ }
+
+ /**
+ * This allows to modify the internationalization preference value.
+ *
+ * @param resourceURI
+ * The resource URI to get the papyrus project preferences.
+ * @param value
+ * The new preference value.
+ */
+ public static void setInternationalizationPreference(final URI resourceURI, final boolean value) {
+ final IPreferenceStore preferenceStore = getPreferenceStore(resourceURI);
+
+ if (null != preferenceStore) {
+ preferenceStore.setValue(InternationalizationPreferencesConstants.USE_INTERNATIONALIZATION_PREFERENCE,
+ value);
+ }
+ }
+
+ /**
+ * This allows to get the internationalization preference value.
+ *
+ * @param eObject
+ * The {@link EObject) corresponding (to get its resource).
+ * @return <code>true</code> if the preference value is set to true,
+ * <code>false</code> otherwise.
+ */
+ public static boolean getInternationalizationPreference(final EObject eObject) {
+ boolean result = false;
+ if(null != eObject.eResource()){
+ result = getInternationalizationPreference(getRootContainer(eObject).eResource());
+ }
+ return result;
+ }
+
+ /**
+ * This allows to get the internationalization preference value.
+ *
+ * @param resource
+ * The {@link Resource) to get the papyrus project preferences.
+ * @return <code>true</code> if the preference value is set to true,
+ * <code>false</code> otherwise.
+ */
+ public static boolean getInternationalizationPreference(final Resource resource) {
+ return getInternationalizationPreference(resource.getURI());
+ }
+
+ /**
+ * This allows to get the internationalization preference value.
+ *
+ * @param resourceURI
+ * The resource URI to get the papyrus project preferences.
+ * @return <code>true</code> if the preference value is set to true,
+ * <code>false</code> otherwise.
+ */
+ public static boolean getInternationalizationPreference(final URI resourceURI) {
+ boolean result = false;
+
+ final IPreferenceStore preferenceStore = getPreferenceStore(resourceURI);
+
+ if (null != preferenceStore && preferenceStore
+ .contains(InternationalizationPreferencesConstants.USE_INTERNATIONALIZATION_PREFERENCE)) {
+ result = preferenceStore
+ .getBoolean(InternationalizationPreferencesConstants.USE_INTERNATIONALIZATION_PREFERENCE);
+ }
+
+ return result;
+ }
+
+ /**
+ * Get the language preference (create it with the current locale if not
+ * existing).
+ *
+ * @param resource
+ * The {@link Resource) to get the papyrus project preferences.
+ * @return The language in the preferences.
+ */
+ private static String getLanguagePreference(final URI uri) {
+ String result = null;
+
+ final IPreferenceStore preferenceStore = getPreferenceStore(uri);
+ if (null != preferenceStore
+ && preferenceStore.contains(InternationalizationPreferencesConstants.LANGUAGE_PREFERENCE)) {
+ result = preferenceStore.getString(InternationalizationPreferencesConstants.LANGUAGE_PREFERENCE);
+ }
+
+ return result;
+ }
+
+ /**
+ * Get the locale preference created from the language preference.
+ *
+ * @param eObject
+ * The {@link EObject) corresponding (to get its resource).
+ * @return The locale preference.
+ */
+ public static Locale getLocalePreference(final EObject eObject) {
+ return getLocalePreference(getRootContainer(eObject).eResource().getURI());
+ }
+
+ /**
+ * Get the locale preference created from the language preference.
+ *
+ * @param resource
+ * The {@link Resource) to get the papyrus project preferences.
+ * @return The locale preference.
+ */
+ public static Locale getLocalePreference(final URI uri) {
+ final String localePreference = getLanguagePreference(uri);
+
+ Locale result = null;
+
+ if (null != localePreference) {
+ result = LocaleNameResolver.getLocaleFromString(localePreference);
+ } else {
+ result = Locale.getDefault();
+ }
+
+ return result;
+ }
+
+ /**
+ * This allows to set the language preference.
+ *
+ * @param eObject
+ * The {@link EObject) corresponding (to get its resource).
+ * @param language
+ * The language to set.
+ */
+ public static void setLanguagePreference(final EObject eObject, final String language) {
+ setLanguagePreference(getRootContainer(eObject).eResource(), language);
+ }
+
+ /**
+ * This allows to set the language preference.
+ *
+ * @param resource
+ * The {@link Resource) to get the papyrus project preferences.
+ * @param language
+ * The language to set.
+ */
+ public static void setLanguagePreference(final Resource resource, final String language) {
+ setLanguagePreference(resource.getURI(), language);
+ }
+
+ /**
+ * This allows to set the language preference.
+ *
+ * @param resourceURI
+ * The resource URI to get the papyrus project preferences.
+ * @param language
+ * The language to set.
+ */
+ public static void setLanguagePreference(final URI resourceURI, final String language) {
+ final IPreferenceStore preferenceStore = getPreferenceStore(resourceURI);
+
+ if (null != preferenceStore) {
+ preferenceStore.setValue(InternationalizationPreferencesConstants.LANGUAGE_PREFERENCE, language);
+ }
+ }
+
+ /**
+ * This allows to get the root container of the EObject in parameter.
+ *
+ * @param eObject The initial EObject.
+ * @return The root container.
+ */
+ protected static EObject getRootContainer(final EObject eObject){
+ EObject rootContainer = eObject;
+
+ while(null != rootContainer.eContainer()){
+ rootContainer = rootContainer.eContainer();
+ }
+
+ return rootContainer;
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/LocaleNameResolver.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/LocaleNameResolver.java
new file mode 100644
index 00000000000..699266d0fbf
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/LocaleNameResolver.java
@@ -0,0 +1,57 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.common.utils;
+
+import java.util.Locale;
+
+/**
+ * This allows to manage easily name for the locale.
+ */
+public class LocaleNameResolver {
+
+ /**
+ * The underscore constant.
+ */
+ public static final String UNDERSCORE = "_"; //$NON-NLS-1$
+
+ /**
+ * This allows to get the corresponding locale from a text.
+ *
+ * @param initialString
+ * The initial string representing a locale.
+ * @return The locale corresponding locale from the text in parameter.
+ */
+ public static final Locale getLocaleFromString(final String initialString) {
+ String language = ""; //$NON-NLS-1$
+ String country = ""; //$NON-NLS-1$
+ String variant = ""; //$NON-NLS-1$
+
+ if (initialString.contains(UNDERSCORE)) {
+ language = initialString.substring(0, initialString.indexOf(UNDERSCORE));
+ final String substringFirstUnderscore = initialString.substring(initialString.indexOf(UNDERSCORE) + 1,
+ initialString.length());
+ if (substringFirstUnderscore.contains(UNDERSCORE)) {
+ country = substringFirstUnderscore.substring(0, substringFirstUnderscore.indexOf(UNDERSCORE));
+ variant = substringFirstUnderscore.substring(substringFirstUnderscore.indexOf(UNDERSCORE) + 1,
+ substringFirstUnderscore.length());
+ } else {
+ country = substringFirstUnderscore;
+ }
+ } else {
+ language = initialString;
+ }
+
+ return new Locale(language, country, variant);
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/.classpath b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/.classpath
new file mode 100644
index 00000000000..eca7bdba8f0
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/.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/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/.project b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/.project
new file mode 100644
index 00000000000..e931db8e813
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/.project
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.internationalization.controlmode</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.oomph.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>check.maven.pom</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>ignore.lower.bound.dependency.ranges</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.papyrus.releng.main.release/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.oomph.version.VersionNature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/.settings/org.eclipse.jdt.core.prefs b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..0c68a61dca8
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+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
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/META-INF/MANIFEST.MF b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..7822dbc9d6f
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.infra.internationalization.controlmode;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.papyrus.infra.internationalization.controlmode,
+ org.eclipse.papyrus.infra.internationalization.controlmode.commands,
+ org.eclipse.papyrus.infra.internationalization.controlmode.participants
+Require-Bundle: org.eclipse.emf.ecore;bundle-version="[2.12.0,3.0.0)";visibility:=reexport,
+ org.eclipse.ui.workbench;bundle-version="[3.108.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.107.0,4.0.0)",
+ org.eclipse.papyrus.infra.services.controlmode;bundle-version="[1.5.0,2.0.0)",
+ org.eclipse.papyrus.infra.internationalization;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.papyrus.infra.internationalization.common;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.common;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.nattable.model;bundle-version="[2.0.0,3.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.papyrus.infra.internationalization.controlmode.Activator
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/about.html b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/about.html
new file mode 100644
index 00000000000..598b3684879
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/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/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/build.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/build.properties
new file mode 100644
index 00000000000..98e56b2cd5e
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/build.properties
@@ -0,0 +1,9 @@
+bin.includes = .,\
+ META-INF/,\
+ about.html,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.includes = about.html
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/plugin.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/plugin.properties
new file mode 100644
index 00000000000..eac8c610fc4
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = Papyrus Internationalization Control mode
+providerName = Eclipse Modeling Project
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/plugin.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/plugin.xml
new file mode 100644
index 00000000000..4e0e90e1adc
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/plugin.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+ <extension
+ point="org.eclipse.papyrus.infra.services.controlmode.participant">
+ <participant
+ class="org.eclipse.papyrus.infra.internationalization.controlmode.participants.InternationalizationAnnotationControlParticipant">
+ </participant>
+ <participant
+ class="org.eclipse.papyrus.infra.internationalization.controlmode.participants.PropertiesControlParticipant">
+ </participant>
+ <participant
+ class="org.eclipse.papyrus.infra.internationalization.controlmode.participants.PropertiesUncontrolParticipant">
+ </participant>
+ </extension>
+
+
+</plugin>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/pom.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/pom.xml
new file mode 100644
index 00000000000..9a7c2a022c7
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.papyrus.infra-internationalization</artifactId>
+ <groupId>org.eclipse.papyrus</groupId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.papyrus.infra.internationalization.controlmode</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/Activator.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/Activator.java
new file mode 100644
index 00000000000..45547a86cce
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/Activator.java
@@ -0,0 +1,78 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.controlmode;
+
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+ /**
+ * The plug-in ID.
+ */
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.infra.internationalization.controlmode"; //$NON-NLS-1$
+
+ /**
+ * The shared instance.
+ */
+ private static Activator plugin;
+
+ /**
+ * The log helper.
+ */
+ public static LogHelper log;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ super();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(final BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ log = new LogHelper(this);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(final BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/ControlPropertiesCommand.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/ControlPropertiesCommand.java
new file mode 100644
index 00000000000..096bb538d35
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/ControlPropertiesCommand.java
@@ -0,0 +1,328 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.controlmode.commands;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.papyrus.infra.gmfdiag.common.model.NotationModel;
+import org.eclipse.papyrus.infra.gmfdiag.common.model.NotationUtils;
+import org.eclipse.papyrus.infra.internationalization.InternationalizationEntry;
+import org.eclipse.papyrus.infra.internationalization.InternationalizationFactory;
+import org.eclipse.papyrus.infra.internationalization.InternationalizationLibrary;
+import org.eclipse.papyrus.infra.internationalization.controlmode.Activator;
+import org.eclipse.papyrus.infra.internationalization.controlmode.utils.ControlPropertiesUtils;
+import org.eclipse.papyrus.infra.internationalization.modelresource.InternationalizationModelResource;
+import org.eclipse.papyrus.infra.internationalization.utils.PropertiesFilesUtils;
+import org.eclipse.papyrus.infra.nattable.model.nattable.Table;
+import org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest;
+import org.eclipse.papyrus.infra.services.controlmode.commands.AbstractControlCommand;
+
+/**
+ * The control command for the properties files.
+ */
+public class ControlPropertiesCommand extends AbstractControlCommand {
+
+ /**
+ * The Constant COMMAND_TITLE.
+ */
+ private static final String COMMAND_TITLE = "Properties control command"; //$NON-NLS-1$
+
+ /**
+ * The old internationalization model resource.
+ */
+ private InternationalizationModelResource internationalizationModelResource = null;
+
+ /**
+ * The old notation resource.
+ */
+ private Resource oldNotationResource = null;
+
+ /**
+ * Constructor.
+ *
+ * @param request
+ * The request.
+ */
+ public ControlPropertiesCommand(final ControlModeRequest request) {
+ this(COMMAND_TITLE, request);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param commandTitle
+ * The command title.
+ * @param request
+ * The request.
+ */
+ public ControlPropertiesCommand(final String commandTitle, final ControlModeRequest request) {
+ super(commandTitle, null, request);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand#doExecuteWithResult(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ protected CommandResult doExecuteWithResult(final IProgressMonitor monitor, final IAdaptable info)
+ throws ExecutionException {
+
+ final Set<Resource> createdResources = new HashSet<Resource>();
+
+ @SuppressWarnings("unchecked")
+ final Map<Locale, Resource> createdPropertiesResources = (Map<Locale, Resource>) getRequest()
+ .getParameter(ControlPropertiesUtils.CREATED_PROPERTIES_RESOURCES);
+ for (final Locale locale : createdPropertiesResources.keySet()) {
+ // Get the new properties resource for the locale
+ final Resource newPropertiesResource = createdPropertiesResources.get(locale);
+ if (null == newPropertiesResource) {
+ return CommandResult.newErrorCommandResult("The properties model has not been created"); //$NON-NLS-1$
+ }
+
+ InternationalizationLibrary library = null;
+ for (final EObject objectContant : newPropertiesResource.getContents()) {
+ if (objectContant instanceof InternationalizationLibrary) {
+ library = (InternationalizationLibrary) objectContant;
+ }
+ }
+
+ if (null == library) {
+ // The library does not exist, create it and add entries
+ library = InternationalizationFactory.eINSTANCE.createInternationalizationLibrary();
+ newPropertiesResource.getContents().add(library);
+ }
+
+ final List<InternationalizationEntry> entries = getInternationalizationEntries(locale);
+ if (!entries.isEmpty()) {
+
+ // The library exists, just add entries
+ for (final InternationalizationEntry entry : entries) {
+ library.getEntries().add(EcoreUtil.copy(entry));
+ }
+
+ final Resource oldPropertiesResource = getOldPropertiesResource(locale);
+ final InternationalizationLibrary oldLibrary = (InternationalizationLibrary) oldPropertiesResource
+ .getContents().get(0);
+
+ oldLibrary.getEntries().removeAll(entries);
+ }
+
+ createdResources.add(newPropertiesResource);
+ }
+
+ return CommandResult.newOKCommandResult(createdResources);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand#doRedo(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ protected IStatus doRedo(final IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ return doExecuteWithResult(monitor, info).getStatus();
+ }
+
+ /**
+ * Get the internationalization entries for the diagrams and the tables of
+ * objects in sub model.
+ *
+ * @param locale
+ * The current locale to manage.
+ * @return The internationalization entries.
+ * @throws ExecutionException
+ * The possible execution exception.
+ */
+ protected List<InternationalizationEntry> getInternationalizationEntries(final Locale locale)
+ throws ExecutionException {
+ final List<InternationalizationEntry> entries = new ArrayList<InternationalizationEntry>();
+
+ getInternationalizationModelResource();
+
+ if (null != internationalizationModelResource) {
+
+ // Search the EObject labels to control
+ final EObject targetObject = getRequest().getTargetObject();
+
+ InternationalizationEntry entryForKey = internationalizationModelResource
+ .getEntryForKey(getOldPropertiesURI(), targetObject, locale);
+ if (null != entryForKey) {
+ entries.add(entryForKey);
+ }
+
+ final TreeIterator<EObject> eAllContents = EcoreUtil.getAllProperContents(targetObject, true);
+ while (eAllContents.hasNext()) {
+ final EObject content = eAllContents.next();
+ entryForKey = internationalizationModelResource.getEntryForKey(getOldPropertiesURI(), content, locale);
+ if (null != entryForKey) {
+ entries.add(entryForKey);
+ }
+ }
+
+ final Resource oldNotationResource = getOldNotationResource();
+
+ // Search the diagrams labels to control
+ for (final Diagram diagram : NotationUtils.getDiagrams(oldNotationResource,
+ getRequest().getTargetObject())) {
+ entryForKey = internationalizationModelResource.getEntryForKey(getOldPropertiesURI(), diagram, locale);
+ if (null != entryForKey) {
+ entries.add(entryForKey);
+ }
+ }
+
+ // Search the tables labels to control
+ for (final Table table : getTables(oldNotationResource, getRequest().getTargetObject())) {
+ entryForKey = internationalizationModelResource.getEntryForKey(getOldPropertiesURI(), table, locale);
+ if (null != entryForKey) {
+ entries.add(entryForKey);
+ }
+ }
+ }
+
+ return entries;
+ }
+
+ /**
+ * Gets the all the tables contained in the specified ancestor eObject.
+ *
+ * @param notationResource
+ * The notation resource where search tables.
+ * @param eObject
+ * The table to search in notation resource.
+ *
+ * @return all the contained tables.
+ */
+ protected List<Table> getTables(final Resource notationResource, final EObject eObject) {
+ final List<Table> tables = new LinkedList<Table>();
+ if (null != notationResource) {
+ for (final EObject obj : notationResource.getContents()) {
+ if (obj instanceof Table) {
+ Table table = (Table) obj;
+ if (EcoreUtil.isAncestor(eObject, table.getOwner())) {
+ tables.add(table);
+ }
+ }
+ }
+ }
+ return tables;
+ }
+
+ /**
+ * Gets the old internationalization model resource.
+ *
+ * @return the old internationalization model resource.
+ */
+ protected InternationalizationModelResource getInternationalizationModelResource() {
+
+ if (null == internationalizationModelResource) {
+ try {
+ internationalizationModelResource = (InternationalizationModelResource) getRequest().getModelSet()
+ .getModelChecked(InternationalizationModelResource.MODEL_ID);
+ } catch (Exception e) {
+ Activator.log.error("Unable to retrieve old properties resource", e); //$NON-NLS-1$
+ }
+ }
+
+ return internationalizationModelResource;
+ }
+
+ /**
+ * Gets the old properties resource.
+ *
+ * @param locale
+ * The current locale to manage.
+ * @return the old properties resource.
+ */
+ private Resource getOldPropertiesResource(final Locale locale) {
+ Resource resource = null;
+
+ getInternationalizationModelResource();
+
+ try {
+ resource = internationalizationModelResource.getResourceForURIAndLocale(getOldPropertiesURI(), locale);
+ } catch (Exception e) {
+ Activator.log.error("Unable to retrieve old notation resource", e); //$NON-NLS-1$
+ }
+
+ return resource;
+ }
+
+ /**
+ * Get the old properties URI for request.
+ *
+ * @return The old properties resource URI.
+ * @throws ExecutionException
+ * The exception when the notation resource is not found.
+ */
+ protected URI getOldPropertiesURI() throws ExecutionException {
+ URI uri = getRequest().getSourceURI();
+ if (null != uri) {
+ return uri.trimFileExtension().appendFileExtension(PropertiesFilesUtils.PROPERTIES_FILE_EXTENSION);
+ }
+ throw new ExecutionException("Unable to retreive URI of the old properties model"); //$NON-NLS-1$
+ }
+
+ /**
+ * Gets the old notation resource.
+ *
+ * @return the old notation resource
+ */
+ private Resource getOldNotationResource() {
+
+ if (null == oldNotationResource) {
+ try {
+ oldNotationResource = getRequest().getModelSet().getResource(getOldNotationURI(), true);
+ } catch (Exception e) {
+ Activator.log.error("Unable to retrieve old notation resource", e); //$NON-NLS-1$
+ }
+ }
+
+ return oldNotationResource;
+ }
+
+ /**
+ * Get the old notation URI for request.
+ *
+ * @return The old notation resource URI.
+ * @throws ExecutionException
+ * The exception when the notation resource is not found.
+ */
+ protected URI getOldNotationURI() throws ExecutionException {
+ URI uri = getRequest().getSourceURI();
+ if (null != uri) {
+ return uri.trimFileExtension().appendFileExtension(NotationModel.NOTATION_FILE_EXTENSION);
+ }
+ throw new ExecutionException("Unable to retreive URI of the old notation model"); //$NON-NLS-1$
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/CreatePropertiesControlResourceCommand.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/CreatePropertiesControlResourceCommand.java
new file mode 100644
index 00000000000..e571b0c2d38
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/CreatePropertiesControlResourceCommand.java
@@ -0,0 +1,257 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.internationalization.controlmode.commands;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.resource.NotFoundException;
+import org.eclipse.papyrus.infra.internationalization.common.utils.LocaleNameResolver;
+import org.eclipse.papyrus.infra.internationalization.controlmode.utils.ControlPropertiesUtils;
+import org.eclipse.papyrus.infra.internationalization.modelresource.InternationalizationModelResource;
+import org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest;
+import org.eclipse.papyrus.infra.services.controlmode.commands.CreateControlResource;
+
+/**
+ * Command used to create new controlled properties resource. This command will
+ * create the new resources. It will also handle correctly undo and redo.
+ */
+public class CreatePropertiesControlResourceCommand extends CreateControlResource {
+
+ /**
+ * The locale to add in the file name.
+ */
+ private Locale locale;
+
+ /**
+ * The created resource. We need it to remove it for undo command.
+ */
+ private Resource createdResource;
+
+ /**
+ * The internationalization model resource.
+ */
+ private InternationalizationModelResource internationalizationModelResource;
+
+ /**
+ * Constructor.
+ *
+ * @param request
+ * {@link ControlModeRequest} used to compute the command
+ * @param newFileExtension
+ * File extension use to create the resource. If not specified
+ * then it should be already provided in the {@link URI}
+ * @param locale
+ * The locale to add in the file name.
+ */
+ public CreatePropertiesControlResourceCommand(final ControlModeRequest request, final String newFileExtension,
+ final Locale locale) {
+ super(request, newFileExtension);
+ this.locale = locale;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.commands.AbstractControlResourceCommand#getTargetUri()
+ */
+ @Override
+ public URI getTargetUri() {
+ return getModifiedURI(getRequest().getNewURI());
+ }
+
+ /**
+ * Get the URI with the locale if not null and the extension if not null.
+ *
+ * @param initialURI
+ * The initial URI.
+ * @return The modified URI.
+ */
+ protected URI getModifiedURI(final URI initialURI) {
+ URI targetURI = initialURI;
+ if (null != locale) {
+ // Get the existing file extension
+ final String existingFileExtension = targetURI.fileExtension();
+ // Get the last segment
+ String lastSegment = targetURI.trimFileExtension().lastSegment();
+ // Add the locale to the last segment
+ lastSegment = lastSegment + LocaleNameResolver.UNDERSCORE + locale.toString();
+ // Replace the last segment (managing file extension
+ targetURI = targetURI.trimFileExtension().trimSegments(1).appendSegment(lastSegment)
+ .appendFileExtension(existingFileExtension);
+ }
+ if (null != newFileExtension) {
+ targetURI = targetURI.trimFileExtension().appendFileExtension(newFileExtension);
+ }
+ return targetURI;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.commands.CreateControlResource#doExecuteWithResult(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.core.runtime.IAdaptable)
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ protected CommandResult doExecuteWithResult(final IProgressMonitor progressMonitor, final IAdaptable info)
+ throws ExecutionException {
+ final CommandResult res = super.doExecuteWithResult(progressMonitor, info);
+
+ // Get the created resource
+ createdResource = getRequest().getTargetResource(newFileExtension);
+
+ // Manage a map of created properties resources, because several
+ // properties resources can be created
+ if (null == getRequest().getParameter(ControlPropertiesUtils.CREATED_PROPERTIES_RESOURCES)) {
+ getRequest().setParameter(ControlPropertiesUtils.CREATED_PROPERTIES_RESOURCES,
+ new HashMap<Locale, Resource>());
+ }
+ ((Map<Locale, Resource>) getRequest().getParameter(ControlPropertiesUtils.CREATED_PROPERTIES_RESOURCES))
+ .put(locale, createdResource);
+
+ // Add the resource to the internationalization model resource
+ final InternationalizationModelResource modelResource = getInternationalizationModelResource();
+ if (null != modelResource) {
+ modelResource.addResourceToModel(getRequest().getNewURI().trimFileExtension(), createdResource, locale);
+ }
+
+ return res;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.commands.CreateControlResource#doUndo(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ protected IStatus doUndo(final IProgressMonitor monitor, final IAdaptable info) throws ExecutionException {
+ getRequest().setTargetResource(createdResource, getFileExtension());
+
+ // Unload and remove the resource from the internationalization model
+ // resource
+ final InternationalizationModelResource modelResource = getInternationalizationModelResource();
+ if (null != modelResource) {
+ modelResource.unload(createdResource);
+ modelResource.getResources().remove(createdResource);
+ }
+
+ return super.doUndo(monitor, info);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.commands.CreateControlResource#doRedo(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ protected IStatus doRedo(final IProgressMonitor monitor, final IAdaptable info) throws ExecutionException {
+ getRequest().setTargetResource(createdResource, getFileExtension());
+ final IStatus result = super.doRedo(monitor, info);
+
+ // Add the resource to the internationalization model resource
+ final InternationalizationModelResource modelResource = getInternationalizationModelResource();
+ if (null != modelResource) {
+ modelResource.addResourceToModel(getRequest().getNewURI().trimFileExtension(), createdResource, locale);
+ }
+
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.commands.CreateControlResource#getNewURI()
+ */
+ @Override
+ protected URI getNewURI() {
+ return getModifiedURI(getRequest().getNewURI());
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.commands.CreateControlResource#getTargetResrource(org.eclipse.emf.ecore.EObject)
+ */
+ @Override
+ protected Resource getTargetResrource(final EObject objectToUncontrol) {
+ Resource resultResource = null;
+ URI targetURI = null;
+
+ if (null != objectToUncontrol) {
+ targetURI = objectToUncontrol.eResource().getURI().trimFileExtension();
+ if (null != locale) {
+ String lastSegment = targetURI.lastSegment();
+ lastSegment = lastSegment + LocaleNameResolver.UNDERSCORE + locale.toString();
+ targetURI = targetURI.trimSegments(1).appendSegment(lastSegment);
+ }
+ targetURI = targetURI.appendFileExtension(getFileExtension());
+ }
+
+ if (null != targetURI) {
+ final InternationalizationModelResource modelResource = getInternationalizationModelResource();
+ if (null != modelResource) {
+ resultResource = modelResource.getResourceForURIAndLocale(objectToUncontrol.eResource().getURI()
+ .trimFileExtension().appendFileExtension(getFileExtension()), locale);
+ }
+ }
+
+ return resultResource;
+ }
+
+ /**
+ * Get the internationalization model resource.
+ *
+ * @return The internationalization model resource.
+ */
+ protected InternationalizationModelResource getInternationalizationModelResource() {
+ if (null == internationalizationModelResource) {
+ final ModelSet modelSet = getRequest().getModelSet();
+ if (null != modelSet) {
+ try {
+ internationalizationModelResource = (InternationalizationModelResource) modelSet
+ .getModelChecked(InternationalizationModelResource.MODEL_ID);
+ } catch (final NotFoundException e) {
+ // Do nothing
+ }
+ }
+ }
+
+ return internationalizationModelResource;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.workspace.AbstractEMFOperation#dispose()
+ */
+ @Override
+ public void dispose() {
+ internationalizationModelResource = null;
+ createdResource = null;
+ locale = null;
+ super.dispose();
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/InternationalizationAnnotationControlCommand.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/InternationalizationAnnotationControlCommand.java
new file mode 100644
index 00000000000..9642cd7bcec
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/InternationalizationAnnotationControlCommand.java
@@ -0,0 +1,111 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.controlmode.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.papyrus.infra.gmfdiag.common.model.NotationModel;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesConstants;
+import org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest;
+import org.eclipse.papyrus.infra.services.controlmode.commands.AbstractControlCommand;
+
+/**
+ * The internationalization annotation in the notation file must be copied in
+ * the new controlled file.
+ */
+public class InternationalizationAnnotationControlCommand extends AbstractControlCommand {
+
+ /**
+ * The Constant COMMAND_TITLE.
+ */
+ private static final String COMMAND_TITLE = "Annotation internationalization control command"; //$NON-NLS-1$
+
+ /**
+ * The old notation resource.
+ */
+ private Resource oldNotationResource = null;
+
+ /**
+ * Constructor.
+ *
+ * @param request
+ * The request.
+ * @param oldNotationResource
+ * The old notation resource.
+ */
+ public InternationalizationAnnotationControlCommand(final ControlModeRequest request,
+ final Resource oldNotationResource) {
+ super(COMMAND_TITLE, null, request);
+ this.oldNotationResource = oldNotationResource;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand#doExecuteWithResult(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ protected CommandResult doExecuteWithResult(final IProgressMonitor monitor, final IAdaptable info)
+ throws ExecutionException {
+ CommandResult commandResult = null;
+
+ // Check if the old notation resource is not null
+ if (null == oldNotationResource) {
+ commandResult = CommandResult.newErrorCommandResult(
+ String.format("The source %s model does not exist", NotationModel.NOTATION_FILE_EXTENSION)); //$NON-NLS-1$
+ } else {
+ // Get the new notation resource and check if this is not null
+ final Resource newNotationResource = getTargetResource();
+ if (null == newNotationResource) {
+ commandResult = CommandResult.newErrorCommandResult("The notation model has not been created"); //$NON-NLS-1$
+ } else {
+ EAnnotation annotation = null;
+
+ // Search about the internationalization preference
+ for (final EObject objectContent : oldNotationResource.getContents()) {
+ if (objectContent instanceof EAnnotation
+ && InternationalizationPreferencesConstants.INTERNATIONALIZATION_ANNOTATION_LABEL
+ .equals(((EAnnotation) objectContent).getSource())) {
+ annotation = EcoreUtil.copy((EAnnotation) objectContent);
+ }
+ }
+
+ // If the annotation exists, add a copy for the new notation
+ // resource
+ if (null != annotation) {
+ newNotationResource.getContents().add(annotation);
+ commandResult = CommandResult.newOKCommandResult(newNotationResource);
+ }
+ }
+ }
+
+ return null != commandResult ? commandResult : CommandResult.newOKCommandResult();
+ }
+
+ /**
+ * Retrieve the target resource from the request
+ *
+ * @return The target resource.
+ */
+ protected Resource getTargetResource() {
+ return request.getTargetResource(NotationModel.NOTATION_FILE_EXTENSION);
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/RemovePropertiesControlResourceCommand.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/RemovePropertiesControlResourceCommand.java
new file mode 100644
index 00000000000..2b90119a6ff
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/commands/RemovePropertiesControlResourceCommand.java
@@ -0,0 +1,243 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.internationalization.controlmode.commands;
+
+import java.util.Locale;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.resource.NotFoundException;
+import org.eclipse.papyrus.infra.internationalization.common.utils.LocaleNameResolver;
+import org.eclipse.papyrus.infra.internationalization.modelresource.InternationalizationModelResource;
+import org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest;
+import org.eclipse.papyrus.infra.services.controlmode.commands.RemoveControlResourceCommand;
+import org.eclipse.papyrus.infra.services.controlmode.messages.Messages;
+
+/**
+ * Command used to create new controlled properties resource. This command will
+ * create the new resources. It will also handle correctly undo and redo.
+ */
+public class RemovePropertiesControlResourceCommand extends RemoveControlResourceCommand {
+
+ /**
+ * The resource to remove. We need it to remove it for undo command.
+ */
+ private Resource resourceToRemove;
+
+ /**
+ * The locale to add in the file name.
+ */
+ private Locale locale;
+
+ /**
+ * The internationalization model resource.
+ */
+ private InternationalizationModelResource internationalizationModelResource;
+
+ /**
+ * Constructor.
+ *
+ * @param request
+ * {@link ControlModeRequest} used to compute the command
+ * @param newFileExtension
+ * File extension use to create the resource. If not specified
+ * then it should be already provided in the {@link URI}
+ * @param resourceToRemove
+ * The resource to remove.
+ * @param locale
+ * The locale to add in the file name.
+ */
+ public RemovePropertiesControlResourceCommand(final ControlModeRequest request, final String fileExtension,
+ final Resource resourceToRemove, final Locale locale) {
+ super(request, fileExtension);
+ this.resourceToRemove = resourceToRemove;
+ this.locale = locale;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.commands.RemoveControlResourceCommand#doExecuteWithResult(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ protected CommandResult doExecuteWithResult(final IProgressMonitor monitor, final IAdaptable info)
+ throws ExecutionException {
+ CommandResult commandResult = null;
+ EObject objectToControl = getRequest().getTargetObject();
+ if (null == objectToControl) {
+ commandResult = CommandResult.newErrorCommandResult(CONTROL_OBJECT_ERROR);
+ } else {
+ ModelSet modelSet = getRequest().getModelSet();
+ if (null == modelSet) {
+ commandResult = CommandResult.newErrorCommandResult(RESOURCESET_ERROR);
+ } else {
+
+ // Delete resource back-end on save
+ modelSet.getResourcesToDeleteOnSave().add(resourceToRemove.getURI());
+
+ // Save source and target resource
+ Resource targetResource = getTargetResource(objectToControl);
+ if (null == targetResource) {
+ commandResult = CommandResult
+ .newErrorCommandResult(Messages.getString(TARGET_RESOURCE_ERROR, getFileExtension()));
+ } else {
+
+ // The target resource needs to be saved else the resolution
+ // will not operate
+ targetResource.setModified(true);
+
+ getRequest().setTargetResource(targetResource, getFileExtension());
+ getRequest().setSourceResource(resourceToRemove, getFileExtension());
+
+ // remove resource set
+ modelSet.getResources().remove(resourceToRemove);
+
+ // Unload and remove the resource from the
+ // internationalization model resource
+ final InternationalizationModelResource modelResource = getInternationalizationModelResource();
+ if (null != modelResource) {
+ modelResource.unload(resourceToRemove.getURI());
+ modelResource.getResources().remove(resourceToRemove);
+ }
+
+ commandResult = CommandResult.newOKCommandResult();
+ }
+ }
+ }
+
+ return commandResult;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.commands.RemoveControlResourceCommand#doUndo(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ protected IStatus doUndo(final IProgressMonitor monitor, final IAdaptable info) throws ExecutionException {
+ final IStatus result = super.doUndo(monitor, info);
+
+ // Add the resource to the internationalization model resource
+ final InternationalizationModelResource modelResource = getInternationalizationModelResource();
+ if (null != modelResource) {
+ modelResource.addResourceToModel(getRequest().getSourceURI().trimFileExtension(), resourceToRemove, locale);
+ }
+
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.commands.RemoveControlResourceCommand#getSourceResource()
+ */
+ @Override
+ protected Resource getSourceResource() {
+ return resourceToRemove;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.commands.RemoveControlResourceCommand#doRedo(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ protected IStatus doRedo(final IProgressMonitor monitor, final IAdaptable info) throws ExecutionException {
+ final IStatus result = super.doRedo(monitor, info);
+
+ // Unload and remove the resource from the internationalization model
+ // resource
+ final InternationalizationModelResource modelResource = getInternationalizationModelResource();
+ if (null != modelResource) {
+ modelResource.unload(resourceToRemove.getURI());
+ modelResource.getResources().remove(resourceToRemove);
+ }
+
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.commands.RemoveControlResourceCommand#getTargetResource(org.eclipse.emf.ecore.EObject)
+ */
+ @Override
+ protected Resource getTargetResource(final EObject objectToUncontrol) {
+ Resource resultResource = null;
+ URI targetURI = null;
+
+ if (null != objectToUncontrol) {
+ targetURI = objectToUncontrol.eResource().getURI().trimFileExtension();
+ if (null != locale) {
+ String lastSegment = targetURI.lastSegment();
+ lastSegment = lastSegment + LocaleNameResolver.UNDERSCORE + locale.toString();
+ targetURI = targetURI.trimSegments(1).appendSegment(lastSegment);
+ }
+ targetURI = targetURI.appendFileExtension(getFileExtension());
+ }
+
+ if (null != targetURI) {
+ InternationalizationModelResource modelResource = getInternationalizationModelResource();
+ if (null != modelResource) {
+ resultResource = modelResource.getResourceForURIAndLocale(objectToUncontrol.eResource().getURI()
+ .trimFileExtension().appendFileExtension(getFileExtension()), locale);
+ }
+ }
+
+ return resultResource;
+ }
+
+ /**
+ * Get the internationalization model resource.
+ *
+ * @return The internationalization model resource.
+ */
+ protected InternationalizationModelResource getInternationalizationModelResource() {
+ if (null == internationalizationModelResource) {
+ final ModelSet modelSet = getRequest().getModelSet();
+ if (null != modelSet) {
+ try {
+ internationalizationModelResource = (InternationalizationModelResource) modelSet
+ .getModelChecked(InternationalizationModelResource.MODEL_ID);
+ } catch (final NotFoundException e) {
+ // Do nothing
+ }
+ }
+ }
+
+ return internationalizationModelResource;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.workspace.AbstractEMFOperation#dispose()
+ */
+ @Override
+ public void dispose() {
+ internationalizationModelResource = null;
+ resourceToRemove = null;
+ locale = null;
+ super.dispose();
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/participants/InternationalizationAnnotationControlParticipant.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/participants/InternationalizationAnnotationControlParticipant.java
new file mode 100644
index 00000000000..4d2ebf01c6e
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/participants/InternationalizationAnnotationControlParticipant.java
@@ -0,0 +1,183 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.controlmode.participants;
+
+import java.util.Iterator;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.papyrus.infra.gmfdiag.common.model.NotationModel;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesConstants;
+import org.eclipse.papyrus.infra.internationalization.controlmode.Activator;
+import org.eclipse.papyrus.infra.internationalization.controlmode.commands.InternationalizationAnnotationControlCommand;
+import org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest;
+import org.eclipse.papyrus.infra.services.controlmode.participants.IControlCommandParticipant;
+import org.eclipse.papyrus.infra.services.controlmode.participants.IUncontrolCommandParticipant;
+
+/**
+ * The internationalization annotation control participant for the preference
+ * annotation.
+ */
+public class InternationalizationAnnotationControlParticipant
+ implements IControlCommandParticipant, IUncontrolCommandParticipant {
+
+ /**
+ * The Constant PARTICIPANT_ID.
+ */
+ private static final String PARTICIPANT_ID = "org.eclipse.papyrus.infra.internationalization.controlmode.InternationalizationAnnotationControlParticipant"; //$NON-NLS-1$
+
+ /**
+ * Constructor.
+ */
+ public InternationalizationAnnotationControlParticipant() {
+
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IControlModeParticipant#getID()
+ */
+ @Override
+ public String getID() {
+ return PARTICIPANT_ID;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IControlModeParticipant#getPriority()
+ */
+ @Override
+ public int getPriority() {
+ return 20;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IUncontrolCommandParticipant#provideUnControlCommand(org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest)
+ */
+ @Override
+ public boolean provideUnControlCommand(final ControlModeRequest request) {
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IUncontrolCommandParticipant#getPreUncontrolCommand(org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest)
+ */
+ @Override
+ public ICommand getPreUncontrolCommand(final ControlModeRequest request) {
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IUncontrolCommandParticipant#getPostUncontrolCommand(org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest)
+ */
+ @Override
+ public ICommand getPostUncontrolCommand(final ControlModeRequest request) {
+ // Don't create the notation resource since it is already handled
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IControlCommandParticipant#provideControlCommand(org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest)
+ */
+ @Override
+ public boolean provideControlCommand(final ControlModeRequest request) {
+ boolean result = false;
+
+ // Check if the annotation for the internationalization is in the
+ // notation file
+ final Iterator<EObject> objectContentsIterator = getSourceResource(request).getContents().iterator();
+ while (objectContentsIterator.hasNext() && !result) {
+ EObject objectContent = objectContentsIterator.next();
+ if (objectContent instanceof EAnnotation
+ && InternationalizationPreferencesConstants.INTERNATIONALIZATION_ANNOTATION_LABEL
+ .equals(((EAnnotation) objectContent).getSource())) {
+ result = true;
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IControlCommandParticipant#getPreControlCommand(org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest)
+ */
+ @Override
+ public ICommand getPreControlCommand(final ControlModeRequest request) {
+ // Don't create the notation resource since it is already handled
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IControlCommandParticipant#getPostControlCommand(org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest)
+ */
+ @Override
+ public ICommand getPostControlCommand(final ControlModeRequest request) {
+ return new InternationalizationAnnotationControlCommand(request, getSourceResource(request));
+ }
+
+ /**
+ * Gets the old notation resource.
+ *
+ * @param request
+ * The control request.
+ * @return the old notation resource.
+ */
+ protected Resource getSourceResource(final ControlModeRequest request) {
+ Resource oldNotationResource = null;
+
+ try {
+ oldNotationResource = request.getModelSet().getResource(getOldNotationURI(request), true);
+ } catch (Exception e) {
+ Activator.log.error("Unable to retrieve old notation resource", e); //$NON-NLS-1$
+ }
+
+ return oldNotationResource;
+ }
+
+ /**
+ * Get the old notation URI for request.
+ *
+ * @param request
+ * The control request.
+ * @return The old notation resource.
+ * @throws ExecutionException
+ * The exception when the notation resource is not found.
+ */
+ protected URI getOldNotationURI(final ControlModeRequest request) throws ExecutionException {
+ URI uri = request.getSourceURI();
+
+ if (null != uri) {
+ return uri.trimFileExtension().appendFileExtension(NotationModel.NOTATION_FILE_EXTENSION);
+ }
+ throw new ExecutionException("Unable to retreive URI of the old notation model"); //$NON-NLS-1$
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/participants/PropertiesControlParticipant.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/participants/PropertiesControlParticipant.java
new file mode 100644
index 00000000000..45a6a1eb09a
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/participants/PropertiesControlParticipant.java
@@ -0,0 +1,159 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.controlmode.participants;
+
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.common.core.command.UnexecutableCommand;
+import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.resource.NotFoundException;
+import org.eclipse.papyrus.infra.internationalization.controlmode.commands.ControlPropertiesCommand;
+import org.eclipse.papyrus.infra.internationalization.controlmode.commands.CreatePropertiesControlResourceCommand;
+import org.eclipse.papyrus.infra.internationalization.modelresource.InternationalizationModelResource;
+import org.eclipse.papyrus.infra.internationalization.utils.PropertiesFilesUtils;
+import org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest;
+import org.eclipse.papyrus.infra.services.controlmode.participants.IControlCommandParticipant;
+
+/**
+ * The control participant for the properties files.
+ */
+public class PropertiesControlParticipant implements IControlCommandParticipant {
+
+ /**
+ * The Constant PARTICIPANT_ID.
+ */
+ private static final String PARTICIPANT_ID = "org.eclipse.papyrus.infra.internationalization.controlmode.PropertiesControlParticipant"; //$NON-NLS-1$
+
+ /**
+ * The internationalization model resource.
+ */
+ private InternationalizationModelResource internationalizationModelResource;
+
+ /**
+ * Constructor.
+ */
+ public PropertiesControlParticipant() {
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IControlModeParticipant#getID()
+ */
+ @Override
+ public String getID() {
+ return PARTICIPANT_ID;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IControlModeParticipant#getPriority()
+ */
+ @Override
+ public int getPriority() {
+ return 40;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IControlCommandParticipant#provideControlCommand(org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest)
+ */
+ @Override
+ public boolean provideControlCommand(final ControlModeRequest request) {
+ boolean result = false;
+
+ final EObject objectToControl = request.getTargetObject();
+ if (null != objectToControl) {
+ // If there is no properties resource in the old resource, then
+ // there's nothing to do
+ final InternationalizationModelResource modelResource = getInternationalizationModelResource(request);
+ final Map<Locale, Resource> localesAndResourcesForURI = modelResource
+ .getLocalesAndResourcesForURI(request.getSourceURI().trimFileExtension()
+ .appendFileExtension(PropertiesFilesUtils.PROPERTIES_FILE_EXTENSION));
+
+ result = null != localesAndResourcesForURI && !localesAndResourcesForURI.isEmpty();
+ }
+
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IControlCommandParticipant#getPreControlCommand(org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest)
+ */
+ @Override
+ public ICommand getPreControlCommand(final ControlModeRequest request) {
+ ICommand resultCommand = UnexecutableCommand.INSTANCE;
+
+ // Get the used locale to determinate the properties file to create
+ final InternationalizationModelResource modelResource = getInternationalizationModelResource(request);
+ if (null != modelResource) {
+ final Set<Locale> locales = modelResource.getAvailablePropertiesLocales(request.getSourceURI());
+
+ resultCommand = new CompositeTransactionalCommand(request.getEditingDomain(), "Create properties files"); //$NON-NLS-1$
+
+ // Loop on each locale to create associated properties file
+ for (final Locale currentLocale : locales) {
+ ((CompositeTransactionalCommand) resultCommand).add(new CreatePropertiesControlResourceCommand(request,
+ PropertiesFilesUtils.PROPERTIES_FILE_EXTENSION, currentLocale));
+ }
+ }
+
+ return resultCommand;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IControlCommandParticipant#getPostControlCommand(org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest)
+ */
+ @Override
+ public ICommand getPostControlCommand(final ControlModeRequest request) {
+
+ // Dispose the internationalizationModelResource
+ internationalizationModelResource = null;
+
+ return new ControlPropertiesCommand(request);
+ }
+
+ /**
+ * Get the internationalization model resource.
+ *
+ * @return The internationalization model resource.
+ */
+ protected InternationalizationModelResource getInternationalizationModelResource(final ControlModeRequest request) {
+ if (null == internationalizationModelResource && null != request) {
+ final ModelSet modelSet = request.getModelSet();
+ if (null != modelSet) {
+ try {
+ internationalizationModelResource = (InternationalizationModelResource) modelSet
+ .getModelChecked(InternationalizationModelResource.MODEL_ID);
+ } catch (final NotFoundException e) {
+ // Do nothing
+ }
+ }
+ }
+
+ return internationalizationModelResource;
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/participants/PropertiesUncontrolParticipant.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/participants/PropertiesUncontrolParticipant.java
new file mode 100644
index 00000000000..007f94cc02f
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/participants/PropertiesUncontrolParticipant.java
@@ -0,0 +1,249 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.controlmode.participants;
+
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.gmf.runtime.common.core.command.ICommand;
+import org.eclipse.gmf.runtime.common.core.command.UnexecutableCommand;
+import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.resource.NotFoundException;
+import org.eclipse.papyrus.infra.internationalization.controlmode.commands.ControlPropertiesCommand;
+import org.eclipse.papyrus.infra.internationalization.controlmode.commands.CreatePropertiesControlResourceCommand;
+import org.eclipse.papyrus.infra.internationalization.controlmode.commands.RemovePropertiesControlResourceCommand;
+import org.eclipse.papyrus.infra.internationalization.controlmode.utils.ControlPropertiesUtils;
+import org.eclipse.papyrus.infra.internationalization.modelresource.InternationalizationModelResource;
+import org.eclipse.papyrus.infra.internationalization.utils.PropertiesFilesUtils;
+import org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest;
+import org.eclipse.papyrus.infra.services.controlmode.participants.IUncontrolCommandParticipant;
+
+/**
+ * The uncontrol participant for the properties files.
+ */
+public class PropertiesUncontrolParticipant implements IUncontrolCommandParticipant {
+
+ /**
+ * The Constant PARTICIPANT_ID.
+ */
+ private static final String PARTICIPANT_ID = "org.eclipse.papyrus.infra.internationalization.controlmode.PropertiesUncontrolParticipant"; //$NON-NLS-1$
+
+ /**
+ * The internationalization model resource.
+ */
+ private InternationalizationModelResource internationalizationModelResource;
+
+ /**
+ * Constructor.
+ */
+ public PropertiesUncontrolParticipant() {
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IControlModeParticipant#getID()
+ */
+ @Override
+ public String getID() {
+ return PARTICIPANT_ID;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IControlModeParticipant#getPriority()
+ */
+ @Override
+ public int getPriority() {
+ return 70;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IUncontrolCommandParticipant#provideUnControlCommand(org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest)
+ */
+ @Override
+ public boolean provideUnControlCommand(final ControlModeRequest request) {
+ boolean result = false;
+
+ final EObject objectToUncontrol = request.getTargetObject();
+ if (null != objectToUncontrol) {
+ // If there is no properties resource in the old resource, then
+ // there's nothing to do
+ final InternationalizationModelResource modelResource = getInternationalizationModelResource(request);
+ final Map<Locale, Resource> localesAndResourcesForURI = modelResource
+ .getLocalesAndResourcesForURI(request.getSourceURI().trimFileExtension()
+ .appendFileExtension(PropertiesFilesUtils.PROPERTIES_FILE_EXTENSION));
+
+ result = null != localesAndResourcesForURI && !localesAndResourcesForURI.isEmpty();
+ }
+
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IUncontrolCommandParticipant#getPreUncontrolCommand(org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest)
+ */
+ @Override
+ public ICommand getPreUncontrolCommand(final ControlModeRequest request) {
+ boolean result = setPropertiesTargetRequest(request);
+
+ CompositeTransactionalCommand compositeCommand = null;
+
+ if (result) {
+ compositeCommand = new CompositeTransactionalCommand(request.getEditingDomain(), "Uncontrol command"); //$NON-NLS-1$
+
+ // Before modify properties files, check that new properties files are available
+ final URI newPropertiesURI = request.getNewURI().trimFileExtension()
+ .appendFileExtension(PropertiesFilesUtils.PROPERTIES_FILE_EXTENSION);
+ final URI sourcePropertiesURI = request.getSourceURI().trimFileExtension()
+ .appendFileExtension(PropertiesFilesUtils.PROPERTIES_FILE_EXTENSION);
+ final ModelSet modelSet = request.getModelSet();
+
+ if (null != modelSet) {
+
+ final InternationalizationModelResource modelResource = getInternationalizationModelResource(request);
+ if (null != modelResource) {
+ final Map<Locale, Resource> newLocalesAndResources = modelResource
+ .getLocalesAndResourcesForURI(newPropertiesURI);
+ final Map<Locale, Resource> sourceLocalesAndResources = modelResource
+ .getLocalesAndResourcesForURI(sourcePropertiesURI);
+
+ for(final Locale sourceLocale : sourceLocalesAndResources.keySet()){
+ if(!newLocalesAndResources.containsKey(sourceLocale)){
+ // The locale is not existing for the new properties resources, we need to create it
+ compositeCommand.add(new CreatePropertiesControlResourceCommand(request,
+ PropertiesFilesUtils.PROPERTIES_FILE_EXTENSION, sourceLocale));
+ }
+ }
+ }
+ }
+
+ compositeCommand.add(new ControlPropertiesCommand(request));
+ }
+
+ return null != compositeCommand ? compositeCommand : UnexecutableCommand.INSTANCE;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.services.controlmode.participants.IUncontrolCommandParticipant#getPostUncontrolCommand(org.eclipse.papyrus.infra.services.controlmode.ControlModeRequest)
+ */
+ @Override
+ public ICommand getPostUncontrolCommand(final ControlModeRequest request) {
+ ICommand commandResult = UnexecutableCommand.INSTANCE;
+
+ final Map<Locale, Resource> result = getPropertiesSourceRequest(request);
+ if (null != result && !result.isEmpty()) {
+ final CompositeTransactionalCommand compositeCommand = new CompositeTransactionalCommand(
+ request.getEditingDomain(), "Remove properties resources"); //$NON-NLS-1$
+
+ for (final Entry<Locale, Resource> entry : result.entrySet()) {
+ compositeCommand.add(new RemovePropertiesControlResourceCommand(request,
+ PropertiesFilesUtils.PROPERTIES_FILE_EXTENSION, entry.getValue(), entry.getKey()));
+ }
+
+ commandResult = compositeCommand;
+ }
+
+ // Dispose the internationationalizationModelResource
+ internationalizationModelResource = null;
+
+ return commandResult;
+ }
+
+ /**
+ * Init target request to have the properties resources references.
+ *
+ * @param request
+ * The request.
+ */
+ protected boolean setPropertiesTargetRequest(final ControlModeRequest request) {
+ boolean result = false;
+ final URI propertiesURI = request.getNewURI().trimFileExtension()
+ .appendFileExtension(PropertiesFilesUtils.PROPERTIES_FILE_EXTENSION);
+ final ModelSet modelSet = request.getModelSet();
+
+ if (null != modelSet) {
+
+ final InternationalizationModelResource modelResource = getInternationalizationModelResource(request);
+ if (null != modelResource) {
+ final Map<Locale, Resource> localesAndResources = modelResource
+ .getLocalesAndResourcesForURI(propertiesURI);
+
+ if (!localesAndResources.isEmpty()) {
+ request.setParameter(ControlPropertiesUtils.CREATED_PROPERTIES_RESOURCES, localesAndResources);
+ // Nothing to do but everything is ok
+ result = true;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Init source request to have the properties resources references.
+ *
+ * @param request
+ * The request.
+ */
+ protected Map<Locale, Resource> getPropertiesSourceRequest(final ControlModeRequest request) {
+ Map<Locale, Resource> result = null;
+ final URI propertiesURI = request.getSourceURI().trimFileExtension()
+ .appendFileExtension(PropertiesFilesUtils.PROPERTIES_FILE_EXTENSION);
+ final ModelSet modelSet = request.getModelSet();
+
+ if (null != modelSet) {
+ final InternationalizationModelResource modelResource = getInternationalizationModelResource(request);
+ if (null != modelResource) {
+ result = modelResource.getLocalesAndResourcesForURI(propertiesURI);
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Get the internationalization model resource.
+ *
+ * @return The internationalization model resource.
+ */
+ protected InternationalizationModelResource getInternationalizationModelResource(final ControlModeRequest request) {
+ if (null == internationalizationModelResource && null != request) {
+ final ModelSet modelSet = request.getModelSet();
+ if (null != modelSet) {
+ try {
+ internationalizationModelResource = (InternationalizationModelResource) modelSet
+ .getModelChecked(InternationalizationModelResource.MODEL_ID);
+ } catch (final NotFoundException e) {
+ // Do nothing
+ }
+ }
+ }
+
+ return internationalizationModelResource;
+ }
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/utils/ControlPropertiesUtils.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/utils/ControlPropertiesUtils.java
new file mode 100644
index 00000000000..11c4e3975da
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.controlmode/src/org/eclipse/papyrus/infra/internationalization/controlmode/utils/ControlPropertiesUtils.java
@@ -0,0 +1,25 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.controlmode.utils;
+
+/**
+ * The control properties utils class.
+ */
+public class ControlPropertiesUtils {
+
+ /**
+ * The created properties resources constant.
+ */
+ public static final String CREATED_PROPERTIES_RESOURCES = "createdPropertiesResources"; //$NON-NLS-1$
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/.classpath b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/.classpath
new file mode 100644
index 00000000000..8dd013afc8b
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src-gen"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/.project b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/.project
new file mode 100644
index 00000000000..9b31b5cc1c8
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/.project
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.internationalization.edit</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.oomph.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>check.maven.pom</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>ignore.lower.bound.dependency.ranges</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.papyrus.releng.main.release/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.oomph.version.VersionNature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/META-INF/MANIFEST.MF b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..a4b66a677b2
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.infra.internationalization.edit;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.papyrus.infra.internationalization.provider.InternationalizationEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.papyrus.infra.internationalization.edit.provider,
+ org.eclipse.papyrus.infra.internationalization.provider
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.12.0,4.0.0)",
+ org.eclipse.papyrus.infra.internationalization;bundle-version="[1.0.0,2.0.0)";visibility:=reexport,
+ org.eclipse.emf.edit;bundle-version="[2.12.0,3.0.0)";visibility:=reexport,
+ org.eclipse.gmf.runtime.notation.edit;bundle-version="[1.7.0,2.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.infra.internationalization.utils;bundle-version="[1.0.0,2.0.0)"
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/about.html b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/about.html
new file mode 100644
index 00000000000..598b3684879
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/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/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/build.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/build.properties
new file mode 100644
index 00000000000..60f476a9c04
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/build.properties
@@ -0,0 +1,12 @@
+#
+
+bin.includes = .,\
+ icons/,\
+ META-INF/,\
+ about.html,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src-gen/,\
+ src/
+output.. = bin/ \ No newline at end of file
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/icons/full/obj16/InternationalizationEntry.gif b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/icons/full/obj16/InternationalizationEntry.gif
new file mode 100644
index 00000000000..5a9bc7514fa
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/icons/full/obj16/InternationalizationEntry.gif
Binary files differ
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/icons/full/obj16/InternationalizationLibrary.gif b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/icons/full/obj16/InternationalizationLibrary.gif
new file mode 100644
index 00000000000..48e3cf22687
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/icons/full/obj16/InternationalizationLibrary.gif
Binary files differ
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/plugin.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/plugin.properties
new file mode 100644
index 00000000000..632eac41a11
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/plugin.properties
@@ -0,0 +1,25 @@
+#
+
+pluginName = Papyrus Internationalization Edit Support
+providerName = Eclipse Modeling Project
+
+_UI_CreateChild_text = {0}
+_UI_CreateChild_text2 = {1} {0}
+_UI_CreateChild_text3 = {1}
+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.
+
+_UI_PropertyDescriptor_description = The {0} of the {1}
+
+_UI_InternationalizationLibrary_type = Library
+_UI_InternationalizationEntry_type = Entry
+_UI_Unknown_type = Object
+
+_UI_Unknown_datatype= Value
+
+_UI_InternationalizationLibrary_entries_feature = Entries
+_UI_InternationalizationEntry_key_feature = Key
+_UI_InternationalizationEntry_value_feature = Value
+_UI_Unknown_feature = Unspecified
+
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/plugin.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/plugin.xml
new file mode 100644
index 00000000000..d00f5dc6637
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/plugin.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+ <!-- @generated Internationalization -->
+ <factory
+ uri="http://www.eclipse.org/papyrus/internationalization/model"
+ class="org.eclipse.papyrus.infra.internationalization.provider.InternationalizationItemProviderAdapterFactory"
+ supportedTypes=
+ "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+ org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+ org.eclipse.emf.edit.provider.ITreeItemContentProvider
+ org.eclipse.emf.edit.provider.IItemLabelProvider
+ org.eclipse.emf.edit.provider.IItemPropertySource"/>
+ </extension>
+
+</plugin>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/pom.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/pom.xml
new file mode 100644
index 00000000000..e94fe7a47e9
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.papyrus.infra-internationalization</artifactId>
+ <groupId>org.eclipse.papyrus</groupId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.papyrus.infra.internationalization.edit</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationEditPlugin.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationEditPlugin.java
new file mode 100644
index 00000000000..e424a72a7a3
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationEditPlugin.java
@@ -0,0 +1,96 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization.provider;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Internationalization edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class InternationalizationEditPlugin extends EMFPlugin {
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final InternationalizationEditPlugin INSTANCE = new InternationalizationEditPlugin();
+
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static Implementation plugin;
+
+ /**
+ * Create the instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InternationalizationEditPlugin() {
+ super(new ResourceLocator[] {});
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ @Override
+ public ResourceLocator getPluginResourceLocator() {
+ return plugin;
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ public static Implementation getPlugin() {
+ return plugin;
+ }
+
+ /**
+ * The actual implementation of the Eclipse <b>Plugin</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static class Implementation extends EclipsePlugin {
+ /**
+ * Creates an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Implementation() {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationEntryItemProvider.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationEntryItemProvider.java
new file mode 100644
index 00000000000..7be66df9f88
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationEntryItemProvider.java
@@ -0,0 +1,171 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.papyrus.infra.internationalization.InternationalizationEntry;
+import org.eclipse.papyrus.infra.internationalization.InternationalizationPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.internationalization.InternationalizationEntry} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class InternationalizationEntryItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+ IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InternationalizationEntryItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addKeyPropertyDescriptor(object);
+ addValuePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Key feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addKeyPropertyDescriptor(Object object) {
+ itemPropertyDescriptors
+ .add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(), getString("_UI_InternationalizationEntry_key_feature"), //$NON-NLS-1$
+ getString("_UI_PropertyDescriptor_description", "_UI_InternationalizationEntry_key_feature", //$NON-NLS-1$//$NON-NLS-2$
+ "_UI_InternationalizationEntry_type"), //$NON-NLS-1$
+ InternationalizationPackage.Literals.INTERNATIONALIZATION_ENTRY__KEY, true, false, false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This adds a property descriptor for the Value feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addValuePropertyDescriptor(Object object) {
+ itemPropertyDescriptors
+ .add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(), getString("_UI_InternationalizationEntry_value_feature"), //$NON-NLS-1$
+ getString("_UI_PropertyDescriptor_description", "_UI_InternationalizationEntry_value_feature", //$NON-NLS-1$//$NON-NLS-2$
+ "_UI_InternationalizationEntry_type"), //$NON-NLS-1$
+ InternationalizationPackage.Literals.INTERNATIONALIZATION_ENTRY__VALUE, true, false, false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null));
+ }
+
+ /**
+ * This returns InternationalizationEntry.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/InternationalizationEntry")); //$NON-NLS-1$
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ Object labelValue = ((InternationalizationEntry) object).getKey();
+ String label = labelValue == null ? null : labelValue.toString();
+ return label == null || label.length() == 0 ? getString("_UI_InternationalizationEntry_type") : //$NON-NLS-1$
+ getString("_UI_InternationalizationEntry_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(InternationalizationEntry.class)) {
+ case InternationalizationPackage.INTERNATIONALIZATION_ENTRY__KEY:
+ case InternationalizationPackage.INTERNATIONALIZATION_ENTRY__VALUE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return InternationalizationEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationItemProviderAdapterFactory.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationItemProviderAdapterFactory.java
new file mode 100644
index 00000000000..1b0fabfb979
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationItemProviderAdapterFactory.java
@@ -0,0 +1,243 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization.provider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.papyrus.infra.internationalization.util.InternationalizationAdapterFactory;
+
+/**
+ * This is the factory that is used to provide the interfaces needed to support Viewers.
+ * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
+ * The adapters also support Eclipse property sheets.
+ * Note that most of the adapters are shared among multiple instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class InternationalizationItemProviderAdapterFactory extends InternationalizationAdapterFactory
+ implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+ /**
+ * This keeps track of the root adapter factory that delegates to this adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ComposedAdapterFactory parentAdapterFactory;
+
+ /**
+ * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IChangeNotifier changeNotifier = new ChangeNotifier();
+
+ /**
+ * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<Object> supportedTypes = new ArrayList<>();
+
+ /**
+ * This constructs an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InternationalizationItemProviderAdapterFactory() {
+ supportedTypes.add(IEditingDomainItemProvider.class);
+ supportedTypes.add(IStructuredItemContentProvider.class);
+ supportedTypes.add(ITreeItemContentProvider.class);
+ supportedTypes.add(IItemLabelProvider.class);
+ supportedTypes.add(IItemPropertySource.class);
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.internationalization.InternationalizationLibrary} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InternationalizationLibraryItemProvider internationalizationLibraryItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.internationalization.InternationalizationLibrary}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createInternationalizationLibraryAdapter() {
+ if (internationalizationLibraryItemProvider == null) {
+ internationalizationLibraryItemProvider = new InternationalizationLibraryItemProvider(this);
+ }
+
+ return internationalizationLibraryItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.internationalization.InternationalizationEntry} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InternationalizationEntryItemProvider internationalizationEntryItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.internationalization.InternationalizationEntry}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createInternationalizationEntryAdapter() {
+ if (internationalizationEntryItemProvider == null) {
+ internationalizationEntryItemProvider = new InternationalizationEntryItemProvider(this);
+ }
+
+ return internationalizationEntryItemProvider;
+ }
+
+ /**
+ * This returns the root adapter factory that contains this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ComposeableAdapterFactory getRootAdapterFactory() {
+ return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
+ }
+
+ /**
+ * This sets the composed adapter factory that contains this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
+ this.parentAdapterFactory = parentAdapterFactory;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object type) {
+ return supportedTypes.contains(type) || super.isFactoryForType(type);
+ }
+
+ /**
+ * This implementation substitutes the factory itself as the key for the adapter.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter adapt(Notifier notifier, Object type) {
+ return super.adapt(notifier, this);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object adapt(Object object, Object type) {
+ if (isFactoryForType(type)) {
+ Object adapter = super.adapt(object, type);
+ if (!(type instanceof Class<?>) || (((Class<?>) type).isInstance(adapter))) {
+ return adapter;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * This adds a listener.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void addListener(INotifyChangedListener notifyChangedListener) {
+ changeNotifier.addListener(notifyChangedListener);
+ }
+
+ /**
+ * This removes a listener.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void removeListener(INotifyChangedListener notifyChangedListener) {
+ changeNotifier.removeListener(notifyChangedListener);
+ }
+
+ /**
+ * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void fireNotifyChanged(Notification notification) {
+ changeNotifier.fireNotifyChanged(notification);
+
+ if (parentAdapterFactory != null) {
+ parentAdapterFactory.fireNotifyChanged(notification);
+ }
+ }
+
+ /**
+ * This disposes all of the item providers created by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void dispose() {
+ if (internationalizationLibraryItemProvider != null) {
+ internationalizationLibraryItemProvider.dispose();
+ }
+ if (internationalizationEntryItemProvider != null) {
+ internationalizationEntryItemProvider.dispose();
+ }
+ }
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationLibraryItemProvider.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationLibraryItemProvider.java
new file mode 100644
index 00000000000..0f216466b71
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src-gen/org/eclipse/papyrus/infra/internationalization/provider/InternationalizationLibraryItemProvider.java
@@ -0,0 +1,141 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization.provider;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+
+import org.eclipse.papyrus.infra.internationalization.InternationalizationPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.internationalization.InternationalizationLibrary} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class InternationalizationLibraryItemProvider extends ItemProviderAdapter implements IEditingDomainItemProvider,
+ IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InternationalizationLibraryItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addEntriesPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Entries feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addEntriesPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(
+ ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(),
+ getString("_UI_InternationalizationLibrary_entries_feature"), //$NON-NLS-1$
+ getString("_UI_PropertyDescriptor_description", "_UI_InternationalizationLibrary_entries_feature", //$NON-NLS-1$//$NON-NLS-2$
+ "_UI_InternationalizationLibrary_type"), //$NON-NLS-1$
+ InternationalizationPackage.Literals.INTERNATIONALIZATION_LIBRARY__ENTRIES, true, false, true, null,
+ null, null));
+ }
+
+ /**
+ * This returns InternationalizationLibrary.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/InternationalizationLibrary")); //$NON-NLS-1$
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ return getString("_UI_InternationalizationLibrary_type"); //$NON-NLS-1$
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return InternationalizationEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src/org/eclipse/papyrus/infra/internationalization/edit/provider/InternationalizationNotationItemProviderAdapterFactory.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src/org/eclipse/papyrus/infra/internationalization/edit/provider/InternationalizationNotationItemProviderAdapterFactory.java
new file mode 100644
index 00000000000..0837214f7ed
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.edit/src/org/eclipse/papyrus/infra/internationalization/edit/provider/InternationalizationNotationItemProviderAdapterFactory.java
@@ -0,0 +1,57 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.edit.provider;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.NotationEditPlugin;
+import org.eclipse.gmf.runtime.notation.provider.DiagramItemProvider;
+import org.eclipse.gmf.runtime.notation.provider.NotationItemProviderAdapterFactory;
+import org.eclipse.papyrus.infra.internationalization.utils.utils.LabelInternationalization;
+
+/**
+ * This allows to re-implement the diagram adapter for the label
+ * internationalization call.
+ */
+public class InternationalizationNotationItemProviderAdapterFactory extends NotationItemProviderAdapterFactory {
+
+ /**
+ * Constructor.
+ */
+ public InternationalizationNotationItemProviderAdapterFactory() {
+ super();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.gmf.runtime.notation.provider.NotationItemProviderAdapterFactory#createDiagramAdapter()
+ */
+ @Override
+ public Adapter createDiagramAdapter() {
+ if (diagramItemProvider == null) {
+ diagramItemProvider = new DiagramItemProvider(this) {
+ @Override
+ public String getText(Object object) {
+ String label = LabelInternationalization.getInstance().getDiagramLabel((Diagram) object);
+ return label == null || label.length() == 0
+ ? NotationEditPlugin.INSTANCE.getString("_UI_Diagram_type", true) //$NON-NLS-1$
+ : NotationEditPlugin.INSTANCE.getString("_UI_Diagram_type", true) + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ };
+ }
+
+ return (Adapter) diagramItemProvider;
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/.classpath b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/.classpath
new file mode 100644
index 00000000000..eca7bdba8f0
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.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/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/.project b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/.project
new file mode 100644
index 00000000000..215b0c7400b
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/.project
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.internationalization.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>
+ <buildCommand>
+ <name>org.eclipse.oomph.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>check.maven.pom</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>ignore.lower.bound.dependency.ranges</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.papyrus.releng.main.release/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.oomph.version.VersionNature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..0c68a61dca8
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+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
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/META-INF/MANIFEST.MF b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..bd14dc1bd0a
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.infra.internationalization.ui;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.papyrus.infra.internationalization.ui,
+ org.eclipse.papyrus.infra.internationalization.ui.dialogs,
+ org.eclipse.papyrus.infra.internationalization.ui.handlers
+Require-Bundle: org.eclipse.emf.ecore;bundle-version="[2.12.0,3.0.0)",
+ org.eclipse.ui.workbench;bundle-version="[3.108.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.107.0,4.0.0)",
+ org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.papyrus.infra.ui;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.papyrus.infra.emf;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.papyrus.infra.gmfdiag.common;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.internationalization.common;bundle-version="[1.0.0,2.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.papyrus.infra.internationalization.ui.Activator
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/about.html b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/about.html
new file mode 100644
index 00000000000..598b3684879
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.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/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/build.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/build.properties
new file mode 100644
index 00000000000..2964bc2d7b1
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/build.properties
@@ -0,0 +1,11 @@
+#
+
+bin.includes = .,\
+ META-INF/,\
+ about.html,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.includes = about.html
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/plugin.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/plugin.properties
new file mode 100644
index 00000000000..383429a1252
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = Papyrus Internationalization UI
+providerName = Eclipse Modeling Project
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/plugin.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/plugin.xml
new file mode 100644
index 00000000000..490fd5dec9a
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/plugin.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+ <extension
+ point="org.eclipse.ui.commands">
+ <command
+ defaultHandler="org.eclipse.papyrus.infra.internationalization.ui.handlers.InternationalizationCommandHandler"
+ description="This allows to internationalize the NamedElements, Diagrams and Tables"
+ id="org.eclipse.papyrus.infra.internationalization.activeInternationalization"
+ name="Configure internationalization">
+ <!--state
+ class="org.eclipse.papyrus.infra.internationalization.ui.handlers.InternationalizationToggleState"
+ id="org.eclipse.ui.commands.toggleState">
+ </state-->
+ </command>
+ </extension>
+
+</plugin>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/pom.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/pom.xml
new file mode 100644
index 00000000000..5bf9055d118
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.papyrus.infra-internationalization</artifactId>
+ <groupId>org.eclipse.papyrus</groupId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.papyrus.infra.internationalization.ui</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/src/org/eclipse/papyrus/infra/internationalization/ui/Activator.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/src/org/eclipse/papyrus/infra/internationalization/ui/Activator.java
new file mode 100644
index 00000000000..c7d97b28686
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/src/org/eclipse/papyrus/infra/internationalization/ui/Activator.java
@@ -0,0 +1,77 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.ui;
+
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+ /**
+ * The plug-in ID.
+ */
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.infra.internationalization.ui"; //$NON-NLS-1$
+
+ /**
+ * The shared instance.
+ */
+ private static Activator plugin;
+
+ /**
+ * The log helper.
+ */
+ public static LogHelper log;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(final BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ log = new LogHelper(this);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(final BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/src/org/eclipse/papyrus/infra/internationalization/ui/dialogs/InternationalizationDialog.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/src/org/eclipse/papyrus/infra/internationalization/ui/dialogs/InternationalizationDialog.java
new file mode 100644
index 00000000000..0d99705fd8d
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/src/org/eclipse/papyrus/infra/internationalization/ui/dialogs/InternationalizationDialog.java
@@ -0,0 +1,251 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.ui.dialogs;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * The dialog to manage the internationalization configuration. This will
+ * contains: - Checkbox to determinate if the internationalization must be used
+ * or not - Viewer to select the language of the internationalization
+ */
+public class InternationalizationDialog extends TrayDialog {
+
+ /**
+ * The resource URI corresponding to the papyrus model. This is needed to
+ * get the preference of the papyrus model.
+ */
+ private URI resourceURI;
+
+ /**
+ * The viewer for the language selection.
+ */
+ protected TableViewer tableViewer;
+
+ /**
+ * The widget to manage the use internationalization value.
+ */
+ protected Button useInternationalizationButton;
+
+ /**
+ * Keep the internationalization use value after the dialog closed.
+ */
+ protected boolean useInternationalizationValue;
+
+ /**
+ * Keep the locale value after the dialog closed.
+ */
+ protected Locale localeValue;
+
+ /**
+ * Boolean to determinate if the use internationalization must be displayed.
+ */
+ private boolean displayUse;
+
+ /**
+ * Constructor.
+ *
+ * @param parentShell
+ * The parent shell.
+ * @param resourceURI
+ * The resource URI corresponding to the papyrus model (need to
+ * get preference of the papyrus model).
+ * @param displayUse
+ * Boolean to determinate if the use internationalization must be
+ * displayed.
+ */
+ public InternationalizationDialog(final Shell parentShell, final URI resourceURI, final boolean displayUse) {
+ super(parentShell);
+ setResourceURI(resourceURI);
+ this.displayUse = displayUse;
+ }
+
+ /**
+ * This allows to set the resource URI.
+ *
+ * @param resourceURI
+ * The resource URI to set.
+ */
+ public void setResourceURI(final URI resourceURI) {
+ this.resourceURI = resourceURI;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createDialogArea(final Composite parent) {
+ final Composite composite = (Composite) super.createDialogArea(parent);
+ final GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+ data.widthHint = 300;
+ data.heightHint = 300;
+ composite.setLayoutData(data);
+
+ getShell().setText("Configure internationalization"); //$NON-NLS-1$
+ getShell().setImage(org.eclipse.papyrus.infra.widgets.Activator.getDefault().getImage("/icons/papyrus.png")); //$NON-NLS-1$
+
+ if (displayUse()) {
+ createUseInternationalization(composite);
+ }
+ createLanguage(composite);
+ initializeValues();
+
+ return composite;
+ }
+
+ /**
+ * Determinates if the use internationalization checkbox must be displayed.
+ *
+ * @return <code>true</code> if this will be displayed, <code>false</code>
+ * otherwise.
+ */
+ protected boolean displayUse() {
+ return displayUse;
+ }
+
+ /**
+ * This allows to create the checkbox which manage the use
+ * internationalization button.
+ *
+ * @param parent
+ * The parent composite.
+ */
+ protected void createUseInternationalization(final Composite parent) {
+ useInternationalizationButton = new Button(parent, SWT.CHECK);
+ useInternationalizationButton.setText("Use internationalization");
+ }
+
+ /**
+ * This allows to create the viewer to select the language which be used for
+ * the internationalization.
+ *
+ * @param parent
+ * The parent composite.
+ */
+ protected void createLanguage(final Composite parent) {
+ // Create the viewer and the grid data
+ tableViewer = new TableViewer(parent, SWT.BORDER);
+ final GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+ data.minimumHeight = 200;
+ data.minimumWidth = 100;
+ tableViewer.getTable().setLayoutData(data);
+
+ // Set its label and content providers
+ tableViewer.setContentProvider(new ArrayContentProvider());
+ tableViewer.setLabelProvider(new LabelProvider());
+
+ // Set the input with the available locales
+ final List<Locale> availableLocales = Arrays.asList(Locale.getAvailableLocales());
+ availableLocales.sort(new Comparator<Locale>() {
+
+ @Override
+ public int compare(final Locale arg0, final Locale arg1) {
+ return arg0.toString().compareTo(arg1.toString());
+ }
+
+ });
+ tableViewer.setInput(availableLocales);
+
+ // Add a double click listener to close the dialog on double click
+ tableViewer.addDoubleClickListener(new IDoubleClickListener() {
+
+ @Override
+ public void doubleClick(DoubleClickEvent event) {
+ setReturnCode(OK);
+ close();
+ }
+ });
+ }
+
+ /**
+ * This allows to initialize the values of fields.
+ */
+ protected void initializeValues() {
+ if (displayUse()) {
+ // Manage the selection change for the internationalization use
+ // button
+ useInternationalizationButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(final SelectionEvent e) {
+ useInternationalizationValue = useInternationalizationButton.getSelection();
+ }
+ });
+ // Initialize the boolean value from the preference of papyrus model
+ final boolean useInternationalization = InternationalizationPreferencesUtils
+ .getInternationalizationPreference(resourceURI);
+ useInternationalizationButton.setSelection(useInternationalization);
+ useInternationalizationValue = useInternationalization;
+ }
+
+ // Manage the selection change for locale
+ tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ @Override
+ public void selectionChanged(final SelectionChangedEvent event) {
+ final ISelection selection = event.getSelection();
+ final Locale localeSelected = (Locale) ((StructuredSelection) selection).getFirstElement();
+ localeValue = localeSelected;
+ }
+ });
+ // Initialize the locale value from the preference of papyrus model
+ final Locale locale = InternationalizationPreferencesUtils.getLocalePreference(resourceURI);
+ tableViewer.setSelection(new StructuredSelection(locale));
+ tableViewer.reveal(locale);
+ }
+
+ /**
+ * Get the use internationalization button value.
+ *
+ * @return The use internationalization button value.
+ */
+ public boolean getUseInternationalizationValue() {
+ return useInternationalizationValue;
+ }
+
+ /**
+ * Get the locale value to use for the internationalization.
+ *
+ * @return The locale value.
+ */
+ public Locale getLocaleValue() {
+ return localeValue;
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/src/org/eclipse/papyrus/infra/internationalization/ui/handlers/InternationalizationCommandHandler.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/src/org/eclipse/papyrus/infra/internationalization/ui/handlers/InternationalizationCommandHandler.java
new file mode 100644
index 00000000000..93ad0a6650d
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.ui/src/org/eclipse/papyrus/infra/internationalization/ui/handlers/InternationalizationCommandHandler.java
@@ -0,0 +1,167 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.ui.handlers;
+
+import java.util.Iterator;
+import java.util.Locale;
+
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CompoundCommand;
+import org.eclipse.emf.common.command.UnexecutableCommand;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EcoreFactory;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.window.Window;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.emf.commands.AddToResourceCommand;
+import org.eclipse.papyrus.infra.emf.commands.RemoveFromResourcecommand;
+import org.eclipse.papyrus.infra.emf.gmf.command.GMFtoEMFCommandWrapper;
+import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForResource;
+import org.eclipse.papyrus.infra.gmfdiag.common.model.NotationModel;
+import org.eclipse.papyrus.infra.internationalization.common.command.LocaleInternationalizationPreferenceCommand;
+import org.eclipse.papyrus.infra.internationalization.common.command.UseInternationalizationPreferenceCommand;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesConstants;
+import org.eclipse.papyrus.infra.internationalization.ui.Activator;
+import org.eclipse.papyrus.infra.internationalization.ui.dialogs.InternationalizationDialog;
+import org.eclipse.papyrus.infra.ui.command.AbstractCommandHandler;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * The handler for the internationalization.
+ */
+public class InternationalizationCommandHandler extends AbstractCommandHandler {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.ui.command.AbstractCommandHandler#getCommand(org.eclipse.core.expressions.IEvaluationContext)
+ */
+ @Override
+ protected Command getCommand(final IEvaluationContext context) {
+ Command resultCommand = UnexecutableCommand.INSTANCE;
+
+ final EObject selectedElement = getSelectedElement();
+
+ final URI neededURIResource = getRootNotationURI(selectedElement);
+
+ Resource notationResource = null;
+ final Iterator<Resource> resources = selectedElement.eResource().getResourceSet().getResources().iterator();
+ while (resources.hasNext() && null == notationResource) {
+ final Resource resource = resources.next();
+ if (neededURIResource.equals(resource.getURI())) { // $NON-NLS-1$
+ notationResource = resource;
+ }
+ }
+
+ if (null != notationResource) {
+ final InternationalizationDialog dialog = new InternationalizationDialog(
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), notationResource.getURI(), true);
+
+ if (Window.OK == dialog.open()) {
+
+ final boolean useInternationalizationValue = dialog.getUseInternationalizationValue();
+ final Locale localeValue = dialog.getLocaleValue();
+
+ EAnnotation annotation = null;
+
+ // Search the internationalization annotation in the notation
+ // resource
+ for (final EObject objectContent : notationResource.getContents()) {
+ if (objectContent instanceof EAnnotation
+ && InternationalizationPreferencesConstants.INTERNATIONALIZATION_ANNOTATION_LABEL
+ .equals(((EAnnotation) objectContent).getSource())) {
+ annotation = (EAnnotation) objectContent;
+ }
+ }
+
+ final CompoundCommand compoundCommand = new CompoundCommand("Create internationalization command"); //$NON-NLS-1$
+
+ if (null != annotation) {
+ // Remove the existing annotation
+ try {
+ compoundCommand.append(new RemoveFromResourcecommand(
+ ServiceUtilsForResource.getInstance().getTransactionalEditingDomain(notationResource),
+ notationResource, annotation));
+ } catch (final ServiceException e) {
+ Activator.log.error(e);
+ }
+ compoundCommand
+ .append(new UseInternationalizationPreferenceCommand(notationResource.getURI(), false));
+ }
+
+ if (useInternationalizationValue && null != localeValue) {
+ // Create the annotation if the internationalization value
+ // is not false
+ annotation = EcoreFactory.eINSTANCE.createEAnnotation();
+ annotation
+ .setSource(InternationalizationPreferencesConstants.INTERNATIONALIZATION_ANNOTATION_LABEL);
+ if (useInternationalizationValue) {
+ annotation.getDetails().put(
+ InternationalizationPreferencesConstants.USE_DETAIL_ANNOTATION_LABEL,
+ Boolean.toString(useInternationalizationValue));
+ compoundCommand.append(new UseInternationalizationPreferenceCommand(notationResource.getURI(),
+ useInternationalizationValue));
+ }
+ if (null != localeValue) {
+ annotation.getDetails().put(InternationalizationPreferencesConstants.LANGUAGE_PREFERENCE,
+ localeValue.toString());
+ compoundCommand.append(new LocaleInternationalizationPreferenceCommand(
+ notationResource.getURI(), localeValue.toString()));
+ }
+ compoundCommand.append(new GMFtoEMFCommandWrapper(new AddToResourceCommand(
+ ((ModelSet) notationResource.getResourceSet()).getTransactionalEditingDomain(),
+ notationResource, annotation)));
+ }
+
+ if (!compoundCommand.isEmpty()) {
+ resultCommand = compoundCommand;
+ }
+ }
+ }
+
+ return resultCommand;
+ }
+
+ /**
+ * Get the root notation URI (this allows to manage the control mode
+ * elements)
+ *
+ * @param selectedObject
+ * The initial selected object.
+ * @return The {@link URI} of the root notation.
+ */
+ protected URI getRootNotationURI(final EObject selectedObject) {
+ // Get the root container of the selected object
+ final EObject rootContainer = EcoreUtil.getRootContainer(selectedObject);
+
+ URI rootURI = rootContainer.eResource().getURI();
+ // Remove the file extension and add the notation file extension
+ return rootURI.trimFileExtension().appendFileExtension(NotationModel.NOTATION_FILE_EXTENSION);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.ui.command.AbstractCommandHandler#setEnabled(java.lang.Object)
+ */
+ @Override
+ public void setEnabled(final Object evaluationContext) {
+ setBaseEnabled(true);
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/.classpath b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/.classpath
new file mode 100644
index 00000000000..eca7bdba8f0
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/.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/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/.project b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/.project
new file mode 100644
index 00000000000..8fd4ddeebb4
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/.project
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.internationalization.utils</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.oomph.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>check.maven.pom</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>ignore.lower.bound.dependency.ranges</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.papyrus.releng.main.release/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.oomph.version.VersionNature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/.settings/org.eclipse.jdt.core.prefs b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..0c68a61dca8
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+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
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/META-INF/MANIFEST.MF b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..bb0ec4e2ce5
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/META-INF/MANIFEST.MF
@@ -0,0 +1,25 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.infra.internationalization.utils;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.papyrus.infra.internationalization.utils.commands,
+ org.eclipse.papyrus.infra.internationalization.utils.utils
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.emf.ecore;visibility:=reexport,
+ org.eclipse.ui.workbench,
+ org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.papyrus.infra.core;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.gmf.runtime.notation.edit;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.papyrus.infra.nattable.model;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.papyrus.infra.internationalization;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.papyrus.infra.emf;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.jface;bundle-version="[3.12.0,4.0.0)",
+ org.eclipse.papyrus.infra.ui;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.papyrus.infra.internationalization.common;bundle-version="[1.0.0,2.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.papyrus.infra.internationalization.utils.Activator
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/about.html b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/about.html
new file mode 100644
index 00000000000..598b3684879
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/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/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/build.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/build.properties
new file mode 100644
index 00000000000..2964bc2d7b1
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/build.properties
@@ -0,0 +1,11 @@
+#
+
+bin.includes = .,\
+ META-INF/,\
+ about.html,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
+src.includes = about.html
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/plugin.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/plugin.properties
new file mode 100644
index 00000000000..eb11be415db
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = Papyrus Internationalization Utils
+providerName = Eclipse Modeling Project
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/plugin.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/plugin.xml
new file mode 100644
index 00000000000..7ac51d15095
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/plugin.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+</plugin>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/pom.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/pom.xml
new file mode 100644
index 00000000000..b2e0417717d
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/pom.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.papyrus.infra-internationalization</artifactId>
+ <groupId>org.eclipse.papyrus</groupId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.papyrus.infra.internationalization.utils</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/Activator.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/Activator.java
new file mode 100644
index 00000000000..a3ea85f70bd
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/Activator.java
@@ -0,0 +1,77 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.utils;
+
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+ /**
+ * The plug-in ID.
+ */
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.infra.internationalization.utils"; //$NON-NLS-1$
+
+ /**
+ * The shared instance.
+ */
+ private static Activator plugin;
+
+ /**
+ * The log helper.
+ */
+ public static LogHelper log;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(final BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ log = new LogHelper(this);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(final BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/commands/InternationalizationPasteCommand.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/commands/InternationalizationPasteCommand.java
new file mode 100644
index 00000000000..704df3599d4
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/commands/InternationalizationPasteCommand.java
@@ -0,0 +1,84 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.utils.commands;
+
+import java.util.Locale;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.papyrus.infra.internationalization.utils.utils.LabelInternationalizationUtils;
+
+/**
+ * A Command to set the internationalization of the object for the locale.
+ */
+public class InternationalizationPasteCommand extends RecordingCommand {
+
+ /**
+ * The prefix to add.
+ */
+ public static final String COPY_OF = "CopyOf_"; //$NON-NLS-1$
+
+
+ /**
+ * The object to set the label.
+ */
+ private EObject eObject;
+
+ /**
+ * The label for the object.
+ */
+ private String newLabel;
+
+ /**
+ * The locale for the internationalization label for object.
+ */
+ private Locale locale;
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param domain The editing domain.
+ * @param eObject The object to set the label.
+ * @param initialLabel The label for the object.
+ * @param locale The locale for the internationalization label for object.
+ */
+ public InternationalizationPasteCommand(final TransactionalEditingDomain domain, final EObject eObject, final String initialLabel, final Locale locale) {
+ super(domain);
+ this.eObject = eObject;
+ this.newLabel = getNewLabel(initialLabel);
+ this.locale = locale;
+ }
+
+ /**
+ * Get the label modified from the initial label.
+ *
+ * @param initialLabel The initial label.
+ * @return The modified label.
+ */
+ private String getNewLabel(final String initialLabel){
+ return new StringBuilder(COPY_OF).append(initialLabel).toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.transaction.RecordingCommand#doExecute()
+ */
+ @Override
+ protected void doExecute() {
+ LabelInternationalizationUtils.setLabel(eObject, newLabel, locale);
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/InternationalizationConstants.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/InternationalizationConstants.java
new file mode 100644
index 00000000000..01f51b23270
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/InternationalizationConstants.java
@@ -0,0 +1,30 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.utils.utils;
+
+/**
+ * This class defines the constants for the internationalization.
+ */
+public class InternationalizationConstants {
+
+ /**
+ * The label property path.
+ */
+ public static final String LABEL_PROPERTY_PATH = "label"; //$NON-NLS-1$
+
+ /**
+ * The keyword property path.
+ */
+ public static final String KEYWORD_PROPERTY_PATH = "keyword"; //$NON-NLS-1$
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/LabelInternationalization.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/LabelInternationalization.java
new file mode 100644
index 00000000000..257cca4d333
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/LabelInternationalization.java
@@ -0,0 +1,229 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.utils.utils;
+
+import java.util.Locale;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesUtils;
+import org.eclipse.papyrus.infra.nattable.model.nattable.Table;
+
+/**
+ * The internationalization label manager.
+ */
+public class LabelInternationalization {
+
+ /**
+ * The singleton instance.
+ */
+ private static LabelInternationalization instance;
+
+ /**
+ * Constructor.
+ */
+ protected LabelInternationalization() {
+
+ }
+
+ /**
+ * Get the singleton instance (create it if not existing).
+ *
+ * @return The singleton instance.
+ */
+ public static LabelInternationalization getInstance() {
+ if (null == instance) {
+ instance = new LabelInternationalization();
+ }
+ return instance;
+ }
+
+ /**
+ * This allows to get the label of the diagram without the getName when the
+ * label is null.
+ *
+ * @param diagram
+ * The diagram.
+ * @return The label of the diagram.
+ */
+ public String getDiagramLabelWithoutName(final Diagram diagram) {
+ return getDiagramLabelWithoutName(diagram, true);
+ }
+
+ /**
+ * This allows to get the label of the diagram without the getName when the
+ * label is null.
+ *
+ * @param diagram
+ * The diagram.
+ * @param localize
+ * Boolean to determinate if the locale must be used.
+ * @return The label of the diagram.
+ */
+ public String getDiagramLabelWithoutName(final Diagram diagram, final boolean localize) {
+ return LabelInternationalizationUtils.getLabelWithoutSubstract(diagram, localize);
+ }
+
+ /**
+ * This allows to get the label of the diagram.
+ *
+ * @param diagram
+ * The diagram.
+ * @return The label of the diagram or the name if the label is null.
+ */
+ public String getDiagramLabel(final Diagram diagram) {
+ return getDiagramLabel(diagram, true);
+ }
+
+ /**
+ * This allows to get the label of the diagram.
+ *
+ * @param diagram
+ * The diagram.
+ * @param localize
+ * Boolean to determinate if the locale must be used.
+ * @return The label of the diagram or the name if the label is null.
+ */
+ public String getDiagramLabel(final Diagram diagram, final boolean localize) {
+ String result = null;
+ if (null != diagram.eResource() && InternationalizationPreferencesUtils.getInternationalizationPreference(diagram)) {
+ result = getDiagramLabelWithoutName(diagram, localize);
+ }
+ return null != result ? result : diagram.getName();
+ }
+
+ /**
+ * This allows to set the diagram label.
+ *
+ * @param diagram
+ * The diagram.
+ * @param value
+ * The label value.
+ * @param locale
+ * The locale for which set the value (if <code>null</code> set
+ * it for the current locale).
+ */
+ public void setDiagramLabel(final Diagram diagram, final String value, final Locale locale) {
+ LabelInternationalizationUtils.setLabel(diagram, value, locale);
+ }
+
+ /**
+ * This allows to get the set diagram label command.
+ *
+ * @param domain
+ * The editing domain to use.
+ * @param diagram
+ * The diagram.
+ * @param value
+ * The value to set.
+ * @param locale
+ * The locale for which set the value (if <code>null</code> set
+ * it for the current locale).
+ * @return The command which allow to set the diagram label.
+ */
+ public Command getSetDiagramLabelCommand(final EditingDomain domain, final Diagram diagram, final String value,
+ final Locale locale) {
+ return LabelInternationalizationUtils.getSetLabelCommand(domain, diagram, value, locale);
+ }
+
+ /**
+ * This allows to get the label of the table without the getName when the
+ * label is null.
+ *
+ * @param table
+ * The table.
+ * @return The label of the table.
+ */
+ public String getTableLabelWithoutName(final Table table) {
+ return getTableLabelWithoutName(table, true);
+ }
+
+ /**
+ * This allows to get the label of the table without the getName when the
+ * label is null.
+ *
+ * @param table
+ * The table.
+ * @param localize
+ * Boolean to determinate if the locale must be used.
+ * @return The label of the table.
+ */
+ public String getTableLabelWithoutName(final Table table, final boolean localize) {
+ return LabelInternationalizationUtils.getLabelWithoutSubstract(table, localize);
+ }
+
+ /**
+ * This allows to get the label of the table.
+ *
+ * @param table
+ * The table.
+ * @return The label of the table or the name if the label is null.
+ */
+ public String getTableLabel(final Table table) {
+ return getTableLabel(table, true);
+ }
+
+ /**
+ * This allows to get the label of the table.
+ *
+ * @param table
+ * The table.
+ * @param localize
+ * Boolean to determinate if the locale must be used.
+ * @return The label of the table or the name if the label is null.
+ */
+ public String getTableLabel(final Table table, final boolean localize) {
+ String result = null;
+ if (null != table.eResource() && InternationalizationPreferencesUtils.getInternationalizationPreference(table)) {
+ result = getTableLabelWithoutName(table, localize);
+ }
+ return null != result ? result : table.getName();
+ }
+
+ /**
+ * This allows to set the table label.
+ *
+ * @param table
+ * The table.
+ * @param value
+ * The label value.
+ * @param locale
+ * The locale for which set the value (if <code>null</code> set
+ * it for the current locale).
+ */
+ public void setTableLabel(final Table table, final String value, final Locale locale) {
+ LabelInternationalizationUtils.setLabel(table, value, locale);
+ }
+
+ /**
+ * This allows to get the set table label command.
+ *
+ * @param domain
+ * The editing domain to use.
+ * @param table
+ * The table.
+ * @param value
+ * The value to set.
+ * @param locale
+ * The locale for which set the value (if <code>null</code> set
+ * it for the current locale).
+ * @return The command which allow to set the table label.
+ */
+ public Command getSetTableLabelCommand(final EditingDomain domain, final Table table, final String value,
+ final Locale locale) {
+ return LabelInternationalizationUtils.getSetLabelCommand(domain, table, value, locale);
+ }
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/LabelInternationalizationPreferencesUtils.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/LabelInternationalizationPreferencesUtils.java
new file mode 100644
index 00000000000..8ef77d9c261
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/LabelInternationalizationPreferencesUtils.java
@@ -0,0 +1,64 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.utils.utils;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesUtils;
+
+/**
+ * Open the label internationalization preferences to the others plugins with the utils plugin.
+ */
+public class LabelInternationalizationPreferencesUtils {
+
+ /**
+ * This allows to modify the internationalization preference value.
+ *
+ * @param eObject The {@link EObject) corresponding (to get its resource).
+ * @param value The new preference value.
+ */
+ public static void setInternationalizationPreference(final EObject eObject, final boolean value){
+ InternationalizationPreferencesUtils.setInternationalizationPreference(eObject, value);
+ }
+
+ /**
+ * This allows to modify the internationalization preference value.
+ *
+ * @param resource The {@link Resource) to get the papyrus project preferences.
+ * @param value The new preference value.
+ */
+ public static void setInternationalizationPreference(final Resource resource, final boolean value){
+ InternationalizationPreferencesUtils.setInternationalizationPreference(resource, value);
+ }
+
+ /**
+ * This allows to get the internationalization preference value.
+ *
+ * @param eObject The {@link EObject) corresponding (to get its resource).
+ * @return <code>true</code> if the preference value is set to true, <code>false</code> otherwise.
+ */
+ public static boolean getInternationalizationPreference(final EObject eObject){
+ return InternationalizationPreferencesUtils.getInternationalizationPreference(eObject);
+ }
+
+ /**
+ * This allows to get the internationalization preference value.
+ *
+ * @param resource The {@link Resource) to get the papyrus project preferences.
+ * @return <code>true</code> if the preference value is set to true, <code>false</code> otherwise.
+ */
+ public static boolean getInternationalizationPreference(final Resource resource){
+ return InternationalizationPreferencesUtils.getInternationalizationPreference(resource);
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/LabelInternationalizationUtils.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/LabelInternationalizationUtils.java
new file mode 100644
index 00000000000..ee57125a72a
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.utils/src/org/eclipse/papyrus/infra/internationalization/utils/utils/LabelInternationalizationUtils.java
@@ -0,0 +1,259 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.utils.utils;
+
+import java.util.HashSet;
+import java.util.Locale;
+import java.util.Set;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.UnexecutableCommand;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.resource.NotFoundException;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
+import org.eclipse.papyrus.infra.core.utils.ServiceUtils;
+import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForResourceSet;
+import org.eclipse.papyrus.infra.internationalization.InternationalizationEntry;
+import org.eclipse.papyrus.infra.internationalization.common.editor.IInternationalizationEditor;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesUtils;
+import org.eclipse.papyrus.infra.internationalization.modelresource.InternationalizationModelResource;
+
+/**
+ * This allows to manage the utils methods for the internationalization.
+ */
+public class LabelInternationalizationUtils {
+
+ /**
+ * This allows to get the label without getting name if the label is null.
+ *
+ * @param eObject
+ * The object.
+ * @param localize
+ * Boolean to determinate if the localize must be used or not.
+ * @return The label of the object.
+ */
+ public static String getLabelWithoutSubstract(final EObject eObject, final boolean localize) {
+ String result = null;
+
+ try {
+ final InternationalizationModelResource internationalizationResource = getInternationalizationModelResource(
+ eObject.eResource());
+
+ if (null != internationalizationResource) {
+ result = internationalizationResource.getValueForEntryKey(eObject.eResource().getURI(), eObject);
+ }
+ } catch (final Exception e) {
+ // Do nothing
+ }
+
+ return result;
+ }
+
+ /**
+ * This allows to set the label.
+ *
+ * @param eObject
+ * The object.
+ * @param value
+ * The value to set.
+ * @param locale
+ * The locale for which set the value (if <code>null</code> set
+ * it for the current locale).
+ */
+ public static void setLabel(final EObject eObject, final String value, final Locale locale) {
+ try {
+ final InternationalizationModelResource internationalizationResource = getInternationalizationModelResource(
+ eObject.eResource());
+
+ if (null != internationalizationResource) {
+
+ Locale localeToUse = locale;
+ if (null == localeToUse) {
+ localeToUse = InternationalizationPreferencesUtils.getLocalePreference(eObject);
+ }
+
+ internationalizationResource.setValue(eObject.eResource().getURI(), eObject, value, localeToUse);
+ }
+ } catch (final Exception e) {
+ // Do nothing
+ }
+ }
+
+ /**
+ * This allows to get the set label command.
+ *
+ * @param domain
+ * The editing domain to use.
+ * @param eObject
+ * The object.
+ * @param value
+ * The value to set.
+ * @param locale
+ * The locale for which set the value (if <code>null</code> set
+ * it for the current locale).
+ * @return The command which allow to set the label.
+ */
+ public static Command getSetLabelCommand(final EditingDomain domain, final EObject eObject, final String value,
+ final Locale locale) {
+ Command resultCommand = null;
+ try {
+ final InternationalizationModelResource internationalizationResource = getInternationalizationModelResource(
+ eObject.eResource());
+
+ if (null != internationalizationResource) {
+
+ Locale localeToUse = locale;
+ if (null == localeToUse) {
+ localeToUse = InternationalizationPreferencesUtils.getLocalePreference(eObject);
+ }
+
+ resultCommand = internationalizationResource.getSetValueCommand(domain, eObject.eResource().getURI(),
+ eObject, value, localeToUse);
+ }
+ } catch (final Exception e) {
+ // Do nothing
+ }
+ return null != resultCommand ? resultCommand : UnexecutableCommand.INSTANCE;
+ }
+
+ /**
+ * This allows to get the {@link InternationalizationEntry} corresponding to
+ * the object and the key.
+ *
+ * @param eObject
+ * The object to search.
+ * @param key
+ * The key to search in the internationalization library.
+ * @return The corresponding {@link InternationalizationEntry}.
+ */
+ public static InternationalizationEntry getInternationalizationEntry(final EObject eObject, final Object key) {
+ InternationalizationEntry resultEntry = null;
+
+ try {
+ final InternationalizationModelResource internationalizationResource = getInternationalizationModelResource(
+ eObject.eResource());
+
+ if (null != internationalizationResource) {
+ resultEntry = internationalizationResource.getEntryForKey(eObject.eResource().getURI(), key,
+ InternationalizationPreferencesUtils.getLocalePreference(eObject));
+ }
+ } catch (final Exception e) {
+ // Do nothing
+ }
+
+ return resultEntry;
+ }
+
+ /**
+ * This allows to get the {@link InternationalizationEntry} corresponding to
+ * the object and the key.
+ *
+ * @param eObject
+ * The object to search.
+ * @param key
+ * The key to search in the internationalization library.
+ * @param locale
+ * The locale of which get the value
+ * @return The corresponding {@link InternationalizationEntry}.
+ */
+ public static InternationalizationEntry getInternationalizationEntry(final EObject eObject, final Object key,
+ final Locale locale) {
+ InternationalizationEntry resultEntry = null;
+
+ try {
+ final InternationalizationModelResource internationalizationResource = getInternationalizationModelResource(
+ eObject.eResource());
+
+ if (null != internationalizationResource) {
+
+ Locale localeToUse = locale;
+ if (null == localeToUse) {
+ localeToUse = InternationalizationPreferencesUtils.getLocalePreference(eObject);
+ }
+
+ resultEntry = internationalizationResource.getEntryForKey(eObject.eResource().getURI(), key, locale);
+ }
+ } catch (final Exception e) {
+ // Do nothing
+ }
+
+ return resultEntry;
+ }
+
+ /**
+ * Get the available locales for the resource.
+ *
+ * @param resource
+ * The resource.
+ * @return The available locales of loaded properties files for resource.
+ */
+ public static Set<Locale> getAvailableLocales(final Resource resource) {
+ Set<Locale> locales = null;
+
+ try {
+ final InternationalizationModelResource internationalizationResource = getInternationalizationModelResource(
+ resource);
+
+ locales = internationalizationResource.getAvailablePropertiesLocales(resource.getURI());
+ } catch (final Exception e) {
+ // Do nothing
+ }
+
+ return null != locales ? locales : new HashSet<Locale>();
+ }
+
+ /**
+ * Get the internationalizationModelResource from the model set.
+ *
+ * @param resource
+ * The initial resource.
+ * @return The internationalization model resource.
+ * @throws ServiceException
+ * The service registry exception.
+ * @throws NotFoundException
+ * The model not found exception.
+ */
+ public static InternationalizationModelResource getInternationalizationModelResource(final Resource resource)
+ throws ServiceException, NotFoundException {
+ final ServicesRegistry servicesRegistry = ServiceUtilsForResourceSet.getInstance()
+ .getServiceRegistry(resource.getResourceSet());
+ final ModelSet modelSet = ServiceUtils.getInstance().getModelSet(servicesRegistry);
+ return (InternationalizationModelResource) modelSet.getModelChecked(InternationalizationModelResource.MODEL_ID);
+ }
+
+ /**
+ * This allows to manage part label synchronizer for the object
+ * corresponding to the editor part.
+ *
+ * @param eObject
+ * The EObject (seems to be Table or Diagram).
+ * @param editorPart
+ * The editor part corresponding to the EObject.
+ */
+ public static void managePartLabelSynchronizer(final EObject eObject,
+ final IInternationalizationEditor editorPart) {
+ try {
+ final InternationalizationModelResource internationalizationResource = getInternationalizationModelResource(
+ eObject.eResource());
+
+ internationalizationResource.addEditorPartForEObject(eObject, editorPart);
+ } catch (final Exception e) {
+ // Do nothing
+ }
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.classpath b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.classpath
new file mode 100644
index 00000000000..e7a4ca0c29c
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src-gen"/>
+ <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/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.project b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.project
new file mode 100644
index 00000000000..b85a6de555c
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.project
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.internationalization</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.oomph.version.VersionBuilder</name>
+ <arguments>
+ <dictionary>
+ <key>check.maven.pom</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>ignore.lower.bound.dependency.ranges</key>
+ <value>true</value>
+ </dictionary>
+ <dictionary>
+ <key>release.path</key>
+ <value>/org.eclipse.papyrus.releng.main.release/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.oomph.version.VersionNature</nature>
+ <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.settings/org.eclipse.core.resources.prefs b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000000..a8dcccbdbbf
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+encoding//src/site/mediawiki/internationalizationDev-toc.xml=utf-8
+encoding//src/site/mediawiki/internationalizationDev.html=UTF-8
+encoding//target/site/generated-eclipse-help/internationalizationDev-toc.xml=utf-8
+encoding//target/site/generated-eclipse-help/internationalizationDev.html=UTF-8
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.settings/org.eclipse.jdt.core.prefs b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..0c68a61dca8
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+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
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/META-INF/MANIFEST.MF b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..311910f0ab1
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.infra.internationalization;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Export-Package: org.eclipse.papyrus.infra.internationalization,
+ org.eclipse.papyrus.infra.internationalization.commands,
+ org.eclipse.papyrus.infra.internationalization.modelresource,
+ org.eclipse.papyrus.infra.internationalization.modelsnippet,
+ org.eclipse.papyrus.infra.internationalization.util,
+ org.eclipse.papyrus.infra.internationalization.utils
+Require-Bundle: org.eclipse.emf.ecore;bundle-version="[2.12.0,3.0.0)";visibility:=reexport,
+ org.eclipse.ui.workbench;bundle-version="[3.108.0,4.0.0)",
+ org.eclipse.papyrus.infra.nattable.model;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.papyrus.infra.core;bundle-version="[2.3.0,3.0.0)",
+ org.eclipse.gmf.runtime.notation.edit;bundle-version="[1.7.0,2.0.0)",
+ org.eclipse.papyrus.infra.emf;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.papyrus.infra.internationalization.common;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.jface;bundle-version="[3.12.0,4.0.0)",
+ org.eclipse.papyrus.infra.emf.gmf;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.help;bundle-version="[3.8.0,4.0.0)",
+ org.eclipse.papyrus.infra.doc;bundle-version="[1.2.0,2.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.papyrus.infra.internationalization.Activator
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/about.html b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/about.html
new file mode 100644
index 00000000000..598b3684879
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/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/infra/internationalization/org.eclipse.papyrus.infra.internationalization/build.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/build.properties
new file mode 100644
index 00000000000..cc3850cb555
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/build.properties
@@ -0,0 +1,13 @@
+#
+
+bin.includes = .,\
+ model/,\
+ META-INF/,\
+ about.html,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src-gen/,\
+ src/
+output.. = bin/
+src.includes = about.html
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/model/Internationalization.ecore b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/model/Internationalization.ecore
new file mode 100644
index 00000000000..462ae055ec6
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/model/Internationalization.ecore
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="internationalization" nsURI="http://www.eclipse.org/papyrus/internationalization/model"
+ nsPrefix="internationalization">
+ <eClassifiers xsi:type="ecore:EClass" name="InternationalizationLibrary">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="entries" upperBound="-1"
+ eType="#//InternationalizationEntry"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InternationalizationEntry">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="key" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/model/Internationalization.genmodel b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/model/Internationalization.genmodel
new file mode 100644
index 00000000000..dfe7a13c995
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/model/Internationalization.genmodel
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="Copyright (c) 2016 CEA LIST and others.&#xD;&#xA; &#xD;&#xA;All rights reserved. This program and the accompanying materials&#xD;&#xA;are made available under the terms of the Eclipse Public License v1.0&#xD;&#xA;which accompanies this distribution, and is available at&#xD;&#xA;http://www.eclipse.org/legal/epl-v10.html&#xD;&#xA;&#xD;&#xA;Contributors:&#xD;&#xA; Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation"
+ modelDirectory="/org.eclipse.papyrus.infra.internationalization/src-gen" editDirectory="/org.eclipse.papyrus.infra.internationalization.edit/src-gen"
+ modelPluginID="org.eclipse.papyrus.infra.internationalization" modelName="Internationalization"
+ nonNLSMarkers="true" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+ codeFormatting="true" importerID="org.eclipse.emf.importer.ecore" complianceLevel="8.0"
+ copyrightFields="false" providerRootExtendsClass="" operationReflection="true"
+ importOrganizing="true" cleanup="true">
+ <foreignModel>Internationalization.ecore</foreignModel>
+ <genPackages prefix="Internationalization" basePackage="org.eclipse.papyrus.infra"
+ disposableProviderFactory="true" ecorePackage="Internationalization.ecore#/">
+ <genClasses ecoreClass="Internationalization.ecore#//InternationalizationLibrary">
+ <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference Internationalization.ecore#//InternationalizationLibrary/entries"/>
+ </genClasses>
+ <genClasses ecoreClass="Internationalization.ecore#//InternationalizationEntry">
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Internationalization.ecore#//InternationalizationEntry/key"/>
+ <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Internationalization.ecore#//InternationalizationEntry/value"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/plugin.properties b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/plugin.properties
new file mode 100644
index 00000000000..bb233bea040
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/plugin.properties
@@ -0,0 +1,4 @@
+#
+
+pluginName = Papyrus Internationalization
+providerName = Eclipse Modeling Project
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/plugin.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/plugin.xml
new file mode 100644
index 00000000000..189b4a897ee
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/plugin.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.emf.ecore.generated_package">
+ <!-- @generated Internationalization -->
+ <package
+ uri="http://www.eclipse.org/papyrus/internationalization/model"
+ class="org.eclipse.papyrus.infra.internationalization.InternationalizationPackage"
+ genModel="model/Internationalization.genmodel"/>
+ </extension>
+ <extension
+ point="org.eclipse.papyrus.infra.core.model">
+ <model
+ classname="org.eclipse.papyrus.infra.internationalization.modelresource.InternationalizationPreferenceModel"
+ description="Model for internationalization preference"
+ fileExtension="internationalization">
+ </model>
+ </extension>
+ <extension
+ point="org.eclipse.help.toc">
+ <toc
+ file="target/site/generated-eclipse-help/internationalizationDev-toc.xml"
+ primary="false">
+ </toc>
+ </extension>
+
+</plugin>
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/pom.xml b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/pom.xml
new file mode 100644
index 00000000000..19dc71f2eef
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/pom.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.eclipse.papyrus.infra-internationalization</artifactId>
+ <groupId>org.eclipse.papyrus</groupId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.papyrus.infra.internationalization</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.mylyn.docs</groupId>
+ <artifactId>org.eclipse.mylyn.wikitext.core.maven</artifactId>
+ <configuration>
+ <sourceFolder>src/site/mediawiki</sourceFolder>
+ <outputFolder>${project.build.directory}/site/generated-eclipse-help</outputFolder>
+ <!-- copyrightNotice>${help.copyrightNotice}</copyrightNotice>
+ <title>${help.documentTitle}</title-->
+ <multipleOutputFiles>false</multipleOutputFiles>
+ <navigationImages>true</navigationImages>
+ <formatOutput>true</formatOutput>
+ <htmlFilenameFormat>$1.html</htmlFilenameFormat>
+ <xmlFilenameFormat>$1-toc.xml</xmlFilenameFormat>
+ <helpPrefix>target/site/generated-eclipse-help</helpPrefix>
+ <!-- stylesheetUrls>
+ <param>styles/main.css</param>
+ </stylesheetUrls-->
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>eclipse-help</goal>
+ </goals>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.mylyn.docs</groupId>
+ <artifactId>org.eclipse.mylyn.wikitext.mediawiki.core</artifactId>
+ <version>${mylyn.wikitext.version}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+</project> \ No newline at end of file
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationEntry.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationEntry.java
new file mode 100644
index 00000000000..8c2faecd9c9
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationEntry.java
@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Entry</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.internationalization.InternationalizationEntry#getKey <em>Key</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.internationalization.InternationalizationEntry#getValue <em>Value</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationPackage#getInternationalizationEntry()
+ * @model
+ * @generated
+ */
+public interface InternationalizationEntry extends EObject {
+ /**
+ * Returns the value of the '<em><b>Key</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Key</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Key</em>' attribute.
+ * @see #setKey(Object)
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationPackage#getInternationalizationEntry_Key()
+ * @model required="true"
+ * @generated
+ */
+ Object getKey();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.internationalization.InternationalizationEntry#getKey <em>Key</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Key</em>' attribute.
+ * @see #getKey()
+ * @generated
+ */
+ void setKey(Object value);
+
+ /**
+ * Returns the value of the '<em><b>Value</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Value</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Value</em>' attribute.
+ * @see #setValue(String)
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationPackage#getInternationalizationEntry_Value()
+ * @model required="true"
+ * @generated
+ */
+ String getValue();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.internationalization.InternationalizationEntry#getValue <em>Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Value</em>' attribute.
+ * @see #getValue()
+ * @generated
+ */
+ void setValue(String value);
+
+} // InternationalizationEntry
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationFactory.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationFactory.java
new file mode 100644
index 00000000000..4d5c13fac54
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationFactory.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationPackage
+ * @generated
+ */
+public interface InternationalizationFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ InternationalizationFactory eINSTANCE = org.eclipse.papyrus.infra.internationalization.impl.InternationalizationFactoryImpl
+ .init();
+
+ /**
+ * Returns a new object of class '<em>Library</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Library</em>'.
+ * @generated
+ */
+ InternationalizationLibrary createInternationalizationLibrary();
+
+ /**
+ * Returns a new object of class '<em>Entry</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Entry</em>'.
+ * @generated
+ */
+ InternationalizationEntry createInternationalizationEntry();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
+ InternationalizationPackage getInternationalizationPackage();
+
+} //InternationalizationFactory
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationLibrary.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationLibrary.java
new file mode 100644
index 00000000000..c591a85a255
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationLibrary.java
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Library</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.internationalization.InternationalizationLibrary#getEntries <em>Entries</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationPackage#getInternationalizationLibrary()
+ * @model
+ * @generated
+ */
+public interface InternationalizationLibrary extends EObject {
+ /**
+ * Returns the value of the '<em><b>Entries</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.internationalization.InternationalizationEntry}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Entries</em>' reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Entries</em>' reference list.
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationPackage#getInternationalizationLibrary_Entries()
+ * @model
+ * @generated
+ */
+ EList<InternationalizationEntry> getEntries();
+
+} // InternationalizationLibrary
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationPackage.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationPackage.java
new file mode 100644
index 00000000000..8e3da3cc47b
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/InternationalizationPackage.java
@@ -0,0 +1,274 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface InternationalizationPackage extends EPackage {
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNAME = "internationalization"; //$NON-NLS-1$
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_URI = "http://www.eclipse.org/papyrus/internationalization/model"; //$NON-NLS-1$
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_PREFIX = "internationalization"; //$NON-NLS-1$
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ InternationalizationPackage eINSTANCE = org.eclipse.papyrus.infra.internationalization.impl.InternationalizationPackageImpl
+ .init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.internationalization.impl.InternationalizationLibraryImpl <em>Library</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.internationalization.impl.InternationalizationLibraryImpl
+ * @see org.eclipse.papyrus.infra.internationalization.impl.InternationalizationPackageImpl#getInternationalizationLibrary()
+ * @generated
+ */
+ int INTERNATIONALIZATION_LIBRARY = 0;
+
+ /**
+ * The feature id for the '<em><b>Entries</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INTERNATIONALIZATION_LIBRARY__ENTRIES = 0;
+
+ /**
+ * The number of structural features of the '<em>Library</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INTERNATIONALIZATION_LIBRARY_FEATURE_COUNT = 1;
+
+ /**
+ * The number of operations of the '<em>Library</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INTERNATIONALIZATION_LIBRARY_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.internationalization.impl.InternationalizationEntryImpl <em>Entry</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.internationalization.impl.InternationalizationEntryImpl
+ * @see org.eclipse.papyrus.infra.internationalization.impl.InternationalizationPackageImpl#getInternationalizationEntry()
+ * @generated
+ */
+ int INTERNATIONALIZATION_ENTRY = 1;
+
+ /**
+ * The feature id for the '<em><b>Key</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INTERNATIONALIZATION_ENTRY__KEY = 0;
+
+ /**
+ * The feature id for the '<em><b>Value</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INTERNATIONALIZATION_ENTRY__VALUE = 1;
+
+ /**
+ * The number of structural features of the '<em>Entry</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INTERNATIONALIZATION_ENTRY_FEATURE_COUNT = 2;
+
+ /**
+ * The number of operations of the '<em>Entry</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INTERNATIONALIZATION_ENTRY_OPERATION_COUNT = 0;
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.internationalization.InternationalizationLibrary <em>Library</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Library</em>'.
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationLibrary
+ * @generated
+ */
+ EClass getInternationalizationLibrary();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.papyrus.infra.internationalization.InternationalizationLibrary#getEntries <em>Entries</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Entries</em>'.
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationLibrary#getEntries()
+ * @see #getInternationalizationLibrary()
+ * @generated
+ */
+ EReference getInternationalizationLibrary_Entries();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.internationalization.InternationalizationEntry <em>Entry</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Entry</em>'.
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationEntry
+ * @generated
+ */
+ EClass getInternationalizationEntry();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.internationalization.InternationalizationEntry#getKey <em>Key</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Key</em>'.
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationEntry#getKey()
+ * @see #getInternationalizationEntry()
+ * @generated
+ */
+ EAttribute getInternationalizationEntry_Key();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.internationalization.InternationalizationEntry#getValue <em>Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Value</em>'.
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationEntry#getValue()
+ * @see #getInternationalizationEntry()
+ * @generated
+ */
+ EAttribute getInternationalizationEntry_Value();
+
+ /**
+ * Returns the factory that creates the instances of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the factory that creates the instances of the model.
+ * @generated
+ */
+ InternationalizationFactory getInternationalizationFactory();
+
+ /**
+ * <!-- begin-user-doc -->
+ * Defines literals for the meta objects that represent
+ * <ul>
+ * <li>each class,</li>
+ * <li>each feature of each class,</li>
+ * <li>each operation of each class,</li>
+ * <li>each enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.internationalization.impl.InternationalizationLibraryImpl <em>Library</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.internationalization.impl.InternationalizationLibraryImpl
+ * @see org.eclipse.papyrus.infra.internationalization.impl.InternationalizationPackageImpl#getInternationalizationLibrary()
+ * @generated
+ */
+ EClass INTERNATIONALIZATION_LIBRARY = eINSTANCE.getInternationalizationLibrary();
+
+ /**
+ * The meta object literal for the '<em><b>Entries</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference INTERNATIONALIZATION_LIBRARY__ENTRIES = eINSTANCE.getInternationalizationLibrary_Entries();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.internationalization.impl.InternationalizationEntryImpl <em>Entry</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.internationalization.impl.InternationalizationEntryImpl
+ * @see org.eclipse.papyrus.infra.internationalization.impl.InternationalizationPackageImpl#getInternationalizationEntry()
+ * @generated
+ */
+ EClass INTERNATIONALIZATION_ENTRY = eINSTANCE.getInternationalizationEntry();
+
+ /**
+ * The meta object literal for the '<em><b>Key</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute INTERNATIONALIZATION_ENTRY__KEY = eINSTANCE.getInternationalizationEntry_Key();
+
+ /**
+ * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute INTERNATIONALIZATION_ENTRY__VALUE = eINSTANCE.getInternationalizationEntry_Value();
+
+ }
+
+} //InternationalizationPackage
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationEntryImpl.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationEntryImpl.java
new file mode 100644
index 00000000000..f71b6742ccb
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationEntryImpl.java
@@ -0,0 +1,236 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.papyrus.infra.internationalization.InternationalizationEntry;
+import org.eclipse.papyrus.infra.internationalization.InternationalizationPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.internationalization.impl.InternationalizationEntryImpl#getKey <em>Key</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.internationalization.impl.InternationalizationEntryImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class InternationalizationEntryImpl extends MinimalEObjectImpl.Container implements InternationalizationEntry {
+ /**
+ * The default value of the '{@link #getKey() <em>Key</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getKey()
+ * @generated
+ * @ordered
+ */
+ protected static final Object KEY_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getKey() <em>Key</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getKey()
+ * @generated
+ * @ordered
+ */
+ protected Object key = KEY_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected static final String VALUE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected String value = VALUE_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InternationalizationEntryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return InternationalizationPackage.Literals.INTERNATIONALIZATION_ENTRY;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getKey() {
+ return key;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setKey(Object newKey) {
+ Object oldKey = key;
+ key = newKey;
+ if (eNotificationRequired()) {
+ eNotify(new ENotificationImpl(this, Notification.SET,
+ InternationalizationPackage.INTERNATIONALIZATION_ENTRY__KEY, oldKey, key));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getValue() {
+ return value;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void setValue(String newValue) {
+ String oldValue = value;
+ value = newValue;
+// if (eNotificationRequired()) {
+ eNotify(new ENotificationImpl(this, Notification.SET,
+ InternationalizationPackage.INTERNATIONALIZATION_ENTRY__VALUE, oldValue, value));
+// }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case InternationalizationPackage.INTERNATIONALIZATION_ENTRY__KEY:
+ return getKey();
+ case InternationalizationPackage.INTERNATIONALIZATION_ENTRY__VALUE:
+ return getValue();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case InternationalizationPackage.INTERNATIONALIZATION_ENTRY__KEY:
+ setKey(newValue);
+ return;
+ case InternationalizationPackage.INTERNATIONALIZATION_ENTRY__VALUE:
+ setValue((String) newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case InternationalizationPackage.INTERNATIONALIZATION_ENTRY__KEY:
+ setKey(KEY_EDEFAULT);
+ return;
+ case InternationalizationPackage.INTERNATIONALIZATION_ENTRY__VALUE:
+ setValue(VALUE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case InternationalizationPackage.INTERNATIONALIZATION_ENTRY__KEY:
+ return KEY_EDEFAULT == null ? key != null : !KEY_EDEFAULT.equals(key);
+ case InternationalizationPackage.INTERNATIONALIZATION_ENTRY__VALUE:
+ return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) {
+ return super.toString();
+ }
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (key: "); //$NON-NLS-1$
+ result.append(key);
+ result.append(", value: "); //$NON-NLS-1$
+ result.append(value);
+ result.append(')');
+ return result.toString();
+ }
+
+} //InternationalizationEntryImpl
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationFactoryImpl.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationFactoryImpl.java
new file mode 100644
index 00000000000..e9b99631670
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationFactoryImpl.java
@@ -0,0 +1,120 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.papyrus.infra.internationalization.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class InternationalizationFactoryImpl extends EFactoryImpl implements InternationalizationFactory {
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static InternationalizationFactory init() {
+ try {
+ InternationalizationFactory theInternationalizationFactory = (InternationalizationFactory) EPackage.Registry.INSTANCE
+ .getEFactory(InternationalizationPackage.eNS_URI);
+ if (theInternationalizationFactory != null) {
+ return theInternationalizationFactory;
+ }
+ } catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new InternationalizationFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InternationalizationFactoryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case InternationalizationPackage.INTERNATIONALIZATION_LIBRARY:
+ return createInternationalizationLibrary();
+ case InternationalizationPackage.INTERNATIONALIZATION_ENTRY:
+ return createInternationalizationEntry();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public InternationalizationLibrary createInternationalizationLibrary() {
+ InternationalizationLibraryImpl internationalizationLibrary = new InternationalizationLibraryImpl();
+ return internationalizationLibrary;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public InternationalizationEntry createInternationalizationEntry() {
+ InternationalizationEntryImpl internationalizationEntry = new InternationalizationEntryImpl();
+ return internationalizationEntry;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public InternationalizationPackage getInternationalizationPackage() {
+ return (InternationalizationPackage) getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static InternationalizationPackage getPackage() {
+ return InternationalizationPackage.eINSTANCE;
+ }
+
+} //InternationalizationFactoryImpl
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationLibraryImpl.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationLibraryImpl.java
new file mode 100644
index 00000000000..d8bc0cd67a4
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationLibraryImpl.java
@@ -0,0 +1,146 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+
+import org.eclipse.papyrus.infra.internationalization.InternationalizationEntry;
+import org.eclipse.papyrus.infra.internationalization.InternationalizationLibrary;
+import org.eclipse.papyrus.infra.internationalization.InternationalizationPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Library</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.internationalization.impl.InternationalizationLibraryImpl#getEntries <em>Entries</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class InternationalizationLibraryImpl extends MinimalEObjectImpl.Container
+ implements InternationalizationLibrary {
+ /**
+ * The cached value of the '{@link #getEntries() <em>Entries</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getEntries()
+ * @generated
+ * @ordered
+ */
+ protected EList<InternationalizationEntry> entries;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InternationalizationLibraryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return InternationalizationPackage.Literals.INTERNATIONALIZATION_LIBRARY;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EList<InternationalizationEntry> getEntries() {
+ if (entries == null) {
+ entries = new EObjectResolvingEList<>(InternationalizationEntry.class, this,
+ InternationalizationPackage.INTERNATIONALIZATION_LIBRARY__ENTRIES);
+ }
+ return entries;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case InternationalizationPackage.INTERNATIONALIZATION_LIBRARY__ENTRIES:
+ return getEntries();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case InternationalizationPackage.INTERNATIONALIZATION_LIBRARY__ENTRIES:
+ getEntries().clear();
+ getEntries().addAll((Collection<? extends InternationalizationEntry>) newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case InternationalizationPackage.INTERNATIONALIZATION_LIBRARY__ENTRIES:
+ getEntries().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case InternationalizationPackage.INTERNATIONALIZATION_LIBRARY__ENTRIES:
+ return entries != null && !entries.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //InternationalizationLibraryImpl
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationPackageImpl.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationPackageImpl.java
new file mode 100644
index 00000000000..197e2e23368
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/impl/InternationalizationPackageImpl.java
@@ -0,0 +1,252 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrus.infra.internationalization.InternationalizationEntry;
+import org.eclipse.papyrus.infra.internationalization.InternationalizationFactory;
+import org.eclipse.papyrus.infra.internationalization.InternationalizationLibrary;
+import org.eclipse.papyrus.infra.internationalization.InternationalizationPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class InternationalizationPackageImpl extends EPackageImpl implements InternationalizationPackage {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass internationalizationLibraryEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass internationalizationEntryEClass = null;
+
+ /**
+ * Creates an instance of the model <b>Package</b>, registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * <p>Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private InternationalizationPackageImpl() {
+ super(eNS_URI, InternationalizationFactory.eINSTANCE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+ *
+ * <p>This method is used to initialize {@link InternationalizationPackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static InternationalizationPackage init() {
+ if (isInited) {
+ return (InternationalizationPackage) EPackage.Registry.INSTANCE
+ .getEPackage(InternationalizationPackage.eNS_URI);
+ }
+
+ // Obtain or create and register package
+ InternationalizationPackageImpl theInternationalizationPackage = (InternationalizationPackageImpl) (EPackage.Registry.INSTANCE
+ .get(eNS_URI) instanceof InternationalizationPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI)
+ : new InternationalizationPackageImpl());
+
+ isInited = true;
+
+ // Create package meta-data objects
+ theInternationalizationPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theInternationalizationPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theInternationalizationPackage.freeze();
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(InternationalizationPackage.eNS_URI, theInternationalizationPackage);
+ return theInternationalizationPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getInternationalizationLibrary() {
+ return internationalizationLibraryEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EReference getInternationalizationLibrary_Entries() {
+ return (EReference) internationalizationLibraryEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EClass getInternationalizationEntry() {
+ return internationalizationEntryEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getInternationalizationEntry_Key() {
+ return (EAttribute) internationalizationEntryEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EAttribute getInternationalizationEntry_Value() {
+ return (EAttribute) internationalizationEntryEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public InternationalizationFactory getInternationalizationFactory() {
+ return (InternationalizationFactory) getEFactoryInstance();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) {
+ return;
+ }
+ isCreated = true;
+
+ // Create classes and their features
+ internationalizationLibraryEClass = createEClass(INTERNATIONALIZATION_LIBRARY);
+ createEReference(internationalizationLibraryEClass, INTERNATIONALIZATION_LIBRARY__ENTRIES);
+
+ internationalizationEntryEClass = createEClass(INTERNATIONALIZATION_ENTRY);
+ createEAttribute(internationalizationEntryEClass, INTERNATIONALIZATION_ENTRY__KEY);
+ createEAttribute(internationalizationEntryEClass, INTERNATIONALIZATION_ENTRY__VALUE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) {
+ return;
+ }
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+
+ // Initialize classes, features, and operations; add parameters
+ initEClass(internationalizationLibraryEClass, InternationalizationLibrary.class, "InternationalizationLibrary", //$NON-NLS-1$
+ !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getInternationalizationLibrary_Entries(), this.getInternationalizationEntry(), null, "entries", //$NON-NLS-1$
+ null, 0, -1, InternationalizationLibrary.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE,
+ !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(internationalizationEntryEClass, InternationalizationEntry.class, "InternationalizationEntry", //$NON-NLS-1$
+ !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getInternationalizationEntry_Key(), ecorePackage.getEJavaObject(), "key", null, 1, 1, //$NON-NLS-1$
+ InternationalizationEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getInternationalizationEntry_Value(), ecorePackage.getEString(), "value", null, 1, 1, //$NON-NLS-1$
+ InternationalizationEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID,
+ IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ // Create resource
+ createResource(eNS_URI);
+ }
+
+} //InternationalizationPackageImpl
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/util/InternationalizationAdapterFactory.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/util/InternationalizationAdapterFactory.java
new file mode 100644
index 00000000000..9bb7a09f475
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/util/InternationalizationAdapterFactory.java
@@ -0,0 +1,147 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.infra.internationalization.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationPackage
+ * @generated
+ */
+public class InternationalizationAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static InternationalizationPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InternationalizationAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = InternationalizationPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ * <!-- begin-user-doc -->
+ * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+ * <!-- end-user-doc -->
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject) object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the <code>createXXX</code> methods.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InternationalizationSwitch<Adapter> modelSwitch = new InternationalizationSwitch<Adapter>() {
+ @Override
+ public Adapter caseInternationalizationLibrary(InternationalizationLibrary object) {
+ return createInternationalizationLibraryAdapter();
+ }
+
+ @Override
+ public Adapter caseInternationalizationEntry(InternationalizationEntry object) {
+ return createInternationalizationEntryAdapter();
+ }
+
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the <code>target</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param target the object to adapt.
+ * @return the adapter for the <code>target</code>.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject) target);
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.internationalization.InternationalizationLibrary <em>Library</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationLibrary
+ * @generated
+ */
+ public Adapter createInternationalizationLibraryAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.internationalization.InternationalizationEntry <em>Entry</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationEntry
+ * @generated
+ */
+ public Adapter createInternationalizationEntryAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //InternationalizationAdapterFactory
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/util/InternationalizationSwitch.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/util/InternationalizationSwitch.java
new file mode 100644
index 00000000000..8b059e257c4
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src-gen/org/eclipse/papyrus/infra/internationalization/util/InternationalizationSwitch.java
@@ -0,0 +1,145 @@
+/**
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ */
+package org.eclipse.papyrus.infra.internationalization.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.eclipse.papyrus.infra.internationalization.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.internationalization.InternationalizationPackage
+ * @generated
+ */
+public class InternationalizationSwitch<T> extends Switch<T> {
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static InternationalizationPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InternationalizationSwitch() {
+ if (modelPackage == null) {
+ modelPackage = InternationalizationPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case InternationalizationPackage.INTERNATIONALIZATION_LIBRARY: {
+ InternationalizationLibrary internationalizationLibrary = (InternationalizationLibrary) theEObject;
+ T result = caseInternationalizationLibrary(internationalizationLibrary);
+ if (result == null) {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ case InternationalizationPackage.INTERNATIONALIZATION_ENTRY: {
+ InternationalizationEntry internationalizationEntry = (InternationalizationEntry) theEObject;
+ T result = caseInternationalizationEntry(internationalizationEntry);
+ if (result == null) {
+ result = defaultCase(theEObject);
+ }
+ return result;
+ }
+ default:
+ return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Library</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Library</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseInternationalizationLibrary(InternationalizationLibrary object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Entry</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Entry</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseInternationalizationEntry(InternationalizationEntry object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //InternationalizationSwitch
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/Activator.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/Activator.java
new file mode 100644
index 00000000000..05322b0895b
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/Activator.java
@@ -0,0 +1,77 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization;
+
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle.
+ */
+public class Activator extends AbstractUIPlugin {
+
+ /**
+ * The plug-in ID.
+ */
+ public static final String PLUGIN_ID = "org.eclipse.papyrus.infra.internationalization"; //$NON-NLS-1$
+
+ /**
+ * The shared instance.
+ */
+ private static Activator plugin;
+
+ /**
+ * The log helper.
+ */
+ public static LogHelper log;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void start(final BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ log = new LogHelper(this);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ @Override
+ public void stop(final BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/commands/InternationalizationPreferenceCommandFactory.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/commands/InternationalizationPreferenceCommandFactory.java
new file mode 100644
index 00000000000..5e7dd422b96
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/commands/InternationalizationPreferenceCommandFactory.java
@@ -0,0 +1,211 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.commands;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.command.AbstractCommand;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.UnexecutableCommand;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EAnnotation;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationAnnotationResourceUtils;
+import org.eclipse.papyrus.infra.internationalization.common.utils.InternationalizationPreferencesConstants;
+import org.eclipse.papyrus.infra.internationalization.modelresource.InternationalizationPreferenceModel;
+import org.eclipse.papyrus.infra.internationalization.utils.InternationalizationPreferenceModelUtils;
+
+/**
+ * The internationalization preference command factory that allows to manage the
+ * legacy of the storage.
+ */
+public class InternationalizationPreferenceCommandFactory {
+
+ /**
+ * The model set.
+ */
+ private final ModelSet modelSet;
+
+ /**
+ * Constructor.
+ *
+ * @param modelSet
+ * The model set.
+ */
+ public InternationalizationPreferenceCommandFactory(final ModelSet modelSet) {
+ super();
+
+ this.modelSet = modelSet;
+ }
+
+ /**
+ * Creates a command that toggles whether the sash model is stored in the
+ * private workspace metadata area or in the shared {@code *.di} file.
+ *
+ * @return a toggle command for the private layout storage
+ */
+ public Command createTogglePrivateStorageCommand() {
+ Command result = UnexecutableCommand.INSTANCE;
+
+ final InternationalizationPreferenceModel internationalizationPrefModel = InternationalizationPreferenceModelUtils
+ .getInternationalizationPreferenceModel(modelSet);
+ if (null != internationalizationPrefModel) {
+ result = new AbstractToggleCommand("Toggle Private Editor Layout") { //$NON-NLS-1$
+
+ @Override
+ public void execute() {
+
+ final EAnnotation annotationToMove = InternationalizationAnnotationResourceUtils
+ .getInternationalizationAnnotation(internationalizationPrefModel.getResource());
+
+ // We don't record changes in the internationalization
+ // preference model for undo/redo,
+ // so we cannot assume that any changes to the current page
+ // selections are undoable in the usual way
+ if (!internationalizationPrefModel.isLegacyMode()) {
+ final Resource internationalizationPrefResource = annotationToMove.eResource();
+ final URI sharedURI = internationalizationPrefModel.getPrivateResourceURI();
+
+ // Move the contents into the notation model. If the
+ // notation resource isn't loaded, give up because
+ // something is seriously wrong in that case
+ final Resource notationResource = modelSet.getResource(sharedURI, false);
+ if (null != notationResource && notationResource.isLoaded()) {
+ moveContents(internationalizationPrefResource, notationResource, annotationToMove);
+
+ if (internationalizationPrefResource.getContents().isEmpty()) {
+ // Schedule deletion on save
+ modelSet.getResourcesToDeleteOnSave().add(internationalizationPrefResource.getURI());
+ }
+ }
+ } else {
+ Resource internationalizationPrefResource;
+ final URI privateURI = internationalizationPrefModel.getSharedResourceURI();
+
+ // Move the contents into the internationalization
+ // preference model. If the internationalization
+ // preference resource isn't loaded or doesn't exist, it
+ // will have to be handled
+ if (modelSet.getURIConverter().exists(privateURI, null)) {
+ internationalizationPrefResource = modelSet.getResource(privateURI, true);
+ } else {
+ internationalizationPrefResource = modelSet.createResource(privateURI);
+ }
+
+ // In case we had marked it for deletion, earlier
+ modelSet.getResourcesToDeleteOnSave().remove(privateURI);
+
+ final Resource notationResource = annotationToMove.eResource();
+ moveContents(notationResource, internationalizationPrefResource, annotationToMove);
+ }
+
+ // Re-load from the new resource. Snippets might find this
+ // odd, but it would be even more odd for there to be any
+ // snippets on this model
+ internationalizationPrefModel.loadModel(modelSet.getURIWithoutExtension());
+ }
+ };
+ }
+
+ return result;
+ }
+
+ /**
+ * Move the annotation from the first resource into the second one.
+ *
+ * @param fromResource
+ * The resource containing the annotation to move into the second
+ * resource.
+ * @param toResource
+ * The resource where move the annotation.
+ * @param annotation
+ * The annotation to move from first resource into the second
+ * one.
+ */
+ protected void moveContents(final Resource fromResource, final Resource toResource, final EAnnotation annotation) {
+ EObject toReplace = null;
+
+ final Collection<EObject> existingAnnotations = EcoreUtil.getObjectsByType(toResource.getContents(),
+ annotation.eClass());
+ if (null != existingAnnotations && existingAnnotations.isEmpty()) {
+ for (final EObject existingAnnotation : existingAnnotations) {
+ if (existingAnnotation instanceof EAnnotation && ((EAnnotation) existingAnnotation).getSource()
+ .equals(InternationalizationPreferencesConstants.INTERNATIONALIZATION_ANNOTATION_LABEL)) {
+ toReplace = existingAnnotation;
+ }
+ }
+ }
+
+ if (null != toReplace) {
+ EcoreUtil.replace(toReplace, annotation);
+ } else {
+ toResource.getContents().add(annotation);
+ }
+ }
+
+ /**
+ * The command for the toggle action. We don't need recording command here
+ * because this is managed by properties API that will be wrapped as
+ * recording command.
+ */
+ private static abstract class AbstractToggleCommand extends AbstractCommand {
+
+ /**
+ * Constructor.
+ *
+ * @param label
+ * The label of the command.
+ */
+ public AbstractToggleCommand(final String label) {
+ super(label);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.command.AbstractCommand#prepare()
+ */
+ @Override
+ protected boolean prepare() {
+ // Nothing to prepare
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.command.AbstractCommand#undo()
+ */
+ @Override
+ public void undo() {
+ // The command modified a boolean value so the undo will do the
+ // contrary of the previous command
+ execute();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.command.Command#redo()
+ */
+ @Override
+ public void redo() {
+ execute();
+ }
+ }
+
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/commands/ResetNameCommand.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/commands/ResetNameCommand.java
new file mode 100644
index 00000000000..246f8de4201
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/commands/ResetNameCommand.java
@@ -0,0 +1,108 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.commands;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.EMFEditPlugin;
+import org.eclipse.emf.edit.command.AbstractOverrideableCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+
+/**
+ * This allows to define a command to reset the feature value needed.
+ */
+public class ResetNameCommand extends AbstractOverrideableCommand {
+
+ /**
+ * The owner to modify.
+ */
+ private EObject owner;
+
+ /**
+ * The feature tu reset.
+ */
+ private EStructuralFeature feature;
+
+ /**
+ * This caches the label.
+ */
+ protected static final String LABEL = EMFEditPlugin.INSTANCE.getString("_UI_SetCommand_label");
+
+ /**
+ * This caches the description.
+ */
+ protected static final String DESCRIPTION = EMFEditPlugin.INSTANCE.getString("_UI_SetCommand_description");
+
+ /**
+ * Constructor.
+ *
+ * @param domain
+ * The current editing domain.
+ * @param owner
+ * The owner to modify.
+ * @param feature
+ * The feature to reset.
+ */
+ public ResetNameCommand(final EditingDomain domain, final EObject owner, final EStructuralFeature feature) {
+ super(domain, LABEL, DESCRIPTION);
+
+ this.owner = owner;
+ this.feature = feature;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.command.AbstractCommand#prepare()
+ */
+ @Override
+ protected boolean prepare() {
+ return null != this.owner.eClass().getEStructuralFeature(feature.getFeatureID())
+ && null != this.owner.eGet(this.feature);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.edit.command.AbstractOverrideableCommand#doExecute()
+ */
+ @Override
+ public void doExecute() {
+ final Object oldValue = this.owner.eGet(this.feature);
+ this.owner.eSet(feature, null);
+ this.owner.eSet(feature, oldValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.edit.command.AbstractOverrideableCommand#doUndo()
+ */
+ @Override
+ public void doUndo() {
+ final Object oldValue = this.owner.eGet(this.feature);
+ this.owner.eSet(feature, null);
+ this.owner.eSet(feature, oldValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.edit.command.AbstractOverrideableCommand#doRedo()
+ */
+ @Override
+ public void doRedo() {
+ doExecute();
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/commands/ResetNameTransactionalCommand.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/commands/ResetNameTransactionalCommand.java
new file mode 100644
index 00000000000..c473974144e
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/commands/ResetNameTransactionalCommand.java
@@ -0,0 +1,89 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.commands;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.EMFEditPlugin;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+
+/**
+ * This allows to define a command to reset the feature value needed.
+ */
+public class ResetNameTransactionalCommand extends AbstractTransactionalCommand {
+
+ /**
+ * The owner to modify.
+ */
+ private EObject owner;
+
+ /**
+ * The feature tu reset.
+ */
+ private EStructuralFeature feature;
+
+ /**
+ * This caches the label.
+ */
+ protected static final String LABEL = EMFEditPlugin.INSTANCE.getString("_UI_SetCommand_label");
+
+ /**
+ * Constructor.
+ *
+ * @param domain
+ * The current editing domain.
+ * @param owner
+ * The owner to modify.
+ * @param feature
+ * The feature to reset.
+ */
+ public ResetNameTransactionalCommand(final TransactionalEditingDomain domain, final EObject owner,
+ final EStructuralFeature feature) {
+ super(domain, LABEL, null);
+
+ this.owner = owner;
+ this.feature = feature;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.core.commands.operations.AbstractOperation#canExecute()
+ */
+ @Override
+ public boolean canExecute() {
+ return null != this.owner.eClass().getEStructuralFeature(feature.getFeatureID())
+ && null != this.owner.eGet(this.feature);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand#doExecuteWithResult(org.eclipse.core.runtime.IProgressMonitor,
+ * org.eclipse.core.runtime.IAdaptable)
+ */
+ @Override
+ protected CommandResult doExecuteWithResult(final IProgressMonitor monitor, final IAdaptable info)
+ throws ExecutionException {
+ final Object oldValue = this.owner.eGet(this.feature);
+ this.owner.eSet(feature, null);
+ this.owner.eSet(feature, oldValue);
+ return CommandResult.newOKCommandResult(this.owner);
+ }
+}
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/modelresource/AbstractInternationalizationPreferenceModelProvider.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/modelresource/AbstractInternationalizationPreferenceModelProvider.java
new file mode 100644
index 00000000000..f733e324b07
--- /dev/null
+++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/modelresource/AbstractInternationalizationPreferenceModelProvider.java
@@ -0,0 +1,78 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nicolas FAUVERGUE (ALL4TEC) nicolas.fauvergue@all4tec.net - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.internationalization.modelresource;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.resource.sasheditor.ISashModelProvider;
+
+/**
+ * A partial implementation of the {@link ISashModelProvider} protocol.
+ */
+public abstract class AbstractInternationalizationPreferenceModelProvider
+ implements IInternationalizationPreferenceModelProvider {
+
+ /**
+ * The model set managed.
+ */
+ private ModelSet modelSet;
+
+ /**
+ * Constructor.
+ */
+ public AbstractInternationalizationPreferenceModelProvider() {
+ super();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.infra.internationalization.modelresource.IInternationalizationPreferenceModelProvider#initialize(org.eclipse.papyrus.infra.core.resource.ModelSet)
+ */
+ @Override
+ public void initialize(final ModelSet modelSet) {
+ this.modelSet = modelSet;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.papyrus.in