Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian W. Damus2021-08-25 14:09:50 -0400
committerChristian W. Damus2021-08-25 14:09:50 -0400
commit04e4ee55e68d1199449dbea74cf910a11334fc32 (patch)
tree9ff139c2998d2d38ccb865b10ab3b943fcdf9af8
parent50555594a9cead871bfcd7b8e8eab0fcf12d4079 (diff)
downloadorg.eclipse.papyrus-bugs/575122-palette-builder.tar.gz
org.eclipse.papyrus-bugs/575122-palette-builder.tar.xz
org.eclipse.papyrus-bugs/575122-palette-builder.zip
Bug 575122: [Toolsmiths] Validation builder for Palette Configuration modelsbugs/575122-palette-builder
- define a model of project validation builder rules - create an OSGi service to pick up registered URIs of project descriptions - update the GenericEMFModelBuilder to use registered project descriptions to validate bundle dependencies and plugin.xml extensions - create marker resolutions to generate missing extensions, elements, and attributes (and fix attribute values) according to project descriptions - define project rules for the Palette Definition model Change-Id: Ia62428fc825fa35fb6f8cb304d71b3e9724a9c6e Signed-off-by: Christian W. Damus <give.a.damus@gmail.com>
-rw-r--r--features/papyrus-tests-features/org.eclipse.papyrus.tests.toolsmiths.feature/feature.xml7
-rw-r--r--features/papyrus-toolsmiths-features/org.eclipse.papyrus.toolsmiths.validation.feature/feature.xml13
-rw-r--r--plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/utils/BundleResourceLocator.java111
-rw-r--r--plugins/infra/gmfdiag/paletteconfiguration/org.eclipse.papyrus.infra.gmfdiag.paletteconfiguration/model/PaletteConfiguration.projectrules26
-rw-r--r--plugins/infra/gmfdiag/paletteconfiguration/org.eclipse.papyrus.infra.gmfdiag.paletteconfiguration/src/org/eclipse/papyrus/infra/gmfdiag/paletteconfiguration/Activator.java21
-rwxr-xr-xplugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/META-INF/MANIFEST.MF4
-rw-r--r--plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/OSGI-INF/org.eclipse.papyrus.toolsmiths.plugin.internal.builder.GenericEMFModelBuilderProvider.xml1
-rw-r--r--plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/AbstractPapyrusBuilder.java32
-rw-r--r--plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/GenericEMFModelBuilder.java229
-rw-r--r--plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/helper/ExtensionValidator.java211
-rw-r--r--[-rwxr-xr-x]plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/quickfix/ManifestResolutionGenerator.java5
-rw-r--r--plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/internal/builder/GenericEMFModelBuilderProvider.java43
-rw-r--r--plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/internal/builder/messages/Messages.java35
-rw-r--r--plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/internal/builder/messages/messages.properties17
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.classpath7
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.project47
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.core.resources.prefs2
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.core.runtime.prefs2
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.jdt.core.prefs319
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.jdt.ui.prefs127
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.m2e.core.prefs4
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.pde.api.tools.prefs104
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/META-INF/MANIFEST.MF35
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/about.html28
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/build.properties23
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Dependency.gifbin0 -> 570 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Dependency@2x.gifbin0 -> 1328 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Expression.gifbin0 -> 129 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Extension.gifbin0 -> 569 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Extension@2x.gifbin0 -> 1318 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionAttribute.gifbin0 -> 568 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionAttribute@2x.gifbin0 -> 1308 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionElement.gifbin0 -> 577 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionElement@2x.gifbin0 -> 1355 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/FeaturePath.gifbin0 -> 129 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/LiteralString.gifbin0 -> 129 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/OpaqueValue.gifbin0 -> 573 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/OpaqueValue@2x.gifbin0 -> 1328 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectDescription.gifbin0 -> 582 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectDescription@2x.gifbin0 -> 1367 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectRulesModelFile.gifbin0 -> 1074 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectRulesModelFile@2x.gifbin0 -> 1453 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Value.gifbin0 -> 573 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Value@2x.gifbin0 -> 1328 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Variable.gifbin0 -> 129 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/wizban/NewProjectRules.gifbin0 -> 2462 bytes
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/plugin.properties100
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/plugin.xml57
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/pom.xml14
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/internal/ui/Activator.java113
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/presentation/ProjectRulesActionBarContributor.java462
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/presentation/ProjectRulesEditor.java1692
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/presentation/ProjectRulesModelWizard.java629
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/DependencyItemProvider.java278
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExpressionItemProvider.java183
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionAttributeItemProvider.java218
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionElementItemProvider.java176
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionItemProvider.java327
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionModelNodeItemProvider.java199
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/FeaturePathItemProvider.java157
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/LiteralStringItemProvider.java158
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/OpaqueValueItemProvider.java170
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ProjectDescriptionItemProvider.java321
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ProjectRulesItemProviderAdapterFactory.java486
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ValueItemProvider.java140
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/VariableItemProvider.java181
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/.classpath1
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/.project83
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/META-INF/MANIFEST.MF19
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/OSGI-INF/org.eclipse.papyrus.toolsmiths.validation.common.internal.services.DefaultProjectRulesModelProvider.xml8
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/build.properties9
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/model/ProjectRules.genmodel135
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/model/ProjectRules.uml262
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/model/projectrules.ecore194
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/plugin.properties4
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/plugin.xml58
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Dependency.java220
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/DependencyKind.java243
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Expression.java72
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Extension.java205
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ExtensionAttribute.java126
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ExtensionElement.java225
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ExtensionModelNode.java100
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/FeaturePath.java56
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/LiteralString.java68
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/OpaqueValue.java80
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ProjectDescription.java229
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ProjectRulesFactory.java148
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ProjectRulesPackage.java2008
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Value.java43
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Variable.java87
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/DependencyImpl.java495
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/ExpressionImpl.java215
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/ExtensionAttributeImpl.java360
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/ExtensionElementImpl.java480
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/ExtensionImpl.java537
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/ExtensionModelNodeImpl.java316
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/FeaturePathImpl.java200
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/LiteralStringImpl.java222
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/OpaqueValueImpl.java245
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/ProjectDescriptionImpl.java450
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/ProjectRulesFactoryImpl.java335
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/ProjectRulesPackageImpl.java1091
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/ValueImpl.java113
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/VariableImpl.java264
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/operations/DependencyOperations.java75
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/operations/ExpressionOperations.java57
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/operations/ExtensionAttributeOperations.java62
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/operations/ExtensionModelNodeOperations.java64
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/operations/ExtensionOperations.java71
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/operations/FeaturePathOperations.java54
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/operations/LiteralStringOperations.java56
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/operations/OpaqueValueOperations.java69
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/operations/ValueOperations.java54
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/operations/VariableOperations.java61
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/util/ProjectRulesAdapterFactory.java361
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/util/ProjectRulesResourceFactoryImpl.java58
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/util/ProjectRulesResourceImpl.java43
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/util/ProjectRulesSwitch.java431
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/Activator.java42
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/checkers/CommonProblemConstants.java20
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/internal/messages/Messages.java8
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/internal/messages/messages.properties8
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/internal/services/DefaultProjectRulesModelProvider.java72
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/internal/utils/PluginErrorReporter.java4
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/util/Evaluator.java227
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/util/OpaqueValueParser.java216
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/util/ProjectRulesCache.java49
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/quickfix/AbstractEditExtensionMarkerResolution.java258
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/quickfix/AbstractMissingAttributeMarkerResolution.java69
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/quickfix/AbstractMissingElementMarkerResolution.java96
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/quickfix/AbstractSetAttributeMarkerResolution.java49
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/quickfix/CommonMarkerResolutionGenerator.java12
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/quickfix/CommonMarkerResolutionUtils.java17
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/quickfix/ExtensionGeneratorQuickFix.java356
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src/org/eclipse/papyrus/toolsmiths/validation/common/spi/ProjectRulesModelProvider.java60
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/templates/model/Class/insert.javajetinc346
-rw-r--r--plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.profile/src/org/eclipse/papyrus/toolsmiths/validation/profile/internal/checkers/ProfileBuilderProvider.java15
-rw-r--r--plugins/toolsmiths/validation/pom.xml1
-rw-r--r--tests/junit/framework/org.eclipse.papyrus.junit.utils/src/org/eclipse/papyrus/junit/matchers/WorkspaceMatchers.java19
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/.classpath16
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/.project28
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/.settings/org.eclipse.core.resources.prefs2
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/.settings/org.eclipse.core.runtime.prefs2
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/.settings/org.eclipse.jdt.core.prefs319
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/.settings/org.eclipse.jdt.ui.prefs127
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/.settings/org.eclipse.pde.api.tools.prefs104
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/META-INF/MANIFEST.MF32
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/about.html28
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/build.properties9
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/plugin.properties18
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/plugin.xml26
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/pom.xml15
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/BuilderTest.ecore21
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/BuilderTest.projectrules23
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.example/.classpath6
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.example/.project34
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.example/.settings/org.eclipse.jdt.core.prefs319
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.example/META-INF/MANIFEST.MF16
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.example/build.properties20
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.example/plugin.properties14
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.example/plugin.xml20
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.example/resources/uml.toolingstuff17
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.palette.example/.classpath6
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.palette.example/.project34
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.palette.example/.settings/org.eclipse.jdt.core.prefs319
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.palette.example/META-INF/MANIFEST.MF16
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.palette.example/build.properties20
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.palette.example/plugin.properties14
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.palette.example/plugin.xml20
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/org.eclipse.papyrus.toolsmiths.plugin.builder.palette.example/resources/TestPalette.paletteconfiguration11
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/palette/TestPalette.architecture9
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/palette/plugin-architecture.xml27
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/palette/plugin-ok.xml32
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/palette/plugin-wrongPath.xml32
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/plugin-invalidAttribute.xml27
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/plugin-missingAttribute.xml26
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/resources/plugin-missingElement.xml26
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/src/org/eclipse/papyrus/toolsmiths/plugin/builder/tests/AllTests.java36
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/src/org/eclipse/papyrus/toolsmiths/plugin/builder/tests/FakeToolingModel.java68
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/src/org/eclipse/papyrus/toolsmiths/plugin/builder/tests/GenericEMFModelBuilderQuickFixTests.java107
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/src/org/eclipse/papyrus/toolsmiths/plugin/builder/tests/GenericEMFModelBuilderTest.java113
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/src/org/eclipse/papyrus/toolsmiths/plugin/builder/tests/palette/PaletteConfigurationBuilderQuickFixTests.java75
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.plugin.builder.tests/src/org/eclipse/papyrus/toolsmiths/plugin/builder/tests/palette/PaletteConfigurationBuilderTest.java117
-rwxr-xr-xtests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.suite.tests/META-INF/MANIFEST.MF1
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.suite.tests/test/org/eclipse/papyrus/toolsmiths/suite/tests/AllTests.java3
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/.classpath2
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/META-INF/MANIFEST.MF11
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/build.properties2
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/DependencyTest.java156
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/ExpressionTest.java120
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/ExtensionAttributeTest.java156
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/ExtensionElementTest.java113
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/ExtensionModelNodeTest.java90
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/ExtensionTest.java144
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/FeaturePathTest.java116
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/LiteralStringTest.java116
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/OpaqueValueTest.java199
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/ProjectDescriptionTest.java109
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/ProjectRulesAllTests.java63
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/ProjectRulesTests.java71
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/ValueTest.java90
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/tests/VariableTest.java116
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src/org/eclipse/papyrus/toolsmiths/validation/common/tests/AllTests.java2
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src/org/eclipse/papyrus/toolsmiths/validation/common/tests/rules/QuickFix.java5
-rw-r--r--tests/junit/plugins/toolsmiths/org.eclipse.papyrus.toolsmiths.validation.common.tests/src/org/eclipse/papyrus/toolsmiths/validation/common/tests/rules/TestProjectFixture.java52
-rwxr-xr-xtests/junit/plugins/toolsmiths/pom.xml1
207 files changed, 24891 insertions, 178 deletions
diff --git a/features/papyrus-tests-features/org.eclipse.papyrus.tests.toolsmiths.feature/feature.xml b/features/papyrus-tests-features/org.eclipse.papyrus.tests.toolsmiths.feature/feature.xml
index 6e0843064ca..d1b3093f7ac 100644
--- a/features/papyrus-tests-features/org.eclipse.papyrus.tests.toolsmiths.feature/feature.xml
+++ b/features/papyrus-tests-features/org.eclipse.papyrus.tests.toolsmiths.feature/feature.xml
@@ -27,6 +27,13 @@
unpack="false"/>
<plugin
+ id="org.eclipse.papyrus.toolsmiths.plugin.builder.tests"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
id="org.eclipse.papyrus.toolsmiths.validation.profile.tests"
download-size="0"
install-size="0"
diff --git a/features/papyrus-toolsmiths-features/org.eclipse.papyrus.toolsmiths.validation.feature/feature.xml b/features/papyrus-toolsmiths-features/org.eclipse.papyrus.toolsmiths.validation.feature/feature.xml
index e3fe42d7e04..840125166fa 100644
--- a/features/papyrus-toolsmiths-features/org.eclipse.papyrus.toolsmiths.validation.feature/feature.xml
+++ b/features/papyrus-toolsmiths-features/org.eclipse.papyrus.toolsmiths.validation.feature/feature.xml
@@ -27,13 +27,20 @@
unpack="false"/>
<plugin
- id="org.eclipse.papyrus.toolsmiths.validation.profile"
+ id="org.eclipse.papyrus.toolsmiths.validation.common.ui"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
+ id="org.eclipse.papyrus.toolsmiths.validation.profile"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
id="org.eclipse.papyrus.toolsmiths.validation.elementtypes"
download-size="0"
install-size="0"
@@ -46,14 +53,14 @@
install-size="0"
version="0.0.0"
unpack="false"/>
-
+
<plugin
id="org.eclipse.papyrus.toolsmiths.validation.newchild"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
-
+
<plugin
id="org.eclipse.papyrus.toolsmiths.validation.properties"
download-size="0"
diff --git a/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/utils/BundleResourceLocator.java b/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/utils/BundleResourceLocator.java
new file mode 100644
index 00000000000..ae96fc7a0ff
--- /dev/null
+++ b/plugins/infra/emf/org.eclipse.papyrus.infra.emf/src/org/eclipse/papyrus/infra/emf/utils/BundleResourceLocator.java
@@ -0,0 +1,111 @@
+/*****************************************************************************
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.emf.utils;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ListResourceBundle;
+import java.util.ResourceBundle;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.osgi.service.localization.BundleLocalization;
+import org.eclipse.osgi.util.NLS;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+/**
+ * A simple {@link ResourceLocator} that gets strings from an OSGi bundle.
+ */
+public class BundleResourceLocator implements ResourceLocator {
+
+ private final Bundle bundle;
+ private final URL baseURL;
+
+ private ResourceBundle strings;
+
+ public BundleResourceLocator(Bundle bundle) {
+ super();
+
+ this.bundle = bundle;
+
+ try {
+ this.baseURL = new URL(String.format("platform:/plugin/%s/", bundle.getSymbolicName())); //$NON-NLS-1$
+ } catch (MalformedURLException e) {
+ throw new IllegalArgumentException("bundle"); //$NON-NLS-1$
+ }
+ }
+
+ @Override
+ public URL getBaseURL() {
+ return baseURL;
+ }
+
+ @Override
+ public Object getImage(String key) {
+ return null;
+ }
+
+ @Override
+ public String getString(String key) {
+ if (strings == null) {
+ initStrings();
+ }
+
+ return strings.getString(key);
+ }
+
+ private void initStrings() {
+ BundleContext ctx = bundle.getBundleContext();
+ ServiceReference<BundleLocalization> ref = ctx.getServiceReference(BundleLocalization.class);
+
+ if (ref != null) {
+ BundleLocalization l10n = ctx.getService(ref);
+ try {
+ strings = l10n.getLocalization(bundle, null);
+ } finally {
+ ctx.ungetService(ref);
+ }
+ }
+
+ if (strings == null) {
+ strings = new ListResourceBundle() {
+
+ @Override
+ protected Object[][] getContents() {
+ return new Object[0][0];
+ }
+ };
+ }
+ }
+
+ @Override
+ public String getString(String key, boolean translate) {
+ // We don't support the untranslated case
+ return getString(key);
+ }
+
+ @Override
+ public String getString(String key, Object[] substitutions) {
+ return NLS.bind(getString(key), substitutions);
+ }
+
+ @Override
+ public String getString(String key, Object[] substitutions, boolean translate) {
+ return NLS.bind(getString(key, translate), substitutions);
+ }
+
+}
diff --git a/plugins/infra/gmfdiag/paletteconfiguration/org.eclipse.papyrus.infra.gmfdiag.paletteconfiguration/model/PaletteConfiguration.projectrules b/plugins/infra/gmfdiag/paletteconfiguration/org.eclipse.papyrus.infra.gmfdiag.paletteconfiguration/model/PaletteConfiguration.projectrules
new file mode 100644
index 00000000000..de0a1b6de62
--- /dev/null
+++ b/plugins/infra/gmfdiag/paletteconfiguration/org.eclipse.papyrus.infra.gmfdiag.paletteconfiguration/model/PaletteConfiguration.projectrules
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<proj:ProjectDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:proj="http://www.eclipse.org/Papyrus/toolsmiths/validation/ProjectRules" requiredDependency="//@dependency.0">
+ <dependency name="org.eclipse.papyrus.infra.gmfdiag.common"/>
+ <extension extensionPoint="org.eclipse.papyrus.infra.gmfdiag.common.paletteDefinition">
+ <element name="paletteDefinition">
+ <element name="Priority">
+ <attribute name="name" validatable="false">
+ <value xsi:type="proj:OpaqueValue" text="Medium"/>
+ </attribute>
+ </element>
+ <attribute name="ID" validatable="false">
+ <value xsi:type="proj:OpaqueValue" text="{=id}"/>
+ </attribute>
+ <attribute name="name" validatable="false">
+ <value xsi:type="proj:OpaqueValue" text="{=label}"/>
+ </attribute>
+ <attribute name="path">
+ <value xsi:type="proj:OpaqueValue" text="{resource|path}"/>
+ </attribute>
+ <attribute name="class" validatable="false">
+ <value xsi:type="proj:OpaqueValue" text="org.eclipse.papyrus.infra.gmfdiag.common.service.palette.ExtendedPluginPaletteProvider"/>
+ </attribute>
+ </element>
+ <architectureReference href="http://www.eclipse.org/papyrus/infra/gmfdiag/representation#//PapyrusDiagram/palettes"/>
+ </extension>
+</proj:ProjectDescription>
diff --git a/plugins/infra/gmfdiag/paletteconfiguration/org.eclipse.papyrus.infra.gmfdiag.paletteconfiguration/src/org/eclipse/papyrus/infra/gmfdiag/paletteconfiguration/Activator.java b/plugins/infra/gmfdiag/paletteconfiguration/org.eclipse.papyrus.infra.gmfdiag.paletteconfiguration/src/org/eclipse/papyrus/infra/gmfdiag/paletteconfiguration/Activator.java
index 2f39d67df8a..d43dc138b1e 100644
--- a/plugins/infra/gmfdiag/paletteconfiguration/org.eclipse.papyrus.infra.gmfdiag.paletteconfiguration/src/org/eclipse/papyrus/infra/gmfdiag/paletteconfiguration/Activator.java
+++ b/plugins/infra/gmfdiag/paletteconfiguration/org.eclipse.papyrus.infra.gmfdiag.paletteconfiguration/src/org/eclipse/papyrus/infra/gmfdiag/paletteconfiguration/Activator.java
@@ -1,6 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2010 CEA LIST.
- *
+ * Copyright (c) 2010, 2021 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 2.0
@@ -11,16 +10,22 @@
*
* Contributors:
* Remi Schnekenburger (CEA LIST) remi.schnekenburger@cea.fr - Initial API and implementation
+ * Christian W. Damus - bug 575122
*
*****************************************************************************/
package org.eclipse.papyrus.infra.gmfdiag.paletteconfiguration;
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.eclipse.emf.common.util.URI;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.papyrus.infra.core.log.LogHelper;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
/**
* The activator class controls the plug-in life cycle
@@ -39,6 +44,8 @@ public class Activator extends AbstractUIPlugin {
/** Default image. */
public static final String DEFAULT_IMAGE = "icons/papyrus/PapyrusLogo16x16.gif";
+ private ServiceRegistration<URI> projectRulesRegistration;
+
/**
* The constructor
*/
@@ -55,6 +62,13 @@ public class Activator extends AbstractUIPlugin {
// register the login helper
log = new LogHelper(plugin);
+
+ // Register the project validation rules for Palette Configuration Models
+ URI projectRules = URI.createPlatformPluginURI(PLUGIN_ID + "/model/PaletteConfiguration.projectrules", true);
+ Dictionary<String, Object> properties = new Hashtable<>();
+ properties.put("type", "org.eclipse.papyrus.toolsmiths.validation.common.projectrules");
+ properties.put("package", PaletteconfigurationPackage.eINSTANCE);
+ projectRulesRegistration = context.registerService(URI.class, projectRules, properties);
}
/**
@@ -62,6 +76,9 @@ public class Activator extends AbstractUIPlugin {
*/
@Override
public void stop(BundleContext context) throws Exception {
+ projectRulesRegistration.unregister();
+ projectRulesRegistration = null;
+
plugin = null;
log = null;
super.stop(context);
diff --git a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/META-INF/MANIFEST.MF b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/META-INF/MANIFEST.MF
index 4a81a262de1..1cdb1dd1f84 100755
--- a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/META-INF/MANIFEST.MF
+++ b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/META-INF/MANIFEST.MF
@@ -42,7 +42,9 @@ Export-Package: org.eclipse.papyrus.toolsmiths.plugin.builder,
org.eclipse.papyrus.toolsmiths.plugin.builder.helper,
org.eclipse.papyrus.toolsmiths.plugin.builder.nature,
org.eclipse.papyrus.toolsmiths.plugin.builder.preferences,
- org.eclipse.papyrus.toolsmiths.plugin.builder.quickfix
+ org.eclipse.papyrus.toolsmiths.plugin.builder.quickfix,
+ org.eclipse.papyrus.toolsmiths.plugin.internal.builder;x-internal:=true,
+ org.eclipse.papyrus.toolsmiths.plugin.internal.builder.messages;x-internal:=true
Service-Component: OSGI-INF/org.eclipse.papyrus.toolsmiths.plugin.internal.builder.XWTModelBuilderProvider.xml,
OSGI-INF/org.eclipse.papyrus.toolsmiths.plugin.internal.builder.GenericEMFModelBuilderProvider.xml,
OSGI-INF/org.eclipse.papyrus.toolsmiths.plugin.internal.builder.ManifestBuilderProvider.xml
diff --git a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/OSGI-INF/org.eclipse.papyrus.toolsmiths.plugin.internal.builder.GenericEMFModelBuilderProvider.xml b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/OSGI-INF/org.eclipse.papyrus.toolsmiths.plugin.internal.builder.GenericEMFModelBuilderProvider.xml
index 26726d27b0c..04c75a87e9c 100644
--- a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/OSGI-INF/org.eclipse.papyrus.toolsmiths.plugin.internal.builder.GenericEMFModelBuilderProvider.xml
+++ b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/OSGI-INF/org.eclipse.papyrus.toolsmiths.plugin.internal.builder.GenericEMFModelBuilderProvider.xml
@@ -3,5 +3,6 @@
<service>
<provide interface="org.eclipse.papyrus.toolsmiths.plugin.builder.IPapyrusBuilderProvider"/>
</service>
+ <reference bind="addProjectRulesModelProvider" cardinality="0..n" interface="org.eclipse.papyrus.toolsmiths.validation.common.spi.ProjectRulesModelProvider" name="ProjectRulesModelProvider" policy="dynamic" unbind="removeProjectRulesModelProvider"/>
<implementation class="org.eclipse.papyrus.toolsmiths.plugin.internal.builder.GenericEMFModelBuilderProvider"/>
</scr:component> \ No newline at end of file
diff --git a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/AbstractPapyrusBuilder.java b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/AbstractPapyrusBuilder.java
index f8c9ec57ea6..c7b5583d426 100644
--- a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/AbstractPapyrusBuilder.java
+++ b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/AbstractPapyrusBuilder.java
@@ -10,7 +10,7 @@
*
* Contributors:
* Vincent Lorenzo (CEA LIST) <vincent.lorenzo@cea.fr> - Initial API and implementation
- * Christian W. Damus - bug 575376
+ * Christian W. Damus - bug 575376, 575122
*
*****************************************************************************/
package org.eclipse.papyrus.toolsmiths.plugin.builder;
@@ -104,6 +104,34 @@ public abstract class AbstractPapyrusBuilder {
* the created marker
*/
protected IMarker createErrorMarker(final IResource res, final String message) {
+ return createMarker(res, IMarker.SEVERITY_ERROR, message);
+ }
+
+ /**
+ *
+ * @param res
+ * the resource to mark with a warning
+ * @param message
+ * the warning message
+ * @return
+ * the created marker
+ */
+ protected IMarker createWarningMarker(final IResource res, final String message) {
+ return createMarker(res, IMarker.SEVERITY_WARNING, message);
+ }
+
+ /**
+ *
+ * @param res
+ * the resource to mark with an error
+ * @param severity
+ * the {@linkplain IMarker#SEVERITY marker severity}
+ * @param message
+ * the error message
+ * @return
+ * the created marker
+ */
+ protected IMarker createMarker(final IResource res, final int severity, final String message) {
// use this type to appears as java error
// later, we can create our own type, with a specific handler to open our own error dialog appearing during the launching of a new Eclipse runtime
IMarker marker = null;
@@ -111,7 +139,7 @@ public abstract class AbstractPapyrusBuilder {
marker = res.createMarker(getDefaultMarkerType());
marker.setAttribute(IMarker.MESSAGE, Messages.AbstractPapyrusBuilder_PapyrusBuilder + message);
- marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
+ marker.setAttribute(IMarker.SEVERITY, severity);
marker.setAttribute("code", 10000); //$NON-NLS-1$
marker.setAttribute(IMarker.SOURCE_ID, Activator.PLUGIN_ID);
marker.setAttribute(IJavaModelMarker.ID, 7500);
diff --git a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/GenericEMFModelBuilder.java b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/GenericEMFModelBuilder.java
index 4ee998081d5..417d19434fa 100644
--- a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/GenericEMFModelBuilder.java
+++ b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/GenericEMFModelBuilder.java
@@ -10,12 +10,14 @@
*
* Contributors:
* Vincent Lorenzo (CEA LIST) <vincent.lorenzo@cea.fr> - Initial API and implementation
- * Christian W. Damus - bugs 569357, 570097, 572644, 573408, 575376
+ * Christian W. Damus - bugs 569357, 570097, 572644, 573408, 575376, 575122
*
*****************************************************************************/
package org.eclipse.papyrus.toolsmiths.plugin.builder;
+import static com.google.common.base.Functions.constant;
+import static java.util.function.Function.identity;
import static org.eclipse.papyrus.toolsmiths.validation.common.checkers.ModelValidationChecker.createSubstitutionLabelProvider;
import java.io.IOException;
@@ -24,11 +26,13 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
import java.util.Set;
+import java.util.TreeMap;
import java.util.TreeSet;
+import java.util.stream.Collectors;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
@@ -42,12 +46,15 @@ import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EValidator;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
@@ -57,6 +64,7 @@ import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
@@ -65,9 +73,24 @@ import org.eclipse.papyrus.emf.helpers.BundleResourceURIHelper;
import org.eclipse.papyrus.emf.validation.DependencyValidationUtils;
import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
import org.eclipse.papyrus.infra.emf.utils.ResourceUtils;
+import org.eclipse.papyrus.toolsmiths.plugin.builder.helper.ExtensionValidator;
import org.eclipse.papyrus.toolsmiths.plugin.builder.preferences.PluginBuilderPreferencesConstants;
+import org.eclipse.papyrus.toolsmiths.validation.common.checkers.CommonProblemConstants;
+import org.eclipse.papyrus.toolsmiths.validation.common.checkers.ExtensionsChecker;
+import org.eclipse.papyrus.toolsmiths.validation.common.checkers.IPluginChecker2;
+import org.eclipse.papyrus.toolsmiths.validation.common.internal.utils.PluginErrorReporter;
+import org.eclipse.papyrus.toolsmiths.validation.common.internal.utils.PluginErrorReporter.ExtensionChecker;
+import org.eclipse.papyrus.toolsmiths.validation.common.internal.utils.PluginErrorReporter.ExtensionFixProvider;
+import org.eclipse.papyrus.toolsmiths.validation.common.internal.utils.PluginErrorReporter.ExtensionMatcher;
+import org.eclipse.papyrus.toolsmiths.validation.common.internal.utils.ProjectManagementUtils;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.DependencyKind;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription;
+import org.eclipse.papyrus.toolsmiths.validation.common.spi.ProjectRulesModelProvider;
import org.eclipse.papyrus.toolsmiths.validation.common.utils.MarkersService;
+import org.eclipse.pde.internal.core.builders.IncrementalErrorReporter.VirtualMarker;
import org.eclipse.uml2.uml.resource.UMLResource;
+import org.w3c.dom.Element;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
@@ -79,6 +102,7 @@ import org.xml.sax.helpers.DefaultHandler;
*
* Result of the build process is the creation of IMarker (blocking the launch of the Eclipse runtime)
*/
+@SuppressWarnings("restriction")
public class GenericEMFModelBuilder extends AbstractPapyrusBuilder {
/**
@@ -150,8 +174,16 @@ public class GenericEMFModelBuilder extends AbstractPapyrusBuilder {
// IGNORED_NS_URI.add("http://www.eclipse.org/uml2/schemas/Ecore/5");
}
+ private final ProjectRulesModelProvider projectRulesModelProvider;
+
public GenericEMFModelBuilder() {
+ this(null);
+ }
+
+ public GenericEMFModelBuilder(ProjectRulesModelProvider projectRulesModelProvider) {
super(MODEL_PROBLEM);
+
+ this.projectRulesModelProvider = (projectRulesModelProvider == null) ? ProjectRulesModelProvider.NULL : projectRulesModelProvider;
}
@Override
@@ -174,12 +206,13 @@ public class GenericEMFModelBuilder extends AbstractPapyrusBuilder {
validateModel(resources);
}
- /*
- * check the required dependencies
- */
+ // 3. check the required dependencies
if (isCheckModelDependencyActivated()) {
checkModelDependencies(resources, builtProject);
}
+
+ // 4. check plug-in extensions etc.
+ checkPluginManifest(resources, builtProject);
} finally {
// Make sure to unload resource sets because if any of them load UML content either directly
// or by cross-document reference, then the static CacheAdapter may be retaining them
@@ -220,7 +253,7 @@ public class GenericEMFModelBuilder extends AbstractPapyrusBuilder {
}
/**
- * This method checks that all required dependencies are included into the manifest file of the project
+ * This method checks that all required dependencies are included in the manifest file of the project.
*
* @param resources
* the resource for which we check the dependencies
@@ -231,28 +264,142 @@ public class GenericEMFModelBuilder extends AbstractPapyrusBuilder {
protected void checkModelDependencies(final Map<Resource, IFile> resources, final IProject builtProject) throws CoreException {
// 3. get all current declared dependencies in the project
final Collection<String> currentDeclaredDependencies = getAllAvailableDependencies(builtProject);
+ final Map<Resource, ProjectDescription> projectDescriptions = getProjectDescriptions(resources.keySet());
+
+ Optional<IFile> manifest = Optional.ofNullable(ProjectManagementUtils.getManifestFile(builtProject));
// 4. explore resources dependencies
for (final Entry<Resource, IFile> current : resources.entrySet()) {
- final Set<String> requiredDependencies = getDependencies(current.getKey(), builtProject);
- requiredDependencies.removeAll(currentDeclaredDependencies);
- requiredDependencies.remove(builtProject.getName());
- if (requiredDependencies.size() > 0) {
- final StringBuilder dependenciesToAdd = new StringBuilder();
- final Iterator<String> iter = requiredDependencies.iterator();
- while (iter.hasNext()) {
- dependenciesToAdd.append(iter.next());
- if (iter.hasNext()) {
- dependenciesToAdd.append(DependencyValidationUtils.DEPENDENCY_SEPARATOR);
- }
+ final Map<String, Boolean> dependencies = getDependencies(current.getKey(), projectDescriptions.get(current.getKey()), builtProject);
+ dependencies.keySet().removeAll(currentDeclaredDependencies);
+ dependencies.remove(builtProject.getName());
+
+ if (!dependencies.isEmpty()) {
+ final String requiredDependenciesToAdd = dependencies.entrySet().stream().filter(e -> e.getValue())
+ .map(Map.Entry::getKey)
+ .collect(Collectors.joining(DependencyValidationUtils.DEPENDENCY_SEPARATOR));
+ final String expectedDependenciesToAdd = dependencies.entrySet().stream().filter(e -> !e.getValue())
+ .map(Map.Entry::getKey)
+ .collect(Collectors.joining(DependencyValidationUtils.DEPENDENCY_SEPARATOR));
+
+ if (!requiredDependenciesToAdd.isBlank()) {
+ final IMarker marker = createErrorMarker(manifest.orElse(current.getValue()), "Missing Dependencies in model"); //$NON-NLS-1$
+ IPluginChecker2.problem(CommonProblemConstants.MISSING_DEPENDENCIES_MARKER_ID).applyTo(marker);
+ marker.setAttribute(DependencyValidationUtils.MISSING_DEPENDENCIES, requiredDependenciesToAdd);
+ }
+ if (!expectedDependenciesToAdd.isBlank()) {
+ final IMarker marker = createWarningMarker(manifest.orElse(current.getValue()), "Missing Dependencies in model"); //$NON-NLS-1$
+ IPluginChecker2.problem(CommonProblemConstants.MISSING_DEPENDENCIES_MARKER_ID).applyTo(marker);
+ marker.setAttribute(DependencyValidationUtils.MISSING_DEPENDENCIES, expectedDependenciesToAdd);
}
- final IMarker marker = createErrorMarker(current.getValue(), "Missing Dependencies in model"); //$NON-NLS-1$
- marker.setAttribute(DependencyValidationUtils.MISSING_DEPENDENCIES, dependenciesToAdd.toString());
}
}
}
/**
+ * This method checks that all required plug-in extensions are present and correct in the <tt>plugin.xml</tt>.
+ *
+ * @param resources
+ * the resource for which we check the plug-in extensions
+ * @param builtProject
+ * the current built project
+ * @throws CoreException
+ */
+ protected void checkPluginManifest(final Map<Resource, IFile> resources, final IProject builtProject) throws CoreException {
+ final Map<Resource, ProjectDescription> projectDescriptions = getProjectDescriptions(resources.keySet());
+
+ if (projectDescriptions.isEmpty()) {
+ // Nothing to do
+ return;
+ }
+
+ IFile pluginXML = ProjectManagementUtils.getPluginXMLFile(builtProject);
+ if (pluginXML == null) {
+ // Nothing to do
+ return;
+ }
+
+ for (final Resource current : resources.keySet()) {
+ ProjectDescription projectDescription = projectDescriptions.get(current);
+ EObject model = current.getContents().isEmpty() ? null : current.getContents().get(0);
+
+ if (projectDescription != null && model != null) {
+ ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+ ExtensionsChecker<EObject, PluginErrorReporter<EObject>> checker = new ExtensionsChecker<>(builtProject, resources.get(current), Set.of(model), getMarkerType(),
+ (project, file, object) -> createPluginErrorReporter(project, file, object, projectDescription, adapterFactory));
+
+ try {
+ checker.check(new NullProgressMonitor());
+ } finally {
+ adapterFactory.dispose();
+ }
+ }
+ }
+ }
+
+ private PluginErrorReporter<EObject> createPluginErrorReporter(IFile pluginXML, IFile modelFile, EObject model, ProjectDescription description, AdapterFactory adapterFactory) {
+ PluginErrorReporter<EObject> result = new PluginErrorReporter<>(pluginXML, modelFile, model, getMarkerType(), object -> getLabel(object, adapterFactory)) {
+ private String currentMissingExtensionPoint;
+
+ protected void reportMissingExtension(String point) {
+ currentMissingExtensionPoint = point;
+ try {
+ super.reportMissingExtension(point);
+ } finally {
+ currentMissingExtensionPoint = null;
+ }
+ }
+
+ protected VirtualMarker reportProblem(String message, int line, int severity, int fixId, Element element, String attrName, String category) {
+ VirtualMarker result = super.reportProblem(message, line, severity, fixId, element, attrName, category);
+
+ result.setAttribute(EValidator.URI_ATTRIBUTE, EcoreUtil.getURI(model).toString());
+
+ if (currentMissingExtensionPoint != null) {
+ result.setAttribute(CommonProblemConstants.EXTENSION_POINT, currentMissingExtensionPoint);
+ }
+
+ return result;
+ }
+ };
+
+ for (Extension extension : description.getExtensions()) {
+ if (extension.getResourceAttribute() != null) {
+ ExtensionValidator<EObject> validator = new ExtensionValidator<>(pluginXML.getProject(), modelFile, extension);
+
+ String point = extension.getExtensionPoint();
+ ExtensionMatcher<EObject> matcher = validator::matchExtension;
+ ExtensionChecker<EObject> checker = validator::checkExtension;
+ ExtensionFixProvider<EObject> fixProvider = validator::problemID;
+
+ if (extension.getArchitectureReference() != null) {
+ // This extension point is optional if the model can be registered via an Architecture Context
+ result.softRequireExtensionPoint(point, matcher, checker, fixProvider);
+ } else {
+ result.requireExtensionPoint(point, matcher, checker, fixProvider);
+ }
+ }
+ }
+
+ return result;
+ }
+
+ protected String getLabel(EObject object, AdapterFactory adapterFactory) {
+ String result = null;
+
+ IItemLabelProvider provider = (IItemLabelProvider) adapterFactory.adapt(object, IItemLabelProvider.class);
+ if (provider != null) {
+ result = provider.getText(object);
+ }
+
+ if (result == null) {
+ result = EcoreUtil.getIdentification(object);
+ }
+
+ return result;
+ }
+
+ /**
*
* @param javaProject
* a java project
@@ -308,6 +455,25 @@ public class GenericEMFModelBuilder extends AbstractPapyrusBuilder {
return resources;
}
+ protected Map<Resource, ProjectDescription> getProjectDescriptions(final Collection<? extends Resource> resources) {
+ Map<Resource, ProjectDescription> result = new HashMap<>();
+
+ for (Resource resource : resources) {
+ ResourceSet rset = resource.getResourceSet();
+
+ for (EObject next : resource.getContents()) {
+ EPackage ePackage = next.eClass().getEPackage();
+ ProjectDescription description = projectRulesModelProvider.getProjectDescription(ePackage, rset);
+ if (description != null) {
+ result.put(resource, description);
+ break;
+ }
+ }
+ }
+
+ return result;
+ }
+
/**
*
* @param f
@@ -367,6 +533,31 @@ public class GenericEMFModelBuilder extends AbstractPapyrusBuilder {
*
* @param resource
* a resource
+ * @param description
+ * a description of the project dependencies, or {@code null} if none is available
+ * @param builtProject
+ * the current build project
+ * @return
+ * a mapping of bundle dependencies to whether they are required ({@code true}) or just expected ({@code false})
+ */
+ protected Map<String, Boolean> getDependencies(final Resource resource, final ProjectDescription description, final IProject builtProject) {
+ Map<String, Boolean> result = getDependencies(resource, builtProject).stream()
+ .collect(Collectors.toMap(identity(), constant(true), (a, b) -> a, TreeMap::new));
+
+ if (description != null) {
+ // Import-Package dependencies are not (yet) supported
+ description.getDependencies().stream()
+ .filter(dep -> dep.getKind() == DependencyKind.REQUIRE_BUNDLE)
+ .forEach(dep -> result.put(dep.getName(), dep.isRequired()));
+ }
+
+ return result;
+ }
+
+ /**
+ *
+ * @param resource
+ * a resource
* @return
* the bundle providing this resource
*/
diff --git a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/helper/ExtensionValidator.java b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/helper/ExtensionValidator.java
new file mode 100644
index 00000000000..6a9ed831595
--- /dev/null
+++ b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/helper/ExtensionValidator.java
@@ -0,0 +1,211 @@
+/*****************************************************************************
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.plugin.builder.helper;
+
+import static java.util.function.Predicate.not;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.infra.tools.util.XMLTreeIterator;
+import org.eclipse.papyrus.toolsmiths.plugin.internal.builder.messages.Messages;
+import org.eclipse.papyrus.toolsmiths.validation.common.checkers.CommonProblemConstants;
+import org.eclipse.papyrus.toolsmiths.validation.common.internal.utils.PluginErrorReporter;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.util.Evaluator;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import com.google.common.base.Strings;
+
+/**
+ * A helper for validation of plug-in extensions described by a {@link ProjectDescription} model.
+ * It is design to provide implementations of the various delegate interfaces of the
+ * {@link PluginErrorReporter} API.
+ */
+public class ExtensionValidator<T extends EObject> {
+ private static final String CATEGORY = "model_extension"; //$NON-NLS-1$
+
+ private final IProject project;
+ private final IFile modelFile;
+ private final Extension extensionModel;
+
+ public ExtensionValidator(IProject project, IFile modelFile, Extension extensionModel) {
+ super();
+
+ this.project = project;
+ this.modelFile = modelFile;
+ this.extensionModel = extensionModel;
+ }
+
+ /**
+ * Match an extension on the given {@code point} as a registration of the given {@code model}.
+ *
+ * @param {@code <extension>} element an element in the <tt>plugin.xml</tt>
+ * @param point
+ * the extension point referenced by the {@code element}
+ * @param model
+ * the tooling model being validated
+ *
+ * @return the XML element within the given extension {@code element} that matches the {@code model}
+ */
+ public Optional<Element> matchExtension(Element element, String point, T model) {
+ if (Objects.equals(point, extensionModel.getExtensionPoint())) {
+ ExtensionAttribute resourceAttribute = extensionModel.getResourceAttribute();
+ for (Iterator<Element> iter = new XMLTreeIterator(element); iter.hasNext();) {
+ Element next = iter.next();
+ if (matchElement(resourceAttribute.getElement(), next, element)) {
+ return matchResourceAttribute(resourceAttribute, next, createEvaluator(model));
+ }
+ }
+ }
+
+ return Optional.empty();
+ }
+
+ protected boolean matchElement(ExtensionElement description, Element element, Element extension) {
+ boolean result = Objects.equals(description.getName(), element.getTagName())
+ && (description.getParent() != null) == (element.getParentNode() != extension);
+
+ if (result && description.getParent() != null) {
+ // Check parents
+ result = matchElement(description.getParent(), (Element) element.getParentNode(), extension);
+ }
+
+ return result;
+ }
+
+ protected Optional<Element> matchResourceAttribute(ExtensionAttribute resourceAttribute, Element element, Evaluator evaluator) {
+ String attributeValue = element.getAttribute(resourceAttribute.getName());
+
+ boolean evaluationResult = validate(resourceAttribute, attributeValue, evaluator);
+ return evaluationResult ? Optional.of(element) : Optional.empty();
+ }
+
+ protected final String evaluate(ExtensionAttribute attribute, Evaluator evaluator) {
+ Value value = attribute.getParsedValue();
+ String result = value == null ? null : evaluator.evaluate(value);
+ return Strings.nullToEmpty(result);
+ }
+
+ protected final boolean validate(ExtensionAttribute attribute, String actualValue, Evaluator evaluator) {
+ Value value = attribute.getParsedValue();
+ return value != null && evaluator.validate(actualValue, value);
+ }
+
+ protected Evaluator createEvaluator(T model) {
+ return new Evaluator(project, modelFile, model);
+ }
+
+ public void checkExtension(Element element, String point, T model, PluginErrorReporter.ProblemReport problems) {
+ ExtensionElement description = extensionModel.getElement(element.getTagName());
+ if (description != null) {
+ Evaluator evaluator = createEvaluator(model);
+ checkExtensionElement(description, element, point, model, evaluator, problems);
+ }
+ }
+
+ protected void checkExtensionElement(ExtensionElement description, Element element, String point, T model, Evaluator evaluator, PluginErrorReporter.ProblemReport problems) {
+ Set<ExtensionAttribute> missingAttributes = new HashSet<>(description.getAttributes());
+ Set<ExtensionElement> missingElements = new HashSet<>(description.getElements());
+
+ NamedNodeMap attributes = element.getAttributes();
+
+ for (int i = 0, size = attributes.getLength(); i < size; i++) {
+ Attr attr = (Attr) attributes.item(i);
+ ExtensionAttribute attrDescription = description.getAttribute(attr.getName());
+ missingAttributes.remove(attrDescription);
+
+ if (attrDescription != null && attrDescription.isValidatable()
+ // The resource attribute is only used for matching
+ && attrDescription != attrDescription.containingExtension().getResourceAttribute()) {
+
+ String expectedValue = evaluate(attrDescription, evaluator);
+ if (!expectedValue.equals(attr.getValue())) {
+ problems.reportProblem(Diagnostic.ERROR, element, attr.getName(),
+ NLS.bind(Messages.ExtensionValidator_0, attr.getName(), expectedValue),
+ CommonProblemConstants.INVALID_EXTENSION_ATTRIBUTE, CATEGORY, null);
+ }
+ }
+ }
+
+ // Report missing attributes
+ missingAttributes.removeIf(not(ExtensionAttribute::isValidatable));
+ if (!missingAttributes.isEmpty()) {
+ missingAttributes.stream().map(ExtensionAttribute::getName).forEach(name -> {
+ problems.reportProblem(Diagnostic.ERROR, element, NLS.bind(Messages.ExtensionValidator_1, name, point),
+ CommonProblemConstants.MISSING_EXTENSION_ATTRIBUTE, CATEGORY,
+ Map.of(CommonProblemConstants.ATTRIBUTE_NAME, name));
+ });
+ }
+
+ // Recursively check child elements
+ NodeList children = element.getChildNodes();
+ for (int i = 0, size = children.getLength(); i < size; i++) {
+ Node next = children.item(i);
+ if (next.getNodeType() == Node.ELEMENT_NODE) {
+ Element child = (Element) next;
+ ExtensionElement childDescription = description.getElement(child.getTagName());
+ missingElements.remove(childDescription);
+
+ if (childDescription != null) {
+ checkExtensionElement(childDescription, child, point, model, evaluator, problems);
+ }
+ }
+ }
+
+ // Report missing elements
+ missingElements.removeIf(not(ExtensionElement::isValidatable));
+ if (!missingElements.isEmpty()) {
+ missingElements.stream().map(ExtensionElement::getName).forEach(name -> {
+ problems.reportProblem(Diagnostic.ERROR, element, NLS.bind(Messages.ExtensionValidator_2, name, point),
+ CommonProblemConstants.MISSING_EXTENSION_ELEMENT, CATEGORY,
+ Map.of(CommonProblemConstants.ELEMENT_NAME, name));
+ });
+ }
+ }
+
+ /**
+ * Query the problem ID for missing extension on the given {@code point}.
+ *
+ * @param point
+ * the extension point on which an extension is expected for the {@code model} but is absent
+ * @param model
+ * a model being validated for which an extension on the given {@code point} is required
+ *
+ * @return the problem ID for quick fix
+ */
+ public int problemID(String point, T model) {
+ return CommonProblemConstants.MISSING_EXTENSION;
+ }
+
+}
diff --git a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/quickfix/ManifestResolutionGenerator.java b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/quickfix/ManifestResolutionGenerator.java
index 18be834b403..ea293279083 100755..100644
--- a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/quickfix/ManifestResolutionGenerator.java
+++ b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/builder/quickfix/ManifestResolutionGenerator.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2020 CEA LIST and others.
+ * Copyright (c) 2020, 2021 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 2.0
@@ -10,6 +10,7 @@
*
* Contributors:
* Pauline DEVILLE (CEA LIST) <pauline.deville@cea.fr> - Initial API and implementation
+ * Christian W. Damus - bug 575122
*
*****************************************************************************/
@@ -29,7 +30,7 @@ public class ManifestResolutionGenerator implements IMarkerResolutionGenerator2
@Override
public IMarkerResolution[] getResolutions(IMarker marker) {
- int kind = marker.getAttribute(ManifestBuilder.KIND_MARKER_ATTRIBUTE, 0);
+ int kind = marker.getAttribute(ManifestBuilder.KIND_MARKER_ATTRIBUTE, -1);
if (ManifestBuilder.REEXPORT_KIND == kind) {
return new IMarkerResolution[] {
new DependencyReexportMarkerResolution()
diff --git a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/internal/builder/GenericEMFModelBuilderProvider.java b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/internal/builder/GenericEMFModelBuilderProvider.java
index 3de8bbcc00b..c2c420f8877 100644
--- a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/internal/builder/GenericEMFModelBuilderProvider.java
+++ b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/internal/builder/GenericEMFModelBuilderProvider.java
@@ -15,6 +15,9 @@
package org.eclipse.papyrus.toolsmiths.plugin.internal.builder;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.atomic.AtomicReference;
+
import org.eclipse.core.resources.IProject;
import org.eclipse.emf.common.util.URI;
import org.eclipse.jdt.core.IJavaModelMarker;
@@ -22,7 +25,11 @@ import org.eclipse.papyrus.toolsmiths.plugin.builder.AbstractPapyrusBuilder;
import org.eclipse.papyrus.toolsmiths.plugin.builder.GenericEMFModelBuilder;
import org.eclipse.papyrus.toolsmiths.plugin.builder.IPapyrusBuilderProvider;
import org.eclipse.papyrus.toolsmiths.plugin.builder.PapyrusBuilderKind;
+import org.eclipse.papyrus.toolsmiths.validation.common.spi.ProjectRulesModelProvider;
import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
/**
* Provider of generic builder covering model resources not specifically handled by other providers.
@@ -30,6 +37,19 @@ import org.osgi.service.component.annotations.Component;
@Component
public class GenericEMFModelBuilderProvider implements IPapyrusBuilderProvider {
+ private final CopyOnWriteArrayList<ProjectRulesModelProvider> projectRulesProviders = new CopyOnWriteArrayList<>();
+
+ private AtomicReference<ProjectRulesModelProvider> compositeProjectRulesProvider = new AtomicReference<>();
+
+ private final ProjectRulesModelProvider projectRulesProvider = (package_, resourceSet) -> {
+ ProjectRulesModelProvider delegate = compositeProjectRulesProvider.get();
+ if (delegate == null) {
+ delegate = createProjectRulesModelProvider();
+ compositeProjectRulesProvider.compareAndSet(null, delegate);
+ }
+ return delegate.getProjectDescription(package_, resourceSet);
+ };
+
@Override
public String getProblemMarkerType(PapyrusBuilderKind builderKind) {
return IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER;
@@ -43,7 +63,28 @@ public class GenericEMFModelBuilderProvider implements IPapyrusBuilderProvider {
@Override
public AbstractPapyrusBuilder getBuilder(PapyrusBuilderKind builderKind, IProject project) {
- return builderKind == PapyrusBuilderKind.MODEL_RESOURCE ? new GenericEMFModelBuilder() : null;
+ return builderKind == PapyrusBuilderKind.MODEL_RESOURCE ? new GenericEMFModelBuilder(projectRulesProvider) : null;
+ }
+
+ private ProjectRulesModelProvider createProjectRulesModelProvider() {
+ return projectRulesProviders.stream().reduce(ProjectRulesModelProvider::or).orElse(ProjectRulesModelProvider.NULL);
+ }
+
+ //
+ // Service dependencies
+ //
+
+ @Reference(cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC)
+ public void addProjectRulesModelProvider(ProjectRulesModelProvider provider) {
+ if (this.projectRulesProviders.addIfAbsent(provider)) {
+ compositeProjectRulesProvider.set(null);
+ }
+ }
+
+ public void removeProjectRulesModelProvider(ProjectRulesModelProvider provider) {
+ if (this.projectRulesProviders.remove(provider)) {
+ compositeProjectRulesProvider.set(null);
+ }
}
}
diff --git a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/internal/builder/messages/Messages.java b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/internal/builder/messages/Messages.java
new file mode 100644
index 00000000000..5fc247f9030
--- /dev/null
+++ b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/internal/builder/messages/Messages.java
@@ -0,0 +1,35 @@
+/*****************************************************************************
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.toolsmiths.plugin.internal.builder.messages;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ *
+ */
+public class Messages extends NLS {
+ private static final String BUNDLE_NAME = "org.eclipse.papyrus.toolsmiths.plugin.internal.builder.messages.messages"; //$NON-NLS-1$
+ public static String ExtensionValidator_0;
+ public static String ExtensionValidator_1;
+ public static String ExtensionValidator_2;
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ private Messages() {
+ }
+}
diff --git a/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/internal/builder/messages/messages.properties b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/internal/builder/messages/messages.properties
new file mode 100644
index 00000000000..4af5cad1f91
--- /dev/null
+++ b/plugins/toolsmiths/builder/org.eclipse.papyrus.toolsmiths.plugin.builder/src/org/eclipse/papyrus/toolsmiths/plugin/internal/builder/messages/messages.properties
@@ -0,0 +1,17 @@
+#
+# Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Christian W. Damus - Initial API and implementation
+#
+
+ExtensionValidator_0=Attribute ''{0}'' should have value ''{1}''.
+ExtensionValidator_1=Missing attribute ''{0}'' in extension on ''{1}''.
+ExtensionValidator_2=Missing element ''{0}'' in extension on ''{1}''.
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.classpath b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.classpath
new file mode 100644
index 00000000000..9c787af4934
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.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-11"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src-gen"/>
+ <classpathentry kind="output" path="bin/"/>
+</classpath>
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.project b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.project
new file mode 100644
index 00000000000..1ef7a512488
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.project
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.toolsmiths.validation.common.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.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.dev.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/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.core.resources.prefs b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000000..896a9a53a53
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8 \ No newline at end of file
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.core.runtime.prefs b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 00000000000..5a0ad22d2a7
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..037f04a07c2
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,319 @@
+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=11
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=11
+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.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
+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_bitwise_operator=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_logical_operator=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_multiplicative_operator=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_string_concatenation=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_additive_operator=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_bitwise_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_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=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_relational_operator=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_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=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_bitwise_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_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=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_relational_operator=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_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=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_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 00000000000..ba7542ef658
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,127 @@
+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
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Papyrus
+formatter_settings_version=12
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.javadoc=true
+org.eclipse.jdt.ui.ondemandthreshold=99
+org.eclipse.jdt.ui.staticondemandthreshold=99
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates><template autoinsert\="true" context\="gettercomment_context" deleted\="false" description\="Comment for getter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name\="gettercomment">/**\n * @return the ${bare_field_name}\n */</template><template autoinsert\="true" context\="settercomment_context" deleted\="false" description\="Comment for setter method" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.settercomment" name\="settercomment">/**\n * @param ${param} the ${bare_field_name} to set\n */</template><template autoinsert\="false" context\="constructorcomment_context" deleted\="false" description\="Comment for created constructors" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name\="constructorcomment">/**\n * Constructor.\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="filecomment_context" deleted\="false" description\="Comment for created Java files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.filecomment" name\="filecomment">/*****************************************************************************\n * Copyright (c) ${year} CEA LIST and others.\n * \n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License 2.0\n * which accompanies this distribution, and is available at\n * http\://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n *\n * Contributors\:\n * CEA LIST - Initial API and implementation\n * \n *****************************************************************************/\n</template><template autoinsert\="true" context\="typecomment_context" deleted\="false" description\="Comment for created types" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.typecomment" name\="typecomment">/**\n * @author ${user}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="fieldcomment_context" deleted\="false" description\="Comment for fields" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name\="fieldcomment">/**\n * \n */</template><template autoinsert\="true" context\="methodcomment_context" deleted\="false" description\="Comment for non-overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name\="methodcomment">/**\n * ${tags}\n */</template><template autoinsert\="false" context\="overridecomment_context" deleted\="false" description\="Comment for overriding methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name\="overridecomment">/**\n * ${see_to_overridden}\n *\n * ${tags}\n */</template><template autoinsert\="false" context\="delegatecomment_context" deleted\="false" description\="Comment for delegate methods" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name\="delegatecomment">/**\n * ${see_to_target}\n *\n * ${tags}\n */</template><template autoinsert\="true" context\="newtype_context" deleted\="false" description\="Newly created files" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.newtype" name\="newtype">${filecomment}\n${package_declaration}\n\n${typecomment}\n${type_declaration}</template><template autoinsert\="true" context\="classbody_context" deleted\="false" description\="Code in new class type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.classbody" name\="classbody">\n</template><template autoinsert\="true" context\="interfacebody_context" deleted\="false" description\="Code in new interface type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.interfacebody" name\="interfacebody">\n</template><template autoinsert\="true" context\="enumbody_context" deleted\="false" description\="Code in new enum type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.enumbody" name\="enumbody">\n</template><template autoinsert\="true" context\="annotationbody_context" deleted\="false" description\="Code in new annotation type bodies" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.annotationbody" name\="annotationbody">\n</template><template autoinsert\="true" context\="catchblock_context" deleted\="false" description\="Code in new catch blocks" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.catchblock" name\="catchblock">// ${todo} Auto-generated catch block\n${exception_var}.printStackTrace();</template><template autoinsert\="true" context\="methodbody_context" deleted\="false" description\="Code in created method stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.methodbody" name\="methodbody">// ${todo} Auto-generated method stub\n${body_statement}</template><template autoinsert\="true" context\="constructorbody_context" deleted\="false" description\="Code in created constructor stubs" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.constructorbody" name\="constructorbody">${body_statement}\n// ${todo} Auto-generated constructor stub</template><template autoinsert\="true" context\="getterbody_context" deleted\="false" description\="Code in created getters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.getterbody" name\="getterbody">return ${field};</template><template autoinsert\="true" context\="setterbody_context" deleted\="false" description\="Code in created setters" enabled\="true" id\="org.eclipse.jdt.ui.text.codetemplates.setterbody" name\="setterbody">${field} \= ${param};</template></templates>
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.m2e.core.prefs b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 00000000000..f897a7f1cb2
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.pde.api.tools.prefs b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.pde.api.tools.prefs
new file mode 100644
index 00000000000..b2260f87129
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/.settings/org.eclipse.pde.api.tools.prefs
@@ -0,0 +1,104 @@
+ANNOTATION_ELEMENT_TYPE_ADDED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_ADDED_METHOD_WITHOUT_DEFAULT_VALUE=Error
+ANNOTATION_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_FIELD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_METHOD=Error
+ANNOTATION_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_API_TYPE=Error
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_API_TYPE=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_REEXPORTED_TYPE=Warning
+API_COMPONENT_ELEMENT_TYPE_REMOVED_TYPE=Error
+API_USE_SCAN_FIELD_SEVERITY=Error
+API_USE_SCAN_METHOD_SEVERITY=Error
+API_USE_SCAN_TYPE_SEVERITY=Error
+CLASS_ELEMENT_TYPE_ADDED_FIELD=Warning
+CLASS_ELEMENT_TYPE_ADDED_METHOD=Error
+CLASS_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+CLASS_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CLASS_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+CLASS_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+CLASS_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+CLASS_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+CLASS_ELEMENT_TYPE_REMOVED_CONSTRUCTOR=Error
+CLASS_ELEMENT_TYPE_REMOVED_FIELD=Error
+CLASS_ELEMENT_TYPE_REMOVED_METHOD=Error
+CLASS_ELEMENT_TYPE_REMOVED_SUPERCLASS=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+CLASS_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+CONSTRUCTOR_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+CONSTRUCTOR_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+ENUM_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+ENUM_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+ENUM_ELEMENT_TYPE_REMOVED_ENUM_CONSTANT=Error
+ENUM_ELEMENT_TYPE_REMOVED_FIELD=Error
+ENUM_ELEMENT_TYPE_REMOVED_METHOD=Error
+ENUM_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+FIELD_ELEMENT_TYPE_ADDED_VALUE=Warning
+FIELD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+FIELD_ELEMENT_TYPE_CHANGED_FINAL_TO_NON_FINAL_STATIC_CONSTANT=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+FIELD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+FIELD_ELEMENT_TYPE_CHANGED_TYPE=Error
+FIELD_ELEMENT_TYPE_CHANGED_VALUE=Warning
+FIELD_ELEMENT_TYPE_REMOVED_TYPE_ARGUMENT=Error
+FIELD_ELEMENT_TYPE_REMOVED_VALUE=Error
+ILLEGAL_EXTEND=Warning
+ILLEGAL_IMPLEMENT=Warning
+ILLEGAL_INSTANTIATE=Warning
+ILLEGAL_OVERRIDE=Warning
+ILLEGAL_REFERENCE=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_DEFAULT_METHOD=Warning
+INTERFACE_ELEMENT_TYPE_ADDED_FIELD=Ignore
+INTERFACE_ELEMENT_TYPE_ADDED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_SUPER_INTERFACE_WITH_METHODS=Error
+INTERFACE_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_CONTRACTED_SUPERINTERFACES_SET=Error
+INTERFACE_ELEMENT_TYPE_CHANGED_TYPE_CONVERSION=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_FIELD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_METHOD=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_MEMBER=Error
+INTERFACE_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+INVALID_ANNOTATION=Ignore
+INVALID_JAVADOC_TAG=Ignore
+INVALID_REFERENCE_IN_SYSTEM_LIBRARIES=Ignore
+LEAK_EXTEND=Warning
+LEAK_FIELD_DECL=Warning
+LEAK_IMPLEMENT=Warning
+LEAK_METHOD_PARAM=Warning
+LEAK_METHOD_RETURN_TYPE=Warning
+METHOD_ELEMENT_TYPE_ADDED_RESTRICTIONS=Error
+METHOD_ELEMENT_TYPE_ADDED_TYPE_PARAMETER=Error
+METHOD_ELEMENT_TYPE_CHANGED_DECREASE_ACCESS=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_ABSTRACT_TO_ABSTRACT=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_FINAL_TO_FINAL=Error
+METHOD_ELEMENT_TYPE_CHANGED_NON_STATIC_TO_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_STATIC_TO_NON_STATIC=Error
+METHOD_ELEMENT_TYPE_CHANGED_VARARGS_TO_ARRAY=Error
+METHOD_ELEMENT_TYPE_REMOVED_ANNOTATION_DEFAULT_VALUE=Error
+METHOD_ELEMENT_TYPE_REMOVED_TYPE_PARAMETER=Error
+MISSING_EE_DESCRIPTIONS=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_ADDED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_CHANGED_INTERFACE_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_CLASS_BOUND=Error
+TYPE_PARAMETER_ELEMENT_TYPE_REMOVED_INTERFACE_BOUND=Error
+UNUSED_PROBLEM_FILTERS=Warning
+automatically_removed_unused_problem_filters=Enabled
+changed_execution_env=Warning
+eclipse.preferences.version=1
+incompatible_api_component_version=Warning
+incompatible_api_component_version_include_major_without_breaking_change=Disabled
+incompatible_api_component_version_include_minor_without_api_change=Disabled
+incompatible_api_component_version_report_major_without_breaking_change=Error
+incompatible_api_component_version_report_minor_without_api_change=Error
+invalid_since_tag_version=Error
+malformed_since_tag=Error
+missing_since_tag=Error
+report_api_breakage_when_major_version_incremented=Disabled
+report_resolution_errors_api_component=Warning
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/META-INF/MANIFEST.MF b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..8426955020b
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,35 @@
+Manifest-Version: 1.0
+Require-Bundle: org.eclipse.papyrus.infra.core.log;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.ui;bundle-version="[3.117.0,4.0.0)",
+ org.eclipse.papyrus.infra.core;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.18.0,4.0.0)",
+ org.eclipse.uml2.common;bundle-version="[2.5.0,3.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.22.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.15.0,4.0.0)",
+ org.eclipse.papyrus.toolsmiths.validation.common;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.emf.edit;bundle-version="[2.16.0,3.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.24.0,3.0.0)",
+ org.eclipse.emf.ecore.edit;bundle-version="[2.13.0,3.0.0)",
+ org.eclipse.uml2.types;bundle-version="[2.5.0,3.0.0)",
+ org.eclipse.uml2.common.edit;bundle-version="[2.5.0,3.0.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.16.0,3.0.0)",
+ org.eclipse.emf.edit.ui;bundle-version="[2.20.0,3.0.0)",
+ org.eclipse.jface.text;bundle-version="[3.18.0,4.0.0)",
+ org.eclipse.papyrus.infra.core.architecture;bundle-version="[3.1.0,4.0.0)"
+Export-Package: org.eclipse.papyrus.toolsmiths.validation.common.internal.ui;x-internal:=true,
+ org.eclipse.papyrus.toolsmiths.validation.common.projectrules.presentation;x-internal:=true,
+ org.eclipse.papyrus.toolsmiths.validation.common.projectrules.provider;x-internal:=true
+Bundle-Vendor: %providerName
+Bundle-ActivationPolicy: lazy
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.papyrus.toolsmiths.validation.common.internal.ui.Activator$Implementation
+Bundle-Version: 1.0.0.qualifier
+Bundle-Localization: plugin
+Bundle-Name: %pluginName
+Bundle-ManifestVersion: 2
+Bundle-Description: %pluginDescription
+Bundle-SymbolicName: org.eclipse.papyrus.toolsmiths.validation.common.ui;singleton:=true
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Automatic-Module-Name: org.eclipse.papyrus.toolsmiths.validation.common.ui
+Import-Package: com.google.common.base;version="[30.1.0,31.0.0)",
+ com.google.common.collect;version="[30.1.0,31.0.0)"
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/about.html b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/about.html
new file mode 100644
index 00000000000..997c5a2284d
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.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>November 30, 2017</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is available
+at <a href="https://www.eclipse.org/legal/epl-2.0/">https://www.eclipse.org/legal/epl-2.0/</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/build.properties b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/build.properties
new file mode 100644
index 00000000000..19669a769ac
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/build.properties
@@ -0,0 +1,23 @@
+# Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Christian W. Damus - Initial API and implementation
+#
+
+output.. = bin/
+bin.includes = .,\
+ META-INF/,\
+ plugin.properties,\
+ plugin.xml,\
+ about.html,\
+ icons/
+jars.compile.order=.
+src.includes = about.html
+source.. = src-gen/
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Dependency.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Dependency.gif
new file mode 100644
index 00000000000..b6364352c84
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Dependency.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Dependency@2x.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Dependency@2x.gif
new file mode 100644
index 00000000000..2d741aeaab3
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Dependency@2x.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Expression.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Expression.gif
new file mode 100644
index 00000000000..e4bc22dd17e
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Expression.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Extension.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Extension.gif
new file mode 100644
index 00000000000..e6a738b50fa
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Extension.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Extension@2x.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Extension@2x.gif
new file mode 100644
index 00000000000..3d8b8f42461
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Extension@2x.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionAttribute.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionAttribute.gif
new file mode 100644
index 00000000000..2793a5f0ee5
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionAttribute.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionAttribute@2x.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionAttribute@2x.gif
new file mode 100644
index 00000000000..0c9789f9563
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionAttribute@2x.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionElement.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionElement.gif
new file mode 100644
index 00000000000..5c1498473dc
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionElement.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionElement@2x.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionElement@2x.gif
new file mode 100644
index 00000000000..f1d6b733f7e
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ExtensionElement@2x.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/FeaturePath.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/FeaturePath.gif
new file mode 100644
index 00000000000..badaab0664a
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/FeaturePath.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/LiteralString.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/LiteralString.gif
new file mode 100644
index 00000000000..33854e98c25
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/LiteralString.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/OpaqueValue.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/OpaqueValue.gif
new file mode 100644
index 00000000000..9a8674da533
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/OpaqueValue.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/OpaqueValue@2x.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/OpaqueValue@2x.gif
new file mode 100644
index 00000000000..d651d2d0306
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/OpaqueValue@2x.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectDescription.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectDescription.gif
new file mode 100644
index 00000000000..e7498e88f46
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectDescription.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectDescription@2x.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectDescription@2x.gif
new file mode 100644
index 00000000000..26767b77afd
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectDescription@2x.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectRulesModelFile.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectRulesModelFile.gif
new file mode 100644
index 00000000000..8eb1767f64e
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectRulesModelFile.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectRulesModelFile@2x.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectRulesModelFile@2x.gif
new file mode 100644
index 00000000000..ad35def12b8
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/ProjectRulesModelFile@2x.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Value.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Value.gif
new file mode 100644
index 00000000000..9a8674da533
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Value.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Value@2x.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Value@2x.gif
new file mode 100644
index 00000000000..d651d2d0306
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Value@2x.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Variable.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Variable.gif
new file mode 100644
index 00000000000..83afb9b3c9a
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/obj16/Variable.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/wizban/NewProjectRules.gif b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/wizban/NewProjectRules.gif
new file mode 100644
index 00000000000..25f312d6b5f
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/icons/full/wizban/NewProjectRules.gif
Binary files differ
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/plugin.properties b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/plugin.properties
new file mode 100644
index 00000000000..1f23f1cb610
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/plugin.properties
@@ -0,0 +1,100 @@
+#################################################################################
+# Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License 2.0
+# which accompanies this distribution, and is available at
+# https://www.eclipse.org/legal/epl-2.0/
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# Christian W. Damus - Initial API and implementation
+#
+##################################################################################
+
+
+pluginName = Papyrus Plug-ins Validation Common UI
+providerName = Eclipse Modeling Project
+pluginDescription=User interface for Papyrus plug-in validation
+
+_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_ProjectDescription_type = Project Description
+_UI_Dependency_type = Dependency
+_UI_Extension_type = Extension
+_UI_ExtensionElement_type = Extension Element
+_UI_ExtensionAttribute_type = Extension Attribute
+_UI_Value_type = Value
+_UI_LiteralString_type = Literal String
+_UI_Variable_type = Variable
+_UI_Expression_type = Expression
+_UI_OpaqueValue_type = Opaque Value
+_UI_FeaturePath_type = Feature Path
+_UI_Unknown_type = Object
+_UI_Unknown_datatype= Value
+_UI_ProjectDescription_dependency_feature = Dependency
+_UI_ProjectDescription_requiredDependency_feature = Required Dependency
+_UI_ProjectDescription_extension_feature = Extension
+_UI_Dependency_name_feature = Name
+_UI_Dependency_kind_feature = Kind
+_UI_Dependency_required_feature = Required
+_UI_Dependency_lowerBound_feature = Lower Bound
+_UI_Dependency_upperBound_feature = Upper Bound
+_UI_Extension_extensionPoint_feature = Extension Point
+_UI_Extension_element_feature = Element
+_UI_Extension_project_feature = Project
+_UI_Extension_resourceAttribute_feature = Resource Attribute
+_UI_Extension_architectureReference_feature = Architecture Reference
+_UI_ExtensionModelNode_type = Extension Model Node
+_UI_ExtensionModelNode_name_feature = Name
+_UI_ExtensionModelNode_validatable_feature = Validatable
+_UI_ExtensionElement_parent_feature = Parent
+_UI_ExtensionElement_element_feature = Element
+_UI_ExtensionElement_attribute_feature = Attribute
+_UI_ExtensionElement_extension_feature = Extension
+_UI_ExtensionAttribute_value_feature = Value
+_UI_ExtensionAttribute_element_feature = Element
+_UI_ExtensionAttribute_parsedValue_feature = Parsed Value
+_UI_ExtensionAttribute_label = {0} = "{1}"
+_UI_LiteralString_value_feature = Value
+_UI_Variable_name_feature = Name
+_UI_Variable_option_feature = Option
+_UI_Expression_value_feature = Value
+_UI_OpaqueValue_text_feature = Text
+_UI_FeaturePath_path_feature = Path
+_UI_Unknown_feature = Unspecified
+_UI_DependencyKind_requireBundle_literal = requireBundle
+_UI_DependencyKind_importPackage_literal = importPackage
+_UI_ProjectRulesEditor_menu = &ProjectRules Editor
+_UI_CreateChild_menu_item = &New Child
+_UI_CreateSibling_menu_item = N&ew Sibling
+_UI_ShowPropertiesView_menu_item = Show &Properties View
+_UI_RefreshViewer_menu_item = &Refresh
+_UI_SelectionPage_label = Selection
+_UI_NoObjectSelected = Selected Nothing
+_UI_SingleObjectSelected = Selected Object: {0}
+_UI_MultiObjectSelected = Selected {0} Objects
+_UI_OpenEditorError_label = Open Editor
+_UI_Wizard_category = Example EMF Model Creation Wizards
+_UI_CreateModelError_message = Problems encountered in file "{0}"
+_UI_ProjectRulesModelWizard_label = ProjectRules Model
+_UI_ProjectRulesModelWizard_description = Create a new ProjectRules model
+_UI_ProjectRulesEditor_label = ProjectRules Model Editor
+_UI_ProjectRulesEditorFilenameDefaultBase = My
+_UI_ProjectRulesEditorFilenameExtensions = projectrules
+_UI_Wizard_label = New
+_WARN_FilenameExtension = The file name must end in ''.{0}''
+_WARN_FilenameExtensions = The file name must have one of the following extensions: {0}
+_UI_ModelObject = &Model Object
+_UI_XMLEncoding = &XML Encoding
+_UI_XMLEncodingChoices = UTF-8 ASCII UTF-16 UTF-16BE UTF-16LE ISO-8859-1
+_UI_Wizard_initial_object_description = Select a model object to create
+_UI_FileConflict_label = File Conflict
+_WARN_FileConflict = There are unsaved changes that conflict with changes made outside the editor. Do you wish to discard this editor's changes?
+_UI_EReference_label = {0} - {1} ({2})
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/plugin.xml b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/plugin.xml
new file mode 100644
index 00000000000..2dac1319371
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/plugin.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License 2.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-2.0/
+
+ SPDX-License-Identifier: EPL-2.0
+
+ Contributors:
+ Christian W. Damus - Initial API and implementation
+
+-->
+
+<plugin>
+ <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+ <!-- @generated ProjectRules -->
+ <factory
+ uri="http://www.eclipse.org/Papyrus/toolsmiths/validation/ProjectRules"
+ class="org.eclipse.papyrus.toolsmiths.validation.common.projectrules.provider.ProjectRulesItemProviderAdapterFactory"
+ 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>
+
+ <extension point="org.eclipse.ui.newWizards">
+ <!-- @generated NOT -->
+ <wizard
+ id="org.eclipse.papyrus.toolsmiths.validation.common.projectrules.presentation.ProjectRulesModelWizardID"
+ name="%_UI_ProjectRulesModelWizard_label"
+ class="org.eclipse.papyrus.toolsmiths.validation.common.projectrules.presentation.ProjectRulesModelWizard"
+ category="org.eclipse.papyrus.wizards.category/org.eclipse.papyrus.wizards.toolsmiths.category"
+ icon="icons/full/obj16/ProjectRulesModelFile.gif">
+ <description>%_UI_ProjectRulesModelWizard_description</description>
+ <selection class="org.eclipse.core.resources.IResource"/>
+ </wizard>
+ </extension>
+
+ <extension point="org.eclipse.ui.editors">
+ <!-- @generated ProjectRules -->
+ <editor
+ id="org.eclipse.papyrus.toolsmiths.validation.common.projectrules.presentation.ProjectRulesEditorID"
+ name="%_UI_ProjectRulesEditor_label"
+ icon="icons/full/obj16/ProjectRulesModelFile.gif"
+ class="org.eclipse.papyrus.toolsmiths.validation.common.projectrules.presentation.ProjectRulesEditor"
+ contributorClass="org.eclipse.papyrus.toolsmiths.validation.common.projectrules.presentation.ProjectRulesActionBarContributor">
+ <contentTypeBinding contentTypeId="org.eclipse.papyrus.toolsmiths.validation.common.projectrules"/>
+ </editor>
+ </extension>
+</plugin>
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/pom.xml b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/pom.xml
new file mode 100644
index 00000000000..23b2488db12
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.eclipse.papyrus</groupId>
+ <artifactId>org.eclipse.papyrus.toolsmiths.validations</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>org.eclipse.papyrus.toolsmiths.validation.common.ui</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/internal/ui/Activator.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/internal/ui/Activator.java
new file mode 100644
index 00000000000..44718073784
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/internal/ui/Activator.java
@@ -0,0 +1,113 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.internal.ui;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.provider.EcoreEditPlugin;
+
+/**
+ * This is the central singleton for the ProjectRules editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public final class Activator extends EMFPlugin {
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public static final Activator INSTANCE = new Activator();
+
+ /**
+ * 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 Activator() {
+ super(new ResourceLocator[] {
+ EcoreEditPlugin.INSTANCE,
+ });
+ }
+
+ /**
+ * 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 EclipseUIPlugin {
+ /**
+ * Creates an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public Implementation() {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/presentation/ProjectRulesActionBarContributor.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/presentation/ProjectRulesActionBarContributor.java
new file mode 100644
index 00000000000..f575a8f9296
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/presentation/ProjectRulesActionBarContributor.java
@@ -0,0 +1,462 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.presentation;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.ui.action.ControlAction;
+import org.eclipse.emf.edit.ui.action.CreateChildAction;
+import org.eclipse.emf.edit.ui.action.CreateSiblingAction;
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.emf.edit.ui.action.FindAction;
+import org.eclipse.emf.edit.ui.action.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.RevertAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+import org.eclipse.emf.edit.ui.provider.DiagnosticDecorator;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.papyrus.toolsmiths.validation.common.internal.ui.Activator;
+
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the ProjectRules model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ProjectRulesActionBarContributor
+ extends EditingDomainActionBarContributor
+ implements ISelectionChangedListener {
+ /**
+ * This keeps track of the active editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IEditorPart activeEditorPart;
+
+ /**
+ * This keeps track of the current selection provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ISelectionProvider selectionProvider;
+
+ /**
+ * This action opens the Properties view.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IAction showPropertiesViewAction = new Action(Activator.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {
+ @Override
+ public void run() {
+ try {
+ getPage().showView("org.eclipse.ui.views.PropertySheet");
+ } catch (PartInitException exception) {
+ Activator.INSTANCE.log(exception);
+ }
+ }
+ };
+
+ /**
+ * This action refreshes the viewer of the current editor if the editor
+ * implements {@link org.eclipse.emf.common.ui.viewer.IViewerProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IAction refreshViewerAction = new Action(Activator.INSTANCE.getString("_UI_RefreshViewer_menu_item")) {
+ @Override
+ public boolean isEnabled() {
+ return activeEditorPart instanceof IViewerProvider;
+ }
+
+ @Override
+ public void run() {
+ if (activeEditorPart instanceof IViewerProvider) {
+ Viewer viewer = ((IViewerProvider) activeEditorPart).getViewer();
+ if (viewer != null) {
+ viewer.refresh();
+ }
+ }
+ }
+ };
+
+ /**
+ * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateChildAction} corresponding to each descriptor
+ * generated for the current selection by the item provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<IAction> createChildActions;
+
+ /**
+ * This is the menu manager into which menu contribution items should be added for CreateChild actions.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IMenuManager createChildMenuManager;
+
+ /**
+ * This will contain one {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} corresponding to each descriptor
+ * generated for the current selection by the item provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<IAction> createSiblingActions;
+
+ /**
+ * This is the menu manager into which menu contribution items should be added for CreateSibling actions.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IMenuManager createSiblingMenuManager;
+
+ /**
+ * This creates an instance of the contributor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ProjectRulesActionBarContributor() {
+ super(ADDITIONS_LAST_STYLE);
+ loadResourceAction = new LoadResourceAction();
+ validateAction = new ValidateAction();
+ liveValidationAction = new DiagnosticDecorator.LiveValidator.LiveValidationAction(Activator.getPlugin().getDialogSettings());
+ controlAction = new ControlAction();
+ findAction = FindAction.create();
+ revertAction = new RevertAction();
+ }
+
+ /**
+ * This adds Separators for editor additions to the tool bar.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void contributeToToolBar(IToolBarManager toolBarManager) {
+ super.contributeToToolBar(toolBarManager);
+ toolBarManager.add(new Separator("projectrules-settings"));
+ toolBarManager.add(new Separator("projectrules-additions"));
+ }
+
+ /**
+ * This adds to the menu bar a menu and some separators for editor additions,
+ * as well as the sub-menus for object creation items.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void contributeToMenu(IMenuManager menuManager) {
+ super.contributeToMenu(menuManager);
+
+ IMenuManager submenuManager = new MenuManager(Activator.INSTANCE.getString("_UI_ProjectRulesEditor_menu"), "org.eclipse.papyrus.toolsmiths.validation.common.projectrulesMenuID");
+ menuManager.insertAfter("additions", submenuManager);
+ submenuManager.add(new Separator("settings"));
+ submenuManager.add(new Separator("actions"));
+ submenuManager.add(new Separator("additions"));
+ submenuManager.add(new Separator("additions-end"));
+
+ // Prepare for CreateChild item addition or removal.
+ //
+ createChildMenuManager = new MenuManager(Activator.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ submenuManager.insertBefore("additions", createChildMenuManager);
+
+ // Prepare for CreateSibling item addition or removal.
+ //
+ createSiblingMenuManager = new MenuManager(Activator.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+ submenuManager.insertBefore("additions", createSiblingMenuManager);
+
+ // Force an update because Eclipse hides empty menus now.
+ //
+ submenuManager.addMenuListener(new IMenuListener() {
+ @Override
+ public void menuAboutToShow(IMenuManager menuManager) {
+ menuManager.updateAll(true);
+ }
+ });
+
+ addGlobalActions(submenuManager);
+ }
+
+ /**
+ * When the active editor changes, this remembers the change and registers with it as a selection provider.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void setActiveEditor(IEditorPart part) {
+ super.setActiveEditor(part);
+ activeEditorPart = part;
+
+ // Switch to the new selection provider.
+ //
+ if (selectionProvider != null) {
+ selectionProvider.removeSelectionChangedListener(this);
+ }
+ if (part == null) {
+ selectionProvider = null;
+ } else {
+ selectionProvider = part.getSite().getSelectionProvider();
+ selectionProvider.addSelectionChangedListener(this);
+
+ // Fake a selection changed event to update the menus.
+ //
+ if (selectionProvider.getSelection() != null) {
+ selectionChanged(new SelectionChangedEvent(selectionProvider, selectionProvider.getSelection()));
+ }
+ }
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionChangedListener},
+ * handling {@link org.eclipse.jface.viewers.SelectionChangedEvent}s by querying for the children and siblings
+ * that can be added to the selected object and updating the menus accordingly.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ // Remove any menu items for old selection.
+ //
+ if (createChildMenuManager != null) {
+ depopulateManager(createChildMenuManager, createChildActions);
+ }
+ if (createSiblingMenuManager != null) {
+ depopulateManager(createSiblingMenuManager, createSiblingActions);
+ }
+
+ // Query the new selection for appropriate new child/sibling descriptors
+ //
+ Collection<?> newChildDescriptors = null;
+ Collection<?> newSiblingDescriptors = null;
+
+ ISelection selection = event.getSelection();
+ if (selection instanceof IStructuredSelection && ((IStructuredSelection) selection).size() == 1) {
+ Object object = ((IStructuredSelection) selection).getFirstElement();
+
+ EditingDomain domain = ((IEditingDomainProvider) activeEditorPart).getEditingDomain();
+
+ newChildDescriptors = domain.getNewChildDescriptors(object, null);
+ newSiblingDescriptors = domain.getNewChildDescriptors(null, object);
+ }
+
+ // Generate actions for selection; populate and redraw the menus.
+ //
+ createChildActions = generateCreateChildActions(newChildDescriptors, selection);
+ createSiblingActions = generateCreateSiblingActions(newSiblingDescriptors, selection);
+
+ if (createChildMenuManager != null) {
+ populateManager(createChildMenuManager, createChildActions, null);
+ createChildMenuManager.update(true);
+ }
+ if (createSiblingMenuManager != null) {
+ populateManager(createSiblingMenuManager, createSiblingActions, null);
+ createSiblingMenuManager.update(true);
+ }
+ }
+
+ /**
+ * This generates a {@link org.eclipse.emf.edit.ui.action.CreateChildAction} for each object in <code>descriptors</code>,
+ * and returns the collection of these actions.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<IAction> generateCreateChildActions(Collection<?> descriptors, ISelection selection) {
+ Collection<IAction> actions = new ArrayList<>();
+ if (descriptors != null) {
+ for (Object descriptor : descriptors) {
+ actions.add(new CreateChildAction(activeEditorPart, selection, descriptor));
+ }
+ }
+ return actions;
+ }
+
+ /**
+ * This generates a {@link org.eclipse.emf.edit.ui.action.CreateSiblingAction} for each object in <code>descriptors</code>,
+ * and returns the collection of these actions.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<IAction> generateCreateSiblingActions(Collection<?> descriptors, ISelection selection) {
+ Collection<IAction> actions = new ArrayList<>();
+ if (descriptors != null) {
+ for (Object descriptor : descriptors) {
+ actions.add(new CreateSiblingAction(activeEditorPart, selection, descriptor));
+ }
+ }
+ return actions;
+ }
+
+ /**
+ * This populates the specified <code>manager</code> with {@link org.eclipse.jface.action.ActionContributionItem}s
+ * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection,
+ * by inserting them before the specified contribution item <code>contributionID</code>.
+ * If <code>contributionID</code> is <code>null</code>, they are simply added.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void populateManager(IContributionManager manager, Collection<? extends IAction> actions, String contributionID) {
+ if (actions != null) {
+ for (IAction action : actions) {
+ if (contributionID != null) {
+ manager.insertBefore(contributionID, action);
+ } else {
+ manager.add(action);
+ }
+ }
+ }
+ }
+
+ /**
+ * This removes from the specified <code>manager</code> all {@link org.eclipse.jface.action.ActionContributionItem}s
+ * based on the {@link org.eclipse.jface.action.IAction}s contained in the <code>actions</code> collection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void depopulateManager(IContributionManager manager, Collection<? extends IAction> actions) {
+ if (actions != null) {
+ IContributionItem[] items = manager.getItems();
+ for (int i = 0; i < items.length; i++) {
+ // Look into SubContributionItems
+ //
+ IContributionItem contributionItem = items[i];
+ while (contributionItem instanceof SubContributionItem) {
+ contributionItem = ((SubContributionItem) contributionItem).getInnerItem();
+ }
+
+ // Delete the ActionContributionItems with matching action.
+ //
+ if (contributionItem instanceof ActionContributionItem) {
+ IAction action = ((ActionContributionItem) contributionItem).getAction();
+ if (actions.contains(action)) {
+ manager.remove(contributionItem);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * This populates the pop-up menu before it appears.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void menuAboutToShow(IMenuManager menuManager) {
+ super.menuAboutToShow(menuManager);
+ MenuManager submenuManager = null;
+
+ submenuManager = new MenuManager(Activator.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ populateManager(submenuManager, createChildActions, null);
+ menuManager.insertBefore("edit", submenuManager);
+
+ submenuManager = new MenuManager(Activator.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+ populateManager(submenuManager, createSiblingActions, null);
+ menuManager.insertBefore("edit", submenuManager);
+ }
+
+ /**
+ * This inserts global actions before the "additions-end" separator.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected void addGlobalActions(IMenuManager menuManager) {
+ menuManager.insertAfter("additions-end", new Separator("ui-actions"));
+ menuManager.insertAfter("ui-actions", showPropertiesViewAction);
+
+ refreshViewerAction.setEnabled(refreshViewerAction.isEnabled());
+ menuManager.insertAfter("ui-actions", refreshViewerAction);
+
+ super.addGlobalActions(menuManager);
+ }
+
+ /**
+ * This ensures that a delete action will clean up all references to deleted objects.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean removeAllReferencesOnDelete() {
+ return true;
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/presentation/ProjectRulesEditor.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/presentation/ProjectRulesEditor.java
new file mode 100644
index 00000000000..c7c1a19c147
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/presentation/ProjectRulesEditor.java
@@ -0,0 +1,1692 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.presentation;
+
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventObject;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+
+import org.eclipse.jface.util.LocalSelectionTransfer;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.custom.CTabFolder;
+
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+
+import org.eclipse.ui.dialogs.SaveAsDialog;
+
+import org.eclipse.ui.ide.IGotoMarker;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.MultiPageEditorPart;
+
+import org.eclipse.ui.views.contentoutline.ContentOutline;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.PropertySheet;
+import org.eclipse.ui.views.properties.PropertySheetPage;
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.command.CommandStack;
+import org.eclipse.emf.common.command.CommandStackListener;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.ui.MarkerHelper;
+
+import org.eclipse.emf.common.ui.editor.ProblemEditorPart;
+
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.URI;
+
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.util.EContentAdapter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.domain.IEditingDomainProvider;
+
+import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+
+import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
+
+import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
+import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
+import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
+
+import org.eclipse.emf.edit.ui.util.EditUIMarkerHelper;
+import org.eclipse.emf.edit.ui.util.EditUIUtil;
+
+import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
+
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.provider.ProjectRulesItemProviderAdapterFactory;
+
+import org.eclipse.emf.common.command.AbstractCommand;
+
+import org.eclipse.emf.common.ui.viewer.ColumnViewerInformationControlToolTipSupport;
+
+import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+
+import org.eclipse.emf.edit.ui.provider.DecoratingColumLabelProvider;
+import org.eclipse.emf.edit.ui.provider.DiagnosticDecorator;
+
+import org.eclipse.emf.edit.ui.util.FindAndReplaceTarget;
+import org.eclipse.emf.edit.ui.util.IRevertablePart;
+
+import org.eclipse.jface.text.IFindReplaceTarget;
+
+import org.eclipse.papyrus.toolsmiths.validation.common.internal.ui.Activator;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a ProjectRules model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ProjectRulesEditor
+ extends MultiPageEditorPart
+ implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker, IRevertablePart {
+ /**
+ * This keeps track of the editing domain that is used to track all changes to the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected AdapterFactoryEditingDomain editingDomain;
+
+ /**
+ * This is the one adapter factory used for providing views of the model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ComposedAdapterFactory adapterFactory;
+
+ /**
+ * This is the content outline page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IContentOutlinePage contentOutlinePage;
+
+ /**
+ * This is a kludge...
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IStatusLineManager contentOutlineStatusLineManager;
+
+ /**
+ * This is the content outline page's viewer.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TreeViewer contentOutlineViewer;
+
+ /**
+ * This is the property sheet page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected List<PropertySheetPage> propertySheetPages = new ArrayList<>();
+
+ /**
+ * This is the viewer that shadows the selection in the content outline.
+ * The parent relation must be correctly defined for this to work.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected TreeViewer selectionViewer;
+
+ /**
+ * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Viewer currentViewer;
+
+ /**
+ * This listens to which ever viewer is active.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ISelectionChangedListener selectionChangedListener;
+
+ /**
+ * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<ISelectionChangedListener> selectionChangedListeners = new ArrayList<>();
+
+ /**
+ * This keeps track of the selection of the editor as a whole.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ISelection editorSelection = StructuredSelection.EMPTY;
+
+ /**
+ * The MarkerHelper is responsible for creating workspace resource markers presented
+ * in Eclipse's Problems View.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected MarkerHelper markerHelper = new EditUIMarkerHelper();
+
+ /**
+ * This listens for when the outline becomes active
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IPartListener partListener = new IPartListener() {
+ @Override
+ public void partActivated(IWorkbenchPart p) {
+ if (p instanceof ContentOutline) {
+ if (((ContentOutline) p).getCurrentPage() == contentOutlinePage) {
+ getActionBarContributor().setActiveEditor(ProjectRulesEditor.this);
+
+ setCurrentViewer(contentOutlineViewer);
+ }
+ } else if (p instanceof PropertySheet) {
+ if (propertySheetPages.contains(((PropertySheet) p).getCurrentPage())) {
+ getActionBarContributor().setActiveEditor(ProjectRulesEditor.this);
+ handleActivate();
+ }
+ } else if (p == ProjectRulesEditor.this) {
+ handleActivate();
+ }
+ }
+
+ @Override
+ public void partBroughtToTop(IWorkbenchPart p) {
+ // Ignore.
+ }
+
+ @Override
+ public void partClosed(IWorkbenchPart p) {
+ // Ignore.
+ }
+
+ @Override
+ public void partDeactivated(IWorkbenchPart p) {
+ // Ignore.
+ }
+
+ @Override
+ public void partOpened(IWorkbenchPart p) {
+ // Ignore.
+ }
+ };
+
+ /**
+ * Resources that have been removed since last activation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<Resource> removedResources = new ArrayList<>();
+
+ /**
+ * Resources that have been changed since last activation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<Resource> changedResources = new ArrayList<>();
+
+ /**
+ * Resources that have been saved.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<Resource> savedResources = new ArrayList<>();
+
+ /**
+ * Map to store the diagnostic associated with a resource.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<>();
+
+ /**
+ * Controls whether the problem indication should be updated.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected boolean updateProblemIndication = true;
+
+ /**
+ * Adapter used to update the problem indication when resources are demanded loaded.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected EContentAdapter problemIndicationAdapter = new EContentAdapter() {
+ protected boolean dispatching;
+
+ @Override
+ public void notifyChanged(Notification notification) {
+ if (notification.getNotifier() instanceof Resource) {
+ switch (notification.getFeatureID(Resource.class)) {
+ case Resource.RESOURCE__IS_LOADED:
+ case Resource.RESOURCE__ERRORS:
+ case Resource.RESOURCE__WARNINGS: {
+ Resource resource = (Resource) notification.getNotifier();
+ Diagnostic diagnostic = analyzeResourceProblems(resource, null);
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ resourceToDiagnosticMap.put(resource, diagnostic);
+ } else {
+ resourceToDiagnosticMap.remove(resource);
+ }
+ dispatchUpdateProblemIndication();
+ break;
+ }
+ }
+ } else {
+ super.notifyChanged(notification);
+ }
+ }
+
+ protected void dispatchUpdateProblemIndication() {
+ if (updateProblemIndication && !dispatching) {
+ dispatching = true;
+ getSite().getShell().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ dispatching = false;
+ updateProblemIndication();
+ }
+ });
+ }
+ }
+
+ @Override
+ protected void setTarget(Resource target) {
+ basicSetTarget(target);
+ }
+
+ @Override
+ protected void unsetTarget(Resource target) {
+ basicUnsetTarget(target);
+ resourceToDiagnosticMap.remove(target);
+ dispatchUpdateProblemIndication();
+ }
+ };
+
+ /**
+ * This listens for workspace changes.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IResourceChangeListener resourceChangeListener = new IResourceChangeListener() {
+ @Override
+ public void resourceChanged(IResourceChangeEvent event) {
+ IResourceDelta delta = event.getDelta();
+ try {
+ class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+ protected ResourceSet resourceSet = editingDomain.getResourceSet();
+ protected Collection<Resource> changedResources = new ArrayList<>();
+ protected Collection<Resource> removedResources = new ArrayList<>();
+
+ @Override
+ public boolean visit(final IResourceDelta delta) {
+ if (delta.getResource().getType() == IResource.FILE) {
+ if (delta.getKind() == IResourceDelta.REMOVED ||
+ delta.getKind() == IResourceDelta.CHANGED) {
+ final Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+ if (resource != null) {
+ if (delta.getKind() == IResourceDelta.REMOVED) {
+ removedResources.add(resource);
+ } else {
+ if ((delta.getFlags() & IResourceDelta.MARKERS) != 0) {
+ DiagnosticDecorator.DiagnosticAdapter.update(resource, markerHelper.getMarkerDiagnostics(resource, (IFile) delta.getResource(), false));
+ }
+ if ((delta.getFlags() & IResourceDelta.CONTENT) != 0) {
+ if (!savedResources.remove(resource)) {
+ changedResources.add(resource);
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ return true;
+ }
+
+ public Collection<Resource> getChangedResources() {
+ return changedResources;
+ }
+
+ public Collection<Resource> getRemovedResources() {
+ return removedResources;
+ }
+ }
+
+ final ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+ delta.accept(visitor);
+
+ if (!visitor.getRemovedResources().isEmpty()) {
+ getSite().getShell().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ removedResources.addAll(visitor.getRemovedResources());
+ if (!isDirty()) {
+ getSite().getPage().closeEditor(ProjectRulesEditor.this, false);
+ }
+ }
+ });
+ }
+
+ if (!visitor.getChangedResources().isEmpty()) {
+ getSite().getShell().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ changedResources.addAll(visitor.getChangedResources());
+ if (getSite().getPage().getActiveEditor() == ProjectRulesEditor.this) {
+ handleActivate();
+ }
+ }
+ });
+ }
+ } catch (CoreException exception) {
+ Activator.INSTANCE.log(exception);
+ }
+ }
+ };
+
+ /**
+ * Handles activation of the editor or it's associated views.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void handleActivate() {
+ // Recompute the read only state.
+ //
+ if (editingDomain.getResourceToReadOnlyMap() != null) {
+ editingDomain.getResourceToReadOnlyMap().clear();
+
+ // Refresh any actions that may become enabled or disabled.
+ //
+ setSelection(getSelection());
+ }
+
+ if (!removedResources.isEmpty()) {
+ if (handleDirtyConflict()) {
+ getSite().getPage().closeEditor(ProjectRulesEditor.this, false);
+ } else {
+ removedResources.clear();
+ changedResources.clear();
+ savedResources.clear();
+ }
+ } else if (!changedResources.isEmpty()) {
+ changedResources.removeAll(savedResources);
+ handleChangedResources();
+ changedResources.clear();
+ savedResources.clear();
+ }
+ }
+
+ /**
+ * Handles what to do with changed resources on activation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void handleChangedResources() {
+ if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict())) {
+ ResourceSet resourceSet = editingDomain.getResourceSet();
+ if (isDirty()) {
+ changedResources.addAll(resourceSet.getResources());
+ }
+ editingDomain.getCommandStack().flush();
+
+ updateProblemIndication = false;
+ for (Resource resource : changedResources) {
+ if (resource.isLoaded()) {
+ resource.unload();
+ try {
+ resource.load(resourceSet.getLoadOptions());
+ } catch (IOException exception) {
+ if (!resourceToDiagnosticMap.containsKey(resource)) {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ }
+ }
+ }
+
+ if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+ setSelection(StructuredSelection.EMPTY);
+ }
+
+ updateProblemIndication = true;
+ updateProblemIndication();
+ }
+ }
+
+ /**
+ * Updates the problems indication with the information described in the specified diagnostic.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void updateProblemIndication() {
+ if (updateProblemIndication) {
+ BasicDiagnostic diagnostic = new BasicDiagnostic(Diagnostic.OK,
+ "org.eclipse.papyrus.toolsmiths.validation.common.ui",
+ 0,
+ null,
+ new Object[] { editingDomain.getResourceSet() });
+ for (Diagnostic childDiagnostic : resourceToDiagnosticMap.values()) {
+ if (childDiagnostic.getSeverity() != Diagnostic.OK) {
+ diagnostic.add(childDiagnostic);
+ }
+ }
+
+ int lastEditorPage = getPageCount() - 1;
+ if (lastEditorPage >= 0 && getEditor(lastEditorPage) instanceof ProblemEditorPart) {
+ ((ProblemEditorPart) getEditor(lastEditorPage)).setDiagnostic(diagnostic);
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ setActivePage(lastEditorPage);
+ }
+ } else if (diagnostic.getSeverity() != Diagnostic.OK) {
+ ProblemEditorPart problemEditorPart = new ProblemEditorPart();
+ problemEditorPart.setDiagnostic(diagnostic);
+ problemEditorPart.setMarkerHelper(markerHelper);
+ try {
+ addPage(++lastEditorPage, problemEditorPart, getEditorInput());
+ setPageText(lastEditorPage, problemEditorPart.getPartName());
+ setActivePage(lastEditorPage);
+ showTabs();
+ } catch (PartInitException exception) {
+ Activator.INSTANCE.log(exception);
+ }
+ }
+
+ if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+ try {
+ markerHelper.updateMarkers(diagnostic);
+ } catch (CoreException exception) {
+ Activator.INSTANCE.log(exception);
+ }
+ }
+ }
+ }
+
+ /**
+ * Shows a dialog that asks if conflicting changes should be discarded.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected boolean handleDirtyConflict() {
+ return MessageDialog.openQuestion(getSite().getShell(),
+ getString("_UI_FileConflict_label"),
+ getString("_WARN_FileConflict"));
+ }
+
+ /**
+ * This creates a model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ProjectRulesEditor() {
+ super();
+ initializeEditingDomain();
+ }
+
+ /**
+ * This sets up the editing domain for the model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void initializeEditingDomain() {
+ // Create an adapter factory that yields item providers.
+ //
+ adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+ adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new ProjectRulesItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new EcoreItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+ // Create the command stack that will notify this editor as commands are executed.
+ //
+ BasicCommandStack commandStack = new BasicCommandStack() {
+ @Override
+ public void execute(Command command) {
+ // Cancel live validation before executing a command that will trigger a new round of validation.
+ //
+ if (!(command instanceof AbstractCommand.NonDirtying)) {
+ DiagnosticDecorator.cancel(editingDomain);
+ }
+ super.execute(command);
+ }
+ };
+
+ // Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
+ //
+ commandStack.addCommandStackListener(new CommandStackListener() {
+ @Override
+ public void commandStackChanged(final EventObject event) {
+ getContainer().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ firePropertyChange(IEditorPart.PROP_DIRTY);
+
+ // Try to select the affected objects.
+ //
+ Command mostRecentCommand = ((CommandStack) event.getSource()).getMostRecentCommand();
+ if (mostRecentCommand != null) {
+ setSelectionToViewer(mostRecentCommand.getAffectedObjects());
+ }
+ for (Iterator<PropertySheetPage> i = propertySheetPages.iterator(); i.hasNext();) {
+ PropertySheetPage propertySheetPage = i.next();
+ if (propertySheetPage.getControl() == null || propertySheetPage.getControl().isDisposed()) {
+ i.remove();
+ } else {
+ propertySheetPage.refresh();
+ }
+ }
+ }
+ });
+ }
+ });
+
+ // Create the editing domain with a special command stack.
+ //
+ editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>());
+ }
+
+ /**
+ * This is here for the listener to be able to call it.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected void firePropertyChange(int action) {
+ super.firePropertyChange(action);
+ }
+
+ /**
+ * This sets the selection into whichever viewer is active.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setSelectionToViewer(Collection<?> collection) {
+ final Collection<?> theSelection = collection;
+ // Make sure it's okay.
+ //
+ if (theSelection != null && !theSelection.isEmpty()) {
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ // Try to select the items in the current content viewer of the editor.
+ //
+ if (currentViewer != null) {
+ currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
+ }
+ }
+ };
+ getSite().getShell().getDisplay().asyncExec(runnable);
+ }
+ }
+
+ /**
+ * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
+ * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
+ * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public EditingDomain getEditingDomain() {
+ return editingDomain;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object[] getElements(Object object) {
+ Object parent = super.getParent(object);
+ return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object[] getChildren(Object object) {
+ Object parent = super.getParent(object);
+ return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean hasChildren(Object object) {
+ Object parent = super.getParent(object);
+ return parent != null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getParent(Object object) {
+ return null;
+ }
+ }
+
+ /**
+ * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
+ * is the current one.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setCurrentViewer(Viewer viewer) {
+ // If it is changing...
+ //
+ if (currentViewer != viewer) {
+ if (selectionChangedListener == null) {
+ // Create the listener on demand.
+ //
+ selectionChangedListener = new ISelectionChangedListener() {
+ // This just notifies those things that are affected by the section.
+ //
+ @Override
+ public void selectionChanged(SelectionChangedEvent selectionChangedEvent) {
+ setSelection(selectionChangedEvent.getSelection());
+ }
+ };
+ }
+
+ // Stop listening to the old one.
+ //
+ if (currentViewer != null) {
+ currentViewer.removeSelectionChangedListener(selectionChangedListener);
+ }
+
+ // Start listening to the new one.
+ //
+ if (viewer != null) {
+ viewer.addSelectionChangedListener(selectionChangedListener);
+ }
+
+ // Remember it.
+ //
+ currentViewer = viewer;
+
+ // Set the editors selection based on the current viewer's selection.
+ //
+ setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
+ }
+ }
+
+ /**
+ * This returns the viewer as required by the {@link IViewerProvider} interface.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Viewer getViewer() {
+ return currentViewer;
+ }
+
+ /**
+ * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void createContextMenuFor(StructuredViewer viewer) {
+ MenuManager contextMenu = new MenuManager("#PopUp");
+ contextMenu.add(new Separator("additions"));
+ contextMenu.setRemoveAllWhenShown(true);
+ contextMenu.addMenuListener(this);
+ Menu menu = contextMenu.createContextMenu(viewer.getControl());
+ viewer.getControl().setMenu(menu);
+ getSite().registerContextMenu(contextMenu, new UnwrappingSelectionProvider(viewer));
+
+ int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
+ Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance(), LocalSelectionTransfer.getTransfer(), FileTransfer.getInstance() };
+ viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
+ viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
+ }
+
+ /**
+ * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void createModel() {
+ URI resourceURI = EditUIUtil.getURI(getEditorInput(), editingDomain.getResourceSet().getURIConverter());
+ Exception exception = null;
+ Resource resource = null;
+ try {
+ // Load the resource through the editing domain.
+ //
+ resource = editingDomain.getResourceSet().getResource(resourceURI, true);
+ } catch (Exception e) {
+ exception = e;
+ resource = editingDomain.getResourceSet().getResource(resourceURI, false);
+ }
+
+ Diagnostic diagnostic = analyzeResourceProblems(resource, exception);
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ editingDomain.getResourceSet().eAdapters().add(problemIndicationAdapter);
+ }
+
+ /**
+ * Returns a diagnostic describing the errors and warnings listed in the resource
+ * and the specified exception (if any).
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public Diagnostic analyzeResourceProblems(Resource resource, Exception exception) {
+ boolean hasErrors = !resource.getErrors().isEmpty();
+ if (hasErrors || !resource.getWarnings().isEmpty()) {
+ BasicDiagnostic basicDiagnostic = new BasicDiagnostic(hasErrors ? Diagnostic.ERROR : Diagnostic.WARNING,
+ "org.eclipse.papyrus.toolsmiths.validation.common.ui",
+ 0,
+ getString("_UI_CreateModelError_message", resource.getURI()),
+ new Object[] { exception == null ? (Object) resource : exception });
+ basicDiagnostic.merge(EcoreUtil.computeDiagnostic(resource, true));
+ return basicDiagnostic;
+ } else if (exception != null) {
+ return new BasicDiagnostic(Diagnostic.ERROR,
+ "org.eclipse.papyrus.toolsmiths.validation.common.ui",
+ 0,
+ getString("_UI_CreateModelError_message", resource.getURI()),
+ new Object[] { exception });
+ } else {
+ return Diagnostic.OK_INSTANCE;
+ }
+ }
+
+ /**
+ * This is the method used by the framework to install your own controls.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void createPages() {
+ // Creates the model from the editor input
+ //
+ createModel();
+
+ // Only creates the other pages if there is something that can be edited
+ //
+ if (!getEditingDomain().getResourceSet().getResources().isEmpty()) {
+ // Create a page for the selection tree view.
+ //
+ Tree tree = new Tree(getContainer(), SWT.MULTI);
+ selectionViewer = new TreeViewer(tree);
+ setCurrentViewer(selectionViewer);
+
+ selectionViewer.setUseHashlookup(true);
+ selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ selectionViewer.setLabelProvider(new DecoratingColumLabelProvider(new AdapterFactoryLabelProvider(adapterFactory), new DiagnosticDecorator(editingDomain, selectionViewer, Activator.getPlugin().getDialogSettings())));
+ selectionViewer.setInput(editingDomain.getResourceSet());
+ selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+
+ new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+ new ColumnViewerInformationControlToolTipSupport(selectionViewer, new DiagnosticDecorator.EditingDomainLocationListener(editingDomain, selectionViewer));
+
+ createContextMenuFor(selectionViewer);
+ int pageIndex = addPage(tree);
+ setPageText(pageIndex, getString("_UI_SelectionPage_label"));
+
+ getSite().getShell().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ if (!getContainer().isDisposed()) {
+ setActivePage(0);
+ }
+ }
+ });
+ }
+
+ // Ensures that this editor will only display the page's tab
+ // area if there are more than one page
+ //
+ getContainer().addControlListener(new ControlAdapter() {
+ boolean guard = false;
+
+ @Override
+ public void controlResized(ControlEvent event) {
+ if (!guard) {
+ guard = true;
+ hideTabs();
+ guard = false;
+ }
+ }
+ });
+
+ getSite().getShell().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ updateProblemIndication();
+ }
+ });
+ }
+
+ /**
+ * If there is just one page in the multi-page editor part,
+ * this hides the single tab at the bottom.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void hideTabs() {
+ if (getPageCount() <= 1) {
+ setPageText(0, "");
+ if (getContainer() instanceof CTabFolder) {
+ Point point = getContainer().getSize();
+ Rectangle clientArea = getContainer().getClientArea();
+ getContainer().setSize(point.x, 2 * point.y - clientArea.height - clientArea.y);
+ }
+ }
+ }
+
+ /**
+ * If there is more than one page in the multi-page editor part,
+ * this shows the tabs at the bottom.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void showTabs() {
+ if (getPageCount() > 1) {
+ setPageText(0, getString("_UI_SelectionPage_label"));
+ if (getContainer() instanceof CTabFolder) {
+ Point point = getContainer().getSize();
+ Rectangle clientArea = getContainer().getClientArea();
+ getContainer().setSize(point.x, clientArea.height + clientArea.y);
+ }
+ }
+ }
+
+ /**
+ * This is used to track the active viewer.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected void pageChange(int pageIndex) {
+ super.pageChange(pageIndex);
+
+ if (contentOutlinePage != null) {
+ handleContentOutlineSelection(contentOutlinePage.getSelection());
+ }
+ }
+
+ /**
+ * This is how the framework determines which interfaces we implement.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public <T> T getAdapter(Class<T> key) {
+ if (key.equals(IContentOutlinePage.class)) {
+ return showOutlineView() ? key.cast(getContentOutlinePage()) : null;
+ } else if (key.equals(IPropertySheetPage.class)) {
+ return key.cast(getPropertySheetPage());
+ } else if (key.equals(IGotoMarker.class)) {
+ return key.cast(this);
+ } else if (key.equals(IFindReplaceTarget.class)) {
+ return FindAndReplaceTarget.getAdapter(key, this, Activator.getPlugin());
+ } else {
+ return super.getAdapter(key);
+ }
+ }
+
+ /**
+ * This accesses a cached version of the content outliner.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public IContentOutlinePage getContentOutlinePage() {
+ if (contentOutlinePage == null) {
+ // The content outline is just a tree.
+ //
+ class MyContentOutlinePage extends ContentOutlinePage {
+ @Override
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+ contentOutlineViewer = getTreeViewer();
+ contentOutlineViewer.addSelectionChangedListener(this);
+
+ // Set up the tree viewer.
+ //
+ contentOutlineViewer.setUseHashlookup(true);
+ contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ contentOutlineViewer.setLabelProvider(new DecoratingColumLabelProvider(new AdapterFactoryLabelProvider(adapterFactory), new DiagnosticDecorator(editingDomain, contentOutlineViewer, Activator.getPlugin().getDialogSettings())));
+ contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+ new ColumnViewerInformationControlToolTipSupport(contentOutlineViewer, new DiagnosticDecorator.EditingDomainLocationListener(editingDomain, contentOutlineViewer));
+
+ // Make sure our popups work.
+ //
+ createContextMenuFor(contentOutlineViewer);
+
+ if (!editingDomain.getResourceSet().getResources().isEmpty()) {
+ // Select the root object in the view.
+ //
+ contentOutlineViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+ }
+ }
+
+ @Override
+ public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+ super.makeContributions(menuManager, toolBarManager, statusLineManager);
+ contentOutlineStatusLineManager = statusLineManager;
+ }
+
+ @Override
+ public void setActionBars(IActionBars actionBars) {
+ super.setActionBars(actionBars);
+ getActionBarContributor().shareGlobalActions(this, actionBars);
+ }
+ }
+
+ contentOutlinePage = new MyContentOutlinePage();
+
+ // Listen to selection so that we can handle it is a special way.
+ //
+ contentOutlinePage.addSelectionChangedListener(new ISelectionChangedListener() {
+ // This ensures that we handle selections correctly.
+ //
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ handleContentOutlineSelection(event.getSelection());
+ }
+ });
+ }
+
+ return contentOutlinePage;
+ }
+
+ /**
+ * This accesses a cached version of the property sheet.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public IPropertySheetPage getPropertySheetPage() {
+ PropertySheetPage propertySheetPage = new ExtendedPropertySheetPage(editingDomain, ExtendedPropertySheetPage.Decoration.LIVE, Activator.getPlugin().getDialogSettings(), 0, false) {
+ @Override
+ public void setSelectionToViewer(List<?> selection) {
+ ProjectRulesEditor.this.setSelectionToViewer(selection);
+ ProjectRulesEditor.this.setFocus();
+ }
+
+ @Override
+ public void setActionBars(IActionBars actionBars) {
+ super.setActionBars(actionBars);
+ getActionBarContributor().shareGlobalActions(this, actionBars);
+ }
+ };
+ propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+ propertySheetPages.add(propertySheetPage);
+
+ return propertySheetPage;
+ }
+
+ /**
+ * This deals with how we want selection in the outliner to affect the other views.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void handleContentOutlineSelection(ISelection selection) {
+ if (selectionViewer != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+ Iterator<?> selectedElements = ((IStructuredSelection) selection).iterator();
+ if (selectedElements.hasNext()) {
+ // Get the first selected element.
+ //
+ Object selectedElement = selectedElements.next();
+
+ ArrayList<Object> selectionList = new ArrayList<>();
+ selectionList.add(selectedElement);
+ while (selectedElements.hasNext()) {
+ selectionList.add(selectedElements.next());
+ }
+
+ // Set the selection to the widget.
+ //
+ selectionViewer.setSelection(new StructuredSelection(selectionList));
+ }
+ }
+ }
+
+ /**
+ * This is for implementing {@link IEditorPart} and simply tests the command stack.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean isDirty() {
+ return ((BasicCommandStack) editingDomain.getCommandStack()).isSaveNeeded();
+ }
+
+ /**
+ * This is for implementing {@link IRevertablePart}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void doRevert() {
+ DiagnosticDecorator.cancel(editingDomain);
+
+ ResourceSet resourceSet = editingDomain.getResourceSet();
+ List<Resource> resources = resourceSet.getResources();
+ List<Resource> unloadedResources = new ArrayList<>();
+ updateProblemIndication = false;
+ for (int i = 0; i < resources.size(); ++i) {
+ Resource resource = resources.get(i);
+ if (resource.isLoaded()) {
+ resource.unload();
+ unloadedResources.add(resource);
+ }
+ }
+
+ resourceToDiagnosticMap.clear();
+ for (Resource resource : unloadedResources) {
+ try {
+ resource.load(resourceSet.getLoadOptions());
+ } catch (IOException exception) {
+ if (!resourceToDiagnosticMap.containsKey(resource)) {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ }
+ }
+
+ editingDomain.getCommandStack().flush();
+
+ if (AdapterFactoryEditingDomain.isStale(editorSelection)) {
+ setSelection(StructuredSelection.EMPTY);
+ }
+
+ updateProblemIndication = true;
+ updateProblemIndication();
+ }
+
+ /**
+ * This is for implementing {@link IEditorPart} and simply saves the model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void doSave(IProgressMonitor progressMonitor) {
+ // Save only resources that have actually changed.
+ //
+ final Map<Object, Object> saveOptions = new HashMap<>();
+ saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+ saveOptions.put(Resource.OPTION_LINE_DELIMITER, Resource.OPTION_LINE_DELIMITER_UNSPECIFIED);
+
+ // Do the work within an operation because this is a long running activity that modifies the workbench.
+ //
+ WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+ // This is the method that gets invoked when the operation runs.
+ //
+ @Override
+ public void execute(IProgressMonitor monitor) {
+ // Save the resources to the file system.
+ //
+ boolean first = true;
+ List<Resource> resources = editingDomain.getResourceSet().getResources();
+ for (int i = 0; i < resources.size(); ++i) {
+ Resource resource = resources.get(i);
+ if ((first || !resource.getContents().isEmpty() || isPersisted(resource)) && !editingDomain.isReadOnly(resource)) {
+ try {
+ long timeStamp = resource.getTimeStamp();
+ resource.save(saveOptions);
+ if (resource.getTimeStamp() != timeStamp) {
+ savedResources.add(resource);
+ }
+ } catch (Exception exception) {
+ resourceToDiagnosticMap.put(resource, analyzeResourceProblems(resource, exception));
+ }
+ first = false;
+ }
+ }
+ }
+ };
+
+ updateProblemIndication = false;
+ try {
+ // This runs the options, and shows progress.
+ //
+ new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
+
+ // Refresh the necessary state.
+ //
+ ((BasicCommandStack) editingDomain.getCommandStack()).saveIsDone();
+ firePropertyChange(IEditorPart.PROP_DIRTY);
+ } catch (Exception exception) {
+ // Something went wrong that shouldn't.
+ //
+ Activator.INSTANCE.log(exception);
+ }
+ updateProblemIndication = true;
+ updateProblemIndication();
+ }
+
+ /**
+ * This returns whether something has been persisted to the URI of the specified resource.
+ * The implementation uses the URI converter from the editor's resource set to try to open an input stream.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected boolean isPersisted(Resource resource) {
+ boolean result = false;
+ try {
+ InputStream stream = editingDomain.getResourceSet().getURIConverter().createInputStream(resource.getURI());
+ if (stream != null) {
+ result = true;
+ stream.close();
+ }
+ } catch (IOException e) {
+ // Ignore
+ }
+ return result;
+ }
+
+ /**
+ * This always returns true because it is not currently supported.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean isSaveAsAllowed() {
+ return true;
+ }
+
+ /**
+ * This also changes the editor's input.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void doSaveAs() {
+ SaveAsDialog saveAsDialog = new SaveAsDialog(getSite().getShell());
+ saveAsDialog.open();
+ IPath path = saveAsDialog.getResult();
+ if (path != null) {
+ IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+ if (file != null) {
+ doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString(), true), new FileEditorInput(file));
+ }
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void doSaveAs(URI uri, IEditorInput editorInput) {
+ (editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
+ setInputWithNotify(editorInput);
+ setPartName(editorInput.getName());
+ IProgressMonitor progressMonitor = getActionBars().getStatusLineManager() != null ? getActionBars().getStatusLineManager().getProgressMonitor() : new NullProgressMonitor();
+ doSave(progressMonitor);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void gotoMarker(IMarker marker) {
+ List<?> targetObjects = markerHelper.getTargetObjects(editingDomain, marker);
+ if (!targetObjects.isEmpty()) {
+ setSelectionToViewer(targetObjects);
+ }
+ }
+
+ /**
+ * This is called during startup.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void init(IEditorSite site, IEditorInput editorInput) {
+ setSite(site);
+ setInputWithNotify(editorInput);
+ setPartName(editorInput.getName());
+ site.setSelectionProvider(this);
+ site.getPage().addPartListener(partListener);
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void setFocus() {
+ getControl(getActivePage()).setFocus();
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ selectionChangedListeners.add(listener);
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+ selectionChangedListeners.remove(listener);
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public ISelection getSelection() {
+ return editorSelection;
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
+ * Calling this result will notify the listeners.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void setSelection(ISelection selection) {
+ editorSelection = selection;
+
+ for (ISelectionChangedListener listener : selectionChangedListeners) {
+ listener.selectionChanged(new SelectionChangedEvent(this, selection));
+ }
+ setStatusLineManager(selection);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setStatusLineManager(ISelection selection) {
+ IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ? contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
+
+ if (statusLineManager != null) {
+ if (selection instanceof IStructuredSelection) {
+ Collection<?> collection = ((IStructuredSelection) selection).toList();
+ switch (collection.size()) {
+ case 0: {
+ statusLineManager.setMessage(getString("_UI_NoObjectSelected"));
+ break;
+ }
+ case 1: {
+ String text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
+ statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text));
+ break;
+ }
+ default: {
+ statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size())));
+ break;
+ }
+ }
+ } else {
+ statusLineManager.setMessage("");
+ }
+ }
+ }
+
+ /**
+ * This looks up a string in the plugin's plugin.properties file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private static String getString(String key) {
+ return Activator.INSTANCE.getString(key);
+ }
+
+ /**
+ * This looks up a string in plugin.properties, making a substitution.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private static String getString(String key, Object s1) {
+ return Activator.INSTANCE.getString(key, new Object[] { s1 });
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void menuAboutToShow(IMenuManager menuManager) {
+ ((IMenuListener) getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public EditingDomainActionBarContributor getActionBarContributor() {
+ return (EditingDomainActionBarContributor) getEditorSite().getActionBarContributor();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public IActionBars getActionBars() {
+ return getActionBarContributor().getActionBars();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public AdapterFactory getAdapterFactory() {
+ return adapterFactory;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void dispose() {
+ updateProblemIndication = false;
+
+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
+
+ getSite().getPage().removePartListener(partListener);
+
+ adapterFactory.dispose();
+
+ if (getActionBarContributor().getActiveEditor() == this) {
+ getActionBarContributor().setActiveEditor(null);
+ }
+
+ for (PropertySheetPage propertySheetPage : propertySheetPages) {
+ propertySheetPage.dispose();
+ }
+
+ if (contentOutlinePage != null) {
+ contentOutlinePage.dispose();
+ }
+
+ super.dispose();
+ }
+
+ /**
+ * Returns whether the outline view should be presented to the user.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected boolean showOutlineView() {
+ return false;
+ }
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/presentation/ProjectRulesModelWizard.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/presentation/ProjectRulesModelWizard.java
new file mode 100644
index 00000000000..52eef0ea72c
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/presentation/ProjectRulesModelWizard.java
@@ -0,0 +1,629 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.presentation;
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.StringTokenizer;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.emf.ecore.xmi.XMLResource;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.papyrus.toolsmiths.validation.common.internal.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesFactory;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.ISetSelectionTarget;
+
+
+/**
+ * This is a simple wizard for creating a new model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ProjectRulesModelWizard extends Wizard implements INewWizard {
+ /**
+ * The supported extensions for created files.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public static final List<String> FILE_EXTENSIONS = Collections.unmodifiableList(Arrays.asList(Activator.INSTANCE.getString("_UI_ProjectRulesEditorFilenameExtensions").split("\\s*,\\s*")));
+
+ /**
+ * A formatted list of supported file extensions, suitable for display.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public static final String FORMATTED_FILE_EXTENSIONS = Activator.INSTANCE.getString("_UI_ProjectRulesEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");
+
+ /**
+ * This caches an instance of the model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ProjectRulesPackage projectRulesPackage = ProjectRulesPackage.eINSTANCE;
+
+ /**
+ * This caches an instance of the model factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ProjectRulesFactory projectRulesFactory = projectRulesPackage.getProjectRulesFactory();
+
+ /**
+ * This is the file creation page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ProjectRulesModelWizardNewFileCreationPage newFileCreationPage;
+
+ /**
+ * This is the initial object creation page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ProjectRulesModelWizardInitialObjectCreationPage initialObjectCreationPage;
+
+ /**
+ * Remember the selection during initialization for populating the default container.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IStructuredSelection selection;
+
+ /**
+ * Remember the workbench during initialization.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected IWorkbench workbench;
+
+ /**
+ * Caches the names of the types that can be created as the root object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected List<String> initialObjectNames;
+
+ /**
+ * This just records the information.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ this.workbench = workbench;
+ this.selection = selection;
+ setWindowTitle(Activator.INSTANCE.getString("_UI_Wizard_label"));
+ setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(Activator.INSTANCE.getImage("full/wizban/NewProjectRules")));
+ }
+
+ /**
+ * Returns the names of the types that can be created as the root object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated NOT
+ */
+ protected Collection<String> getInitialObjectNames() {
+ if (initialObjectNames == null) {
+ initialObjectNames = List.of(projectRulesPackage.getProjectDescription().getName());
+ }
+ return initialObjectNames;
+ }
+
+ /**
+ * Create a new model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected EObject createInitialModel() {
+ EClass eClass = (EClass) projectRulesPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+ EObject rootObject = projectRulesFactory.create(eClass);
+ return rootObject;
+ }
+
+ /**
+ * Do the work after everything is specified.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean performFinish() {
+ try {
+ // Remember the file.
+ //
+ final IFile modelFile = getModelFile();
+
+ // Do the work within an operation.
+ //
+ WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
+ @Override
+ protected void execute(IProgressMonitor progressMonitor) {
+ try {
+ // Create a resource set
+ //
+ ResourceSet resourceSet = new ResourceSetImpl();
+
+ // Get the URI of the model file.
+ //
+ URI fileURI = URI.createPlatformResourceURI(modelFile.getFullPath().toString(), true);
+
+ // Create a resource for this file.
+ //
+ Resource resource = resourceSet.createResource(fileURI, ProjectRulesPackage.eCONTENT_TYPE);
+
+ // Add the initial model object to the contents.
+ //
+ EObject rootObject = createInitialModel();
+ if (rootObject != null) {
+ resource.getContents().add(rootObject);
+ }
+
+ // Save the contents of the resource to the file system.
+ //
+ Map<Object, Object> options = new HashMap<>();
+ options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
+ resource.save(options);
+ } catch (Exception exception) {
+ Activator.INSTANCE.log(exception);
+ } finally {
+ progressMonitor.done();
+ }
+ }
+ };
+
+ getContainer().run(false, false, operation);
+
+ // Select the new file resource in the current view.
+ //
+ IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+ IWorkbenchPage page = workbenchWindow.getActivePage();
+ final IWorkbenchPart activePart = page.getActivePart();
+ if (activePart instanceof ISetSelectionTarget) {
+ final ISelection targetSelection = new StructuredSelection(modelFile);
+ getShell().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ ((ISetSelectionTarget) activePart).selectReveal(targetSelection);
+ }
+ });
+ }
+
+ // Open an editor on the new file.
+ //
+ try {
+ page.openEditor(new FileEditorInput(modelFile),
+ workbench.getEditorRegistry().getDefaultEditor(modelFile.getFullPath().toString(),
+ Platform.getContentTypeManager().getContentType(ProjectRulesPackage.eCONTENT_TYPE)).getId());
+ } catch (PartInitException exception) {
+ MessageDialog.openError(workbenchWindow.getShell(), Activator.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());
+ return false;
+ }
+
+ return true;
+ } catch (Exception exception) {
+ Activator.INSTANCE.log(exception);
+ return false;
+ }
+ }
+
+ /**
+ * This is the one page of the wizard.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public class ProjectRulesModelWizardNewFileCreationPage extends WizardNewFileCreationPage {
+ /**
+ * Pass in the selection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ProjectRulesModelWizardNewFileCreationPage(String pageId, IStructuredSelection selection) {
+ super(pageId, selection);
+ }
+
+ /**
+ * The framework calls this to see if the file is correct.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean validatePage() {
+ if (super.validatePage()) {
+ String extension = new Path(getFileName()).getFileExtension();
+ if (extension == null || !FILE_EXTENSIONS.contains(extension)) {
+ String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" : "_WARN_FilenameExtension";
+ setErrorMessage(Activator.INSTANCE.getString(key, new Object[] { FORMATTED_FILE_EXTENSIONS }));
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public IFile getModelFile() {
+ return ResourcesPlugin.getWorkspace().getRoot().getFile(getContainerFullPath().append(getFileName()));
+ }
+ }
+
+ /**
+ * This is the page where the type of object to create is selected.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public class ProjectRulesModelWizardInitialObjectCreationPage extends WizardPage {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Combo initialObjectField;
+
+ /**
+ * @generated
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ */
+ protected List<String> encodings;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Combo encodingField;
+
+ /**
+ * Pass in the selection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ProjectRulesModelWizardInitialObjectCreationPage(String pageId) {
+ super(pageId);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void createControl(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ {
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ layout.verticalSpacing = 12;
+ composite.setLayout(layout);
+
+ GridData data = new GridData();
+ data.verticalAlignment = GridData.FILL;
+ data.grabExcessVerticalSpace = true;
+ data.horizontalAlignment = GridData.FILL;
+ composite.setLayoutData(data);
+ }
+
+ Label containerLabel = new Label(composite, SWT.LEFT);
+ {
+ containerLabel.setText(Activator.INSTANCE.getString("_UI_ModelObject"));
+
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ containerLabel.setLayoutData(data);
+ }
+
+ initialObjectField = new Combo(composite, SWT.BORDER);
+ {
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ data.grabExcessHorizontalSpace = true;
+ initialObjectField.setLayoutData(data);
+ }
+
+ for (String objectName : getInitialObjectNames()) {
+ initialObjectField.add(getLabel(objectName));
+ }
+
+ if (initialObjectField.getItemCount() == 1) {
+ initialObjectField.select(0);
+ }
+ initialObjectField.addModifyListener(validator);
+
+ Label encodingLabel = new Label(composite, SWT.LEFT);
+ {
+ encodingLabel.setText(Activator.INSTANCE.getString("_UI_XMLEncoding"));
+
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ encodingLabel.setLayoutData(data);
+ }
+ encodingField = new Combo(composite, SWT.BORDER);
+ {
+ GridData data = new GridData();
+ data.horizontalAlignment = GridData.FILL;
+ data.grabExcessHorizontalSpace = true;
+ encodingField.setLayoutData(data);
+ }
+
+ for (String encoding : getEncodings()) {
+ encodingField.add(encoding);
+ }
+
+ encodingField.select(0);
+ encodingField.addModifyListener(validator);
+
+ setPageComplete(validatePage());
+ setControl(composite);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ModifyListener validator = new ModifyListener() {
+ @Override
+ public void modifyText(ModifyEvent e) {
+ setPageComplete(validatePage());
+ }
+ };
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected boolean validatePage() {
+ return getInitialObjectName() != null && getEncodings().contains(encodingField.getText());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void setVisible(boolean visible) {
+ super.setVisible(visible);
+ if (visible) {
+ if (initialObjectField.getItemCount() == 1) {
+ initialObjectField.clearSelection();
+ encodingField.setFocus();
+ } else {
+ encodingField.clearSelection();
+ initialObjectField.setFocus();
+ }
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public String getInitialObjectName() {
+ String label = initialObjectField.getText();
+
+ for (String name : getInitialObjectNames()) {
+ if (getLabel(name).equals(label)) {
+ return name;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public String getEncoding() {
+ return encodingField.getText();
+ }
+
+ /**
+ * Returns the label for the specified type name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected String getLabel(String typeName) {
+ try {
+ return Activator.INSTANCE.getString("_UI_" + typeName + "_type");
+ } catch (MissingResourceException mre) {
+ Activator.INSTANCE.log(mre);
+ }
+ return typeName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected Collection<String> getEncodings() {
+ if (encodings == null) {
+ encodings = new ArrayList<>();
+ for (StringTokenizer stringTokenizer = new StringTokenizer(Activator.INSTANCE.getString("_UI_XMLEncodingChoices")); stringTokenizer.hasMoreTokens();) {
+ encodings.add(stringTokenizer.nextToken());
+ }
+ }
+ return encodings;
+ }
+ }
+
+ /**
+ * The framework calls this to create the contents of the wizard.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void addPages() {
+ // Create a page, set the title, and the initial model file name.
+ //
+ newFileCreationPage = new ProjectRulesModelWizardNewFileCreationPage("Whatever", selection);
+ newFileCreationPage.setTitle(Activator.INSTANCE.getString("_UI_ProjectRulesModelWizard_label"));
+ newFileCreationPage.setDescription(Activator.INSTANCE.getString("_UI_ProjectRulesModelWizard_description"));
+ newFileCreationPage.setFileName(Activator.INSTANCE.getString("_UI_ProjectRulesEditorFilenameDefaultBase") + "." + FILE_EXTENSIONS.get(0));
+ addPage(newFileCreationPage);
+
+ // Try and get the resource selection to determine a current directory for the file dialog.
+ //
+ if (selection != null && !selection.isEmpty()) {
+ // Get the resource...
+ //
+ Object selectedElement = selection.iterator().next();
+ if (selectedElement instanceof IResource) {
+ // Get the resource parent, if its a file.
+ //
+ IResource selectedResource = (IResource) selectedElement;
+ if (selectedResource.getType() == IResource.FILE) {
+ selectedResource = selectedResource.getParent();
+ }
+
+ // This gives us a directory...
+ //
+ if (selectedResource instanceof IFolder || selectedResource instanceof IProject) {
+ // Set this for the container.
+ //
+ newFileCreationPage.setContainerFullPath(selectedResource.getFullPath());
+
+ // Make up a unique new name here.
+ //
+ String defaultModelBaseFilename = Activator.INSTANCE.getString("_UI_ProjectRulesEditorFilenameDefaultBase");
+ String defaultModelFilenameExtension = FILE_EXTENSIONS.get(0);
+ String modelFilename = defaultModelBaseFilename + "." + defaultModelFilenameExtension;
+ for (int i = 1; ((IContainer) selectedResource).findMember(modelFilename) != null; ++i) {
+ modelFilename = defaultModelBaseFilename + i + "." + defaultModelFilenameExtension;
+ }
+ newFileCreationPage.setFileName(modelFilename);
+ }
+ }
+ }
+ initialObjectCreationPage = new ProjectRulesModelWizardInitialObjectCreationPage("Whatever2");
+ initialObjectCreationPage.setTitle(Activator.INSTANCE.getString("_UI_ProjectRulesModelWizard_label"));
+ initialObjectCreationPage.setDescription(Activator.INSTANCE.getString("_UI_Wizard_initial_object_description"));
+ addPage(initialObjectCreationPage);
+ }
+
+ /**
+ * Get the file from the page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public IFile getModelFile() {
+ return newFileCreationPage.getModelFile();
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/DependencyItemProvider.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/DependencyItemProvider.java
new file mode 100644
index 00000000000..314444954e4
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/DependencyItemProvider.java
@@ -0,0 +1,278 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.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.toolsmiths.validation.common.internal.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class DependencyItemProvider
+ 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 DependencyItemProvider(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);
+
+ addNamePropertyDescriptor(object);
+ addKindPropertyDescriptor(object);
+ addRequiredPropertyDescriptor(object);
+ addLowerBoundPropertyDescriptor(object);
+ addUpperBoundPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Dependency_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Dependency_name_feature", "_UI_Dependency_type"),
+ ProjectRulesPackage.Literals.DEPENDENCY__NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Kind feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addKindPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Dependency_kind_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Dependency_kind_feature", "_UI_Dependency_type"),
+ ProjectRulesPackage.Literals.DEPENDENCY__KIND,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Required feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addRequiredPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Dependency_required_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Dependency_required_feature", "_UI_Dependency_type"),
+ ProjectRulesPackage.Literals.DEPENDENCY__REQUIRED,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Lower Bound feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addLowerBoundPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Dependency_lowerBound_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Dependency_lowerBound_feature", "_UI_Dependency_type"),
+ ProjectRulesPackage.Literals.DEPENDENCY__LOWER_BOUND,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Upper Bound feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addUpperBoundPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Dependency_upperBound_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Dependency_upperBound_feature", "_UI_Dependency_type"),
+ ProjectRulesPackage.Literals.DEPENDENCY__UPPER_BOUND,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns Dependency.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Dependency"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage() {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Dependency) object).getName();
+ return label == null || label.length() == 0 ? getString("_UI_Dependency_type") : getString("_UI_Dependency_type") + " " + label;
+ }
+
+
+ /**
+ * 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(Dependency.class)) {
+ case ProjectRulesPackage.DEPENDENCY__NAME:
+ case ProjectRulesPackage.DEPENDENCY__KIND:
+ case ProjectRulesPackage.DEPENDENCY__REQUIRED:
+ case ProjectRulesPackage.DEPENDENCY__LOWER_BOUND:
+ case ProjectRulesPackage.DEPENDENCY__UPPER_BOUND:
+ 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 Activator.INSTANCE;
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExpressionItemProvider.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExpressionItemProvider.java
new file mode 100644
index 00000000000..d8681d7cbcf
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExpressionItemProvider.java
@@ -0,0 +1,183 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.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.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Expression;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesFactory;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Expression} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ExpressionItemProvider extends ValueItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ExpressionItemProvider(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);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ProjectRulesPackage.Literals.EXPRESSION__VALUE);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns Expression.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Expression"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage() {
+ return true;
+ }
+
+ /**
+ * 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_Expression_type");
+ }
+
+
+ /**
+ * 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(Expression.class)) {
+ case ProjectRulesPackage.EXPRESSION__VALUE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ 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);
+
+ newChildDescriptors.add(createChildParameter(ProjectRulesPackage.Literals.EXPRESSION__VALUE,
+ ProjectRulesFactory.eINSTANCE.createLiteralString()));
+
+ newChildDescriptors.add(createChildParameter(ProjectRulesPackage.Literals.EXPRESSION__VALUE,
+ ProjectRulesFactory.eINSTANCE.createVariable()));
+
+ newChildDescriptors.add(createChildParameter(ProjectRulesPackage.Literals.EXPRESSION__VALUE,
+ ProjectRulesFactory.eINSTANCE.createExpression()));
+
+ newChildDescriptors.add(createChildParameter(ProjectRulesPackage.Literals.EXPRESSION__VALUE,
+ ProjectRulesFactory.eINSTANCE.createOpaqueValue()));
+
+ newChildDescriptors.add(createChildParameter(ProjectRulesPackage.Literals.EXPRESSION__VALUE,
+ ProjectRulesFactory.eINSTANCE.createFeaturePath()));
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionAttributeItemProvider.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionAttributeItemProvider.java
new file mode 100644
index 00000000000..11ec4edce13
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionAttributeItemProvider.java
@@ -0,0 +1,218 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.command.SetCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.OpaqueValue;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesFactory;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value;
+
+import com.google.common.base.Strings;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ExtensionAttributeItemProvider
+ extends ExtensionModelNodeItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ExtensionAttributeItemProvider(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);
+
+ addValuePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Value feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated NOT
+ */
+ protected void addValuePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(new ItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ExtensionAttribute_value_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ExtensionAttribute_value_feature", "_UI_ExtensionAttribute_type"),
+ ProjectRulesPackage.Literals.EXTENSION_ATTRIBUTE__VALUE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null) {
+
+ @Override
+ public Object getFeature(Object object) {
+ // We surface the text of the opaque value
+ return ProjectRulesPackage.Literals.OPAQUE_VALUE__TEXT;
+ }
+
+ @Override
+ protected Collection<?> getComboBoxObjects(Object object) {
+ return null;
+ }
+
+ @Override
+ protected Object getValue(EObject object, EStructuralFeature feature) {
+ ExtensionAttribute attribute = (ExtensionAttribute) object;
+ return attribute.getValue() == null ? "" : attribute.getValue().stringValue(); //$NON-NLS-1$
+ }
+
+ @Override
+ public void setPropertyValue(Object object, Object value) {
+ ExtensionAttribute attribute = (ExtensionAttribute) object;
+ EditingDomain editingDomain = getEditingDomain(attribute);
+
+ Value existing = attribute.getValue();
+ OpaqueValue opaqueValue = existing instanceof OpaqueValue ? (OpaqueValue) existing : null;
+
+ Command command;
+
+ if (opaqueValue == null) {
+ // We must have an opaque value. So, create one to replace whatever we had already
+ opaqueValue = ProjectRulesFactory.eINSTANCE.createOpaqueValue();
+ opaqueValue.setText((String) value);
+ command = SetCommand.create(editingDomain, attribute, ProjectRulesPackage.Literals.EXTENSION_ATTRIBUTE__VALUE, opaqueValue);
+ } else {
+ command = SetCommand.create(editingDomain, opaqueValue, ProjectRulesPackage.Literals.OPAQUE_VALUE__TEXT, value);
+ }
+
+ editingDomain.getCommandStack().execute(command);
+ }
+ });
+ }
+
+ /**
+ * This returns ExtensionAttribute.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ExtensionAttribute"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage() {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public String getTextGen(Object object) {
+ String label = ((ExtensionAttribute) object).getName();
+ return label == null || label.length() == 0 ? getString("_UI_ExtensionAttribute_type") : getString("_UI_ExtensionAttribute_type") + " " + label;
+ }
+
+ @Override
+ public String getText(Object object) {
+ String result = getTextGen(object);
+ ExtensionAttribute attribute = (ExtensionAttribute) object;
+
+ String value = attribute.getValue() == null ? null : attribute.getValue().stringValue();
+ result = Strings.isNullOrEmpty(value)
+ ? result
+ : getString("_UI_ExtensionAttribute_label", new Object[] { result, value });
+ return result;
+ }
+
+ /**
+ * 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(ExtensionAttribute.class)) {
+ case ProjectRulesPackage.EXTENSION_ATTRIBUTE__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);
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionElementItemProvider.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionElementItemProvider.java
new file mode 100644
index 00000000000..ace54951a4e
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionElementItemProvider.java
@@ -0,0 +1,176 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.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.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesFactory;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ExtensionElementItemProvider
+ extends ExtensionModelNodeItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ExtensionElementItemProvider(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);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ProjectRulesPackage.Literals.EXTENSION_ELEMENT__ELEMENT);
+ childrenFeatures.add(ProjectRulesPackage.Literals.EXTENSION_ELEMENT__ATTRIBUTE);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns ExtensionElement.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ExtensionElement"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage() {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ExtensionElement) object).getName();
+ return label == null || label.length() == 0 ? getString("_UI_ExtensionElement_type") : getString("_UI_ExtensionElement_type") + " " + label;
+ }
+
+
+ /**
+ * 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(ExtensionElement.class)) {
+ case ProjectRulesPackage.EXTENSION_ELEMENT__ELEMENT:
+ case ProjectRulesPackage.EXTENSION_ELEMENT__ATTRIBUTE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ 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);
+
+ newChildDescriptors.add(createChildParameter(ProjectRulesPackage.Literals.EXTENSION_ELEMENT__ELEMENT,
+ ProjectRulesFactory.eINSTANCE.createExtensionElement()));
+
+ newChildDescriptors.add(createChildParameter(ProjectRulesPackage.Literals.EXTENSION_ELEMENT__ATTRIBUTE,
+ ProjectRulesFactory.eINSTANCE.createExtensionAttribute()));
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionItemProvider.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionItemProvider.java
new file mode 100644
index 00000000000..4ef107e1b40
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionItemProvider.java
@@ -0,0 +1,327 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.provider;
+
+
+import static java.util.function.Predicate.not;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+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.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+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.core.architecture.ArchitecturePackage;
+import org.eclipse.papyrus.toolsmiths.validation.common.internal.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesFactory;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ExtensionItemProvider
+ 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 ExtensionItemProvider(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);
+
+ addExtensionPointPropertyDescriptor(object);
+ addResourceAttributePropertyDescriptor(object);
+ addArchitectureReferencePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Extension Point feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addExtensionPointPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Extension_extensionPoint_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Extension_extensionPoint_feature", "_UI_Extension_type"),
+ ProjectRulesPackage.Literals.EXTENSION__EXTENSION_POINT,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Resource Attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addResourceAttributePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Extension_resourceAttribute_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Extension_resourceAttribute_feature", "_UI_Extension_type"),
+ ProjectRulesPackage.Literals.EXTENSION__RESOURCE_ATTRIBUTE,
+ false,
+ false,
+ false,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Architecture Reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated NOT
+ */
+ protected void addArchitectureReferencePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(new ItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Extension_architectureReference_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Extension_architectureReference_feature", "_UI_Extension_type"),
+ ProjectRulesPackage.Literals.EXTENSION__ARCHITECTURE_REFERENCE,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null) {
+
+ @Override
+ protected Collection<?> getComboBoxObjects(Object object) {
+ return Set.copyOf(EPackage.Registry.INSTANCE.keySet()).stream()
+ .map(EPackage.Registry.INSTANCE::getEPackage)
+ .filter(Objects::nonNull)
+ .map(EPackage::getEClassifiers).flatMap(Collection::stream)
+ .filter(EClass.class::isInstance).map(EClass.class::cast)
+ // References only from architecture model classes
+ .filter(this::isArchitectureClass)
+ .map(EClass::getEReferences).flatMap(Collection::stream)
+ // Cross-references only
+ .filter(not(EReference::isContainment).and(not(EReference::isContainer)))
+ .collect(Collectors.toList());
+ }
+
+ private boolean isArchitectureClass(EClass eClass) {
+ boolean result = eClass.getEPackage() == ArchitecturePackage.eINSTANCE;
+
+ if (!result) {
+ result = eClass.getEAllSuperTypes().stream().anyMatch(supertype -> supertype.getEPackage() == ArchitecturePackage.eINSTANCE);
+ }
+
+ return result;
+ }
+
+ @Override
+ public IItemLabelProvider getLabelProvider(Object object) {
+ final IItemLabelProvider delegate = super.getLabelProvider(object);
+
+ return new IItemLabelProvider() {
+
+ @Override
+ public String getText(Object object) {
+ EReference reference = (EReference) object;
+ EClass owner = reference.getEContainingClass();
+ EPackage package_ = owner.getEPackage();
+
+ return getString("_UI_EReference_label", new Object[] { delegate.getText(reference), owner.getName(), package_.getNsURI() });
+ }
+
+ @Override
+ public Object getImage(Object object) {
+ return delegate.getImage(object);
+ }
+
+ };
+ }
+
+ });
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ProjectRulesPackage.Literals.EXTENSION__ELEMENT);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns Extension.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Extension"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage() {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Extension) object).getExtensionPoint();
+ return label == null || label.length() == 0 ? getString("_UI_Extension_type") : getString("_UI_Extension_type") + " " + label;
+ }
+
+
+ /**
+ * 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(Extension.class)) {
+ case ProjectRulesPackage.EXTENSION__EXTENSION_POINT:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ProjectRulesPackage.EXTENSION__ELEMENT:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ 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);
+
+ newChildDescriptors.add(createChildParameter(ProjectRulesPackage.Literals.EXTENSION__ELEMENT,
+ ProjectRulesFactory.eINSTANCE.createExtensionElement()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return Activator.INSTANCE;
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionModelNodeItemProvider.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionModelNodeItemProvider.java
new file mode 100644
index 00000000000..15293e94872
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ExtensionModelNodeItemProvider.java
@@ -0,0 +1,199 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.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.toolsmiths.validation.common.internal.ui.Activator;
+
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ExtensionModelNodeItemProvider
+ 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 ExtensionModelNodeItemProvider(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);
+
+ addNamePropertyDescriptor(object);
+ addValidatablePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ExtensionModelNode_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ExtensionModelNode_name_feature", "_UI_ExtensionModelNode_type"),
+ ProjectRulesPackage.Literals.EXTENSION_MODEL_NODE__NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Validatable feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addValidatablePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ExtensionModelNode_validatable_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ExtensionModelNode_validatable_feature", "_UI_ExtensionModelNode_type"),
+ ProjectRulesPackage.Literals.EXTENSION_MODEL_NODE__VALIDATABLE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage() {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ExtensionModelNode) object).getName();
+ return label == null || label.length() == 0 ? getString("_UI_ExtensionModelNode_type") : getString("_UI_ExtensionModelNode_type") + " " + label;
+ }
+
+
+ /**
+ * 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(ExtensionModelNode.class)) {
+ case ProjectRulesPackage.EXTENSION_MODEL_NODE__NAME:
+ case ProjectRulesPackage.EXTENSION_MODEL_NODE__VALIDATABLE:
+ 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 Activator.INSTANCE;
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/FeaturePathItemProvider.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/FeaturePathItemProvider.java
new file mode 100644
index 00000000000..057e4d62a85
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/FeaturePathItemProvider.java
@@ -0,0 +1,157 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.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.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.FeaturePath;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.FeaturePath} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class FeaturePathItemProvider extends ValueItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public FeaturePathItemProvider(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);
+
+ addPathPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Path feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addPathPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_FeaturePath_path_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_FeaturePath_path_feature", "_UI_FeaturePath_type"),
+ ProjectRulesPackage.Literals.FEATURE_PATH__PATH,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns FeaturePath.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/FeaturePath"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage() {
+ return true;
+ }
+
+ /**
+ * 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_FeaturePath_type");
+ }
+
+
+ /**
+ * 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(FeaturePath.class)) {
+ case ProjectRulesPackage.FEATURE_PATH__PATH:
+ 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);
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/LiteralStringItemProvider.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/LiteralStringItemProvider.java
new file mode 100644
index 00000000000..5a6e5908e0e
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/LiteralStringItemProvider.java
@@ -0,0 +1,158 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.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.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.LiteralString;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.LiteralString} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class LiteralStringItemProvider extends ValueItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public LiteralStringItemProvider(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);
+
+ addValuePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * 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_LiteralString_value_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_LiteralString_value_feature", "_UI_LiteralString_type"),
+ ProjectRulesPackage.Literals.LITERAL_STRING__VALUE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns LiteralString.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/LiteralString"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage() {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((LiteralString) object).getValue();
+ return label == null || label.length() == 0 ? getString("_UI_LiteralString_type") : getString("_UI_LiteralString_type") + " " + label;
+ }
+
+
+ /**
+ * 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(LiteralString.class)) {
+ case ProjectRulesPackage.LITERAL_STRING__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);
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/OpaqueValueItemProvider.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/OpaqueValueItemProvider.java
new file mode 100644
index 00000000000..5a78e1995f3
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/OpaqueValueItemProvider.java
@@ -0,0 +1,170 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.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.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.OpaqueValue;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.OpaqueValue} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class OpaqueValueItemProvider extends ValueItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public OpaqueValueItemProvider(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);
+
+ addTextPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Text feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addTextPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_OpaqueValue_text_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_OpaqueValue_text_feature", "_UI_OpaqueValue_type"),
+ ProjectRulesPackage.Literals.OPAQUE_VALUE__TEXT,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns OpaqueValue.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/OpaqueValue"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage() {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((OpaqueValue) object).getText();
+ return label == null || label.length() == 0 ? getString("_UI_OpaqueValue_type") : getString("_UI_OpaqueValue_type") + " " + label;
+ }
+
+
+ /**
+ * 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
+ */
+ public void notifyChangedGen(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(OpaqueValue.class)) {
+ case ProjectRulesPackage.OPAQUE_VALUE__TEXT:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ @Override
+ public void notifyChanged(Notification notification) {
+ notifyChangedGen(notification);
+
+ switch (notification.getFeatureID(OpaqueValue.class)) {
+ case ProjectRulesPackage.OPAQUE_VALUE__TEXT:
+ OpaqueValue notifier = (OpaqueValue) notification.getNotifier();
+ if (notifier.eContainer() != null) {
+ fireNotifyChanged(new ViewerNotification(notification, notifier.eContainer(), false, true));
+ }
+ break;
+ }
+ }
+
+ /**
+ * 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);
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ProjectDescriptionItemProvider.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ProjectDescriptionItemProvider.java
new file mode 100644
index 00000000000..7be41af3c4c
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ProjectDescriptionItemProvider.java
@@ -0,0 +1,321 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.command.Command;
+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.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.domain.EditingDomain;
+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.emf.edit.provider.ViewerNotification;
+import org.eclipse.papyrus.toolsmiths.validation.common.internal.ui.Activator;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesFactory;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage;
+import org.eclipse.uml2.common.edit.command.SubsetAddCommand;
+import org.eclipse.uml2.common.edit.command.SubsetSupersetReplaceCommand;
+import org.eclipse.uml2.common.edit.command.SubsetSupersetSetCommand;
+import org.eclipse.uml2.common.edit.command.SupersetRemoveCommand;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ProjectDescriptionItemProvider
+ 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 ProjectDescriptionItemProvider(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);
+
+ addRequiredDependencyPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Required Dependency feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addRequiredDependencyPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ProjectDescription_requiredDependency_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ProjectDescription_requiredDependency_feature", "_UI_ProjectDescription_type"),
+ ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__REQUIRED_DEPENDENCY,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__DEPENDENCY);
+ childrenFeatures.add(ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__EXTENSION);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns ProjectDescription.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ProjectDescription"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage() {
+ return true;
+ }
+
+ /**
+ * 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_ProjectDescription_type");
+ }
+
+
+ /**
+ * 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(ProjectDescription.class)) {
+ case ProjectRulesPackage.PROJECT_DESCRIPTION__REQUIRED_DEPENDENCY:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ProjectRulesPackage.PROJECT_DESCRIPTION__DEPENDENCY:
+ case ProjectRulesPackage.PROJECT_DESCRIPTION__EXTENSION:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ 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);
+
+ newChildDescriptors.add(createChildParameter(ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__DEPENDENCY,
+ ProjectRulesFactory.eINSTANCE.createDependency()));
+
+ newChildDescriptors.add(createChildParameter(ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__REQUIRED_DEPENDENCY,
+ ProjectRulesFactory.eINSTANCE.createDependency()));
+
+ newChildDescriptors.add(createChildParameter(ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__EXTENSION,
+ ProjectRulesFactory.eINSTANCE.createExtension()));
+ }
+
+ /**
+ * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getCreateChildText(Object owner, Object feature, Object child, Collection<?> selection) {
+ Object childFeature = feature;
+ Object childObject = child;
+
+ boolean qualify = childFeature == ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__DEPENDENCY ||
+ childFeature == ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__REQUIRED_DEPENDENCY;
+
+ if (qualify) {
+ return getString("_UI_CreateChild_text2",
+ new Object[] { getTypeText(childObject), getFeatureText(childFeature), getTypeText(owner) });
+ }
+ return super.getCreateChildText(owner, feature, child, selection);
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return Activator.INSTANCE;
+ }
+
+ /**
+ * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createAddCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, java.util.Collection, int)
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected Command createAddCommand(EditingDomain domain, EObject owner, EStructuralFeature feature, Collection<?> collection, int index) {
+ if (feature == ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__REQUIRED_DEPENDENCY) {
+ return new SubsetAddCommand(domain, owner, feature, new EStructuralFeature[] { ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__DEPENDENCY }, collection, index);
+ }
+ return super.createAddCommand(domain, owner, feature, collection, index);
+ }
+
+ /**
+ * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createRemoveCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, java.util.Collection)
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected Command createRemoveCommand(EditingDomain domain, EObject owner, EStructuralFeature feature, Collection<?> collection) {
+ if (feature == ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__DEPENDENCY) {
+ return new SupersetRemoveCommand(domain, owner, feature, new EStructuralFeature[] { ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__REQUIRED_DEPENDENCY }, collection);
+ }
+ return super.createRemoveCommand(domain, owner, feature, collection);
+ }
+
+ /**
+ * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createReplaceCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, java.lang.Object, java.util.Collection)
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected Command createReplaceCommand(EditingDomain domain, EObject owner, EStructuralFeature feature, Object value, Collection<?> collection) {
+ if (feature == ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__REQUIRED_DEPENDENCY) {
+ return new SubsetSupersetReplaceCommand(domain, owner, feature, new EStructuralFeature[] { ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__DEPENDENCY }, null, value, collection);
+ }
+ if (feature == ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__DEPENDENCY) {
+ return new SubsetSupersetReplaceCommand(domain, owner, feature, null, new EStructuralFeature[] { ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__REQUIRED_DEPENDENCY }, value, collection);
+ }
+ return super.createReplaceCommand(domain, owner, feature, value, collection);
+ }
+
+ /**
+ * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createSetCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, java.lang.Object)
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected Command createSetCommand(EditingDomain domain, EObject owner, EStructuralFeature feature, Object value) {
+ if (feature == ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__REQUIRED_DEPENDENCY) {
+ return new SubsetSupersetSetCommand(domain, owner, feature, new EStructuralFeature[] { ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__DEPENDENCY }, null, value);
+ }
+ if (feature == ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__DEPENDENCY) {
+ return new SubsetSupersetSetCommand(domain, owner, feature, null, new EStructuralFeature[] { ProjectRulesPackage.Literals.PROJECT_DESCRIPTION__REQUIRED_DEPENDENCY }, value);
+ }
+ return super.createSetCommand(domain, owner, feature, value);
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ProjectRulesItemProviderAdapterFactory.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ProjectRulesItemProviderAdapterFactory.java
new file mode 100644
index 00000000000..a3ac9ac68f0
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ProjectRulesItemProviderAdapterFactory.java
@@ -0,0 +1,486 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.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.toolsmiths.validation.common.projectrules.util.ProjectRulesAdapterFactory;
+
+/**
+ * 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 ProjectRulesItemProviderAdapterFactory extends ProjectRulesAdapterFactory 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 ProjectRulesItemProviderAdapterFactory() {
+ 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.toolsmiths.validation.common.projectrules.ProjectDescription} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ProjectDescriptionItemProvider projectDescriptionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createProjectDescriptionAdapter() {
+ if (projectDescriptionItemProvider == null) {
+ projectDescriptionItemProvider = new ProjectDescriptionItemProvider(this);
+ }
+
+ return projectDescriptionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected DependencyItemProvider dependencyItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createDependencyAdapter() {
+ if (dependencyItemProvider == null) {
+ dependencyItemProvider = new DependencyItemProvider(this);
+ }
+
+ return dependencyItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ExtensionItemProvider extensionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createExtensionAdapter() {
+ if (extensionItemProvider == null) {
+ extensionItemProvider = new ExtensionItemProvider(this);
+ }
+
+ return extensionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ExtensionElementItemProvider extensionElementItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createExtensionElementAdapter() {
+ if (extensionElementItemProvider == null) {
+ extensionElementItemProvider = new ExtensionElementItemProvider(this);
+ }
+
+ return extensionElementItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ExtensionAttributeItemProvider extensionAttributeItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createExtensionAttributeAdapter() {
+ if (extensionAttributeItemProvider == null) {
+ extensionAttributeItemProvider = new ExtensionAttributeItemProvider(this);
+ }
+
+ return extensionAttributeItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.LiteralString} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected LiteralStringItemProvider literalStringItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.LiteralString}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createLiteralStringAdapter() {
+ if (literalStringItemProvider == null) {
+ literalStringItemProvider = new LiteralStringItemProvider(this);
+ }
+
+ return literalStringItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Variable} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected VariableItemProvider variableItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Variable}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createVariableAdapter() {
+ if (variableItemProvider == null) {
+ variableItemProvider = new VariableItemProvider(this);
+ }
+
+ return variableItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Expression} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected ExpressionItemProvider expressionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Expression}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createExpressionAdapter() {
+ if (expressionItemProvider == null) {
+ expressionItemProvider = new ExpressionItemProvider(this);
+ }
+
+ return expressionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.OpaqueValue} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected OpaqueValueItemProvider opaqueValueItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.OpaqueValue}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createOpaqueValueAdapter() {
+ if (opaqueValueItemProvider == null) {
+ opaqueValueItemProvider = new OpaqueValueItemProvider(this);
+ }
+
+ return opaqueValueItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.FeaturePath} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected FeaturePathItemProvider featurePathItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.FeaturePath}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Adapter createFeaturePathAdapter() {
+ if (featurePathItemProvider == null) {
+ featurePathItemProvider = new FeaturePathItemProvider(this);
+ }
+
+ return featurePathItemProvider;
+ }
+
+ /**
+ * 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 (projectDescriptionItemProvider != null) {
+ projectDescriptionItemProvider.dispose();
+ }
+ if (dependencyItemProvider != null) {
+ dependencyItemProvider.dispose();
+ }
+ if (extensionItemProvider != null) {
+ extensionItemProvider.dispose();
+ }
+ if (extensionElementItemProvider != null) {
+ extensionElementItemProvider.dispose();
+ }
+ if (extensionAttributeItemProvider != null) {
+ extensionAttributeItemProvider.dispose();
+ }
+ if (literalStringItemProvider != null) {
+ literalStringItemProvider.dispose();
+ }
+ if (variableItemProvider != null) {
+ variableItemProvider.dispose();
+ }
+ if (expressionItemProvider != null) {
+ expressionItemProvider.dispose();
+ }
+ if (opaqueValueItemProvider != null) {
+ opaqueValueItemProvider.dispose();
+ }
+ if (featurePathItemProvider != null) {
+ featurePathItemProvider.dispose();
+ }
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ValueItemProvider.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ValueItemProvider.java
new file mode 100644
index 00000000000..66d8bcd2c18
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/ValueItemProvider.java
@@ -0,0 +1,140 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.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.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.toolsmiths.validation.common.internal.ui.Activator;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class ValueItemProvider
+ 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 ValueItemProvider(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);
+
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage() {
+ return true;
+ }
+
+ /**
+ * 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_Value_type");
+ }
+
+
+ /**
+ * 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 Activator.INSTANCE;
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/VariableItemProvider.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/VariableItemProvider.java
new file mode 100644
index 00000000000..7e690c56340
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/provider/VariableItemProvider.java
@@ -0,0 +1,181 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.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.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Variable;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Variable} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class VariableItemProvider extends ValueItemProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public VariableItemProvider(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);
+
+ addNamePropertyDescriptor(object);
+ addOptionPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Variable_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Variable_name_feature", "_UI_Variable_type"),
+ ProjectRulesPackage.Literals.VARIABLE__NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Option feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected void addOptionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Variable_option_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Variable_option_feature", "_UI_Variable_type"),
+ ProjectRulesPackage.Literals.VARIABLE__OPTION,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns Variable.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Variable"));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected boolean shouldComposeCreationImage() {
+ return true;
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Variable) object).getName();
+ return label == null || label.length() == 0 ? getString("_UI_Variable_type") : getString("_UI_Variable_type") + " " + label;
+ }
+
+
+ /**
+ * 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(Variable.class)) {
+ case ProjectRulesPackage.VARIABLE__NAME:
+ case ProjectRulesPackage.VARIABLE__OPTION:
+ 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);
+ }
+
+}
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/.classpath b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/.classpath
index 7b137d9ab4b..1ee572c667f 100644
--- a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/.classpath
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/.classpath
@@ -3,5 +3,6 @@
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="src-gen"/>
<classpathentry kind="output" path="bin/"/>
</classpath>
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/.project b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/.project
index acc90ac99b8..e01357d668d 100644
--- a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/.project
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/.project
@@ -5,43 +5,48 @@
<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.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.dev.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>
+ <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.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.dev.release/release.xml</value>
+ </dictionary>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ds.core.builder</name>
+ <arguments>
+ </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/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/META-INF/MANIFEST.MF b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/META-INF/MANIFEST.MF
index 3516c52f8e4..14e8f5259af 100644
--- a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/META-INF/MANIFEST.MF
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/META-INF/MANIFEST.MF
@@ -22,17 +22,31 @@ Require-Bundle: org.eclipse.emf.transaction;bundle-version="[1.9.0,2.0.0)",
org.eclipse.uml2.uml;bundle-version="[5.5.0,6.0.0)";resolution:=optional,
org.eclipse.gmf.runtime.emf.type.core;bundle-version="[1.9.0,2.0.0)",
org.eclipse.papyrus.infra.services.edit;bundle-version="[4.1.0,5.0.0)",
- org.eclipse.papyrus.uml.tools.utils;bundle-version="[4.1.0,5.0.0)"
+ org.eclipse.uml2.common;bundle-version="[2.5.0,3.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.22.0,4.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.24.0,3.0.0)",
+ org.eclipse.emf.ecore.edit;bundle-version="[2.13.0,3.0.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.16.0,3.0.0)",
+ org.eclipse.papyrus.uml.tools.utils;bundle-version="[4.1.0,5.0.0)",
+ org.eclipse.uml2.types;bundle-version="[2.5.0,3.0.0)"
Export-Package: org.eclipse.papyrus.toolsmiths.validation.common,
org.eclipse.papyrus.toolsmiths.validation.common.checkers,
+ org.eclipse.papyrus.toolsmiths.validation.common.internal.messages;x-internal:=true,
org.eclipse.papyrus.toolsmiths.validation.common.command,
+ org.eclipse.papyrus.toolsmiths.validation.common.internal.services;x-internal:=true,
org.eclipse.papyrus.toolsmiths.validation.common.internal.utils;
x-friends:="org.eclipse.papyrus.toolsmiths.validation.elementtypes,
org.eclipse.papyrus.toolsmiths.validation.architecture,
org.eclipse.papyrus.toolsmiths.validation.profile,
org.eclipse.papyrus.toolsmiths.validation.newchild,
- org.eclipse.papyrus.toolsmiths.validation.properties",
+ org.eclipse.papyrus.toolsmiths.validation.properties,
+ org.eclipse.papyrus.toolsmiths.plugin.builder",
+ org.eclipse.papyrus.toolsmiths.validation.common.projectrules;x-friends:="org.eclipse.papyrus.toolsmiths.validation.common.ui,org.eclipse.papyrus.toolsmiths.plugin.builder",
+ org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl;x-friends:="org.eclipse.papyrus.toolsmiths.validation.common.ui",
+ org.eclipse.papyrus.toolsmiths.validation.common.projectrules.operations;x-friends:="org.eclipse.papyrus.toolsmiths.validation.common.ui",
+ org.eclipse.papyrus.toolsmiths.validation.common.projectrules.util;x-friends:="org.eclipse.papyrus.toolsmiths.validation.common.ui,org.eclipse.papyrus.toolsmiths.plugin.builder",
org.eclipse.papyrus.toolsmiths.validation.common.quickfix,
+ org.eclipse.papyrus.toolsmiths.validation.common.spi;x-friends:="org.eclipse.papyrus.toolsmiths.plugin.builder",
org.eclipse.papyrus.toolsmiths.validation.common.utils
Bundle-Vendor: %providerName
Bundle-ActivationPolicy: lazy
@@ -48,3 +62,4 @@ Bundle-RequiredExecutionEnvironment: JavaSE-11
Automatic-Module-Name: org.eclipse.papyrus.toolsmiths.validation.common
Import-Package: com.google.common.base;version="[30.1.0,31.0.0)",
com.google.common.collect;version="[30.1.0,31.0.0)"
+Service-Component: OSGI-INF/org.eclipse.papyrus.toolsmiths.validation.common.internal.services.DefaultProjectRulesModelProvider.xml
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/OSGI-INF/org.eclipse.papyrus.toolsmiths.validation.common.internal.services.DefaultProjectRulesModelProvider.xml b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/OSGI-INF/org.eclipse.papyrus.toolsmiths.validation.common.internal.services.DefaultProjectRulesModelProvider.xml
new file mode 100644
index 00000000000..f6830611ca1
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/OSGI-INF/org.eclipse.papyrus.toolsmiths.validation.common.internal.services.DefaultProjectRulesModelProvider.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.papyrus.toolsmiths.validation.common.internal.services.DefaultProjectRulesModelProvider">
+ <service>
+ <provide interface="org.eclipse.papyrus.toolsmiths.validation.common.spi.ProjectRulesModelProvider"/>
+ </service>
+ <reference bind="addProjectRules" cardinality="0..n" interface="org.eclipse.emf.common.util.URI" name="ProjectRules" policy="dynamic" target="(type=org.eclipse.papyrus.toolsmiths.validation.common.projectrules)" unbind="removeProjectRules"/>
+ <implementation class="org.eclipse.papyrus.toolsmiths.validation.common.internal.services.DefaultProjectRulesModelProvider"/>
+</scr:component> \ No newline at end of file
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/build.properties b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/build.properties
index 7f7e59fedce..d4632a86382 100644
--- a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/build.properties
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/build.properties
@@ -9,15 +9,18 @@
#
# Contributors:
# Nicolas FAUVERGUE (CEA LIST) nicolas.fauvergue@cea.fr - Initial API and implementation
-# Christian W. Damus - bug 570097
+# Christian W. Damus - bugs 570097, 575122
#
output.. = bin/
bin.includes = .,\
META-INF/,\
plugin.properties,\
+ plugin.xml,\
about.html,\
- icons/
+ icons/,\
+ model/,\
+ OSGI-INF/
jars.compile.order=.
src.includes = about.html
-source.. = src/
+source.. = src/,src-gen/
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/model/ProjectRules.genmodel b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/model/ProjectRules.genmodel
new file mode 100644
index 00000000000..11d09acc459
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/model/ProjectRules.genmodel
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel 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" xmlns:genmodel="http://www.eclipse.org/uml2/2.2.0/GenModel"
+ copyrightText="Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.&#xA;&#xA;All rights reserved. This program and the accompanying materials&#xA;are made available under the terms of the Eclipse Public License 2.0&#xA;which accompanies this distribution, and is available at&#xA;http://www.eclipse.org/legal/epl-2.0/&#xA;&#xA;SPDX-License-Identifier: EPL-2.0&#xA;&#xA;Contributors:&#xA; Christian W. Damus - Initial API and implementation&#xA;"
+ modelDirectory="/org.eclipse.papyrus.toolsmiths.validation.common/src-gen" creationIcons="false"
+ editDirectory="/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen" editorDirectory="/org.eclipse.papyrus.toolsmiths.validation.common.ui/src-gen"
+ modelPluginID="org.eclipse.papyrus.toolsmiths.validation.common" templateDirectory="/org.eclipse.papyrus.toolsmiths.validation.common/templates"
+ dynamicTemplates="true" modelName="ProjectRules" editPluginClass="org.eclipse.papyrus.toolsmiths.validation.common.internal.ui.Activator"
+ editorPluginClass="" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+ codeFormatting="true" commentFormatting="true" testsDirectory="/org.eclipse.papyrus.toolsmiths.validation.common.tests/src-gen"
+ importerID="org.eclipse.uml2.uml.ecore.importer" complianceLevel="11.0" copyrightFields="false"
+ editPluginID="org.eclipse.papyrus.toolsmiths.validation.common.ui" editorPluginID="org.eclipse.papyrus.toolsmiths.validation.common.ui"
+ usedGenPackages="../../org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../org.eclipse.uml2.types/model/Types.genmodel#//types"
+ operationReflection="true" importOrganizing="true" decoration="Live" cleanup="true"
+ findAction="true" revertAction="true" factoryMethods="true" pluralizedGetters="true"
+ cacheAdapterSupport="true">
+ <genAnnotations source="http://www.eclipse.org/emf/2002/GenModel/importer/org.eclipse.uml2.uml.ecore.importer">
+ <details key="OPPOSITE_ROLE_NAMES" value="IGNORE"/>
+ <details key="DUPLICATE_FEATURES" value="PROCESS"/>
+ <details key="ANNOTATION_DETAILS" value="PROCESS"/>
+ <details key="PROPERTY_DEFAULT_EXPRESSIONS" value="PROCESS"/>
+ <details key="DUPLICATE_FEATURE_INHERITANCE" value="PROCESS"/>
+ <details key="COMMENTS" value="PROCESS"/>
+ <details key="DERIVED_FEATURES" value="PROCESS"/>
+ <details key="SUPER_CLASS_ORDER" value="PROCESS"/>
+ <details key="DUPLICATE_OPERATION_INHERITANCE" value="PROCESS"/>
+ <details key="REDEFINING_OPERATIONS" value="PROCESS"/>
+ <details key="INVARIANT_CONSTRAINTS" value="PROCESS"/>
+ <details key="UNION_PROPERTIES" value="PROCESS"/>
+ <details key="DUPLICATE_OPERATIONS" value="PROCESS"/>
+ <details key="NON_API_INVARIANTS" value="PROCESS"/>
+ <details key="CAMEL_CASE_NAMES" value="IGNORE"/>
+ <details key="SUBSETTING_PROPERTIES" value="PROCESS"/>
+ <details key="OPERATION_BODIES" value="PROCESS"/>
+ <details key="ECORE_TAGGED_VALUES" value="PROCESS"/>
+ <details key="UNTYPED_PROPERTIES" value="REPORT"/>
+ <details key="REDEFINING_PROPERTIES" value="PROCESS"/>
+ <details key="INVOCATION_DELEGATES" value="PROCESS"/>
+ <details key="VALIDATION_DELEGATES" value="PROCESS"/>
+ </genAnnotations>
+ <foreignModel>ProjectRules.uml</foreignModel>
+ <genPackages xsi:type="genmodel:GenPackage" prefix="ProjectRules" basePackage="org.eclipse.papyrus.toolsmiths.validation.common"
+ resource="XMI" disposableProviderFactory="true" generateExampleClass="false"
+ multipleEditorPages="false" contentTypeIdentifier="org.eclipse.papyrus.toolsmiths.validation.common.projectrules"
+ ecorePackage="projectrules.ecore#/" operationsPackage="org.eclipse.papyrus.toolsmiths.validation.common.projectrules.operations">
+ <genEnums xsi:type="genmodel:GenEnum" typeSafeEnumCompatible="false" ecoreEnum="projectrules.ecore#//DependencyKind">
+ <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="projectrules.ecore#//DependencyKind/requireBundle"/>
+ <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="projectrules.ecore#//DependencyKind/importPackage"/>
+ </genEnums>
+ <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="projectrules.ecore#//Version"
+ create="return org.osgi.framework.Version.parseVersion(it);"/>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="projectrules.ecore#//ProjectDescription">
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference projectrules.ecore#//ProjectDescription/dependency"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="true" propertySortChoices="true"
+ ecoreFeature="ecore:EReference projectrules.ecore#//ProjectDescription/requiredDependency"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference projectrules.ecore#//ProjectDescription/extension"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="projectrules.ecore#//Dependency">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute projectrules.ecore#//Dependency/name"
+ key="true"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute projectrules.ecore#//Dependency/kind"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute projectrules.ecore#//Dependency/required"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute projectrules.ecore#//Dependency/lowerBound"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute projectrules.ecore#//Dependency/upperBound"/>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="projectrules.ecore#//Dependency/isRequired"/>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="projectrules.ecore#//Dependency/setRequired">
+ <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="projectrules.ecore#//Dependency/setRequired/newRequired"/>
+ </genOperations>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="projectrules.ecore#//Extension">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute projectrules.ecore#//Extension/extensionPoint"
+ key="true"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference projectrules.ecore#//Extension/element"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="Readonly" notify="false"
+ createChild="false" ecoreFeature="ecore:EReference projectrules.ecore#//Extension/resourceAttribute"/>
+ <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+ propertySortChoices="true" ecoreFeature="ecore:EReference projectrules.ecore#//Extension/architectureReference"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" notify="false" createChild="false"
+ ecoreFeature="ecore:EReference projectrules.ecore#//Extension/project"/>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="projectrules.ecore#//Extension/getResourceAttribute"
+ cacheAdapterScope="Resource"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="projectrules.ecore#//ExtensionElement">
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" notify="false" createChild="false"
+ ecoreFeature="ecore:EReference projectrules.ecore#//ExtensionElement/parent"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference projectrules.ecore#//ExtensionElement/element"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference projectrules.ecore#//ExtensionElement/attribute"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" notify="false" createChild="false"
+ ecoreFeature="ecore:EReference projectrules.ecore#//ExtensionElement/extension"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="projectrules.ecore#//ExtensionModelNode">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute projectrules.ecore#//ExtensionModelNode/name"
+ key="true"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute projectrules.ecore#//ExtensionModelNode/validatable"/>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="projectrules.ecore#//ExtensionModelNode/containingExtension"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="projectrules.ecore#//ExtensionAttribute">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EReference projectrules.ecore#//ExtensionAttribute/value"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" notify="false" createChild="false"
+ ecoreFeature="ecore:EReference projectrules.ecore#//ExtensionAttribute/parsedValue"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" notify="false" createChild="false"
+ ecoreFeature="ecore:EReference projectrules.ecore#//ExtensionAttribute/element"/>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="projectrules.ecore#//ExtensionAttribute/getParsedValue"
+ cacheAdapterScope="Resource"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="projectrules.ecore#//Value">
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="projectrules.ecore#//Value/stringValue"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="projectrules.ecore#//LiteralString">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute projectrules.ecore#//LiteralString/value"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="projectrules.ecore#//Variable">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute projectrules.ecore#//Variable/name"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute projectrules.ecore#//Variable/option"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="projectrules.ecore#//Expression">
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference projectrules.ecore#//Expression/value"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="projectrules.ecore#//OpaqueValue">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute projectrules.ecore#//OpaqueValue/text"/>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="projectrules.ecore#//OpaqueValue/parse"
+ cacheAdapterScope="Resource"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="projectrules.ecore#//FeaturePath">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute projectrules.ecore#//FeaturePath/path"
+ pluralizationException="true"/>
+ </genClasses>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/model/ProjectRules.uml b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/model/ProjectRules.uml
new file mode 100644
index 00000000000..cb3dfe3368e
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/model/ProjectRules.uml
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Ecore="http://www.eclipse.org/uml2/schemas/Ecore/5" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/uml2/schemas/Ecore/5 pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA">
+ <uml:Model xmi:id="_auiCUPE3EeuAxLkWehHs_Q" name="ProjectRules" URI="http://www.eclipse.org/Papyrus/toolsmiths/validation/ProjectRules">
+ <packageImport xmi:id="_LSLMkPE4EeuAxLkWehHs_Q">
+ <importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
+ </packageImport>
+ <packagedElement xmi:type="uml:Class" xmi:id="_zH6A8PE3EeuAxLkWehHs_Q" name="ProjectDescription">
+ <ownedAttribute xmi:id="_G2wUsPE5EeuAxLkWehHs_Q" name="dependency" type="_5GKvIPE3EeuAxLkWehHs_Q" aggregation="composite" association="_UiqrEPE5EeuAxLkWehHs_Q">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_IZw_kPE5EeuAxLkWehHs_Q"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_I2c7kPE5EeuAxLkWehHs_Q" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_MhBv4PE5EeuAxLkWehHs_Q" name="requiredDependency" type="_5GKvIPE3EeuAxLkWehHs_Q" aggregation="composite" subsettedProperty="_G2wUsPE5EeuAxLkWehHs_Q" association="_V1HKYPE5EeuAxLkWehHs_Q">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_MhBv4fE5EeuAxLkWehHs_Q"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_MhBv4vE5EeuAxLkWehHs_Q" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_oJfZUPE8EeuAxLkWehHs_Q" name="extension" type="_5w6qYPE5EeuAxLkWehHs_Q" aggregation="composite" association="_tdK5cPE8EeuAxLkWehHs_Q">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_pShd8PE8EeuAxLkWehHs_Q"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_oJfZUfE8EeuAxLkWehHs_Q" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_5GKvIPE3EeuAxLkWehHs_Q" name="Dependency">
+ <ownedAttribute xmi:id="_712ogPE3EeuAxLkWehHs_Q" name="name">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ZkIPQPE4EeuAxLkWehHs_Q" name="kind" type="_TwI3YPE4EeuAxLkWehHs_Q">
+ <defaultValue xmi:type="uml:InstanceValue" xmi:id="_dVm80PE4EeuAxLkWehHs_Q" type="_TwI3YPE4EeuAxLkWehHs_Q" instance="_V7XY0PE4EeuAxLkWehHs_Q"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ETiTMPq_EeuJt_v6-oxbIQ" name="required" isDerived="true">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_nGscYPE4EeuAxLkWehHs_Q" name="lowerBound" type="_jOmwgPE4EeuAxLkWehHs_Q">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_nvErAPE4EeuAxLkWehHs_Q"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_qrpJ0PE4EeuAxLkWehHs_Q" name="upperBound" type="_jOmwgPE4EeuAxLkWehHs_Q">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_qrpJ0fE4EeuAxLkWehHs_Q"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_6GK-IPE4EeuAxLkWehHs_Q" name="isRequired" visibility="protected" isQuery="true">
+ <ownedParameter xmi:id="_B2YLEPE5EeuAxLkWehHs_Q" name="result" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_UvpD0PrAEeuJt_v6-oxbIQ" name="setRequired" visibility="protected" isQuery="true">
+ <ownedParameter xmi:id="_UvpD0frAEeuJt_v6-oxbIQ" name="newRequired" effect="read">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ </ownedParameter>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Enumeration" xmi:id="_TwI3YPE4EeuAxLkWehHs_Q" name="DependencyKind">
+ <ownedLiteral xmi:id="_V7XY0PE4EeuAxLkWehHs_Q" name="requireBundle"/>
+ <ownedLiteral xmi:id="_XVX4sPE4EeuAxLkWehHs_Q" name="importPackage"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_jOmwgPE4EeuAxLkWehHs_Q" name="Version"/>
+ <packagedElement xmi:type="uml:Association" xmi:id="_UiqrEPE5EeuAxLkWehHs_Q" visibility="private" memberEnd="_G2wUsPE5EeuAxLkWehHs_Q _cSoncPE5EeuAxLkWehHs_Q">
+ <ownedEnd xmi:id="_cSoncPE5EeuAxLkWehHs_Q" name="dependentProject" type="_zH6A8PE3EeuAxLkWehHs_Q" association="_UiqrEPE5EeuAxLkWehHs_Q"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_V1HKYPE5EeuAxLkWehHs_Q" visibility="private" memberEnd="_MhBv4PE5EeuAxLkWehHs_Q _pbIHsPE5EeuAxLkWehHs_Q">
+ <ownedEnd xmi:id="_pbIHsPE5EeuAxLkWehHs_Q" name="requiringProject" type="_zH6A8PE3EeuAxLkWehHs_Q" subsettedProperty="_cSoncPE5EeuAxLkWehHs_Q" association="_V1HKYPE5EeuAxLkWehHs_Q">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_sJ0ikPE5EeuAxLkWehHs_Q"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_mY5dUP9REeui67xlkbe_Cw" name="ExtensionModelNode" isAbstract="true">
+ <ownedAttribute xmi:id="_mY5dV_9REeui67xlkbe_Cw" name="name">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_K5vVwPxtEeuJt_v6-oxbIQ" name="validatable">
+ <ownedComment xmi:id="_UIBDMPxtEeuJt_v6-oxbIQ" annotatedElement="_K5vVwPxtEeuJt_v6-oxbIQ">
+ <body>Whether the extension model node participates in project validation. If {@code false}, then it is used only in generating new extension elements in quick fixes.</body>
+ </ownedComment>
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean"/>
+ <defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_SNRNwPxtEeuJt_v6-oxbIQ" value="true"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_mY5dXP9REeui67xlkbe_Cw" name="containingExtension" isQuery="true">
+ <ownedParameter xmi:id="_mY5dXf9REeui67xlkbe_Cw" name="result" type="_5w6qYPE5EeuAxLkWehHs_Q" direction="return" effect="read"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_5w6qYPE5EeuAxLkWehHs_Q" name="Extension">
+ <ownedAttribute xmi:id="_h4IwAPE8EeuAxLkWehHs_Q" name="project" type="_zH6A8PE3EeuAxLkWehHs_Q" association="_tdK5cPE8EeuAxLkWehHs_Q">
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_h4IwAfE8EeuAxLkWehHs_Q" value="1"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_9fwToPE5EeuAxLkWehHs_Q" name="extensionPoint">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_uOsScPE7EeuAxLkWehHs_Q" name="element" type="_HwNPwPE6EeuAxLkWehHs_Q" aggregation="composite" association="_wUsVoPE7EeuAxLkWehHs_Q">
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_vh8qEPE7EeuAxLkWehHs_Q" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_MwF-kP6KEeuBRc6S9Gc6gA" name="resourceAttribute" type="_-BMXUPE6EeuAxLkWehHs_Q" isReadOnly="true" isDerived="true" association="_MwF-kv6KEeuBRc6S9Gc6gA">
+ <ownedComment xmi:id="_a1oV4P6KEeuBRc6S9Gc6gA" annotatedElement="_MwF-kP6KEeuBRc6S9Gc6gA">
+ <body>The attribute in an extension element that references the model resource to be registered. Some element in the extension description must have such an attribute in order for the extension to be matched to a tooling model and validated.</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_aLnbIPE6EeuAxLkWehHs_Q" name="architectureReference" association="_fyC4IPE6EeuAxLkWehHs_Q">
+ <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/Ecore.metamodel.uml#EReference"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_bkergPE6EeuAxLkWehHs_Q"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_5sFssP6KEeuBRc6S9Gc6gA" name="getResourceAttribute" visibility="protected" isQuery="true">
+ <ownedParameter xmi:id="_QGPlkP6LEeuBRc6S9Gc6gA" name="result" type="_-BMXUPE6EeuAxLkWehHs_Q" direction="return" effect="read"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_fyC4IPE6EeuAxLkWehHs_Q" visibility="private" memberEnd="_aLnbIPE6EeuAxLkWehHs_Q _nCu3gPE6EeuAxLkWehHs_Q">
+ <ownedEnd xmi:id="_nCu3gPE6EeuAxLkWehHs_Q" name="extension" type="_5w6qYPE5EeuAxLkWehHs_Q" association="_fyC4IPE6EeuAxLkWehHs_Q">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_oGYs4PE6EeuAxLkWehHs_Q"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_HwNPwPE6EeuAxLkWehHs_Q" name="ExtensionElement">
+ <generalization xmi:id="_bD10IP9SEeui67xlkbe_Cw" general="_mY5dUP9REeui67xlkbe_Cw"/>
+ <ownedAttribute xmi:id="_2PpRIPE7EeuAxLkWehHs_Q" name="extension" type="_5w6qYPE5EeuAxLkWehHs_Q" association="_wUsVoPE7EeuAxLkWehHs_Q">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_9Vy0cPE7EeuAxLkWehHs_Q"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_2PpRIfE7EeuAxLkWehHs_Q" value="1"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="__Z9EkPE7EeuAxLkWehHs_Q" name="parent" type="_HwNPwPE6EeuAxLkWehHs_Q" association="_Lp6aUPE8EeuAxLkWehHs_Q">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="__Z9EkfE7EeuAxLkWehHs_Q"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="__Z9EkvE7EeuAxLkWehHs_Q" value="1"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_WO3cQPE7EeuAxLkWehHs_Q" name="attribute" type="_-BMXUPE6EeuAxLkWehHs_Q" aggregation="composite" association="_bqCrgPE7EeuAxLkWehHs_Q">
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_YA8d4PE7EeuAxLkWehHs_Q" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_5irIIPE7EeuAxLkWehHs_Q" name="element" type="_HwNPwPE6EeuAxLkWehHs_Q" aggregation="composite" association="_Lp6aUPE8EeuAxLkWehHs_Q">
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_5irIIfE7EeuAxLkWehHs_Q" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_-BMXUPE6EeuAxLkWehHs_Q" name="ExtensionAttribute">
+ <generalization xmi:id="_eB0oMP9SEeui67xlkbe_Cw" general="_mY5dUP9REeui67xlkbe_Cw"/>
+ <ownedAttribute xmi:id="_MLyNwPE7EeuAxLkWehHs_Q" name="element" type="_HwNPwPE6EeuAxLkWehHs_Q" association="_bqCrgPE7EeuAxLkWehHs_Q"/>
+ <ownedAttribute xmi:id="_FeM7cPE7EeuAxLkWehHs_Q" name="value" type="_DYoWEPE7EeuAxLkWehHs_Q" aggregation="composite" association="_z-rCIPE9EeuAxLkWehHs_Q"/>
+ <ownedAttribute xmi:id="_znE5cP6OEeuBRc6S9Gc6gA" name="parsedValue" type="_DYoWEPE7EeuAxLkWehHs_Q" isReadOnly="true" isDerived="true">
+ <ownedComment xmi:id="_8FG1sP6OEeuBRc6S9Gc6gA" annotatedElement="_znE5cP6OEeuBRc6S9Gc6gA">
+ <body>My {@linkplain #getValue() value} parsed as an expression if it is modeled as an {@link OpaqueValue}, otherwise just my {@code value} as it is.</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_K0D9cP6PEeuBRc6S9Gc6gA" name="getParsedValue" visibility="protected" isQuery="true">
+ <ownedParameter xmi:id="_K0D9cf6PEeuBRc6S9Gc6gA" name="result" type="_DYoWEPE7EeuAxLkWehHs_Q" direction="return" effect="read"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_DYoWEPE7EeuAxLkWehHs_Q" name="Value" isAbstract="true">
+ <ownedComment xmi:id="_FIPgAPRQEeuuEuniEKxyXQ" annotatedElement="_DYoWEPE7EeuAxLkWehHs_Q">
+ <body>Abstraction of a value to generate or compare for validation of an attribute of an extension element.</body>
+ </ownedComment>
+ <ownedOperation xmi:id="_0UTJUPE8EeuAxLkWehHs_Q" name="stringValue" isAbstract="true" isQuery="true">
+ <ownedParameter xmi:id="_IiwC0PFBEeuAxLkWehHs_Q" name="result" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedParameter>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_tdK5cPE8EeuAxLkWehHs_Q" visibility="private" memberEnd="_oJfZUPE8EeuAxLkWehHs_Q _h4IwAPE8EeuAxLkWehHs_Q"/>
+ <packagedElement xmi:type="uml:Association" xmi:id="_wUsVoPE7EeuAxLkWehHs_Q" visibility="private" memberEnd="_uOsScPE7EeuAxLkWehHs_Q _2PpRIPE7EeuAxLkWehHs_Q"/>
+ <packagedElement xmi:type="uml:Association" xmi:id="_bqCrgPE7EeuAxLkWehHs_Q" visibility="private" memberEnd="_WO3cQPE7EeuAxLkWehHs_Q _MLyNwPE7EeuAxLkWehHs_Q"/>
+ <packagedElement xmi:type="uml:Association" xmi:id="_Lp6aUPE8EeuAxLkWehHs_Q" visibility="private" memberEnd="_5irIIPE7EeuAxLkWehHs_Q __Z9EkPE7EeuAxLkWehHs_Q"/>
+ <packagedElement xmi:type="uml:Association" xmi:id="_z-rCIPE9EeuAxLkWehHs_Q" visibility="private" memberEnd="_FeM7cPE7EeuAxLkWehHs_Q _4q6HwPE9EeuAxLkWehHs_Q">
+ <ownedEnd xmi:id="_4q6HwPE9EeuAxLkWehHs_Q" name="attribute" type="_-BMXUPE6EeuAxLkWehHs_Q" association="_z-rCIPE9EeuAxLkWehHs_Q">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_G0CloPE-EeuAxLkWehHs_Q"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_8PdCAPE8EeuAxLkWehHs_Q" name="LiteralString">
+ <ownedComment xmi:id="_Lim7YPRQEeuuEuniEKxyXQ" annotatedElement="_8PdCAPE8EeuAxLkWehHs_Q">
+ <body>A fixed string value for an attribute.</body>
+ </ownedComment>
+ <generalization xmi:id="_FNXYMPE9EeuAxLkWehHs_Q" general="_DYoWEPE7EeuAxLkWehHs_Q"/>
+ <ownedAttribute xmi:id="_8PdCAfE8EeuAxLkWehHs_Q" name="value">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_8PdCAvE8EeuAxLkWehHs_Q" name="stringValue" isQuery="true" redefinedOperation="_0UTJUPE8EeuAxLkWehHs_Q">
+ <ownedParameter xmi:id="_8PdCA_E8EeuAxLkWehHs_Q" name="result" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedParameter>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_Vu_XcPE9EeuAxLkWehHs_Q" name="Variable">
+ <ownedComment xmi:id="_OOTFkPRQEeuuEuniEKxyXQ" annotatedElement="_Vu_XcPE9EeuAxLkWehHs_Q">
+ <body>A variable value for an attribute that is substituted at run-time based on the project and/or model context.</body>
+ </ownedComment>
+ <generalization xmi:id="_Vu_XcfE9EeuAxLkWehHs_Q" general="_DYoWEPE7EeuAxLkWehHs_Q"/>
+ <ownedAttribute xmi:id="_Vu_XcvE9EeuAxLkWehHs_Q" name="name">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_Z8LJkPE9EeuAxLkWehHs_Q" name="option">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_caAd8PE9EeuAxLkWehHs_Q"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_cyVeYPE9EeuAxLkWehHs_Q" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_Vu_Xc_E9EeuAxLkWehHs_Q" name="stringValue" isQuery="true" redefinedOperation="_0UTJUPE8EeuAxLkWehHs_Q">
+ <ownedParameter xmi:id="_GCFc4PFBEeuAxLkWehHs_Q" name="result" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedParameter>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_efWZ0PE9EeuAxLkWehHs_Q" name="Expression">
+ <ownedComment xmi:id="_Sf-WIPRQEeuuEuniEKxyXQ" annotatedElement="_efWZ0PE9EeuAxLkWehHs_Q">
+ <body>A complex value that combines literal and variable text together.</body>
+ </ownedComment>
+ <generalization xmi:id="_efWZ0fE9EeuAxLkWehHs_Q" general="_DYoWEPE7EeuAxLkWehHs_Q"/>
+ <ownedAttribute xmi:id="_efWZ0vE9EeuAxLkWehHs_Q" name="value" type="_DYoWEPE7EeuAxLkWehHs_Q" isOrdered="true" aggregation="composite" association="_8koyYPE9EeuAxLkWehHs_Q">
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_hK8dYPE9EeuAxLkWehHs_Q" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_efWZ1vE9EeuAxLkWehHs_Q" name="stringValue" isQuery="true" redefinedOperation="_0UTJUPE8EeuAxLkWehHs_Q">
+ <ownedParameter xmi:id="_HHb7YPFBEeuAxLkWehHs_Q" name="result" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedParameter>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_8koyYPE9EeuAxLkWehHs_Q" visibility="private" memberEnd="_efWZ0vE9EeuAxLkWehHs_Q _8koyYfE9EeuAxLkWehHs_Q">
+ <ownedEnd xmi:id="_8koyYfE9EeuAxLkWehHs_Q" name="expression" type="_efWZ0PE9EeuAxLkWehHs_Q" association="_8koyYPE9EeuAxLkWehHs_Q">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_CqIJ8PE-EeuAxLkWehHs_Q"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_PAE9QPRPEeuuEuniEKxyXQ" name="OpaqueValue">
+ <ownedComment xmi:id="_4svooPRPEeuuEuniEKxyXQ" annotatedElement="_PAE9QPRPEeuuEuniEKxyXQ">
+ <body>An opaque value primarily used for user input of complex expressions as text. At run-time, opaque values are parsed to generate structured expressions for evaluation.</body>
+ </ownedComment>
+ <generalization xmi:id="_PAE9QfRPEeuuEuniEKxyXQ" general="_DYoWEPE7EeuAxLkWehHs_Q"/>
+ <ownedAttribute xmi:id="_PAE9QvRPEeuuEuniEKxyXQ" name="text">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_PAE9Q_RPEeuuEuniEKxyXQ" name="stringValue" isQuery="true" redefinedOperation="_0UTJUPE8EeuAxLkWehHs_Q">
+ <ownedParameter xmi:id="_PAE9RPRPEeuuEuniEKxyXQ" name="result" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_aGM9IPRPEeuuEuniEKxyXQ" name="parse" isQuery="true">
+ <ownedComment xmi:id="_teAfUPRPEeuuEuniEKxyXQ" annotatedElement="_aGM9IPRPEeuuEuniEKxyXQ">
+ <body>Parse my opaque text as a structured value expression.</body>
+ </ownedComment>
+ <ownedParameter xmi:id="_eY3FIPRPEeuuEuniEKxyXQ" name="result" type="_DYoWEPE7EeuAxLkWehHs_Q" direction="return"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_KUa5wPrOEeuJt_v6-oxbIQ" name="FeaturePath">
+ <ownedComment xmi:id="_KUa5wfrOEeuJt_v6-oxbIQ" annotatedElement="_KUa5wPrOEeuJt_v6-oxbIQ">
+ <body>A feature-path expression that is evaluated at run-time on the root element of the context model.</body>
+ </ownedComment>
+ <generalization xmi:id="_KUa5wvrOEeuJt_v6-oxbIQ" general="_DYoWEPE7EeuAxLkWehHs_Q"/>
+ <ownedAttribute xmi:id="_KUa5w_rOEeuJt_v6-oxbIQ" name="path" isOrdered="true" isUnique="false">
+ <ownedComment xmi:id="_S3XLMPrOEeuJt_v6-oxbIQ" annotatedElement="_KUa5w_rOEeuJt_v6-oxbIQ">
+ <body>The path of feature names to follow. Indexing multi-valued features is not supported; the first value (if any) is taken.</body>
+ </ownedComment>
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_SAvsQPrOEeuJt_v6-oxbIQ" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_KUa5x_rOEeuJt_v6-oxbIQ" name="stringValue" isQuery="true" redefinedOperation="_0UTJUPE8EeuAxLkWehHs_Q">
+ <ownedParameter xmi:id="_KUa5yPrOEeuJt_v6-oxbIQ" name="result" direction="return">
+ <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String"/>
+ </ownedParameter>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_MwF-kv6KEeuBRc6S9Gc6gA" visibility="private" memberEnd="_MwF-kP6KEeuBRc6S9Gc6gA _CAfy4P6LEeuBRc6S9Gc6gA">
+ <ownedEnd xmi:id="_CAfy4P6LEeuBRc6S9Gc6gA" type="_5w6qYPE5EeuAxLkWehHs_Q" association="_MwF-kv6KEeuBRc6S9Gc6gA">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_DnHycP6LEeuBRc6S9Gc6gA"/>
+ </ownedEnd>
+ </packagedElement>
+ <profileApplication xmi:id="_kTrXoPE3EeuAxLkWehHs_Q">
+ <eAnnotations xmi:id="_kTua8PE3EeuAxLkWehHs_Q" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA"/>
+ </eAnnotations>
+ <appliedProfile href="pathmap://UML_PROFILES/Ecore.profile.uml#_0"/>
+ </profileApplication>
+ </uml:Model>
+ <Ecore:EPackage xmi:id="_nzqskPE3EeuAxLkWehHs_Q" base_Package="_auiCUPE3EeuAxLkWehHs_Q" packageName="projectrules" nsPrefix="proj" basePackage="org.eclipse.papyrus.toolsmiths.validation.common"/>
+ <Ecore:EDataType xmi:id="_lGHEsPE4EeuAxLkWehHs_Q" instanceClassName="org.osgi.framework.Version" base_PrimitiveType="_jOmwgPE4EeuAxLkWehHs_Q"/>
+ <Ecore:EAttribute xmi:id="_wibXAPE4EeuAxLkWehHs_Q" isUnsettable="true" base_Property="_qrpJ0PE4EeuAxLkWehHs_Q"/>
+ <Ecore:EOperation xmi:id="__E3swPE4EeuAxLkWehHs_Q" base_Operation="_6GK-IPE4EeuAxLkWehHs_Q" visibility="None"/>
+ <Ecore:EOperation xmi:id="_XucXQPrAEeuJt_v6-oxbIQ" base_Operation="_UvpD0PrAEeuJt_v6-oxbIQ" visibility="None"/>
+ <Ecore:EOperation xmi:id="_LcfzQP6LEeuBRc6S9Gc6gA" base_Operation="_5sFssP6KEeuBRc6S9Gc6gA" visibility="None"/>
+ <Ecore:EOperation xmi:id="_Tt8vQP6PEeuBRc6S9Gc6gA" base_Operation="_K0D9cP6PEeuBRc6S9Gc6gA" visibility="None"/>
+</xmi:XMI>
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/model/projectrules.ecore b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/model/projectrules.ecore
new file mode 100644
index 00000000000..377c86b4792
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/model/projectrules.ecore
@@ -0,0 +1,194 @@
+<?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="projectrules" nsURI="http://www.eclipse.org/Papyrus/toolsmiths/validation/ProjectRules"
+ nsPrefix="proj">
+ <eAnnotations source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <details key="originalName" value="ProjectRules"/>
+ </eAnnotations>
+ <eClassifiers xsi:type="ecore:EClass" name="ProjectDescription">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="dependency" ordered="false"
+ upperBound="-1" eType="#//Dependency" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="requiredDependency" ordered="false"
+ upperBound="-1" eType="#//Dependency">
+ <eAnnotations source="subsets" references="#//ProjectDescription/dependency"/>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="extension" ordered="false"
+ upperBound="-1" eType="#//Extension" containment="true" eOpposite="#//Extension/project"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Dependency">
+ <eOperations name="isRequired" ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="suppressedVisibility" value="true"/>
+ </eAnnotations>
+ </eOperations>
+ <eOperations name="setRequired" ordered="false" lowerBound="1">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="suppressedVisibility" value="true"/>
+ </eAnnotations>
+ <eParameters name="newRequired" ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"/>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" ordered="false" lowerBound="1"
+ eType="#//DependencyKind" defaultValueLiteral="requireBundle"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="required" ordered="false"
+ lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"
+ volatile="true" transient="true" derived="true"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="lowerBound" ordered="false"
+ eType="#//Version"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperBound" ordered="false"
+ eType="#//Version" unsettable="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EEnum" name="DependencyKind">
+ <eLiterals name="requireBundle"/>
+ <eLiterals name="importPackage" value="1"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EDataType" name="Version" instanceClassName="org.osgi.framework.Version"/>
+ <eClassifiers xsi:type="ecore:EClass" name="Extension">
+ <eOperations name="getResourceAttribute" ordered="false" lowerBound="1" eType="#//ExtensionAttribute">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="suppressedVisibility" value="true"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="extensionPoint" ordered="false"
+ lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="element" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//ExtensionElement" containment="true"
+ eOpposite="#//ExtensionElement/extension"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="resourceAttribute" ordered="false"
+ lowerBound="1" eType="#//ExtensionAttribute" changeable="false" volatile="true"
+ transient="true" derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The attribute in an extension element that references the model resource to be registered. Some element in the extension description must have such an attribute in order for the extension to be matched to a tooling model and validated."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="architectureReference"
+ ordered="false" eType="ecore:EClass ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EReference"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="project" ordered="false"
+ lowerBound="1" eType="#//ProjectDescription" eOpposite="#//ProjectDescription/extension"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ExtensionElement" eSuperTypes="#//ExtensionModelNode">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parent" ordered="false"
+ eType="#//ExtensionElement" eOpposite="#//ExtensionElement/element"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="element" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//ExtensionElement" containment="true"
+ eOpposite="#//ExtensionElement/parent"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="attribute" ordered="false"
+ lowerBound="1" upperBound="-1" eType="#//ExtensionAttribute" containment="true"
+ eOpposite="#//ExtensionAttribute/element"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="extension" ordered="false"
+ eType="#//Extension" eOpposite="#//Extension/element"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ExtensionModelNode" abstract="true">
+ <eOperations name="containingExtension" ordered="false" lowerBound="1" eType="#//Extension"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="validatable" ordered="false"
+ lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Boolean"
+ defaultValueLiteral="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Whether the extension model node participates in project validation. If {@code false}, then it is used only in generating new extension elements in quick fixes."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ExtensionAttribute" eSuperTypes="#//ExtensionModelNode">
+ <eOperations name="getParsedValue" ordered="false" lowerBound="1" eType="#//Value">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="suppressedVisibility" value="true"/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="value" ordered="false"
+ lowerBound="1" eType="#//Value" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parsedValue" ordered="false"
+ lowerBound="1" eType="#//Value" changeable="false" volatile="true" transient="true"
+ derived="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="My {@linkplain #getValue() value} parsed as an expression if it is modeled as an {@link OpaqueValue}, otherwise just my {@code value} as it is."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="element" ordered="false"
+ lowerBound="1" eType="#//ExtensionElement" eOpposite="#//ExtensionElement/attribute"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Value" abstract="true">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Abstraction of a value to generate or compare for validation of an attribute of an extension element."/>
+ </eAnnotations>
+ <eOperations name="stringValue" ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="LiteralString" eSuperTypes="#//Value">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A fixed string value for an attribute."/>
+ </eAnnotations>
+ <eAnnotations source="duplicates">
+ <contents xsi:type="ecore:EOperation" name="stringValue" ordered="false" lowerBound="1"
+ eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String">
+ <eAnnotations source="redefines" references="#//Value/stringValue"/>
+ </contents>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" ordered="false"
+ lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Variable" eSuperTypes="#//Value">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A variable value for an attribute that is substituted at run-time based on the project and/or model context."/>
+ </eAnnotations>
+ <eAnnotations source="duplicates">
+ <contents xsi:type="ecore:EOperation" name="stringValue" ordered="false" lowerBound="1"
+ eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String">
+ <eAnnotations source="redefines" references="#//Value/stringValue"/>
+ </contents>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="option" ordered="false"
+ upperBound="-1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Expression" eSuperTypes="#//Value">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A complex value that combines literal and variable text together."/>
+ </eAnnotations>
+ <eAnnotations source="duplicates">
+ <contents xsi:type="ecore:EOperation" name="stringValue" ordered="false" lowerBound="1"
+ eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String">
+ <eAnnotations source="redefines" references="#//Value/stringValue"/>
+ </contents>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="value" lowerBound="1" upperBound="-1"
+ eType="#//Value" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="OpaqueValue" eSuperTypes="#//Value">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="An opaque value primarily used for user input of complex expressions as text. At run-time, opaque values are parsed to generate structured expressions for evaluation."/>
+ </eAnnotations>
+ <eAnnotations source="duplicates">
+ <contents xsi:type="ecore:EOperation" name="stringValue" ordered="false" lowerBound="1"
+ eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String">
+ <eAnnotations source="redefines" references="#//Value/stringValue"/>
+ </contents>
+ </eAnnotations>
+ <eOperations name="parse" ordered="false" lowerBound="1" eType="#//Value">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="Parse my opaque text as a structured value expression."/>
+ </eAnnotations>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="text" ordered="false" lowerBound="1"
+ eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="FeaturePath" eSuperTypes="#//Value">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="A feature-path expression that is evaluated at run-time on the root element of the context model."/>
+ </eAnnotations>
+ <eAnnotations source="duplicates">
+ <contents xsi:type="ecore:EOperation" name="stringValue" ordered="false" lowerBound="1"
+ eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String">
+ <eAnnotations source="redefines" references="#//Value/stringValue"/>
+ </contents>
+ </eAnnotations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="path" unique="false" lowerBound="1"
+ upperBound="-1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String">
+ <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+ <details key="documentation" value="The path of feature names to follow. Indexing multi-valued features is not supported; the first value (if any) is taken."/>
+ </eAnnotations>
+ </eStructuralFeatures>
+ </eClassifiers>
+</ecore:EPackage>
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/plugin.properties b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/plugin.properties
index 1b7171f1ae7..b04e347a6bb 100644
--- a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/plugin.properties
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/plugin.properties
@@ -10,7 +10,7 @@
#
# Contributors:
# CEA LIST - Initial API and implementation
-# Christian W. Damus - bug 570097
+# Christian W. Damus - bugs 570097, 575122
#
##################################################################################
@@ -20,3 +20,5 @@ providerName = Eclipse Modeling Project
pluginDescription=This plug-in provides common methods and functions for plug-ins validation
marker.name = Papyrus Toolsmiths Plug-in Validation Problem
+
+_UI_ProjectRules_content_type = ProjectRules File
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/plugin.xml b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/plugin.xml
new file mode 100644
index 00000000000..252cf3c367c
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/plugin.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License 2.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-2.0/
+
+ SPDX-License-Identifier: EPL-2.0
+
+ Contributors:
+ Christian W. Damus - Initial API and implementation
+
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.emf.ecore.generated_package">
+ <!-- @generated ProjectRules -->
+ <package
+ uri="http://www.eclipse.org/Papyrus/toolsmiths/validation/ProjectRules"
+ class="org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage"
+ genModel="model/ProjectRules.genmodel"/>
+ </extension>
+
+ <extension point="org.eclipse.emf.ecore.content_parser">
+ <!-- @generated ProjectRules -->
+ <parser
+ contentTypeIdentifier="org.eclipse.papyrus.toolsmiths.validation.common.projectrules"
+ class="org.eclipse.papyrus.toolsmiths.validation.common.projectrules.util.ProjectRulesResourceFactoryImpl"/>
+ </extension>
+
+ <extension point="org.eclipse.core.contenttype.contentTypes">
+ <!-- @generated ProjectRules -->
+ <content-type
+ base-type="org.eclipse.emf.ecore.xmi"
+ file-extensions="projectrules"
+ id="org.eclipse.papyrus.toolsmiths.validation.common.projectrules"
+ name="%_UI_ProjectRules_content_type"
+ priority="normal">
+ <describer class="org.eclipse.emf.ecore.xmi.impl.RootXMLContentHandlerImpl$Describer">
+ <parameter name="namespace" value="http://www.eclipse.org/Papyrus/toolsmiths/validation/ProjectRules"/>
+ <parameter name="kind" value="xmi"/>
+ </describer>
+ </content-type>
+ </extension>
+
+ <extension
+ point="org.eclipse.ui.ide.markerResolution">
+ <markerResolutionGenerator
+ class="org.eclipse.papyrus.toolsmiths.validation.common.quickfix.CommonMarkerResolutionGenerator"
+ markerType="org.eclipse.papyrus.toolsmiths.plugin.builder.diagnostic">
+ </markerResolutionGenerator>
+ </extension>
+</plugin>
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Dependency.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Dependency.java
new file mode 100644
index 00000000000..2f2f1cf71de
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Dependency.java
@@ -0,0 +1,220 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.osgi.framework.Version;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Dependency</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getKind <em>Kind</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#isRequired <em>Required</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getLowerBound <em>Lower Bound</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getUpperBound <em>Upper Bound</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getDependency()
+ * @model
+ * @generated
+ */
+public interface Dependency extends EObject {
+ /**
+ * Returns the value of the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Name</em>' attribute.
+ * @see #setName(String)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getDependency_Name()
+ * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getName <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Name</em>' attribute.
+ * @see #getName()
+ * @generated
+ */
+ void setName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Kind</b></em>' attribute.
+ * The default value is <code>"requireBundle"</code>.
+ * The literals are from the enumeration {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.DependencyKind}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Kind</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Kind</em>' attribute.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.DependencyKind
+ * @see #setKind(DependencyKind)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getDependency_Kind()
+ * @model default="requireBundle" required="true" ordered="false"
+ * @generated
+ */
+ DependencyKind getKind();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getKind <em>Kind</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Kind</em>' attribute.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.DependencyKind
+ * @see #getKind()
+ * @generated
+ */
+ void setKind(DependencyKind value);
+
+ /**
+ * Returns the value of the '<em><b>Required</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Required</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Required</em>' attribute.
+ * @see #setRequired(boolean)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getDependency_Required()
+ * @model dataType="org.eclipse.uml2.types.Boolean" required="true" transient="true" volatile="true" derived="true" ordered="false"
+ * @generated
+ */
+ boolean isRequired();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#isRequired <em>Required</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Required</em>' attribute.
+ * @see #isRequired()
+ * @generated
+ */
+ void setRequired(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Lower Bound</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Lower Bound</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Lower Bound</em>' attribute.
+ * @see #setLowerBound(Version)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getDependency_LowerBound()
+ * @model dataType="org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Version" ordered="false"
+ * @generated
+ */
+ Version getLowerBound();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getLowerBound <em>Lower Bound</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Lower Bound</em>' attribute.
+ * @see #getLowerBound()
+ * @generated
+ */
+ void setLowerBound(Version value);
+
+ /**
+ * Returns the value of the '<em><b>Upper Bound</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Upper Bound</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Upper Bound</em>' attribute.
+ * @see #isSetUpperBound()
+ * @see #unsetUpperBound()
+ * @see #setUpperBound(Version)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getDependency_UpperBound()
+ * @model unsettable="true" dataType="org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Version" ordered="false"
+ * @generated
+ */
+ Version getUpperBound();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getUpperBound <em>Upper Bound</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Upper Bound</em>' attribute.
+ * @see #isSetUpperBound()
+ * @see #unsetUpperBound()
+ * @see #getUpperBound()
+ * @generated
+ */
+ void setUpperBound(Version value);
+
+ /**
+ * Unsets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getUpperBound <em>Upper Bound</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #isSetUpperBound()
+ * @see #getUpperBound()
+ * @see #setUpperBound(Version)
+ * @generated
+ */
+ void unsetUpperBound();
+
+ /**
+ * Returns whether the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getUpperBound <em>Upper Bound</em>}' attribute is set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return whether the value of the '<em>Upper Bound</em>' attribute is set.
+ * @see #unsetUpperBound()
+ * @see #getUpperBound()
+ * @see #setUpperBound(Version)
+ * @generated
+ */
+ boolean isSetUpperBound();
+
+} // Dependency
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/DependencyKind.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/DependencyKind.java
new file mode 100644
index 00000000000..fbe30b76e1a
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/DependencyKind.java
@@ -0,0 +1,243 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Dependency Kind</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getDependencyKind()
+ * @model
+ * @generated
+ */
+public enum DependencyKind implements Enumerator {
+ /**
+ * The '<em><b>Require Bundle</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #REQUIRE_BUNDLE_VALUE
+ * @generated
+ * @ordered
+ */
+ REQUIRE_BUNDLE(0, "requireBundle", "requireBundle"),
+
+ /**
+ * The '<em><b>Import Package</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #IMPORT_PACKAGE_VALUE
+ * @generated
+ * @ordered
+ */
+ IMPORT_PACKAGE(1, "importPackage", "importPackage");
+
+ /**
+ * The '<em><b>Require Bundle</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #REQUIRE_BUNDLE
+ * @model name="requireBundle"
+ * @generated
+ * @ordered
+ */
+ public static final int REQUIRE_BUNDLE_VALUE = 0;
+
+ /**
+ * The '<em><b>Import Package</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #IMPORT_PACKAGE
+ * @model name="importPackage"
+ * @generated
+ * @ordered
+ */
+ public static final int IMPORT_PACKAGE_VALUE = 1;
+
+ /**
+ * An array of all the '<em><b>Dependency Kind</b></em>' enumerators.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private static final DependencyKind[] VALUES_ARRAY = new DependencyKind[] {
+ REQUIRE_BUNDLE,
+ IMPORT_PACKAGE,
+ };
+
+ /**
+ * A public read-only list of all the '<em><b>Dependency Kind</b></em>' enumerators.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public static final List<DependencyKind> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+ /**
+ * Returns the '<em><b>Dependency Kind</b></em>' literal with the specified literal value.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param literal
+ * the literal.
+ * @return the matching enumerator or <code>null</code>.
+ * @generated
+ */
+ public static DependencyKind get(String literal) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ DependencyKind result = VALUES_ARRAY[i];
+ if (result.toString().equals(literal)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the '<em><b>Dependency Kind</b></em>' literal with the specified name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * the name.
+ * @return the matching enumerator or <code>null</code>.
+ * @generated
+ */
+ public static DependencyKind getByName(String name) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ DependencyKind result = VALUES_ARRAY[i];
+ if (result.getName().equals(name)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the '<em><b>Dependency Kind</b></em>' literal with the specified integer value.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the integer value.
+ * @return the matching enumerator or <code>null</code>.
+ * @generated
+ */
+ public static DependencyKind get(int value) {
+ switch (value) {
+ case REQUIRE_BUNDLE_VALUE:
+ return REQUIRE_BUNDLE;
+ case IMPORT_PACKAGE_VALUE:
+ return IMPORT_PACKAGE;
+ }
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private final int value;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private final String name;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private final String literal;
+
+ /**
+ * Only this class can construct instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ private DependencyKind(int value, String name, String literal) {
+ this.value = value;
+ this.name = name;
+ this.literal = literal;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getLiteral() {
+ return literal;
+ }
+
+ /**
+ * Returns the literal value of the enumerator, which is its string representation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ return literal;
+ }
+
+} // DependencyKind
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Expression.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Expression.java
new file mode 100644
index 00000000000..d5db5288bb9
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Expression.java
@@ -0,0 +1,72 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Expression</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A complex value that combines literal and variable text together.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Expression#getValues <em>Value</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExpression()
+ * @model annotation="duplicates"
+ * @generated
+ */
+public interface Expression extends Value {
+ /**
+ * Returns the value of the '<em><b>Value</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Value</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Value</em>' containment reference list.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExpression_Value()
+ * @model containment="true" required="true"
+ * @generated
+ */
+ EList<Value> getValues();
+
+ /**
+ * Creates a new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value} and appends it to the '<em><b>Value</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param eClass
+ * The Ecore class of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value} to create.
+ * @return The new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value}.
+ * @see #getValues()
+ * @generated
+ */
+ Value createValue(EClass eClass);
+
+} // Expression
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Extension.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Extension.java
new file mode 100644
index 00000000000..e85bb805efb
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Extension.java
@@ -0,0 +1,205 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Extension</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getExtensionPoint <em>Extension Point</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getElements <em>Element</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getResourceAttribute <em>Resource Attribute</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getArchitectureReference <em>Architecture Reference</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getProject <em>Project</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtension()
+ * @model
+ * @generated
+ */
+public interface Extension extends EObject {
+ /**
+ * Returns the value of the '<em><b>Extension Point</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Extension Point</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Extension Point</em>' attribute.
+ * @see #setExtensionPoint(String)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtension_ExtensionPoint()
+ * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+ * @generated
+ */
+ String getExtensionPoint();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getExtensionPoint <em>Extension Point</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Extension Point</em>' attribute.
+ * @see #getExtensionPoint()
+ * @generated
+ */
+ void setExtensionPoint(String value);
+
+ /**
+ * Returns the value of the '<em><b>Element</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getExtension <em>Extension</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Element</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Element</em>' containment reference list.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtension_Element()
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getExtension
+ * @model opposite="extension" containment="true" required="true" ordered="false"
+ * @generated
+ */
+ EList<ExtensionElement> getElements();
+
+ /**
+ * Creates a new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement}, with the specified '<em><b>Name</b></em>', and appends it to the '<em><b>Element</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' for the new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement}, or <code>null</code>.
+ * @return The new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement}.
+ * @see #getElements()
+ * @generated
+ */
+ ExtensionElement createElement(String name);
+
+ /**
+ * Retrieves the first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} with the specified '<em><b>Name</b></em>' from the '<em><b>Element</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} to retrieve, or <code>null</code>.
+ * @return The first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} with the specified '<em><b>Name</b></em>', or <code>null</code>.
+ * @see #getElements()
+ * @generated
+ */
+ ExtensionElement getElement(String name);
+
+ /**
+ * Retrieves the first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} with the specified '<em><b>Name</b></em>' from the '<em><b>Element</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} to retrieve, or <code>null</code>.
+ * @param ignoreCase
+ * Whether to ignore case in {@link java.lang.String} comparisons.
+ * @param createOnDemand
+ * Whether to create a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} on demand if not found.
+ * @return The first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} with the specified '<em><b>Name</b></em>', or <code>null</code>.
+ * @see #getElements()
+ * @generated
+ */
+ ExtensionElement getElement(String name, boolean ignoreCase, boolean createOnDemand);
+
+ /**
+ * Returns the value of the '<em><b>Resource Attribute</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * The attribute in an extension element that references the model resource to be registered. Some element in the extension description must have such an attribute in order for the extension to be matched to a tooling model and validated.
+ * <!-- end-model-doc -->
+ *
+ * @return the value of the '<em>Resource Attribute</em>' reference.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtension_ResourceAttribute()
+ * @model required="true" transient="true" changeable="false" volatile="true" derived="true" ordered="false"
+ * @generated
+ */
+ ExtensionAttribute getResourceAttribute();
+
+ /**
+ * Returns the value of the '<em><b>Architecture Reference</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Architecture Reference</em>' reference.
+ * @see #setArchitectureReference(EReference)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtension_ArchitectureReference()
+ * @model ordered="false"
+ * @generated
+ */
+ EReference getArchitectureReference();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getArchitectureReference <em>Architecture Reference</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Architecture Reference</em>' reference.
+ * @see #getArchitectureReference()
+ * @generated
+ */
+ void setArchitectureReference(EReference value);
+
+ /**
+ * Returns the value of the '<em><b>Project</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription#getExtensions <em>Extension</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Project</em>' container reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Project</em>' container reference.
+ * @see #setProject(ProjectDescription)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtension_Project()
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription#getExtensions
+ * @model opposite="extension" required="true" transient="false" ordered="false"
+ * @generated
+ */
+ ProjectDescription getProject();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getProject <em>Project</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Project</em>' container reference.
+ * @see #getProject()
+ * @generated
+ */
+ void setProject(ProjectDescription value);
+
+} // Extension
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ExtensionAttribute.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ExtensionAttribute.java
new file mode 100644
index 00000000000..ed2eb5099a9
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ExtensionAttribute.java
@@ -0,0 +1,126 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Extension Attribute</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getValue <em>Value</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getParsedValue <em>Parsed Value</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getElement <em>Element</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtensionAttribute()
+ * @model
+ * @generated
+ */
+public interface ExtensionAttribute extends ExtensionModelNode {
+ /**
+ * Returns the value of the '<em><b>Value</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Value</em>' containment reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Value</em>' containment reference.
+ * @see #setValue(Value)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtensionAttribute_Value()
+ * @model containment="true" required="true" ordered="false"
+ * @generated
+ */
+ Value getValue();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getValue <em>Value</em>}' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Value</em>' containment reference.
+ * @see #getValue()
+ * @generated
+ */
+ void setValue(Value value);
+
+ /**
+ * Creates a new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value} and sets the '<em><b>Value</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param eClass
+ * The Ecore class of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value} to create.
+ * @return The new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value}.
+ * @see #getValue()
+ * @generated
+ */
+ Value createValue(EClass eClass);
+
+ /**
+ * Returns the value of the '<em><b>Parsed Value</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * My {@linkplain #getValue() value} parsed as an expression if it is modeled as an {@link OpaqueValue}, otherwise just my {@code value} as it is.
+ * <!-- end-model-doc -->
+ *
+ * @return the value of the '<em>Parsed Value</em>' reference.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtensionAttribute_ParsedValue()
+ * @model required="true" transient="true" changeable="false" volatile="true" derived="true" ordered="false"
+ * @generated
+ */
+ Value getParsedValue();
+
+ /**
+ * Returns the value of the '<em><b>Element</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getAttributes <em>Attribute</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Element</em>' container reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Element</em>' container reference.
+ * @see #setElement(ExtensionElement)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtensionAttribute_Element()
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getAttributes
+ * @model opposite="attribute" required="true" transient="false" ordered="false"
+ * @generated
+ */
+ ExtensionElement getElement();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getElement <em>Element</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Element</em>' container reference.
+ * @see #getElement()
+ * @generated
+ */
+ void setElement(ExtensionElement value);
+
+} // ExtensionAttribute
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ExtensionElement.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ExtensionElement.java
new file mode 100644
index 00000000000..edaa015357a
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ExtensionElement.java
@@ -0,0 +1,225 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Extension Element</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getParent <em>Parent</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getElements <em>Element</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getAttributes <em>Attribute</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getExtension <em>Extension</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtensionElement()
+ * @model
+ * @generated
+ */
+public interface ExtensionElement extends ExtensionModelNode {
+ /**
+ * Returns the value of the '<em><b>Parent</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getElements <em>Element</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Parent</em>' container reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Parent</em>' container reference.
+ * @see #setParent(ExtensionElement)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtensionElement_Parent()
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getElements
+ * @model opposite="element" transient="false" ordered="false"
+ * @generated
+ */
+ ExtensionElement getParent();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getParent <em>Parent</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Parent</em>' container reference.
+ * @see #getParent()
+ * @generated
+ */
+ void setParent(ExtensionElement value);
+
+ /**
+ * Returns the value of the '<em><b>Element</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getParent <em>Parent</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Element</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Element</em>' containment reference list.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtensionElement_Element()
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getParent
+ * @model opposite="parent" containment="true" required="true" ordered="false"
+ * @generated
+ */
+ EList<ExtensionElement> getElements();
+
+ /**
+ * Creates a new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement}, with the specified '<em><b>Name</b></em>', and appends it to the '<em><b>Element</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' for the new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement}, or <code>null</code>.
+ * @return The new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement}.
+ * @see #getElements()
+ * @generated
+ */
+ ExtensionElement createElement(String name);
+
+ /**
+ * Retrieves the first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} with the specified '<em><b>Name</b></em>' from the '<em><b>Element</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} to retrieve, or <code>null</code>.
+ * @return The first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} with the specified '<em><b>Name</b></em>', or <code>null</code>.
+ * @see #getElements()
+ * @generated
+ */
+ ExtensionElement getElement(String name);
+
+ /**
+ * Retrieves the first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} with the specified '<em><b>Name</b></em>' from the '<em><b>Element</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} to retrieve, or <code>null</code>.
+ * @param ignoreCase
+ * Whether to ignore case in {@link java.lang.String} comparisons.
+ * @param createOnDemand
+ * Whether to create a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} on demand if not found.
+ * @return The first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement} with the specified '<em><b>Name</b></em>', or <code>null</code>.
+ * @see #getElements()
+ * @generated
+ */
+ ExtensionElement getElement(String name, boolean ignoreCase, boolean createOnDemand);
+
+ /**
+ * Returns the value of the '<em><b>Attribute</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getElement <em>Element</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Attribute</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Attribute</em>' containment reference list.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtensionElement_Attribute()
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getElement
+ * @model opposite="element" containment="true" required="true" ordered="false"
+ * @generated
+ */
+ EList<ExtensionAttribute> getAttributes();
+
+ /**
+ * Creates a new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute}, with the specified '<em><b>Name</b></em>', and appends it to the '<em><b>Attribute</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' for the new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute}, or <code>null</code>.
+ * @return The new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute}.
+ * @see #getAttributes()
+ * @generated
+ */
+ ExtensionAttribute createAttribute(String name);
+
+ /**
+ * Retrieves the first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute} with the specified '<em><b>Name</b></em>' from the '<em><b>Attribute</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute} to retrieve, or <code>null</code>.
+ * @return The first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute} with the specified '<em><b>Name</b></em>', or <code>null</code>.
+ * @see #getAttributes()
+ * @generated
+ */
+ ExtensionAttribute getAttribute(String name);
+
+ /**
+ * Retrieves the first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute} with the specified '<em><b>Name</b></em>' from the '<em><b>Attribute</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute} to retrieve, or <code>null</code>.
+ * @param ignoreCase
+ * Whether to ignore case in {@link java.lang.String} comparisons.
+ * @param createOnDemand
+ * Whether to create a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute} on demand if not found.
+ * @return The first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute} with the specified '<em><b>Name</b></em>', or <code>null</code>.
+ * @see #getAttributes()
+ * @generated
+ */
+ ExtensionAttribute getAttribute(String name, boolean ignoreCase, boolean createOnDemand);
+
+ /**
+ * Returns the value of the '<em><b>Extension</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getElements <em>Element</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Extension</em>' container reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Extension</em>' container reference.
+ * @see #setExtension(Extension)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtensionElement_Extension()
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getElements
+ * @model opposite="element" transient="false" ordered="false"
+ * @generated
+ */
+ Extension getExtension();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getExtension <em>Extension</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Extension</em>' container reference.
+ * @see #getExtension()
+ * @generated
+ */
+ void setExtension(Extension value);
+
+} // ExtensionElement
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ExtensionModelNode.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ExtensionModelNode.java
new file mode 100644
index 00000000000..bae92be7b27
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ExtensionModelNode.java
@@ -0,0 +1,100 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Extension Model Node</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode#isValidatable <em>Validatable</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtensionModelNode()
+ * @model abstract="true"
+ * @generated
+ */
+public interface ExtensionModelNode extends EObject {
+ /**
+ * Returns the value of the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Name</em>' attribute.
+ * @see #setName(String)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtensionModelNode_Name()
+ * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode#getName <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Name</em>' attribute.
+ * @see #getName()
+ * @generated
+ */
+ void setName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Validatable</b></em>' attribute.
+ * The default value is <code>"true"</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * Whether the extension model node participates in project validation. If {@code false}, then it is used only in generating new extension elements in quick fixes.
+ * <!-- end-model-doc -->
+ *
+ * @return the value of the '<em>Validatable</em>' attribute.
+ * @see #setValidatable(boolean)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getExtensionModelNode_Validatable()
+ * @model default="true" dataType="org.eclipse.uml2.types.Boolean" required="true" ordered="false"
+ * @generated
+ */
+ boolean isValidatable();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode#isValidatable <em>Validatable</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Validatable</em>' attribute.
+ * @see #isValidatable()
+ * @generated
+ */
+ void setValidatable(boolean value);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @model required="true" ordered="false"
+ * @generated
+ */
+ Extension containingExtension();
+
+} // ExtensionModelNode
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/FeaturePath.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/FeaturePath.java
new file mode 100644
index 00000000000..3798029455e
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/FeaturePath.java
@@ -0,0 +1,56 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Feature Path</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A feature-path expression that is evaluated at run-time on the root element of the context model.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.FeaturePath#getPath <em>Path</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getFeaturePath()
+ * @model annotation="duplicates"
+ * @generated
+ */
+public interface FeaturePath extends Value {
+ /**
+ * Returns the value of the '<em><b>Path</b></em>' attribute list.
+ * The list contents are of type {@link java.lang.String}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * The path of feature names to follow. Indexing multi-valued features is not supported; the first value (if any) is taken.
+ * <!-- end-model-doc -->
+ *
+ * @return the value of the '<em>Path</em>' attribute list.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getFeaturePath_Path()
+ * @model unique="false" dataType="org.eclipse.uml2.types.String" required="true"
+ * @generated
+ */
+ EList<String> getPath();
+
+} // FeaturePath
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/LiteralString.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/LiteralString.java
new file mode 100644
index 00000000000..452879a580f
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/LiteralString.java
@@ -0,0 +1,68 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Literal String</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A fixed string value for an attribute.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.LiteralString#getValue <em>Value</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getLiteralString()
+ * @model annotation="duplicates"
+ * @generated
+ */
+public interface LiteralString extends 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.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getLiteralString_Value()
+ * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+ * @generated
+ */
+ String getValue();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.LiteralString#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);
+
+} // LiteralString
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/OpaqueValue.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/OpaqueValue.java
new file mode 100644
index 00000000000..4c3b64d93b8
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/OpaqueValue.java
@@ -0,0 +1,80 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Opaque Value</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * An opaque value primarily used for user input of complex expressions as text. At run-time, opaque values are parsed to generate structured expressions for evaluation.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.OpaqueValue#getText <em>Text</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getOpaqueValue()
+ * @model annotation="duplicates"
+ * @generated
+ */
+public interface OpaqueValue extends Value {
+ /**
+ * Returns the value of the '<em><b>Text</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Text</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Text</em>' attribute.
+ * @see #setText(String)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getOpaqueValue_Text()
+ * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+ * @generated
+ */
+ String getText();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.OpaqueValue#getText <em>Text</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Text</em>' attribute.
+ * @see #getText()
+ * @generated
+ */
+ void setText(String value);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * <!-- begin-model-doc -->
+ * Parse my opaque text as a structured value expression.
+ * <!-- end-model-doc -->
+ *
+ * @model required="true" ordered="false"
+ * @generated
+ */
+ Value parse();
+
+} // OpaqueValue
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ProjectDescription.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ProjectDescription.java
new file mode 100644
index 00000000000..4fd936b9fb8
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ProjectDescription.java
@@ -0,0 +1,229 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Project Description</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription#getDependencies <em>Dependency</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription#getRequiredDependencies <em>Required Dependency</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription#getExtensions <em>Extension</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getProjectDescription()
+ * @model
+ * @generated
+ */
+public interface ProjectDescription extends EObject {
+ /**
+ * Returns the value of the '<em><b>Dependency</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Dependency</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Dependency</em>' containment reference list.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getProjectDescription_Dependency()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<Dependency> getDependencies();
+
+ /**
+ * Creates a new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency}, with the specified '<em><b>Name</b></em>', and appends it to the '<em><b>Dependency</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' for the new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency}, or <code>null</code>.
+ * @return The new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency}.
+ * @see #getDependencies()
+ * @generated
+ */
+ Dependency createDependency(String name);
+
+ /**
+ * Retrieves the first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} with the specified '<em><b>Name</b></em>' from the '<em><b>Dependency</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} to retrieve, or <code>null</code>.
+ * @return The first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} with the specified '<em><b>Name</b></em>', or <code>null</code>.
+ * @see #getDependencies()
+ * @generated
+ */
+ Dependency getDependency(String name);
+
+ /**
+ * Retrieves the first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} with the specified '<em><b>Name</b></em>' from the '<em><b>Dependency</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} to retrieve, or <code>null</code>.
+ * @param ignoreCase
+ * Whether to ignore case in {@link java.lang.String} comparisons.
+ * @param createOnDemand
+ * Whether to create a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} on demand if not found.
+ * @return The first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} with the specified '<em><b>Name</b></em>', or <code>null</code>.
+ * @see #getDependencies()
+ * @generated
+ */
+ Dependency getDependency(String name, boolean ignoreCase, boolean createOnDemand);
+
+ /**
+ * Returns the value of the '<em><b>Required Dependency</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency}.
+ * <p>
+ * This feature subsets the following features:
+ * </p>
+ * <ul>
+ * <li>'{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription#getDependencies() <em>Dependency</em>}'</li>
+ * </ul>
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Required Dependency</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>Required Dependency</em>' reference list.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getProjectDescription_RequiredDependency()
+ * @model ordered="false"
+ * annotation="subsets"
+ * @generated
+ */
+ EList<Dependency> getRequiredDependencies();
+
+ /**
+ * Creates a new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency}, with the specified '<em><b>Name</b></em>', and appends it to the '<em><b>Required Dependency</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' for the new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency}, or <code>null</code>.
+ * @return The new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency}.
+ * @see #getRequiredDependencies()
+ * @generated
+ */
+ Dependency createRequiredDependency(String name);
+
+ /**
+ * Retrieves the first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} with the specified '<em><b>Name</b></em>' from the '<em><b>Required Dependency</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} to retrieve, or <code>null</code>.
+ * @return The first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} with the specified '<em><b>Name</b></em>', or <code>null</code>.
+ * @see #getRequiredDependencies()
+ * @generated
+ */
+ Dependency getRequiredDependency(String name);
+
+ /**
+ * Retrieves the first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} with the specified '<em><b>Name</b></em>' from the '<em><b>Required Dependency</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param name
+ * The '<em><b>Name</b></em>' of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} to retrieve, or <code>null</code>.
+ * @param ignoreCase
+ * Whether to ignore case in {@link java.lang.String} comparisons.
+ * @param createOnDemand
+ * Whether to create a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} on demand if not found.
+ * @return The first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency} with the specified '<em><b>Name</b></em>', or <code>null</code>.
+ * @see #getRequiredDependencies()
+ * @generated
+ */
+ Dependency getRequiredDependency(String name, boolean ignoreCase, boolean createOnDemand);
+
+ /**
+ * Returns the value of the '<em><b>Extension</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getProject <em>Project</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Extension</em>' containment reference list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Extension</em>' containment reference list.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getProjectDescription_Extension()
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getProject
+ * @model opposite="project" containment="true" ordered="false"
+ * @generated
+ */
+ EList<Extension> getExtensions();
+
+ /**
+ * Creates a new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension}, with the specified '<em><b>Extension Point</b></em>', and appends it to the '<em><b>Extension</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param extensionPoint
+ * The '<em><b>Extension Point</b></em>' for the new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension}, or <code>null</code>.
+ * @return The new {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension}.
+ * @see #getExtensions()
+ * @generated
+ */
+ Extension createExtension(String extensionPoint);
+
+ /**
+ * Retrieves the first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension} with the specified '<em><b>Extension Point</b></em>' from the '<em><b>Extension</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param extensionPoint
+ * The '<em><b>Extension Point</b></em>' of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension} to retrieve, or <code>null</code>.
+ * @return The first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension} with the specified '<em><b>Extension Point</b></em>', or <code>null</code>.
+ * @see #getExtensions()
+ * @generated
+ */
+ Extension getExtension(String extensionPoint);
+
+ /**
+ * Retrieves the first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension} with the specified '<em><b>Extension Point</b></em>' from the '<em><b>Extension</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param extensionPoint
+ * The '<em><b>Extension Point</b></em>' of the {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension} to retrieve, or <code>null</code>.
+ * @param ignoreCase
+ * Whether to ignore case in {@link java.lang.String} comparisons.
+ * @param createOnDemand
+ * Whether to create a {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension} on demand if not found.
+ * @return The first {@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension} with the specified '<em><b>Extension Point</b></em>', or <code>null</code>.
+ * @see #getExtensions()
+ * @generated
+ */
+ Extension getExtension(String extensionPoint, boolean ignoreCase, boolean createOnDemand);
+
+} // ProjectDescription
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ProjectRulesFactory.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ProjectRulesFactory.java
new file mode 100644
index 00000000000..29201f34c10
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ProjectRulesFactory.java
@@ -0,0 +1,148 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+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.toolsmiths.validation.common.projectrules.ProjectRulesPackage
+ * @generated
+ */
+public interface ProjectRulesFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ ProjectRulesFactory eINSTANCE = org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesFactoryImpl.init();
+
+ /**
+ * Returns a new object of class '<em>Project Description</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Project Description</em>'.
+ * @generated
+ */
+ ProjectDescription createProjectDescription();
+
+ /**
+ * Returns a new object of class '<em>Dependency</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Dependency</em>'.
+ * @generated
+ */
+ Dependency createDependency();
+
+ /**
+ * Returns a new object of class '<em>Extension</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Extension</em>'.
+ * @generated
+ */
+ Extension createExtension();
+
+ /**
+ * Returns a new object of class '<em>Extension Element</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Extension Element</em>'.
+ * @generated
+ */
+ ExtensionElement createExtensionElement();
+
+ /**
+ * Returns a new object of class '<em>Extension Attribute</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Extension Attribute</em>'.
+ * @generated
+ */
+ ExtensionAttribute createExtensionAttribute();
+
+ /**
+ * Returns a new object of class '<em>Literal String</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Literal String</em>'.
+ * @generated
+ */
+ LiteralString createLiteralString();
+
+ /**
+ * Returns a new object of class '<em>Variable</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Variable</em>'.
+ * @generated
+ */
+ Variable createVariable();
+
+ /**
+ * Returns a new object of class '<em>Expression</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Expression</em>'.
+ * @generated
+ */
+ Expression createExpression();
+
+ /**
+ * Returns a new object of class '<em>Opaque Value</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Opaque Value</em>'.
+ * @generated
+ */
+ OpaqueValue createOpaqueValue();
+
+ /**
+ * Returns a new object of class '<em>Feature Path</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return a new object of class '<em>Feature Path</em>'.
+ * @generated
+ */
+ FeaturePath createFeaturePath();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the package supported by this factory.
+ * @generated
+ */
+ ProjectRulesPackage getProjectRulesPackage();
+
+} // ProjectRulesFactory
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ProjectRulesPackage.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ProjectRulesPackage.java
new file mode 100644
index 00000000000..04836b09ffd
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/ProjectRulesPackage.java
@@ -0,0 +1,2008 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EOperation;
+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.toolsmiths.validation.common.projectrules.ProjectRulesFactory
+ * @model kind="package"
+ * annotation="http://www.eclipse.org/uml2/2.0.0/UML originalName='ProjectRules'"
+ * @generated
+ */
+public interface ProjectRulesPackage extends EPackage {
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ String eNAME = "projectrules";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ String eNS_URI = "http://www.eclipse.org/Papyrus/toolsmiths/validation/ProjectRules";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ String eNS_PREFIX = "proj";
+
+ /**
+ * The package content type ID.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ String eCONTENT_TYPE = "org.eclipse.papyrus.toolsmiths.validation.common.projectrules";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ ProjectRulesPackage eINSTANCE = org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectDescriptionImpl <em>Project Description</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectDescriptionImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getProjectDescription()
+ * @generated
+ */
+ int PROJECT_DESCRIPTION = 0;
+
+ /**
+ * The feature id for the '<em><b>Dependency</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int PROJECT_DESCRIPTION__DEPENDENCY = 0;
+
+ /**
+ * The feature id for the '<em><b>Required Dependency</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int PROJECT_DESCRIPTION__REQUIRED_DEPENDENCY = 1;
+
+ /**
+ * The feature id for the '<em><b>Extension</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int PROJECT_DESCRIPTION__EXTENSION = 2;
+
+ /**
+ * The number of structural features of the '<em>Project Description</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int PROJECT_DESCRIPTION_FEATURE_COUNT = 3;
+
+ /**
+ * The number of operations of the '<em>Project Description</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int PROJECT_DESCRIPTION_OPERATION_COUNT = 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.DependencyImpl <em>Dependency</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.DependencyImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getDependency()
+ * @generated
+ */
+ int DEPENDENCY = 1;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int DEPENDENCY__NAME = 0;
+
+ /**
+ * The feature id for the '<em><b>Kind</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int DEPENDENCY__KIND = 1;
+
+ /**
+ * The feature id for the '<em><b>Required</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int DEPENDENCY__REQUIRED = 2;
+
+ /**
+ * The feature id for the '<em><b>Lower Bound</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int DEPENDENCY__LOWER_BOUND = 3;
+
+ /**
+ * The feature id for the '<em><b>Upper Bound</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int DEPENDENCY__UPPER_BOUND = 4;
+
+ /**
+ * The number of structural features of the '<em>Dependency</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int DEPENDENCY_FEATURE_COUNT = 5;
+
+ /**
+ * The operation id for the '<em>Is Required</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int DEPENDENCY___IS_REQUIRED = 0;
+
+ /**
+ * The operation id for the '<em>Set Required</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int DEPENDENCY___SET_REQUIRED__BOOLEAN = 1;
+
+ /**
+ * The number of operations of the '<em>Dependency</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int DEPENDENCY_OPERATION_COUNT = 2;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionImpl <em>Extension</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getExtension()
+ * @generated
+ */
+ int EXTENSION = 2;
+
+ /**
+ * The feature id for the '<em><b>Extension Point</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION__EXTENSION_POINT = 0;
+
+ /**
+ * The feature id for the '<em><b>Element</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION__ELEMENT = 1;
+
+ /**
+ * The feature id for the '<em><b>Resource Attribute</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION__RESOURCE_ATTRIBUTE = 2;
+
+ /**
+ * The feature id for the '<em><b>Architecture Reference</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION__ARCHITECTURE_REFERENCE = 3;
+
+ /**
+ * The feature id for the '<em><b>Project</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION__PROJECT = 4;
+
+ /**
+ * The number of structural features of the '<em>Extension</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_FEATURE_COUNT = 5;
+
+ /**
+ * The operation id for the '<em>Get Resource Attribute</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION___GET_RESOURCE_ATTRIBUTE = 0;
+
+ /**
+ * The number of operations of the '<em>Extension</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_OPERATION_COUNT = 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionModelNodeImpl <em>Extension Model Node</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionModelNodeImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getExtensionModelNode()
+ * @generated
+ */
+ int EXTENSION_MODEL_NODE = 4;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_MODEL_NODE__NAME = 0;
+
+ /**
+ * The feature id for the '<em><b>Validatable</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_MODEL_NODE__VALIDATABLE = 1;
+
+ /**
+ * The number of structural features of the '<em>Extension Model Node</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_MODEL_NODE_FEATURE_COUNT = 2;
+
+ /**
+ * The operation id for the '<em>Containing Extension</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_MODEL_NODE___CONTAINING_EXTENSION = 0;
+
+ /**
+ * The number of operations of the '<em>Extension Model Node</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_MODEL_NODE_OPERATION_COUNT = 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionElementImpl <em>Extension Element</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionElementImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getExtensionElement()
+ * @generated
+ */
+ int EXTENSION_ELEMENT = 3;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ELEMENT__NAME = EXTENSION_MODEL_NODE__NAME;
+
+ /**
+ * The feature id for the '<em><b>Validatable</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ELEMENT__VALIDATABLE = EXTENSION_MODEL_NODE__VALIDATABLE;
+
+ /**
+ * The feature id for the '<em><b>Parent</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ELEMENT__PARENT = EXTENSION_MODEL_NODE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Element</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ELEMENT__ELEMENT = EXTENSION_MODEL_NODE_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Attribute</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ELEMENT__ATTRIBUTE = EXTENSION_MODEL_NODE_FEATURE_COUNT + 2;
+
+ /**
+ * The feature id for the '<em><b>Extension</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ELEMENT__EXTENSION = EXTENSION_MODEL_NODE_FEATURE_COUNT + 3;
+
+ /**
+ * The number of structural features of the '<em>Extension Element</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ELEMENT_FEATURE_COUNT = EXTENSION_MODEL_NODE_FEATURE_COUNT + 4;
+
+ /**
+ * The operation id for the '<em>Containing Extension</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ELEMENT___CONTAINING_EXTENSION = EXTENSION_MODEL_NODE___CONTAINING_EXTENSION;
+
+ /**
+ * The number of operations of the '<em>Extension Element</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ELEMENT_OPERATION_COUNT = EXTENSION_MODEL_NODE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionAttributeImpl <em>Extension Attribute</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionAttributeImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getExtensionAttribute()
+ * @generated
+ */
+ int EXTENSION_ATTRIBUTE = 5;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ATTRIBUTE__NAME = EXTENSION_MODEL_NODE__NAME;
+
+ /**
+ * The feature id for the '<em><b>Validatable</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ATTRIBUTE__VALIDATABLE = EXTENSION_MODEL_NODE__VALIDATABLE;
+
+ /**
+ * The feature id for the '<em><b>Value</b></em>' containment reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ATTRIBUTE__VALUE = EXTENSION_MODEL_NODE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Parsed Value</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ATTRIBUTE__PARSED_VALUE = EXTENSION_MODEL_NODE_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Element</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ATTRIBUTE__ELEMENT = EXTENSION_MODEL_NODE_FEATURE_COUNT + 2;
+
+ /**
+ * The number of structural features of the '<em>Extension Attribute</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ATTRIBUTE_FEATURE_COUNT = EXTENSION_MODEL_NODE_FEATURE_COUNT + 3;
+
+ /**
+ * The operation id for the '<em>Containing Extension</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ATTRIBUTE___CONTAINING_EXTENSION = EXTENSION_MODEL_NODE___CONTAINING_EXTENSION;
+
+ /**
+ * The operation id for the '<em>Get Parsed Value</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ATTRIBUTE___GET_PARSED_VALUE = EXTENSION_MODEL_NODE_OPERATION_COUNT + 0;
+
+ /**
+ * The number of operations of the '<em>Extension Attribute</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXTENSION_ATTRIBUTE_OPERATION_COUNT = EXTENSION_MODEL_NODE_OPERATION_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ValueImpl <em>Value</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ValueImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getValue()
+ * @generated
+ */
+ int VALUE = 6;
+
+ /**
+ * The number of structural features of the '<em>Value</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int VALUE_FEATURE_COUNT = 0;
+
+ /**
+ * The operation id for the '<em>String Value</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int VALUE___STRING_VALUE = 0;
+
+ /**
+ * The number of operations of the '<em>Value</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int VALUE_OPERATION_COUNT = 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.LiteralStringImpl <em>Literal String</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.LiteralStringImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getLiteralString()
+ * @generated
+ */
+ int LITERAL_STRING = 7;
+
+ /**
+ * The feature id for the '<em><b>Value</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int LITERAL_STRING__VALUE = VALUE_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>Literal String</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int LITERAL_STRING_FEATURE_COUNT = VALUE_FEATURE_COUNT + 1;
+
+ /**
+ * The operation id for the '<em>String Value</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int LITERAL_STRING___STRING_VALUE = VALUE___STRING_VALUE;
+
+ /**
+ * The number of operations of the '<em>Literal String</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int LITERAL_STRING_OPERATION_COUNT = VALUE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.VariableImpl <em>Variable</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.VariableImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getVariable()
+ * @generated
+ */
+ int VARIABLE = 8;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE__NAME = VALUE_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Option</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE__OPTION = VALUE_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the '<em>Variable</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_FEATURE_COUNT = VALUE_FEATURE_COUNT + 2;
+
+ /**
+ * The operation id for the '<em>String Value</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE___STRING_VALUE = VALUE___STRING_VALUE;
+
+ /**
+ * The number of operations of the '<em>Variable</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int VARIABLE_OPERATION_COUNT = VALUE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExpressionImpl <em>Expression</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExpressionImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getExpression()
+ * @generated
+ */
+ int EXPRESSION = 9;
+
+ /**
+ * The feature id for the '<em><b>Value</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXPRESSION__VALUE = VALUE_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>Expression</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXPRESSION_FEATURE_COUNT = VALUE_FEATURE_COUNT + 1;
+
+ /**
+ * The operation id for the '<em>String Value</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXPRESSION___STRING_VALUE = VALUE___STRING_VALUE;
+
+ /**
+ * The number of operations of the '<em>Expression</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int EXPRESSION_OPERATION_COUNT = VALUE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.OpaqueValueImpl <em>Opaque Value</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.OpaqueValueImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getOpaqueValue()
+ * @generated
+ */
+ int OPAQUE_VALUE = 10;
+
+ /**
+ * The feature id for the '<em><b>Text</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int OPAQUE_VALUE__TEXT = VALUE_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>Opaque Value</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int OPAQUE_VALUE_FEATURE_COUNT = VALUE_FEATURE_COUNT + 1;
+
+ /**
+ * The operation id for the '<em>String Value</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int OPAQUE_VALUE___STRING_VALUE = VALUE___STRING_VALUE;
+
+ /**
+ * The operation id for the '<em>Parse</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int OPAQUE_VALUE___PARSE = VALUE_OPERATION_COUNT + 0;
+
+ /**
+ * The number of operations of the '<em>Opaque Value</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int OPAQUE_VALUE_OPERATION_COUNT = VALUE_OPERATION_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.FeaturePathImpl <em>Feature Path</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.FeaturePathImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getFeaturePath()
+ * @generated
+ */
+ int FEATURE_PATH = 11;
+
+ /**
+ * The feature id for the '<em><b>Path</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int FEATURE_PATH__PATH = VALUE_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>Feature Path</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int FEATURE_PATH_FEATURE_COUNT = VALUE_FEATURE_COUNT + 1;
+
+ /**
+ * The operation id for the '<em>String Value</em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int FEATURE_PATH___STRING_VALUE = VALUE___STRING_VALUE;
+
+ /**
+ * The number of operations of the '<em>Feature Path</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ int FEATURE_PATH_OPERATION_COUNT = VALUE_OPERATION_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.DependencyKind <em>Dependency Kind</em>}' enum.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.DependencyKind
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getDependencyKind()
+ * @generated
+ */
+ int DEPENDENCY_KIND = 12;
+
+ /**
+ * The meta object id for the '<em>Version</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.osgi.framework.Version
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getVersion()
+ * @generated
+ */
+ int VERSION = 13;
+
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription <em>Project Description</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Project Description</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription
+ * @generated
+ */
+ EClass getProjectDescription();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription#getDependencies <em>Dependency</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference list '<em>Dependency</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription#getDependencies()
+ * @see #getProjectDescription()
+ * @generated
+ */
+ EReference getProjectDescription_Dependency();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription#getRequiredDependencies <em>Required Dependency</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the reference list '<em>Required Dependency</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription#getRequiredDependencies()
+ * @see #getProjectDescription()
+ * @generated
+ */
+ EReference getProjectDescription_RequiredDependency();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription#getExtensions <em>Extension</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference list '<em>Extension</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectDescription#getExtensions()
+ * @see #getProjectDescription()
+ * @generated
+ */
+ EReference getProjectDescription_Extension();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency <em>Dependency</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Dependency</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency
+ * @generated
+ */
+ EClass getDependency();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getName()
+ * @see #getDependency()
+ * @generated
+ */
+ EAttribute getDependency_Name();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getKind <em>Kind</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Kind</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getKind()
+ * @see #getDependency()
+ * @generated
+ */
+ EAttribute getDependency_Kind();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#isRequired <em>Required</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Required</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#isRequired()
+ * @see #getDependency()
+ * @generated
+ */
+ EAttribute getDependency_Required();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getLowerBound <em>Lower Bound</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Lower Bound</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getLowerBound()
+ * @see #getDependency()
+ * @generated
+ */
+ EAttribute getDependency_LowerBound();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getUpperBound <em>Upper Bound</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Upper Bound</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#getUpperBound()
+ * @see #getDependency()
+ * @generated
+ */
+ EAttribute getDependency_UpperBound();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#isRequired() <em>Is Required</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the '<em>Is Required</em>' operation.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#isRequired()
+ * @generated
+ */
+ EOperation getDependency__IsRequired();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#setRequired(boolean) <em>Set Required</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the '<em>Set Required</em>' operation.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency#setRequired(boolean)
+ * @generated
+ */
+ EOperation getDependency__SetRequired__boolean();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension <em>Extension</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Extension</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension
+ * @generated
+ */
+ EClass getExtension();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getExtensionPoint <em>Extension Point</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Extension Point</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getExtensionPoint()
+ * @see #getExtension()
+ * @generated
+ */
+ EAttribute getExtension_ExtensionPoint();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getElements <em>Element</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference list '<em>Element</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getElements()
+ * @see #getExtension()
+ * @generated
+ */
+ EReference getExtension_Element();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getResourceAttribute <em>Resource Attribute</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the reference '<em>Resource Attribute</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getResourceAttribute()
+ * @see #getExtension()
+ * @generated
+ */
+ EReference getExtension_ResourceAttribute();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getArchitectureReference <em>Architecture Reference</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the reference '<em>Architecture Reference</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getArchitectureReference()
+ * @see #getExtension()
+ * @generated
+ */
+ EReference getExtension_ArchitectureReference();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getProject <em>Project</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the container reference '<em>Project</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getProject()
+ * @see #getExtension()
+ * @generated
+ */
+ EReference getExtension_Project();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getResourceAttribute() <em>Get Resource Attribute</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the '<em>Get Resource Attribute</em>' operation.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Extension#getResourceAttribute()
+ * @generated
+ */
+ EOperation getExtension__GetResourceAttribute();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement <em>Extension Element</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Extension Element</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement
+ * @generated
+ */
+ EClass getExtensionElement();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getParent <em>Parent</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the container reference '<em>Parent</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getParent()
+ * @see #getExtensionElement()
+ * @generated
+ */
+ EReference getExtensionElement_Parent();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getElements <em>Element</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference list '<em>Element</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getElements()
+ * @see #getExtensionElement()
+ * @generated
+ */
+ EReference getExtensionElement_Element();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getAttributes <em>Attribute</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference list '<em>Attribute</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getAttributes()
+ * @see #getExtensionElement()
+ * @generated
+ */
+ EReference getExtensionElement_Attribute();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getExtension <em>Extension</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the container reference '<em>Extension</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionElement#getExtension()
+ * @see #getExtensionElement()
+ * @generated
+ */
+ EReference getExtensionElement_Extension();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode <em>Extension Model Node</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Extension Model Node</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode
+ * @generated
+ */
+ EClass getExtensionModelNode();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode#getName()
+ * @see #getExtensionModelNode()
+ * @generated
+ */
+ EAttribute getExtensionModelNode_Name();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode#isValidatable <em>Validatable</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Validatable</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode#isValidatable()
+ * @see #getExtensionModelNode()
+ * @generated
+ */
+ EAttribute getExtensionModelNode_Validatable();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode#containingExtension() <em>Containing Extension</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the '<em>Containing Extension</em>' operation.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionModelNode#containingExtension()
+ * @generated
+ */
+ EOperation getExtensionModelNode__ContainingExtension();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute <em>Extension Attribute</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Extension Attribute</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute
+ * @generated
+ */
+ EClass getExtensionAttribute();
+
+ /**
+ * Returns the meta object for the containment reference '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getValue <em>Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference '<em>Value</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getValue()
+ * @see #getExtensionAttribute()
+ * @generated
+ */
+ EReference getExtensionAttribute_Value();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getParsedValue <em>Parsed Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the reference '<em>Parsed Value</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getParsedValue()
+ * @see #getExtensionAttribute()
+ * @generated
+ */
+ EReference getExtensionAttribute_ParsedValue();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getElement <em>Element</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the container reference '<em>Element</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getElement()
+ * @see #getExtensionAttribute()
+ * @generated
+ */
+ EReference getExtensionAttribute_Element();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getParsedValue() <em>Get Parsed Value</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the '<em>Get Parsed Value</em>' operation.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ExtensionAttribute#getParsedValue()
+ * @generated
+ */
+ EOperation getExtensionAttribute__GetParsedValue();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value <em>Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Value</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value
+ * @generated
+ */
+ EClass getValue();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value#stringValue() <em>String Value</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the '<em>String Value</em>' operation.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Value#stringValue()
+ * @generated
+ */
+ EOperation getValue__StringValue();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.LiteralString <em>Literal String</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Literal String</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.LiteralString
+ * @generated
+ */
+ EClass getLiteralString();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.LiteralString#getValue <em>Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Value</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.LiteralString#getValue()
+ * @see #getLiteralString()
+ * @generated
+ */
+ EAttribute getLiteralString_Value();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Variable <em>Variable</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Variable</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Variable
+ * @generated
+ */
+ EClass getVariable();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Variable#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Variable#getName()
+ * @see #getVariable()
+ * @generated
+ */
+ EAttribute getVariable_Name();
+
+ /**
+ * Returns the meta object for the attribute list '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Variable#getOptions <em>Option</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute list '<em>Option</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Variable#getOptions()
+ * @see #getVariable()
+ * @generated
+ */
+ EAttribute getVariable_Option();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Expression <em>Expression</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Expression</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Expression
+ * @generated
+ */
+ EClass getExpression();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Expression#getValues <em>Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the containment reference list '<em>Value</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Expression#getValues()
+ * @see #getExpression()
+ * @generated
+ */
+ EReference getExpression_Value();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.OpaqueValue <em>Opaque Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Opaque Value</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.OpaqueValue
+ * @generated
+ */
+ EClass getOpaqueValue();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.OpaqueValue#getText <em>Text</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute '<em>Text</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.OpaqueValue#getText()
+ * @see #getOpaqueValue()
+ * @generated
+ */
+ EAttribute getOpaqueValue_Text();
+
+ /**
+ * Returns the meta object for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.OpaqueValue#parse() <em>Parse</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the '<em>Parse</em>' operation.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.OpaqueValue#parse()
+ * @generated
+ */
+ EOperation getOpaqueValue__Parse();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.FeaturePath <em>Feature Path</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for class '<em>Feature Path</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.FeaturePath
+ * @generated
+ */
+ EClass getFeaturePath();
+
+ /**
+ * Returns the meta object for the attribute list '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.FeaturePath#getPath <em>Path</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for the attribute list '<em>Path</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.FeaturePath#getPath()
+ * @see #getFeaturePath()
+ * @generated
+ */
+ EAttribute getFeaturePath_Path();
+
+ /**
+ * Returns the meta object for enum '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.DependencyKind <em>Dependency Kind</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for enum '<em>Dependency Kind</em>'.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.DependencyKind
+ * @generated
+ */
+ EEnum getDependencyKind();
+
+ /**
+ * Returns the meta object for data type '{@link org.osgi.framework.Version <em>Version</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the meta object for data type '<em>Version</em>'.
+ * @see org.osgi.framework.Version
+ * @model instanceClass="org.osgi.framework.Version"
+ * @generated
+ */
+ EDataType getVersion();
+
+ /**
+ * 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
+ */
+ ProjectRulesFactory getProjectRulesFactory();
+
+ /**
+ * <!-- 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.toolsmiths.validation.common.projectrules.impl.ProjectDescriptionImpl <em>Project Description</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectDescriptionImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getProjectDescription()
+ * @generated
+ */
+ EClass PROJECT_DESCRIPTION = eINSTANCE.getProjectDescription();
+
+ /**
+ * The meta object literal for the '<em><b>Dependency</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference PROJECT_DESCRIPTION__DEPENDENCY = eINSTANCE.getProjectDescription_Dependency();
+
+ /**
+ * The meta object literal for the '<em><b>Required Dependency</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference PROJECT_DESCRIPTION__REQUIRED_DEPENDENCY = eINSTANCE.getProjectDescription_RequiredDependency();
+
+ /**
+ * The meta object literal for the '<em><b>Extension</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference PROJECT_DESCRIPTION__EXTENSION = eINSTANCE.getProjectDescription_Extension();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.DependencyImpl <em>Dependency</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.DependencyImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getDependency()
+ * @generated
+ */
+ EClass DEPENDENCY = eINSTANCE.getDependency();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute DEPENDENCY__NAME = eINSTANCE.getDependency_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Kind</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute DEPENDENCY__KIND = eINSTANCE.getDependency_Kind();
+
+ /**
+ * The meta object literal for the '<em><b>Required</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute DEPENDENCY__REQUIRED = eINSTANCE.getDependency_Required();
+
+ /**
+ * The meta object literal for the '<em><b>Lower Bound</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute DEPENDENCY__LOWER_BOUND = eINSTANCE.getDependency_LowerBound();
+
+ /**
+ * The meta object literal for the '<em><b>Upper Bound</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute DEPENDENCY__UPPER_BOUND = eINSTANCE.getDependency_UpperBound();
+
+ /**
+ * The meta object literal for the '<em><b>Is Required</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EOperation DEPENDENCY___IS_REQUIRED = eINSTANCE.getDependency__IsRequired();
+
+ /**
+ * The meta object literal for the '<em><b>Set Required</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EOperation DEPENDENCY___SET_REQUIRED__BOOLEAN = eINSTANCE.getDependency__SetRequired__boolean();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionImpl <em>Extension</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getExtension()
+ * @generated
+ */
+ EClass EXTENSION = eINSTANCE.getExtension();
+
+ /**
+ * The meta object literal for the '<em><b>Extension Point</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute EXTENSION__EXTENSION_POINT = eINSTANCE.getExtension_ExtensionPoint();
+
+ /**
+ * The meta object literal for the '<em><b>Element</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference EXTENSION__ELEMENT = eINSTANCE.getExtension_Element();
+
+ /**
+ * The meta object literal for the '<em><b>Resource Attribute</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference EXTENSION__RESOURCE_ATTRIBUTE = eINSTANCE.getExtension_ResourceAttribute();
+
+ /**
+ * The meta object literal for the '<em><b>Architecture Reference</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference EXTENSION__ARCHITECTURE_REFERENCE = eINSTANCE.getExtension_ArchitectureReference();
+
+ /**
+ * The meta object literal for the '<em><b>Project</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference EXTENSION__PROJECT = eINSTANCE.getExtension_Project();
+
+ /**
+ * The meta object literal for the '<em><b>Get Resource Attribute</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EOperation EXTENSION___GET_RESOURCE_ATTRIBUTE = eINSTANCE.getExtension__GetResourceAttribute();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionElementImpl <em>Extension Element</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionElementImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getExtensionElement()
+ * @generated
+ */
+ EClass EXTENSION_ELEMENT = eINSTANCE.getExtensionElement();
+
+ /**
+ * The meta object literal for the '<em><b>Parent</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference EXTENSION_ELEMENT__PARENT = eINSTANCE.getExtensionElement_Parent();
+
+ /**
+ * The meta object literal for the '<em><b>Element</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference EXTENSION_ELEMENT__ELEMENT = eINSTANCE.getExtensionElement_Element();
+
+ /**
+ * The meta object literal for the '<em><b>Attribute</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference EXTENSION_ELEMENT__ATTRIBUTE = eINSTANCE.getExtensionElement_Attribute();
+
+ /**
+ * The meta object literal for the '<em><b>Extension</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference EXTENSION_ELEMENT__EXTENSION = eINSTANCE.getExtensionElement_Extension();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionModelNodeImpl <em>Extension Model Node</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionModelNodeImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getExtensionModelNode()
+ * @generated
+ */
+ EClass EXTENSION_MODEL_NODE = eINSTANCE.getExtensionModelNode();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute EXTENSION_MODEL_NODE__NAME = eINSTANCE.getExtensionModelNode_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Validatable</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute EXTENSION_MODEL_NODE__VALIDATABLE = eINSTANCE.getExtensionModelNode_Validatable();
+
+ /**
+ * The meta object literal for the '<em><b>Containing Extension</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EOperation EXTENSION_MODEL_NODE___CONTAINING_EXTENSION = eINSTANCE.getExtensionModelNode__ContainingExtension();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionAttributeImpl <em>Extension Attribute</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExtensionAttributeImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getExtensionAttribute()
+ * @generated
+ */
+ EClass EXTENSION_ATTRIBUTE = eINSTANCE.getExtensionAttribute();
+
+ /**
+ * The meta object literal for the '<em><b>Value</b></em>' containment reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference EXTENSION_ATTRIBUTE__VALUE = eINSTANCE.getExtensionAttribute_Value();
+
+ /**
+ * The meta object literal for the '<em><b>Parsed Value</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference EXTENSION_ATTRIBUTE__PARSED_VALUE = eINSTANCE.getExtensionAttribute_ParsedValue();
+
+ /**
+ * The meta object literal for the '<em><b>Element</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference EXTENSION_ATTRIBUTE__ELEMENT = eINSTANCE.getExtensionAttribute_Element();
+
+ /**
+ * The meta object literal for the '<em><b>Get Parsed Value</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EOperation EXTENSION_ATTRIBUTE___GET_PARSED_VALUE = eINSTANCE.getExtensionAttribute__GetParsedValue();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ValueImpl <em>Value</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ValueImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getValue()
+ * @generated
+ */
+ EClass VALUE = eINSTANCE.getValue();
+
+ /**
+ * The meta object literal for the '<em><b>String Value</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EOperation VALUE___STRING_VALUE = eINSTANCE.getValue__StringValue();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.LiteralStringImpl <em>Literal String</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.LiteralStringImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getLiteralString()
+ * @generated
+ */
+ EClass LITERAL_STRING = eINSTANCE.getLiteralString();
+
+ /**
+ * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute LITERAL_STRING__VALUE = eINSTANCE.getLiteralString_Value();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.VariableImpl <em>Variable</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.VariableImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getVariable()
+ * @generated
+ */
+ EClass VARIABLE = eINSTANCE.getVariable();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute VARIABLE__NAME = eINSTANCE.getVariable_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Option</b></em>' attribute list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute VARIABLE__OPTION = eINSTANCE.getVariable_Option();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExpressionImpl <em>Expression</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ExpressionImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getExpression()
+ * @generated
+ */
+ EClass EXPRESSION = eINSTANCE.getExpression();
+
+ /**
+ * The meta object literal for the '<em><b>Value</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EReference EXPRESSION__VALUE = eINSTANCE.getExpression_Value();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.OpaqueValueImpl <em>Opaque Value</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.OpaqueValueImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getOpaqueValue()
+ * @generated
+ */
+ EClass OPAQUE_VALUE = eINSTANCE.getOpaqueValue();
+
+ /**
+ * The meta object literal for the '<em><b>Text</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute OPAQUE_VALUE__TEXT = eINSTANCE.getOpaqueValue_Text();
+
+ /**
+ * The meta object literal for the '<em><b>Parse</b></em>' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EOperation OPAQUE_VALUE___PARSE = eINSTANCE.getOpaqueValue__Parse();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.FeaturePathImpl <em>Feature Path</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.FeaturePathImpl
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getFeaturePath()
+ * @generated
+ */
+ EClass FEATURE_PATH = eINSTANCE.getFeaturePath();
+
+ /**
+ * The meta object literal for the '<em><b>Path</b></em>' attribute list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ EAttribute FEATURE_PATH__PATH = eINSTANCE.getFeaturePath_Path();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.DependencyKind <em>Dependency Kind</em>}' enum.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.DependencyKind
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getDependencyKind()
+ * @generated
+ */
+ EEnum DEPENDENCY_KIND = eINSTANCE.getDependencyKind();
+
+ /**
+ * The meta object literal for the '<em>Version</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see org.osgi.framework.Version
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.ProjectRulesPackageImpl#getVersion()
+ * @generated
+ */
+ EDataType VERSION = eINSTANCE.getVersion();
+
+ }
+
+} // ProjectRulesPackage
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Value.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Value.java
new file mode 100644
index 00000000000..b68fbbd5774
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Value.java
@@ -0,0 +1,43 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Value</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * Abstraction of a value to generate or compare for validation of an attribute of an extension element.
+ * <!-- end-model-doc -->
+ *
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getValue()
+ * @model abstract="true"
+ * @generated
+ */
+public interface Value extends EObject {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+ * @generated
+ */
+ String stringValue();
+
+} // Value
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Variable.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Variable.java
new file mode 100644
index 00000000000..a432355b797
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/Variable.java
@@ -0,0 +1,87 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Variable</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A variable value for an attribute that is substituted at run-time based on the project and/or model context.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Variable#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Variable#getOptions <em>Option</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getVariable()
+ * @model annotation="duplicates"
+ * @generated
+ */
+public interface Variable extends Value {
+ /**
+ * Returns the value of the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Name</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Name</em>' attribute.
+ * @see #setName(String)
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getVariable_Name()
+ * @model dataType="org.eclipse.uml2.types.String" required="true" ordered="false"
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Variable#getName <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Name</em>' attribute.
+ * @see #getName()
+ * @generated
+ */
+ void setName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Option</b></em>' attribute list.
+ * The list contents are of type {@link java.lang.String}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Option</em>' attribute list isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Option</em>' attribute list.
+ * @see org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage#getVariable_Option()
+ * @model dataType="org.eclipse.uml2.types.String" ordered="false"
+ * @generated
+ */
+ EList<String> getOptions();
+
+} // Variable
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/DependencyImpl.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/DependencyImpl.java
new file mode 100644
index 00000000000..bf4e3480785
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/DependencyImpl.java
@@ -0,0 +1,495 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.Dependency;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.DependencyKind;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.ProjectRulesPackage;
+
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.operations.DependencyOperations;
+import org.eclipse.papyrus.toolsmiths.validation.common.projectrules.util.ProjectRulesCache;
+import org.osgi.framework.Version;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Dependency</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.DependencyImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.DependencyImpl#getKind <em>Kind</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.DependencyImpl#isRequired <em>Required</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.DependencyImpl#getLowerBound <em>Lower Bound</em>}</li>
+ * <li>{@link org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl.DependencyImpl#getUpperBound <em>Upper Bound</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class DependencyImpl extends MinimalEObjectImpl.Container implements Dependency {
+ /**
+ * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected static final String NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getName()
+ * @generated
+ * @ordered
+ */
+ protected String name = NAME_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getKind() <em>Kind</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getKind()
+ * @generated
+ * @ordered
+ */
+ protected static final DependencyKind KIND_EDEFAULT = DependencyKind.REQUIRE_BUNDLE;
+
+ /**
+ * The cached value of the '{@link #getKind() <em>Kind</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getKind()
+ * @generated
+ * @ordered
+ */
+ protected DependencyKind kind = KIND_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #isRequired() <em>Required</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #isRequired()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean REQUIRED_EDEFAULT = false;
+
+ /**
+ * The default value of the '{@link #getLowerBound() <em>Lower Bound</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getLowerBound()
+ * @generated
+ * @ordered
+ */
+ protected static final Version LOWER_BOUND_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getLowerBound() <em>Lower Bound</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getLowerBound()
+ * @generated
+ * @ordered
+ */
+ protected Version lowerBound = LOWER_BOUND_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getUpperBound() <em>Upper Bound</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getUpperBound()
+ * @generated
+ * @ordered
+ */
+ protected static final Version UPPER_BOUND_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getUpperBound() <em>Upper Bound</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @see #getUpperBound()
+ * @generated
+ * @ordered
+ */
+ protected Version upperBound = UPPER_BOUND_EDEFAULT;
+
+ /**
+ * This is true if the Upper Bound attribute has been set.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ * @ordered
+ */
+ protected boolean upperBoundESet;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected DependencyImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ProjectRulesPackage.Literals.DEPENDENCY;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void setName(String newName) {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired()) {
+ eNotify(new ENotificationImpl(this, Notification.SET, ProjectRulesPackage.DEPENDENCY__NAME, oldName, name));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public DependencyKind getKind() {
+ return kind;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void setKind(DependencyKind newKind) {
+ DependencyKind oldKind = kind;
+ kind = newKind == null ? KIND_EDEFAULT : newKind;
+ if (eNotificationRequired()) {
+ eNotify(new ENotificationImpl(this, Notification.SET, ProjectRulesPackage.DEPENDENCY__KIND, oldKind, kind));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Version getLowerBound() {
+ return lowerBound;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void setLowerBound(Version newLowerBound) {
+ Version oldLowerBound = lowerBound;
+ lowerBound = newLowerBound;
+ if (eNotificationRequired()) {
+ eNotify(new ENotificationImpl(this, Notification.SET, ProjectRulesPackage.DEPENDENCY__LOWER_BOUND, oldLowerBound, lowerBound));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Version getUpperBound() {
+ return upperBound;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void setUpperBound(Version newUpperBound) {
+ Version oldUpperBound = upperBound;
+ upperBound = newUpperBound;
+ boolean oldUpperBoundESet = upperBoundESet;
+ upperBoundESet = true;
+ if (eNotificationRequired()) {
+ eNotify(new ENotificationImpl(this, Notification.SET, ProjectRulesPackage.DEPENDENCY__UPPER_BOUND, oldUpperBound, upperBound, !oldUpperBoundESet));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void unsetUpperBound() {
+ Version oldUpperBound = upperBound;
+ boolean oldUpperBoundESet = upperBoundESet;
+ upperBound = UPPER_BOUND_EDEFAULT;
+ upperBoundESet = false;
+ if (eNotificationRequired()) {
+ eNotify(new ENotificationImpl(this, Notification.UNSET, ProjectRulesPackage.DEPENDENCY__UPPER_BOUND, oldUpperBound, UPPER_BOUND_EDEFAULT, oldUpperBoundESet));
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean isSetUpperBound() {
+ return upperBoundESet;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean isRequired() {
+ return DependencyOperations.isRequired(this);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void setRequired(boolean newRequired) {
+ DependencyOperations.setRequired(this, newRequired);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ProjectRulesPackage.DEPENDENCY__NAME:
+ return getName();
+ case ProjectRulesPackage.DEPENDENCY__KIND:
+ return getKind();
+ case ProjectRulesPackage.DEPENDENCY__REQUIRED:
+ return isRequired();
+ case ProjectRulesPackage.DEPENDENCY__LOWER_BOUND:
+ return getLowerBound();
+ case ProjectRulesPackage.DEPENDENCY__UPPER_BOUND:
+ return getUpperBound();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ProjectRulesPackage.DEPENDENCY__NAME:
+ setName((String) newValue);
+ return;
+ case ProjectRulesPackage.DEPENDENCY__KIND:
+ setKind((DependencyKind) newValue);
+ return;
+ case ProjectRulesPackage.DEPENDENCY__REQUIRED:
+ setRequired((Boolean) newValue);
+ return;
+ case ProjectRulesPackage.DEPENDENCY__LOWER_BOUND:
+ setLowerBound((Version) newValue);
+ return;
+ case ProjectRulesPackage.DEPENDENCY__UPPER_BOUND:
+ setUpperBound((Version) newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ProjectRulesPackage.DEPENDENCY__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ case ProjectRulesPackage.DEPENDENCY__KIND:
+ setKind(KIND_EDEFAULT);
+ return;
+ case ProjectRulesPackage.DEPENDENCY__REQUIRED:
+ setRequired(REQUIRED_EDEFAULT);
+ return;
+ case ProjectRulesPackage.DEPENDENCY__LOWER_BOUND:
+ setLowerBound(LOWER_BOUND_EDEFAULT);
+ return;
+ case ProjectRulesPackage.DEPENDENCY__UPPER_BOUND:
+ unsetUpperBound();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ProjectRulesPackage.DEPENDENCY__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ case ProjectRulesPackage.DEPENDENCY__KIND:
+ return kind != KIND_EDEFAULT;
+ case ProjectRulesPackage.DEPENDENCY__REQUIRED:
+ return isRequired() != REQUIRED_EDEFAULT;
+ case ProjectRulesPackage.DEPENDENCY__LOWER_BOUND:
+ return LOWER_BOUND_EDEFAULT == null ? lowerBound != null : !LOWER_BOUND_EDEFAULT.equals(lowerBound);
+ case ProjectRulesPackage.DEPENDENCY__UPPER_BOUND:
+ return isSetUpperBound();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) {
+ return super.toString();
+ }
+
+ StringBuilder result = new StringBuilder(super.toString());
+ result.append(" (name: ");
+ result.append(name);
+ result.append(", kind: ");
+ result.append(kind);
+ result.append(", lowerBound: ");
+ result.append(lowerBound);
+ result.append(", upperBound: ");
+ if (upperBoundESet) {
+ result.append(upperBound);
+ } else {
+ result.append("<unset>");
+ }
+ result.append(')');
+ return result.toString();
+ }
+
+ /**
+ * Creates a new instance of the specified Ecore class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param eClass
+ * The Ecore class of the instance to create.
+ * @return The new instance.
+ * @generated
+ */
+ protected EObject create(EClass eClass) {
+ return EcoreUtil.create(eClass);
+ }
+
+ /**
+ * Retrieves the cache adapter for this '<em><b>Dependency</b></em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return The cache adapter for this '<em><b>Dependency</b></em>'.
+ * @generated
+ */
+ protected ProjectRulesCache getCacheAdapter() {
+ return ProjectRulesCache.getCacheAdapter(this);
+ }
+
+} // DependencyImpl
diff --git a/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/ExpressionImpl.java b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/ExpressionImpl.java
new file mode 100644
index 00000000000..218aeb21b7e
--- /dev/null
+++ b/plugins/toolsmiths/validation/org.eclipse.papyrus.toolsmiths.validation.common/src-gen/org/eclipse/papyrus/toolsmiths/validation/common/projectrules/impl/ExpressionImpl.java
@@ -0,0 +1,215 @@
+/**
+ * Copyright (c) 2021 Christian W. Damus, CEA LIST, and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Christian W. Damus - Initial API and implementation
+ *
+ */
+package org.eclipse.papyrus.toolsmiths.validation.common.projectrules.impl;
+
+import java.lang.reflect.InvocationTargetException;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;