Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'incoming')
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/.classpath7
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/.project28
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/META-INF/MANIFEST.MF17
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/build.properties10
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateAbstractMethodInjection_parameters_ParameterInjection.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateDescriptors_registries_RegistryDesc.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateDescriptors_serviceSets_ServiceSet.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateDescriptors_serviceSets_ServiceSetDesc.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateIdDescriptors_registries_RegistryIdDesc.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateIdDescriptors_serviceSets_ServiceSetIdDesc.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateParameterInjection_values_InjectedService.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateParameterInjection_values_OpaqueInjectedValue.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreatePropertyInjection_values_InjectedService.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreatePropertyInjection_values_OpaqueInjectedValue.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceDesc_injections_ConstructorInjection.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceDesc_injections_MethodInjection.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceDesc_injections_PropertyInjection.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceIdDesc_injections_ConstructorInjection.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceIdDesc_injections_MethodInjection.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceIdDesc_injections_PropertyInjection.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetDesc_ownedServices_AliasDesc.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetDesc_ownedServices_ServiceDesc.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetDesc_ownedServices_ServiceFactoryDesc.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetIdDesc_serviceDescriptors_AliasIdDesc.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetIdDesc_serviceDescriptors_ServiceFactoryIdDesc.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetIdDesc_serviceDescriptors_ServiceIdDesc.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSet_serviceDescriptors_AliasDesc.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSet_serviceDescriptors_ServiceDesc.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSet_serviceDescriptors_ServiceFactoryDesc.gifbin0 -> 223 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/AliasDesc.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/AliasIdDesc.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ConstructorInjection.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/Descriptors.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/IdDescriptors.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/InjectedService.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/MethodInjection.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/OpaqueInjectedValue.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ParameterInjection.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/PropertyInjection.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/RegistryDesc.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/RegistryIdDesc.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceDesc.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceFactoryDesc.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceFactoryIdDesc.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceIdDesc.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceSet.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceSetDesc.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceSetIdDesc.gifbin0 -> 129 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/plugin.properties122
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/plugin.xml21
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/AbstractMethodInjectionItemProvider.java145
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/AbstractServiceDescItemProvider.java265
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/AliasDescItemProvider.java166
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ConstructorInjectionItemProvider.java110
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/DescriptorsItemProvider.java174
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/FeatureInjectionItemProvider.java146
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/InjectedServiceItemProvider.java135
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/InjectedValueItemProvider.java146
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/MethodInjectionItemProvider.java143
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/OpaqueInjectedValueItemProvider.java143
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ParameterInjectionItemProvider.java203
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/PropertyInjectionItemProvider.java189
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/RegistryDescItemProvider.java320
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServiceDescItemProvider.java218
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServiceFactoryDescItemProvider.java110
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServiceSetDescItemProvider.java278
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServicedescriptorsEditPlugin.java89
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServicedescriptorsItemProviderAdapterFactory.java463
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/AbstractMethodInjectionItemProvider.java145
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/AbstractServiceIdDescItemProvider.java242
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/AliasIdDescItemProvider.java143
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ConstructorInjectionItemProvider.java110
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/FeatureInjectionItemProvider.java146
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/IdDescriptorsItemProvider.java174
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/InjectedServiceItemProvider.java143
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/InjectedValueItemProvider.java146
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/MethodInjectionItemProvider.java143
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/OpaqueInjectedValueItemProvider.java143
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ParameterInjectionItemProvider.java203
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/PropertyInjectionItemProvider.java189
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/RegistryIdDescItemProvider.java277
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServiceFactoryIdDescItemProvider.java110
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServiceIdDescItemProvider.java218
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServiceSetIdDescItemProvider.java256
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServicedescriptorswithidEditPlugin.java89
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServicedescriptorswithidItemProviderAdapterFactory.java463
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/.classpath7
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/.project28
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/META-INF/MANIFEST.MF18
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/build.properties10
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/obj16/ServicedescriptorsModelFile.gifbin0 -> 346 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/obj16/ServicedescriptorswithidModelFile.gifbin0 -> 346 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/wizban/NewServicedescriptors.gifbin0 -> 2462 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/wizban/NewServicedescriptorswithid.gifbin0 -> 2462 bytes
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/plugin.properties68
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/plugin.xml35
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsActionBarContributor.java423
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsEditor.java1812
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsEditorPlugin.java91
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsModelWizard.java627
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidActionBarContributor.java423
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidEditor.java1812
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidEditorPlugin.java91
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidModelWizard.java628
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/.classpath8
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/.project28
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/META-INF/MANIFEST.MF10
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/build.properties5
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/fragment.xml5
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/plugin.properties12
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/resources/plugin.xml272
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/AbstractMethodInjectionTest.java36
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/AbstractServiceDescTest.java55
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/AliasDescTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ConstructorInjectionTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/DescriptorsTest.java122
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/FeatureInjectionTest.java55
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/InjectedServiceTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/InjectedValueTest.java55
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/MethodInjectionTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/OpaqueInjectedValueTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ParameterInjectionTest.java89
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/PropertyInjectionTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/RegistryDescTest.java150
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServiceDescTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServiceFactoryDescTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServiceSetDescTest.java122
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServicedescriptorsAllTests.java47
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServicedescriptorsExample.java121
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServicedescriptorsTests.java49
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AbstractMethodInjectionTest.java36
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AbstractServiceDescTest.java55
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AbstractServiceIdDescTest.java55
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AliasDescTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AliasIdDescTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ConstructorInjectionTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/DescriptorsTest.java89
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/FeatureInjectionTest.java55
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/IdDescriptorsTest.java89
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/InjectedServiceTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/InjectedValueTest.java55
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/MethodInjectionTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/OpaqueInjectedValueTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ParameterInjectionTest.java89
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/PropertyInjectionTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/RegistryDescTest.java89
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/RegistryIdDescTest.java89
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceDescTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceFactoryDescTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceFactoryIdDescTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceIdDescTest.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceSetIdDescTest.java150
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceSetTest.java150
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServicedescriptorswithidAllTests.java47
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServicedescriptorswithidExample.java121
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServicedescriptorswithidTests.java47
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/AbstractServiceDescriptorsWithIdProviderTest.java195
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/AllTests.java32
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/AnnotatedClass.java29
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/EclipseExtensionUtils.java129
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProviderFromFile.java48
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProviderIntegrationTest.java305
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProviderTest.java174
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeService.java77
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceA.java28
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceB.java28
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceC.java28
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceDescriptor.java43
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceFactory.java67
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeWithRequiredServiceFactory.java56
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceA.java52
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceA10.java6
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceB.java6
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceC.java6
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptorsWithIdProviderCollectionTest.java110
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServicePojoA.java6
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceRegistryFactoryTest.java87
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceTest.java52
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistryTest.java892
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistryWithParentTest.java357
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/TestTrace.java181
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/.classpath7
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/.project28
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/META-INF/MANIFEST.MF20
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/build.properties4
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/architectures.di35
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/architectures.notation1155
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/architectures.uml3852
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.di31
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.ecore141
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.genmodel145
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.notation1480
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.uml297
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.di29
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.ecore119
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.genmodel119
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.notation1127
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.uml223
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/plugin.properties12
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/plugin.xml52
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/schema/service.exsd458
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/Activator.java53
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/AliasDescriptor.java35
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/BadStateException.java49
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DeclarationException.java78
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DeclarationMultiException.java142
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DeclarationNotFoundException.java77
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DescriptorsCache.java360
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProvider.java534
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServicesRegistry.java196
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/IService.java42
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/IServiceDescriptorsWithIdProvider.java59
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/IServiceFactory.java28
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptor.java301
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptorUtils.java145
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptorsWithIdProviderCollection.java257
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceException.java57
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceMultiException.java139
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceNotFoundException.java51
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceRegistryFactory.java226
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceStartKind.java18
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceState.java14
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistry.java1368
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistryFactoryFromExtensions.java94
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/annotations/InjectService.java34
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/annotations/Service.java58
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/annotations/ServiceFactory.java53
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/AliasServiceEntry.java101
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/BadDeclarationException.java70
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ErrorServiceTypeEntry.java98
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/LazyStartupEntry.java96
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/PojoServiceEntry.java118
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceEntry.java160
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceFactoryEntry.java175
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceStartupEntry.java127
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceTypeEntry.java201
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/StartStartupEntry.java84
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/AbstractMethodInjection.java40
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/AbstractServiceDesc.java196
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/AliasDesc.java76
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ConstructorInjection.java17
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/Descriptors.java75
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/FeatureInjection.java50
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/InjectedService.java49
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/InjectedValue.java50
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/MethodInjection.java49
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/OpaqueInjectedValue.java49
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ParameterInjection.java69
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/PropertyInjection.java67
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/RegistryDesc.java227
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServiceDesc.java98
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServiceFactoryDesc.java17
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServiceSetDesc.java148
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServicedescriptorsFactory.java141
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServicedescriptorsPackage.java2150
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/StartupKind.java208
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/AbstractMethodInjectionImpl.java150
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/AbstractServiceDescImpl.java503
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/AliasDescImpl.java223
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ConstructorInjectionImpl.java39
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/DescriptorsImpl.java224
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/FeatureInjectionImpl.java163
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/InjectedServiceImpl.java156
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/InjectedValueImpl.java163
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/MethodInjectionImpl.java162
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/OpaqueInjectedValueImpl.java162
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ParameterInjectionImpl.java222
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/PropertyInjectionImpl.java221
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/RegistryDescImpl.java538
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServiceDescImpl.java276
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServiceFactoryDescImpl.java39
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServiceSetDescImpl.java383
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServicedescriptorsFactoryImpl.java333
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServicedescriptorsPackageImpl.java1008
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/util/ServicedescriptorsAdapterFactory.java390
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/util/ServicedescriptorsSwitch.java437
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/AbstractMethodInjection.java40
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/AbstractServiceIdDesc.java179
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/AliasIdDesc.java49
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ConstructorInjection.java17
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/FeatureInjection.java50
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/IdDescriptors.java59
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/InjectedService.java49
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/InjectedValue.java50
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/MethodInjection.java49
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/OpaqueInjectedValue.java49
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ParameterInjection.java69
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/PropertyInjection.java67
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/RegistryIdDesc.java157
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServiceFactoryIdDesc.java17
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServiceIdDesc.java98
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServiceSetIdDesc.java147
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServicedescriptorswithidFactory.java141
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServicedescriptorswithidPackage.java2014
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/StartupKind.java208
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/AbstractMethodInjectionImpl.java150
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/AbstractServiceIdDescImpl.java468
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/AliasIdDescImpl.java162
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ConstructorInjectionImpl.java39
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/FeatureInjectionImpl.java163
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/IdDescriptorsImpl.java189
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/InjectedServiceImpl.java162
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/InjectedValueImpl.java163
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/MethodInjectionImpl.java162
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/OpaqueInjectedValueImpl.java162
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ParameterInjectionImpl.java222
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/PropertyInjectionImpl.java221
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/RegistryIdDescImpl.java386
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServiceFactoryIdDescImpl.java39
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServiceIdDescImpl.java276
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServiceSetIdDescImpl.java375
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServicedescriptorswithidFactoryImpl.java355
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServicedescriptorswithidPackageImpl.java959
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/util/ServicedescriptorswithidAdapterFactory.java390
-rw-r--r--incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/util/ServicedescriptorswithidSwitch.java437
315 files changed, 53431 insertions, 0 deletions
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/.classpath b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/.classpath
new file mode 100644
index 00000000000..ed2bc1287f0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/.project b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/.project
new file mode 100644
index 00000000000..583a3cf1181
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.core.serviceregistry.edit</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/META-INF/MANIFEST.MF b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..951aaf31517
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.infra.core.serviceregistry.edit;singleton:=true
+Bundle-Version: 0.10.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.provider.ServicedescriptorswithidEditPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.provider,
+ org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.provider
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.papyrus.infra.core.serviceregistry;visibility:=reexport,
+ org.eclipse.emf.edit;visibility:=reexport,
+ org.eclipse.uml2.common.edit;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/build.properties b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/build.properties
new file mode 100644
index 00000000000..061672eb20e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+ icons/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin/
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateAbstractMethodInjection_parameters_ParameterInjection.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateAbstractMethodInjection_parameters_ParameterInjection.gif
new file mode 100644
index 00000000000..07919a46dc2
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateAbstractMethodInjection_parameters_ParameterInjection.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateDescriptors_registries_RegistryDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateDescriptors_registries_RegistryDesc.gif
new file mode 100644
index 00000000000..babcc9eb475
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateDescriptors_registries_RegistryDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateDescriptors_serviceSets_ServiceSet.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateDescriptors_serviceSets_ServiceSet.gif
new file mode 100644
index 00000000000..794791ad9f0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateDescriptors_serviceSets_ServiceSet.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateDescriptors_serviceSets_ServiceSetDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateDescriptors_serviceSets_ServiceSetDesc.gif
new file mode 100644
index 00000000000..eac40baa7ce
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateDescriptors_serviceSets_ServiceSetDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateIdDescriptors_registries_RegistryIdDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateIdDescriptors_registries_RegistryIdDesc.gif
new file mode 100644
index 00000000000..cb3c1cad64c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateIdDescriptors_registries_RegistryIdDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateIdDescriptors_serviceSets_ServiceSetIdDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateIdDescriptors_serviceSets_ServiceSetIdDesc.gif
new file mode 100644
index 00000000000..fc69df43331
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateIdDescriptors_serviceSets_ServiceSetIdDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateParameterInjection_values_InjectedService.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateParameterInjection_values_InjectedService.gif
new file mode 100644
index 00000000000..04e0ed54463
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateParameterInjection_values_InjectedService.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateParameterInjection_values_OpaqueInjectedValue.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateParameterInjection_values_OpaqueInjectedValue.gif
new file mode 100644
index 00000000000..2f72c3abb0f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateParameterInjection_values_OpaqueInjectedValue.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreatePropertyInjection_values_InjectedService.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreatePropertyInjection_values_InjectedService.gif
new file mode 100644
index 00000000000..e3e95e6485e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreatePropertyInjection_values_InjectedService.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreatePropertyInjection_values_OpaqueInjectedValue.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreatePropertyInjection_values_OpaqueInjectedValue.gif
new file mode 100644
index 00000000000..ec9a814da6c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreatePropertyInjection_values_OpaqueInjectedValue.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceDesc_injections_ConstructorInjection.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceDesc_injections_ConstructorInjection.gif
new file mode 100644
index 00000000000..f08356ef9bb
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceDesc_injections_ConstructorInjection.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceDesc_injections_MethodInjection.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceDesc_injections_MethodInjection.gif
new file mode 100644
index 00000000000..a885bb892a0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceDesc_injections_MethodInjection.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceDesc_injections_PropertyInjection.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceDesc_injections_PropertyInjection.gif
new file mode 100644
index 00000000000..083f29cfd45
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceDesc_injections_PropertyInjection.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceIdDesc_injections_ConstructorInjection.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceIdDesc_injections_ConstructorInjection.gif
new file mode 100644
index 00000000000..3b01cc94e97
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceIdDesc_injections_ConstructorInjection.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceIdDesc_injections_MethodInjection.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceIdDesc_injections_MethodInjection.gif
new file mode 100644
index 00000000000..6b5dc1bd2e7
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceIdDesc_injections_MethodInjection.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceIdDesc_injections_PropertyInjection.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceIdDesc_injections_PropertyInjection.gif
new file mode 100644
index 00000000000..3fdc2eae153
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceIdDesc_injections_PropertyInjection.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetDesc_ownedServices_AliasDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetDesc_ownedServices_AliasDesc.gif
new file mode 100644
index 00000000000..b806b6dcf6c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetDesc_ownedServices_AliasDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetDesc_ownedServices_ServiceDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetDesc_ownedServices_ServiceDesc.gif
new file mode 100644
index 00000000000..9ef55d20e04
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetDesc_ownedServices_ServiceDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetDesc_ownedServices_ServiceFactoryDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetDesc_ownedServices_ServiceFactoryDesc.gif
new file mode 100644
index 00000000000..b806b6dcf6c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetDesc_ownedServices_ServiceFactoryDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetIdDesc_serviceDescriptors_AliasIdDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetIdDesc_serviceDescriptors_AliasIdDesc.gif
new file mode 100644
index 00000000000..2576aa3ed32
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetIdDesc_serviceDescriptors_AliasIdDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetIdDesc_serviceDescriptors_ServiceFactoryIdDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetIdDesc_serviceDescriptors_ServiceFactoryIdDesc.gif
new file mode 100644
index 00000000000..2576aa3ed32
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetIdDesc_serviceDescriptors_ServiceFactoryIdDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetIdDesc_serviceDescriptors_ServiceIdDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetIdDesc_serviceDescriptors_ServiceIdDesc.gif
new file mode 100644
index 00000000000..17408b8fb4f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSetIdDesc_serviceDescriptors_ServiceIdDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSet_serviceDescriptors_AliasDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSet_serviceDescriptors_AliasDesc.gif
new file mode 100644
index 00000000000..c6407cdae5f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSet_serviceDescriptors_AliasDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSet_serviceDescriptors_ServiceDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSet_serviceDescriptors_ServiceDesc.gif
new file mode 100644
index 00000000000..12de541e7f5
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSet_serviceDescriptors_ServiceDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSet_serviceDescriptors_ServiceFactoryDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSet_serviceDescriptors_ServiceFactoryDesc.gif
new file mode 100644
index 00000000000..c6407cdae5f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/ctool16/CreateServiceSet_serviceDescriptors_ServiceFactoryDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/AliasDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/AliasDesc.gif
new file mode 100644
index 00000000000..cdd3b76e3c0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/AliasDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/AliasIdDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/AliasIdDesc.gif
new file mode 100644
index 00000000000..c3370c7ddd5
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/AliasIdDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ConstructorInjection.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ConstructorInjection.gif
new file mode 100644
index 00000000000..33854e98c25
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ConstructorInjection.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/Descriptors.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/Descriptors.gif
new file mode 100644
index 00000000000..caf2804510d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/Descriptors.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/IdDescriptors.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/IdDescriptors.gif
new file mode 100644
index 00000000000..ea58a657dc0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/IdDescriptors.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/InjectedService.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/InjectedService.gif
new file mode 100644
index 00000000000..afb82ea48a5
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/InjectedService.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/MethodInjection.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/MethodInjection.gif
new file mode 100644
index 00000000000..c3370c7ddd5
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/MethodInjection.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/OpaqueInjectedValue.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/OpaqueInjectedValue.gif
new file mode 100644
index 00000000000..10d222998af
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/OpaqueInjectedValue.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ParameterInjection.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ParameterInjection.gif
new file mode 100644
index 00000000000..136e3b27269
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ParameterInjection.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/PropertyInjection.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/PropertyInjection.gif
new file mode 100644
index 00000000000..cdd3b76e3c0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/PropertyInjection.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/RegistryDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/RegistryDesc.gif
new file mode 100644
index 00000000000..f8041d22553
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/RegistryDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/RegistryIdDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/RegistryIdDesc.gif
new file mode 100644
index 00000000000..7b7c428c715
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/RegistryIdDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceDesc.gif
new file mode 100644
index 00000000000..e4bc22dd17e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceFactoryDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceFactoryDesc.gif
new file mode 100644
index 00000000000..cdd3b76e3c0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceFactoryDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceFactoryIdDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceFactoryIdDesc.gif
new file mode 100644
index 00000000000..c3370c7ddd5
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceFactoryIdDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceIdDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceIdDesc.gif
new file mode 100644
index 00000000000..c673a5200a5
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceIdDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceSet.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceSet.gif
new file mode 100644
index 00000000000..be22463d291
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceSet.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceSetDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceSetDesc.gif
new file mode 100644
index 00000000000..ed874747401
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceSetDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceSetIdDesc.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceSetIdDesc.gif
new file mode 100644
index 00000000000..2124f3e3ab2
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/icons/full/obj16/ServiceSetIdDesc.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/plugin.properties b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/plugin.properties
new file mode 100644
index 00000000000..b3c2f7f6b20
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/plugin.properties
@@ -0,0 +1,122 @@
+#################################################################################
+# Copyright (c) 2012 Cedric Dumoulin.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+##################################################################################
+pluginName=Papyrus Service Registry
+providerName=Eclipse Modeling Project
+
+_UI_CreateChild_text = {0}
+_UI_CreateChild_text2 = {1} {0}
+_UI_CreateChild_text3 = {1}
+_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
+_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
+_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.
+
+_UI_PropertyDescriptor_description = The {0} of the {1}
+
+_UI_RegistryDesc_type = Registry Desc
+_UI_ServiceDesc_type = Service Desc
+_UI_AbstractServiceDesc_type = Abstract Service Desc
+_UI_ServiceSet_type = Service Set
+_UI_FeatureInjection_type = Feature Injection
+_UI_AliasDesc_type = Alias Desc
+_UI_Descriptors_type = Descriptors
+_UI_PropertyInjection_type = Property Injection
+_UI_InjectedValue_type = Injected Value
+_UI_MethodInjection_type = Method Injection
+_UI_AbstractMethodInjection_type = Abstract Method Injection
+_UI_ParameterInjection_type = Parameter Injection
+_UI_InjectedService_type = Injected Service
+_UI_OpaqueInjectedValue_type = Opaque Injected Value
+_UI_ConstructorInjection_type = Constructor Injection
+_UI_Unknown_type = Object
+
+_UI_Unknown_datatype= Value
+
+_UI_RegistryDesc_name_feature = Name
+_UI_RegistryDesc_description_feature = Description
+_UI_RegistryDesc_isUnique_feature = Is Unique
+_UI_RegistryDesc_sets_feature = Sets
+_UI_RegistryDesc_extends_feature = Extends
+_UI_RegistryDesc_parents_feature = Parents
+_UI_ServiceDesc_startKind_feature = Start Kind
+_UI_ServiceDesc_classname_feature = Classname
+_UI_ServiceDesc_priority_feature = Priority
+_UI_ServiceDesc_injections_feature = Injections
+_UI_AbstractServiceDesc_name_feature = Name
+_UI_AbstractServiceDesc_namespace_feature = Namespace
+_UI_AbstractServiceDesc_description_feature = Description
+_UI_AbstractServiceDesc_dependsOn_feature = Depends On
+_UI_ServiceSet_name_feature = Name
+_UI_ServiceSet_extends_feature = Extends
+_UI_ServiceSet_serviceDescriptors_feature = Service Descriptors
+_UI_FeatureInjection_description_feature = Description
+_UI_AliasDesc_aliasedService_feature = Aliased Service
+_UI_Descriptors_registries_feature = Registries
+_UI_Descriptors_serviceSets_feature = Service Sets
+_UI_PropertyInjection_propertyName_feature = Property Name
+_UI_PropertyInjection_values_feature = Values
+_UI_InjectedValue_description_feature = Description
+_UI_MethodInjection_methodName_feature = Method Name
+_UI_AbstractMethodInjection_parameters_feature = Parameters
+_UI_ParameterInjection_parameterName_feature = Parameter Name
+_UI_ParameterInjection_values_feature = Values
+_UI_InjectedService_serviceName_feature = Service Name
+_UI_OpaqueInjectedValue_value_feature = Value
+_UI_Unknown_feature = Unspecified
+
+_UI_StartupKind_lazy_literal = lazy
+_UI_StartupKind_immediate_literal = immediate
+_UI_AbstractServiceDesc_priority_feature = Priority
+_UI_ServiceFactoryDesc_type = Service Factory Desc
+_UI_ServiceSet_description_feature = Description
+_UI_AbstractServiceDesc_bundleID_feature = Bundle ID
+_UI_StartupKind_startup_literal = startup
+_UI_RegistryIdDesc_type = Registry Id Desc
+_UI_ServiceIdDesc_type = Service Id Desc
+_UI_AbstractServiceIdDesc_type = Abstract Service Id Desc
+_UI_ServiceSetIdDesc_type = Service Set Id Desc
+_UI_AliasIdDesc_type = Alias Id Desc
+_UI_IdDescriptors_type = Id Descriptors
+_UI_ServiceFactoryIdDesc_type = Service Factory Id Desc
+_UI_RegistryIdDesc_name_feature = Name
+_UI_RegistryIdDesc_description_feature = Description
+_UI_RegistryIdDesc_isUnique_feature = Is Unique
+_UI_RegistryIdDesc_sets_feature = Sets
+_UI_RegistryIdDesc_extends_feature = Extends
+_UI_RegistryIdDesc_parents_feature = Parents
+_UI_ServiceIdDesc_startKind_feature = Start Kind
+_UI_ServiceIdDesc_classname_feature = Classname
+_UI_ServiceIdDesc_injections_feature = Injections
+_UI_AbstractServiceIdDesc_name_feature = Name
+_UI_AbstractServiceIdDesc_namespace_feature = Namespace
+_UI_AbstractServiceIdDesc_description_feature = Description
+_UI_AbstractServiceIdDesc_dependsOn_feature = Depends On
+_UI_AbstractServiceIdDesc_priority_feature = Priority
+_UI_AbstractServiceIdDesc_bundleID_feature = Bundle ID
+_UI_ServiceSetIdDesc_name_feature = Name
+_UI_ServiceSetIdDesc_extends_feature = Extends
+_UI_ServiceSetIdDesc_description_feature = Description
+_UI_ServiceSetIdDesc_serviceDescriptors_feature = Service Descriptors
+_UI_AliasIdDesc_aliasedService_feature = Aliased Service
+_UI_IdDescriptors_registries_feature = Registries
+_UI_IdDescriptors_serviceSets_feature = Service Sets
+_UI_ServiceSetDesc_type = Service Set Desc
+_UI_RegistryDesc_children_feature = Children
+_UI_RegistryDesc_serviceSets_feature = Service Sets
+_UI_ServiceSetDesc_services_feature = Services
+_UI_ServiceSetDesc_ownedServices_feature = Owned Services
+_UI_ServiceSetDesc_name_feature = Name
+_UI_ServiceSetDesc_extends_feature = Extends
+_UI_AbstractServiceDesc_parent_feature = Parent
+_UI_InjectedService_service_feature = Service
+_UI_RegistryDesc_services_feature = Services
+_UI_ServiceSetDesc_description_feature = Description
+_UI_AbstractServiceDesc_dependsOnIds_feature = Depends On Ids
+_UI_AliasDesc_aliasedServiceId_feature = Aliased Service Id
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/plugin.xml b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/plugin.xml
new file mode 100644
index 00000000000..1ccf75c6ff3
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/plugin.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.emf.edit.itemProviderAdapterFactories">
+ <factory
+ uri="org.eclipse.papyrus..infra.core.servicedescriptorswithid"
+ class="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.provider.ServicedescriptorswithidItemProviderAdapterFactory"
+ supportedTypes=
+ "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
+ org.eclipse.emf.edit.provider.IStructuredItemContentProvider
+ org.eclipse.emf.edit.provider.ITreeItemContentProvider
+ org.eclipse.emf.edit.provider.IItemLabelProvider
+ org.eclipse.emf.edit.provider.IItemPropertySource"/>
+ </extension>
+
+</plugin>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/AbstractMethodInjectionItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/AbstractMethodInjectionItemProvider.java
new file mode 100644
index 00000000000..f639432368c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/AbstractMethodInjectionItemProvider.java
@@ -0,0 +1,145 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.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.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractMethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractMethodInjection} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AbstractMethodInjectionItemProvider
+ extends FeatureInjectionItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AbstractMethodInjectionItemProvider(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(ServicedescriptorsPackage.Literals.ABSTRACT_METHOD_INJECTION__PARAMETERS);
+ }
+ 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 the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((AbstractMethodInjection)object).getDescription();
+ return label == null || label.length() == 0 ?
+ getString("_UI_AbstractMethodInjection_type") :
+ getString("_UI_AbstractMethodInjection_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(AbstractMethodInjection.class)) {
+ case ServicedescriptorsPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS:
+ 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
+ (ServicedescriptorsPackage.Literals.ABSTRACT_METHOD_INJECTION__PARAMETERS,
+ ServicedescriptorsFactory.eINSTANCE.createParameterInjection()));
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/AbstractServiceDescItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/AbstractServiceDescItemProvider.java
new file mode 100644
index 00000000000..d5e39452fd0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/AbstractServiceDescItemProvider.java
@@ -0,0 +1,265 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AbstractServiceDescItemProvider
+ 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 AbstractServiceDescItemProvider(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);
+ addDependsOnPropertyDescriptor(object);
+ addDescriptionPropertyDescriptor(object);
+ addPriorityPropertyDescriptor(object);
+ addBundleIDPropertyDescriptor(object);
+ addDependsOnIdsPropertyDescriptor(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_AbstractServiceDesc_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AbstractServiceDesc_name_feature", "_UI_AbstractServiceDesc_type"),
+ ServicedescriptorsPackage.Literals.ABSTRACT_SERVICE_DESC__NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Depends On feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDependsOnPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_AbstractServiceDesc_dependsOn_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AbstractServiceDesc_dependsOn_feature", "_UI_AbstractServiceDesc_type"),
+ ServicedescriptorsPackage.Literals.ABSTRACT_SERVICE_DESC__DEPENDS_ON,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Description feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDescriptionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_AbstractServiceDesc_description_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AbstractServiceDesc_description_feature", "_UI_AbstractServiceDesc_type"),
+ ServicedescriptorsPackage.Literals.ABSTRACT_SERVICE_DESC__DESCRIPTION,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Priority feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addPriorityPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_AbstractServiceDesc_priority_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AbstractServiceDesc_priority_feature", "_UI_AbstractServiceDesc_type"),
+ ServicedescriptorsPackage.Literals.ABSTRACT_SERVICE_DESC__PRIORITY,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Bundle ID feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addBundleIDPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_AbstractServiceDesc_bundleID_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AbstractServiceDesc_bundleID_feature", "_UI_AbstractServiceDesc_type"),
+ ServicedescriptorsPackage.Literals.ABSTRACT_SERVICE_DESC__BUNDLE_ID,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Depends On Ids feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDependsOnIdsPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_AbstractServiceDesc_dependsOnIds_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AbstractServiceDesc_dependsOnIds_feature", "_UI_AbstractServiceDesc_type"),
+ ServicedescriptorsPackage.Literals.ABSTRACT_SERVICE_DESC__DEPENDS_ON_IDS,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((AbstractServiceDesc)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_AbstractServiceDesc_type") :
+ getString("_UI_AbstractServiceDesc_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(AbstractServiceDesc.class)) {
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__NAME:
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DESCRIPTION:
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PRIORITY:
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__BUNDLE_ID:
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DEPENDS_ON_IDS:
+ 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 ServicedescriptorsEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/AliasDescItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/AliasDescItemProvider.java
new file mode 100644
index 00000000000..635c57a74a7
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/AliasDescItemProvider.java
@@ -0,0 +1,166 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.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.ViewerNotification;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AliasDescItemProvider
+ extends AbstractServiceDescItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AliasDescItemProvider(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);
+
+ addAliasedServicePropertyDescriptor(object);
+ addAliasedServiceIdPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Aliased Service feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addAliasedServicePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_AliasDesc_aliasedService_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AliasDesc_aliasedService_feature", "_UI_AliasDesc_type"),
+ ServicedescriptorsPackage.Literals.ALIAS_DESC__ALIASED_SERVICE,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Aliased Service Id feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addAliasedServiceIdPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_AliasDesc_aliasedServiceId_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AliasDesc_aliasedServiceId_feature", "_UI_AliasDesc_type"),
+ ServicedescriptorsPackage.Literals.ALIAS_DESC__ALIASED_SERVICE_ID,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns AliasDesc.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/AliasDesc"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((AliasDesc)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_AliasDesc_type") :
+ getString("_UI_AliasDesc_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(AliasDesc.class)) {
+ case ServicedescriptorsPackage.ALIAS_DESC__ALIASED_SERVICE_ID:
+ 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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ConstructorInjectionItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ConstructorInjectionItemProvider.java
new file mode 100644
index 00000000000..a4ba8a60665
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ConstructorInjectionItemProvider.java
@@ -0,0 +1,110 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.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.papyrus.infra.core.serviceregistry.servicedescriptors.ConstructorInjection;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ConstructorInjection} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ConstructorInjectionItemProvider
+ extends AbstractMethodInjectionItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ConstructorInjectionItemProvider(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 returns ConstructorInjection.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ConstructorInjection"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ConstructorInjection)object).getDescription();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ConstructorInjection_type") :
+ getString("_UI_ConstructorInjection_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);
+ 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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/DescriptorsItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/DescriptorsItemProvider.java
new file mode 100644
index 00000000000..d0620f9025f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/DescriptorsItemProvider.java
@@ -0,0 +1,174 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.ecore.EStructuralFeature;
+
+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.infra.core.serviceregistry.servicedescriptors.Descriptors;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DescriptorsItemProvider
+ 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 DescriptorsItemProvider(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(ServicedescriptorsPackage.Literals.DESCRIPTORS__REGISTRIES);
+ childrenFeatures.add(ServicedescriptorsPackage.Literals.DESCRIPTORS__SERVICE_SETS);
+ }
+ 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 Descriptors.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/Descriptors"));
+ }
+
+ /**
+ * 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_Descriptors_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(Descriptors.class)) {
+ case ServicedescriptorsPackage.DESCRIPTORS__REGISTRIES:
+ case ServicedescriptorsPackage.DESCRIPTORS__SERVICE_SETS:
+ 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
+ (ServicedescriptorsPackage.Literals.DESCRIPTORS__REGISTRIES,
+ ServicedescriptorsFactory.eINSTANCE.createRegistryDesc()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorsPackage.Literals.DESCRIPTORS__SERVICE_SETS,
+ ServicedescriptorsFactory.eINSTANCE.createServiceSetDesc()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ServicedescriptorsEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/FeatureInjectionItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/FeatureInjectionItemProvider.java
new file mode 100644
index 00000000000..f34ce7555ca
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/FeatureInjectionItemProvider.java
@@ -0,0 +1,146 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class FeatureInjectionItemProvider
+ 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 FeatureInjectionItemProvider(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);
+
+ addDescriptionPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Description feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDescriptionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_FeatureInjection_description_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_FeatureInjection_description_feature", "_UI_FeatureInjection_type"),
+ ServicedescriptorsPackage.Literals.FEATURE_INJECTION__DESCRIPTION,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((FeatureInjection)object).getDescription();
+ return label == null || label.length() == 0 ?
+ getString("_UI_FeatureInjection_type") :
+ getString("_UI_FeatureInjection_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(FeatureInjection.class)) {
+ case ServicedescriptorsPackage.FEATURE_INJECTION__DESCRIPTION:
+ 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 ServicedescriptorsEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/InjectedServiceItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/InjectedServiceItemProvider.java
new file mode 100644
index 00000000000..6095c8acd08
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/InjectedServiceItemProvider.java
@@ -0,0 +1,135 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.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.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class InjectedServiceItemProvider
+ extends InjectedValueItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InjectedServiceItemProvider(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);
+
+ addServicePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Service feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addServicePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_InjectedService_service_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_InjectedService_service_feature", "_UI_InjectedService_type"),
+ ServicedescriptorsPackage.Literals.INJECTED_SERVICE__SERVICE,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This returns InjectedService.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/InjectedService"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((InjectedService)object).getDescription();
+ return label == null || label.length() == 0 ?
+ getString("_UI_InjectedService_type") :
+ getString("_UI_InjectedService_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);
+ 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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/InjectedValueItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/InjectedValueItemProvider.java
new file mode 100644
index 00000000000..ee3ea2fb89a
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/InjectedValueItemProvider.java
@@ -0,0 +1,146 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class InjectedValueItemProvider
+ 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 InjectedValueItemProvider(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);
+
+ addDescriptionPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Description feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDescriptionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_InjectedValue_description_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_InjectedValue_description_feature", "_UI_InjectedValue_type"),
+ ServicedescriptorsPackage.Literals.INJECTED_VALUE__DESCRIPTION,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((InjectedValue)object).getDescription();
+ return label == null || label.length() == 0 ?
+ getString("_UI_InjectedValue_type") :
+ getString("_UI_InjectedValue_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(InjectedValue.class)) {
+ case ServicedescriptorsPackage.INJECTED_VALUE__DESCRIPTION:
+ 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 ServicedescriptorsEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/MethodInjectionItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/MethodInjectionItemProvider.java
new file mode 100644
index 00000000000..f30447c1c0d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/MethodInjectionItemProvider.java
@@ -0,0 +1,143 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.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.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MethodInjectionItemProvider
+ extends AbstractMethodInjectionItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MethodInjectionItemProvider(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);
+
+ addMethodNamePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Method Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addMethodNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_MethodInjection_methodName_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_MethodInjection_methodName_feature", "_UI_MethodInjection_type"),
+ ServicedescriptorsPackage.Literals.METHOD_INJECTION__METHOD_NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns MethodInjection.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/MethodInjection"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((MethodInjection)object).getMethodName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_MethodInjection_type") :
+ getString("_UI_MethodInjection_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(MethodInjection.class)) {
+ case ServicedescriptorsPackage.METHOD_INJECTION__METHOD_NAME:
+ 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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/OpaqueInjectedValueItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/OpaqueInjectedValueItemProvider.java
new file mode 100644
index 00000000000..a892cd7cd35
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/OpaqueInjectedValueItemProvider.java
@@ -0,0 +1,143 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.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.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class OpaqueInjectedValueItemProvider
+ extends InjectedValueItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public OpaqueInjectedValueItemProvider(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_OpaqueInjectedValue_value_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_OpaqueInjectedValue_value_feature", "_UI_OpaqueInjectedValue_type"),
+ ServicedescriptorsPackage.Literals.OPAQUE_INJECTED_VALUE__VALUE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns OpaqueInjectedValue.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/OpaqueInjectedValue"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((OpaqueInjectedValue)object).getDescription();
+ return label == null || label.length() == 0 ?
+ getString("_UI_OpaqueInjectedValue_type") :
+ getString("_UI_OpaqueInjectedValue_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(OpaqueInjectedValue.class)) {
+ case ServicedescriptorsPackage.OPAQUE_INJECTED_VALUE__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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ParameterInjectionItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ParameterInjectionItemProvider.java
new file mode 100644
index 00000000000..92d4e92945e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ParameterInjectionItemProvider.java
@@ -0,0 +1,203 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.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.serviceregistry.servicedescriptors.ParameterInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ParameterInjectionItemProvider
+ 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 ParameterInjectionItemProvider(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);
+
+ addParameterNamePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Parameter Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addParameterNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ParameterInjection_parameterName_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ParameterInjection_parameterName_feature", "_UI_ParameterInjection_type"),
+ ServicedescriptorsPackage.Literals.PARAMETER_INJECTION__PARAMETER_NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ 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(ServicedescriptorsPackage.Literals.PARAMETER_INJECTION__VALUES);
+ }
+ 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 ParameterInjection.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ParameterInjection"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ParameterInjection)object).getParameterName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ParameterInjection_type") :
+ getString("_UI_ParameterInjection_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(ParameterInjection.class)) {
+ case ServicedescriptorsPackage.PARAMETER_INJECTION__PARAMETER_NAME:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ServicedescriptorsPackage.PARAMETER_INJECTION__VALUES:
+ 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
+ (ServicedescriptorsPackage.Literals.PARAMETER_INJECTION__VALUES,
+ ServicedescriptorsFactory.eINSTANCE.createInjectedService()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorsPackage.Literals.PARAMETER_INJECTION__VALUES,
+ ServicedescriptorsFactory.eINSTANCE.createOpaqueInjectedValue()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ServicedescriptorsEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/PropertyInjectionItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/PropertyInjectionItemProvider.java
new file mode 100644
index 00000000000..93bcc1f196e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/PropertyInjectionItemProvider.java
@@ -0,0 +1,189 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.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.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PropertyInjectionItemProvider
+ extends FeatureInjectionItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PropertyInjectionItemProvider(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);
+
+ addPropertyNamePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Property Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addPropertyNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_PropertyInjection_propertyName_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_PropertyInjection_propertyName_feature", "_UI_PropertyInjection_type"),
+ ServicedescriptorsPackage.Literals.PROPERTY_INJECTION__PROPERTY_NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ 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(ServicedescriptorsPackage.Literals.PROPERTY_INJECTION__VALUES);
+ }
+ 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 PropertyInjection.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/PropertyInjection"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((PropertyInjection)object).getPropertyName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_PropertyInjection_type") :
+ getString("_UI_PropertyInjection_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(PropertyInjection.class)) {
+ case ServicedescriptorsPackage.PROPERTY_INJECTION__PROPERTY_NAME:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ServicedescriptorsPackage.PROPERTY_INJECTION__VALUES:
+ 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
+ (ServicedescriptorsPackage.Literals.PROPERTY_INJECTION__VALUES,
+ ServicedescriptorsFactory.eINSTANCE.createInjectedService()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorsPackage.Literals.PROPERTY_INJECTION__VALUES,
+ ServicedescriptorsFactory.eINSTANCE.createOpaqueInjectedValue()));
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/RegistryDescItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/RegistryDescItemProvider.java
new file mode 100644
index 00000000000..69ae4a0a24f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/RegistryDescItemProvider.java
@@ -0,0 +1,320 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class RegistryDescItemProvider
+ 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 RegistryDescItemProvider(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);
+ addParentsPropertyDescriptor(object);
+ addChildrenPropertyDescriptor(object);
+ addExtendsPropertyDescriptor(object);
+ addDescriptionPropertyDescriptor(object);
+ addServiceSetsPropertyDescriptor(object);
+ addIsUniquePropertyDescriptor(object);
+ addServicesPropertyDescriptor(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_RegistryDesc_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryDesc_name_feature", "_UI_RegistryDesc_type"),
+ ServicedescriptorsPackage.Literals.REGISTRY_DESC__NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Parents feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addParentsPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_RegistryDesc_parents_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryDesc_parents_feature", "_UI_RegistryDesc_type"),
+ ServicedescriptorsPackage.Literals.REGISTRY_DESC__PARENTS,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Children feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addChildrenPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_RegistryDesc_children_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryDesc_children_feature", "_UI_RegistryDesc_type"),
+ ServicedescriptorsPackage.Literals.REGISTRY_DESC__CHILDREN,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Extends feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addExtendsPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_RegistryDesc_extends_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryDesc_extends_feature", "_UI_RegistryDesc_type"),
+ ServicedescriptorsPackage.Literals.REGISTRY_DESC__EXTENDS,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Description feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDescriptionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_RegistryDesc_description_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryDesc_description_feature", "_UI_RegistryDesc_type"),
+ ServicedescriptorsPackage.Literals.REGISTRY_DESC__DESCRIPTION,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Service Sets feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addServiceSetsPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_RegistryDesc_serviceSets_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryDesc_serviceSets_feature", "_UI_RegistryDesc_type"),
+ ServicedescriptorsPackage.Literals.REGISTRY_DESC__SERVICE_SETS,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Is Unique feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addIsUniquePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_RegistryDesc_isUnique_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryDesc_isUnique_feature", "_UI_RegistryDesc_type"),
+ ServicedescriptorsPackage.Literals.REGISTRY_DESC__IS_UNIQUE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Services feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addServicesPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_RegistryDesc_services_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryDesc_services_feature", "_UI_RegistryDesc_type"),
+ ServicedescriptorsPackage.Literals.REGISTRY_DESC__SERVICES,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This returns RegistryDesc.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/RegistryDesc"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((RegistryDesc)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_RegistryDesc_type") :
+ getString("_UI_RegistryDesc_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(RegistryDesc.class)) {
+ case ServicedescriptorsPackage.REGISTRY_DESC__NAME:
+ case ServicedescriptorsPackage.REGISTRY_DESC__DESCRIPTION:
+ case ServicedescriptorsPackage.REGISTRY_DESC__IS_UNIQUE:
+ 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 ServicedescriptorsEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServiceDescItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServiceDescItemProvider.java
new file mode 100644
index 00000000000..1da2002182a
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServiceDescItemProvider.java
@@ -0,0 +1,218 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.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.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServiceDescItemProvider
+ extends AbstractServiceDescItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceDescItemProvider(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);
+
+ addStartKindPropertyDescriptor(object);
+ addClassnamePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Start Kind feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addStartKindPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ServiceDesc_startKind_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ServiceDesc_startKind_feature", "_UI_ServiceDesc_type"),
+ ServicedescriptorsPackage.Literals.SERVICE_DESC__START_KIND,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Classname feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addClassnamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ServiceDesc_classname_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ServiceDesc_classname_feature", "_UI_ServiceDesc_type"),
+ ServicedescriptorsPackage.Literals.SERVICE_DESC__CLASSNAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ 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(ServicedescriptorsPackage.Literals.SERVICE_DESC__INJECTIONS);
+ }
+ 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 ServiceDesc.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ServiceDesc"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ServiceDesc)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ServiceDesc_type") :
+ getString("_UI_ServiceDesc_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(ServiceDesc.class)) {
+ case ServicedescriptorsPackage.SERVICE_DESC__START_KIND:
+ case ServicedescriptorsPackage.SERVICE_DESC__CLASSNAME:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ServicedescriptorsPackage.SERVICE_DESC__INJECTIONS:
+ 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
+ (ServicedescriptorsPackage.Literals.SERVICE_DESC__INJECTIONS,
+ ServicedescriptorsFactory.eINSTANCE.createPropertyInjection()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorsPackage.Literals.SERVICE_DESC__INJECTIONS,
+ ServicedescriptorsFactory.eINSTANCE.createMethodInjection()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorsPackage.Literals.SERVICE_DESC__INJECTIONS,
+ ServicedescriptorsFactory.eINSTANCE.createConstructorInjection()));
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServiceFactoryDescItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServiceFactoryDescItemProvider.java
new file mode 100644
index 00000000000..8413db45bf8
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServiceFactoryDescItemProvider.java
@@ -0,0 +1,110 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.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.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceFactoryDesc;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceFactoryDesc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServiceFactoryDescItemProvider
+ extends ServiceDescItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceFactoryDescItemProvider(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 returns ServiceFactoryDesc.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ServiceFactoryDesc"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ServiceFactoryDesc)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ServiceFactoryDesc_type") :
+ getString("_UI_ServiceFactoryDesc_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);
+ 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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServiceSetDescItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServiceSetDescItemProvider.java
new file mode 100644
index 00000000000..46821d283ac
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServiceSetDescItemProvider.java
@@ -0,0 +1,278 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.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.serviceregistry.servicedescriptors.ServiceSetDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServiceSetDescItemProvider
+ 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 ServiceSetDescItemProvider(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);
+
+ addServicesPropertyDescriptor(object);
+ addNamePropertyDescriptor(object);
+ addExtendsPropertyDescriptor(object);
+ addDescriptionPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Services feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addServicesPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ServiceSetDesc_services_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ServiceSetDesc_services_feature", "_UI_ServiceSetDesc_type"),
+ ServicedescriptorsPackage.Literals.SERVICE_SET_DESC__SERVICES,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * 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_ServiceSetDesc_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ServiceSetDesc_name_feature", "_UI_ServiceSetDesc_type"),
+ ServicedescriptorsPackage.Literals.SERVICE_SET_DESC__NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Extends feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addExtendsPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ServiceSetDesc_extends_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ServiceSetDesc_extends_feature", "_UI_ServiceSetDesc_type"),
+ ServicedescriptorsPackage.Literals.SERVICE_SET_DESC__EXTENDS,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Description feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDescriptionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ServiceSetDesc_description_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ServiceSetDesc_description_feature", "_UI_ServiceSetDesc_type"),
+ ServicedescriptorsPackage.Literals.SERVICE_SET_DESC__DESCRIPTION,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ 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(ServicedescriptorsPackage.Literals.SERVICE_SET_DESC__OWNED_SERVICES);
+ }
+ 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 ServiceSetDesc.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ServiceSetDesc"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ServiceSetDesc)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ServiceSetDesc_type") :
+ getString("_UI_ServiceSetDesc_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(ServiceSetDesc.class)) {
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__NAME:
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__DESCRIPTION:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__OWNED_SERVICES:
+ 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
+ (ServicedescriptorsPackage.Literals.SERVICE_SET_DESC__OWNED_SERVICES,
+ ServicedescriptorsFactory.eINSTANCE.createServiceDesc()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorsPackage.Literals.SERVICE_SET_DESC__OWNED_SERVICES,
+ ServicedescriptorsFactory.eINSTANCE.createAliasDesc()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorsPackage.Literals.SERVICE_SET_DESC__OWNED_SERVICES,
+ ServicedescriptorsFactory.eINSTANCE.createServiceFactoryDesc()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ServicedescriptorsEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServicedescriptorsEditPlugin.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServicedescriptorsEditPlugin.java
new file mode 100644
index 00000000000..ff9f00e7b86
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServicedescriptorsEditPlugin.java
@@ -0,0 +1,89 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.provider;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Servicedescriptors edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ServicedescriptorsEditPlugin extends EMFPlugin {
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final ServicedescriptorsEditPlugin INSTANCE = new ServicedescriptorsEditPlugin();
+
+ /**
+ * 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 ServicedescriptorsEditPlugin() {
+ super
+ (new ResourceLocator [] {
+ });
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ @Override
+ public ResourceLocator getPluginResourceLocator() {
+ return plugin;
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ public static Implementation getPlugin() {
+ return plugin;
+ }
+
+ /**
+ * The actual implementation of the Eclipse <b>Plugin</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static class Implementation extends EclipsePlugin {
+ /**
+ * Creates an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Implementation() {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServicedescriptorsItemProviderAdapterFactory.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServicedescriptorsItemProviderAdapterFactory.java
new file mode 100644
index 00000000000..48ebc04df33
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/provider/ServicedescriptorsItemProviderAdapterFactory.java
@@ -0,0 +1,463 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.provider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.util.ServicedescriptorsAdapterFactory;
+
+/**
+ * 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 ServicedescriptorsItemProviderAdapterFactory extends ServicedescriptorsAdapterFactory 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<Object>();
+
+ /**
+ * This constructs an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorsItemProviderAdapterFactory() {
+ supportedTypes.add(IEditingDomainItemProvider.class);
+ supportedTypes.add(IStructuredItemContentProvider.class);
+ supportedTypes.add(ITreeItemContentProvider.class);
+ supportedTypes.add(IItemLabelProvider.class);
+ supportedTypes.add(IItemPropertySource.class);
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected RegistryDescItemProvider registryDescItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createRegistryDescAdapter() {
+ if (registryDescItemProvider == null) {
+ registryDescItemProvider = new RegistryDescItemProvider(this);
+ }
+
+ return registryDescItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceSetDescItemProvider serviceSetDescItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createServiceSetDescAdapter() {
+ if (serviceSetDescItemProvider == null) {
+ serviceSetDescItemProvider = new ServiceSetDescItemProvider(this);
+ }
+
+ return serviceSetDescItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceDescItemProvider serviceDescItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createServiceDescAdapter() {
+ if (serviceDescItemProvider == null) {
+ serviceDescItemProvider = new ServiceDescItemProvider(this);
+ }
+
+ return serviceDescItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AliasDescItemProvider aliasDescItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createAliasDescAdapter() {
+ if (aliasDescItemProvider == null) {
+ aliasDescItemProvider = new AliasDescItemProvider(this);
+ }
+
+ return aliasDescItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected DescriptorsItemProvider descriptorsItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createDescriptorsAdapter() {
+ if (descriptorsItemProvider == null) {
+ descriptorsItemProvider = new DescriptorsItemProvider(this);
+ }
+
+ return descriptorsItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected PropertyInjectionItemProvider propertyInjectionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createPropertyInjectionAdapter() {
+ if (propertyInjectionItemProvider == null) {
+ propertyInjectionItemProvider = new PropertyInjectionItemProvider(this);
+ }
+
+ return propertyInjectionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected MethodInjectionItemProvider methodInjectionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createMethodInjectionAdapter() {
+ if (methodInjectionItemProvider == null) {
+ methodInjectionItemProvider = new MethodInjectionItemProvider(this);
+ }
+
+ return methodInjectionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ParameterInjectionItemProvider parameterInjectionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createParameterInjectionAdapter() {
+ if (parameterInjectionItemProvider == null) {
+ parameterInjectionItemProvider = new ParameterInjectionItemProvider(this);
+ }
+
+ return parameterInjectionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InjectedServiceItemProvider injectedServiceItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createInjectedServiceAdapter() {
+ if (injectedServiceItemProvider == null) {
+ injectedServiceItemProvider = new InjectedServiceItemProvider(this);
+ }
+
+ return injectedServiceItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected OpaqueInjectedValueItemProvider opaqueInjectedValueItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createOpaqueInjectedValueAdapter() {
+ if (opaqueInjectedValueItemProvider == null) {
+ opaqueInjectedValueItemProvider = new OpaqueInjectedValueItemProvider(this);
+ }
+
+ return opaqueInjectedValueItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ConstructorInjection} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ConstructorInjectionItemProvider constructorInjectionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ConstructorInjection}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createConstructorInjectionAdapter() {
+ if (constructorInjectionItemProvider == null) {
+ constructorInjectionItemProvider = new ConstructorInjectionItemProvider(this);
+ }
+
+ return constructorInjectionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceFactoryDesc} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceFactoryDescItemProvider serviceFactoryDescItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceFactoryDesc}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createServiceFactoryDescAdapter() {
+ if (serviceFactoryDescItemProvider == null) {
+ serviceFactoryDescItemProvider = new ServiceFactoryDescItemProvider(this);
+ }
+
+ return serviceFactoryDescItemProvider;
+ }
+
+ /**
+ * This returns the root adapter factory that contains this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ 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
+ */
+ 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
+ */
+ public void addListener(INotifyChangedListener notifyChangedListener) {
+ changeNotifier.addListener(notifyChangedListener);
+ }
+
+ /**
+ * This removes a listener.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void removeListener(INotifyChangedListener notifyChangedListener) {
+ changeNotifier.removeListener(notifyChangedListener);
+ }
+
+ /**
+ * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ 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
+ */
+ public void dispose() {
+ if (registryDescItemProvider != null) registryDescItemProvider.dispose();
+ if (serviceSetDescItemProvider != null) serviceSetDescItemProvider.dispose();
+ if (serviceDescItemProvider != null) serviceDescItemProvider.dispose();
+ if (aliasDescItemProvider != null) aliasDescItemProvider.dispose();
+ if (descriptorsItemProvider != null) descriptorsItemProvider.dispose();
+ if (propertyInjectionItemProvider != null) propertyInjectionItemProvider.dispose();
+ if (methodInjectionItemProvider != null) methodInjectionItemProvider.dispose();
+ if (parameterInjectionItemProvider != null) parameterInjectionItemProvider.dispose();
+ if (injectedServiceItemProvider != null) injectedServiceItemProvider.dispose();
+ if (opaqueInjectedValueItemProvider != null) opaqueInjectedValueItemProvider.dispose();
+ if (constructorInjectionItemProvider != null) constructorInjectionItemProvider.dispose();
+ if (serviceFactoryDescItemProvider != null) serviceFactoryDescItemProvider.dispose();
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/AbstractMethodInjectionItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/AbstractMethodInjectionItemProvider.java
new file mode 100644
index 00000000000..f67615e53b2
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/AbstractMethodInjectionItemProvider.java
@@ -0,0 +1,145 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.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.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractMethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractMethodInjection} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AbstractMethodInjectionItemProvider
+ extends FeatureInjectionItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AbstractMethodInjectionItemProvider(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(ServicedescriptorswithidPackage.Literals.ABSTRACT_METHOD_INJECTION__PARAMETERS);
+ }
+ 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 the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((AbstractMethodInjection)object).getDescription();
+ return label == null || label.length() == 0 ?
+ getString("_UI_AbstractMethodInjection_type") :
+ getString("_UI_AbstractMethodInjection_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(AbstractMethodInjection.class)) {
+ case ServicedescriptorswithidPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS:
+ 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
+ (ServicedescriptorswithidPackage.Literals.ABSTRACT_METHOD_INJECTION__PARAMETERS,
+ ServicedescriptorswithidFactory.eINSTANCE.createParameterInjection()));
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/AbstractServiceIdDescItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/AbstractServiceIdDescItemProvider.java
new file mode 100644
index 00000000000..bf73f2f0460
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/AbstractServiceIdDescItemProvider.java
@@ -0,0 +1,242 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AbstractServiceIdDescItemProvider
+ 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 AbstractServiceIdDescItemProvider(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);
+ addDescriptionPropertyDescriptor(object);
+ addDependsOnPropertyDescriptor(object);
+ addPriorityPropertyDescriptor(object);
+ addBundleIDPropertyDescriptor(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_AbstractServiceIdDesc_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AbstractServiceIdDesc_name_feature", "_UI_AbstractServiceIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.ABSTRACT_SERVICE_ID_DESC__NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Description feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDescriptionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_AbstractServiceIdDesc_description_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AbstractServiceIdDesc_description_feature", "_UI_AbstractServiceIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.ABSTRACT_SERVICE_ID_DESC__DESCRIPTION,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Depends On feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDependsOnPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_AbstractServiceIdDesc_dependsOn_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AbstractServiceIdDesc_dependsOn_feature", "_UI_AbstractServiceIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.ABSTRACT_SERVICE_ID_DESC__DEPENDS_ON,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Priority feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addPriorityPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_AbstractServiceIdDesc_priority_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AbstractServiceIdDesc_priority_feature", "_UI_AbstractServiceIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.ABSTRACT_SERVICE_ID_DESC__PRIORITY,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.INTEGRAL_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Bundle ID feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addBundleIDPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_AbstractServiceIdDesc_bundleID_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AbstractServiceIdDesc_bundleID_feature", "_UI_AbstractServiceIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.ABSTRACT_SERVICE_ID_DESC__BUNDLE_ID,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((AbstractServiceIdDesc)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_AbstractServiceIdDesc_type") :
+ getString("_UI_AbstractServiceIdDesc_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(AbstractServiceIdDesc.class)) {
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAME:
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__DESCRIPTION:
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__DEPENDS_ON:
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__PRIORITY:
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__BUNDLE_ID:
+ 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 ServicedescriptorswithidEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/AliasIdDescItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/AliasIdDescItemProvider.java
new file mode 100644
index 00000000000..17b2c225b6e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/AliasIdDescItemProvider.java
@@ -0,0 +1,143 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.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.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AliasIdDescItemProvider
+ extends AbstractServiceIdDescItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AliasIdDescItemProvider(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);
+
+ addAliasedServicePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Aliased Service feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addAliasedServicePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_AliasIdDesc_aliasedService_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_AliasIdDesc_aliasedService_feature", "_UI_AliasIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.ALIAS_ID_DESC__ALIASED_SERVICE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns AliasIdDesc.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/AliasIdDesc"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((AliasIdDesc)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_AliasIdDesc_type") :
+ getString("_UI_AliasIdDesc_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(AliasIdDesc.class)) {
+ case ServicedescriptorswithidPackage.ALIAS_ID_DESC__ALIASED_SERVICE:
+ 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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ConstructorInjectionItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ConstructorInjectionItemProvider.java
new file mode 100644
index 00000000000..a40c96066a3
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ConstructorInjectionItemProvider.java
@@ -0,0 +1,110 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.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.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ConstructorInjection;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ConstructorInjection} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ConstructorInjectionItemProvider
+ extends AbstractMethodInjectionItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ConstructorInjectionItemProvider(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 returns ConstructorInjection.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ConstructorInjection"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ConstructorInjection)object).getDescription();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ConstructorInjection_type") :
+ getString("_UI_ConstructorInjection_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);
+ 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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/FeatureInjectionItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/FeatureInjectionItemProvider.java
new file mode 100644
index 00000000000..50dec0ee2c7
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/FeatureInjectionItemProvider.java
@@ -0,0 +1,146 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class FeatureInjectionItemProvider
+ 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 FeatureInjectionItemProvider(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);
+
+ addDescriptionPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Description feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDescriptionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_FeatureInjection_description_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_FeatureInjection_description_feature", "_UI_FeatureInjection_type"),
+ ServicedescriptorswithidPackage.Literals.FEATURE_INJECTION__DESCRIPTION,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((FeatureInjection)object).getDescription();
+ return label == null || label.length() == 0 ?
+ getString("_UI_FeatureInjection_type") :
+ getString("_UI_FeatureInjection_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(FeatureInjection.class)) {
+ case ServicedescriptorswithidPackage.FEATURE_INJECTION__DESCRIPTION:
+ 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 ServicedescriptorswithidEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/IdDescriptorsItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/IdDescriptorsItemProvider.java
new file mode 100644
index 00000000000..5f023f3f754
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/IdDescriptorsItemProvider.java
@@ -0,0 +1,174 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.ecore.EStructuralFeature;
+
+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.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IdDescriptorsItemProvider
+ 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 IdDescriptorsItemProvider(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(ServicedescriptorswithidPackage.Literals.ID_DESCRIPTORS__REGISTRIES);
+ childrenFeatures.add(ServicedescriptorswithidPackage.Literals.ID_DESCRIPTORS__SERVICE_SETS);
+ }
+ 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 IdDescriptors.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/IdDescriptors"));
+ }
+
+ /**
+ * 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_IdDescriptors_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(IdDescriptors.class)) {
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS__REGISTRIES:
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS__SERVICE_SETS:
+ 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
+ (ServicedescriptorswithidPackage.Literals.ID_DESCRIPTORS__REGISTRIES,
+ ServicedescriptorswithidFactory.eINSTANCE.createRegistryIdDesc()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorswithidPackage.Literals.ID_DESCRIPTORS__SERVICE_SETS,
+ ServicedescriptorswithidFactory.eINSTANCE.createServiceSetIdDesc()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ServicedescriptorswithidEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/InjectedServiceItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/InjectedServiceItemProvider.java
new file mode 100644
index 00000000000..c4afe1ee237
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/InjectedServiceItemProvider.java
@@ -0,0 +1,143 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.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.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class InjectedServiceItemProvider
+ extends InjectedValueItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InjectedServiceItemProvider(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);
+
+ addServiceNamePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Service Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addServiceNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_InjectedService_serviceName_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_InjectedService_serviceName_feature", "_UI_InjectedService_type"),
+ ServicedescriptorswithidPackage.Literals.INJECTED_SERVICE__SERVICE_NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns InjectedService.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/InjectedService"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((InjectedService)object).getServiceName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_InjectedService_type") :
+ getString("_UI_InjectedService_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(InjectedService.class)) {
+ case ServicedescriptorswithidPackage.INJECTED_SERVICE__SERVICE_NAME:
+ 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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/InjectedValueItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/InjectedValueItemProvider.java
new file mode 100644
index 00000000000..f4284aac00c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/InjectedValueItemProvider.java
@@ -0,0 +1,146 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class InjectedValueItemProvider
+ 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 InjectedValueItemProvider(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);
+
+ addDescriptionPropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Description feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDescriptionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_InjectedValue_description_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_InjectedValue_description_feature", "_UI_InjectedValue_type"),
+ ServicedescriptorswithidPackage.Literals.INJECTED_VALUE__DESCRIPTION,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((InjectedValue)object).getDescription();
+ return label == null || label.length() == 0 ?
+ getString("_UI_InjectedValue_type") :
+ getString("_UI_InjectedValue_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(InjectedValue.class)) {
+ case ServicedescriptorswithidPackage.INJECTED_VALUE__DESCRIPTION:
+ 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 ServicedescriptorswithidEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/MethodInjectionItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/MethodInjectionItemProvider.java
new file mode 100644
index 00000000000..af6b6471041
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/MethodInjectionItemProvider.java
@@ -0,0 +1,143 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.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.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MethodInjectionItemProvider
+ extends AbstractMethodInjectionItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MethodInjectionItemProvider(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);
+
+ addMethodNamePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Method Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addMethodNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_MethodInjection_methodName_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_MethodInjection_methodName_feature", "_UI_MethodInjection_type"),
+ ServicedescriptorswithidPackage.Literals.METHOD_INJECTION__METHOD_NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns MethodInjection.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/MethodInjection"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((MethodInjection)object).getMethodName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_MethodInjection_type") :
+ getString("_UI_MethodInjection_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(MethodInjection.class)) {
+ case ServicedescriptorswithidPackage.METHOD_INJECTION__METHOD_NAME:
+ 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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/OpaqueInjectedValueItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/OpaqueInjectedValueItemProvider.java
new file mode 100644
index 00000000000..89168682232
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/OpaqueInjectedValueItemProvider.java
@@ -0,0 +1,143 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.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.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class OpaqueInjectedValueItemProvider
+ extends InjectedValueItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public OpaqueInjectedValueItemProvider(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_OpaqueInjectedValue_value_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_OpaqueInjectedValue_value_feature", "_UI_OpaqueInjectedValue_type"),
+ ServicedescriptorswithidPackage.Literals.OPAQUE_INJECTED_VALUE__VALUE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns OpaqueInjectedValue.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/OpaqueInjectedValue"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((OpaqueInjectedValue)object).getDescription();
+ return label == null || label.length() == 0 ?
+ getString("_UI_OpaqueInjectedValue_type") :
+ getString("_UI_OpaqueInjectedValue_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(OpaqueInjectedValue.class)) {
+ case ServicedescriptorswithidPackage.OPAQUE_INJECTED_VALUE__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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ParameterInjectionItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ParameterInjectionItemProvider.java
new file mode 100644
index 00000000000..91e1c59fadc
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ParameterInjectionItemProvider.java
@@ -0,0 +1,203 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.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.serviceregistry.servicedescriptorswithid.ParameterInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ParameterInjectionItemProvider
+ 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 ParameterInjectionItemProvider(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);
+
+ addParameterNamePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Parameter Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addParameterNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ParameterInjection_parameterName_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ParameterInjection_parameterName_feature", "_UI_ParameterInjection_type"),
+ ServicedescriptorswithidPackage.Literals.PARAMETER_INJECTION__PARAMETER_NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ 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(ServicedescriptorswithidPackage.Literals.PARAMETER_INJECTION__VALUES);
+ }
+ 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 ParameterInjection.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ParameterInjection"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ParameterInjection)object).getParameterName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ParameterInjection_type") :
+ getString("_UI_ParameterInjection_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(ParameterInjection.class)) {
+ case ServicedescriptorswithidPackage.PARAMETER_INJECTION__PARAMETER_NAME:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ServicedescriptorswithidPackage.PARAMETER_INJECTION__VALUES:
+ 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
+ (ServicedescriptorswithidPackage.Literals.PARAMETER_INJECTION__VALUES,
+ ServicedescriptorswithidFactory.eINSTANCE.createInjectedService()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorswithidPackage.Literals.PARAMETER_INJECTION__VALUES,
+ ServicedescriptorswithidFactory.eINSTANCE.createOpaqueInjectedValue()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ServicedescriptorswithidEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/PropertyInjectionItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/PropertyInjectionItemProvider.java
new file mode 100644
index 00000000000..6912dbbf0b7
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/PropertyInjectionItemProvider.java
@@ -0,0 +1,189 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.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.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PropertyInjectionItemProvider
+ extends FeatureInjectionItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PropertyInjectionItemProvider(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);
+
+ addPropertyNamePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Property Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addPropertyNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_PropertyInjection_propertyName_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_PropertyInjection_propertyName_feature", "_UI_PropertyInjection_type"),
+ ServicedescriptorswithidPackage.Literals.PROPERTY_INJECTION__PROPERTY_NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ 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(ServicedescriptorswithidPackage.Literals.PROPERTY_INJECTION__VALUES);
+ }
+ 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 PropertyInjection.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/PropertyInjection"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((PropertyInjection)object).getPropertyName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_PropertyInjection_type") :
+ getString("_UI_PropertyInjection_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(PropertyInjection.class)) {
+ case ServicedescriptorswithidPackage.PROPERTY_INJECTION__PROPERTY_NAME:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ServicedescriptorswithidPackage.PROPERTY_INJECTION__VALUES:
+ 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
+ (ServicedescriptorswithidPackage.Literals.PROPERTY_INJECTION__VALUES,
+ ServicedescriptorswithidFactory.eINSTANCE.createInjectedService()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorswithidPackage.Literals.PROPERTY_INJECTION__VALUES,
+ ServicedescriptorswithidFactory.eINSTANCE.createOpaqueInjectedValue()));
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/RegistryIdDescItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/RegistryIdDescItemProvider.java
new file mode 100644
index 00000000000..d9ac4f887d7
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/RegistryIdDescItemProvider.java
@@ -0,0 +1,277 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class RegistryIdDescItemProvider
+ 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 RegistryIdDescItemProvider(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);
+ addDescriptionPropertyDescriptor(object);
+ addIsUniquePropertyDescriptor(object);
+ addSetsPropertyDescriptor(object);
+ addExtendsPropertyDescriptor(object);
+ addParentsPropertyDescriptor(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_RegistryIdDesc_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryIdDesc_name_feature", "_UI_RegistryIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.REGISTRY_ID_DESC__NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Description feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDescriptionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_RegistryIdDesc_description_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryIdDesc_description_feature", "_UI_RegistryIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.REGISTRY_ID_DESC__DESCRIPTION,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Is Unique feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addIsUniquePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_RegistryIdDesc_isUnique_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryIdDesc_isUnique_feature", "_UI_RegistryIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.REGISTRY_ID_DESC__IS_UNIQUE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Sets feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addSetsPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_RegistryIdDesc_sets_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryIdDesc_sets_feature", "_UI_RegistryIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.REGISTRY_ID_DESC__SETS,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Extends feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addExtendsPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_RegistryIdDesc_extends_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryIdDesc_extends_feature", "_UI_RegistryIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.REGISTRY_ID_DESC__EXTENDS,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Parents feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addParentsPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_RegistryIdDesc_parents_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_RegistryIdDesc_parents_feature", "_UI_RegistryIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.REGISTRY_ID_DESC__PARENTS,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns RegistryIdDesc.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/RegistryIdDesc"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((RegistryIdDesc)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_RegistryIdDesc_type") :
+ getString("_UI_RegistryIdDesc_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(RegistryIdDesc.class)) {
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__NAME:
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__DESCRIPTION:
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__IS_UNIQUE:
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__SETS:
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__EXTENDS:
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__PARENTS:
+ 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 ServicedescriptorswithidEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServiceFactoryIdDescItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServiceFactoryIdDescItemProvider.java
new file mode 100644
index 00000000000..fae23afeb6c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServiceFactoryIdDescItemProvider.java
@@ -0,0 +1,110 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.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.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceFactoryIdDesc;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceFactoryIdDesc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServiceFactoryIdDescItemProvider
+ extends ServiceIdDescItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceFactoryIdDescItemProvider(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 returns ServiceFactoryIdDesc.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ServiceFactoryIdDesc"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ServiceFactoryIdDesc)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ServiceFactoryIdDesc_type") :
+ getString("_UI_ServiceFactoryIdDesc_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);
+ 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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServiceIdDescItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServiceIdDescItemProvider.java
new file mode 100644
index 00000000000..8089fdfc13b
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServiceIdDescItemProvider.java
@@ -0,0 +1,218 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.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.ViewerNotification;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServiceIdDescItemProvider
+ extends AbstractServiceIdDescItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceIdDescItemProvider(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);
+
+ addStartKindPropertyDescriptor(object);
+ addClassnamePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Start Kind feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addStartKindPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ServiceIdDesc_startKind_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ServiceIdDesc_startKind_feature", "_UI_ServiceIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.SERVICE_ID_DESC__START_KIND,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Classname feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addClassnamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ServiceIdDesc_classname_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ServiceIdDesc_classname_feature", "_UI_ServiceIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.SERVICE_ID_DESC__CLASSNAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ 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(ServicedescriptorswithidPackage.Literals.SERVICE_ID_DESC__INJECTIONS);
+ }
+ 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 ServiceIdDesc.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ServiceIdDesc"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ServiceIdDesc)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ServiceIdDesc_type") :
+ getString("_UI_ServiceIdDesc_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(ServiceIdDesc.class)) {
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__START_KIND:
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__CLASSNAME:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__INJECTIONS:
+ 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
+ (ServicedescriptorswithidPackage.Literals.SERVICE_ID_DESC__INJECTIONS,
+ ServicedescriptorswithidFactory.eINSTANCE.createPropertyInjection()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorswithidPackage.Literals.SERVICE_ID_DESC__INJECTIONS,
+ ServicedescriptorswithidFactory.eINSTANCE.createMethodInjection()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorswithidPackage.Literals.SERVICE_ID_DESC__INJECTIONS,
+ ServicedescriptorswithidFactory.eINSTANCE.createConstructorInjection()));
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServiceSetIdDescItemProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServiceSetIdDescItemProvider.java
new file mode 100644
index 00000000000..b602fdf1096
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServiceSetIdDescItemProvider.java
@@ -0,0 +1,256 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.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.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServiceSetIdDescItemProvider
+ 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 ServiceSetIdDescItemProvider(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);
+ addExtendsPropertyDescriptor(object);
+ addDescriptionPropertyDescriptor(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_ServiceSetIdDesc_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ServiceSetIdDesc_name_feature", "_UI_ServiceSetIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.SERVICE_SET_ID_DESC__NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Extends feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addExtendsPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ServiceSetIdDesc_extends_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ServiceSetIdDesc_extends_feature", "_UI_ServiceSetIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.SERVICE_SET_ID_DESC__EXTENDS,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Description feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addDescriptionPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_ServiceSetIdDesc_description_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_ServiceSetIdDesc_description_feature", "_UI_ServiceSetIdDesc_type"),
+ ServicedescriptorswithidPackage.Literals.SERVICE_SET_ID_DESC__DESCRIPTION,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ 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(ServicedescriptorswithidPackage.Literals.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS);
+ }
+ 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 ServiceSetIdDesc.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/ServiceSetIdDesc"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((ServiceSetIdDesc)object).getName();
+ return label == null || label.length() == 0 ?
+ getString("_UI_ServiceSetIdDesc_type") :
+ getString("_UI_ServiceSetIdDesc_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(ServiceSetIdDesc.class)) {
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__NAME:
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__EXTENDS:
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__DESCRIPTION:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS:
+ 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
+ (ServicedescriptorswithidPackage.Literals.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS,
+ ServicedescriptorswithidFactory.eINSTANCE.createServiceIdDesc()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorswithidPackage.Literals.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS,
+ ServicedescriptorswithidFactory.eINSTANCE.createAliasIdDesc()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ServicedescriptorswithidPackage.Literals.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS,
+ ServicedescriptorswithidFactory.eINSTANCE.createServiceFactoryIdDesc()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ServicedescriptorswithidEditPlugin.INSTANCE;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServicedescriptorswithidEditPlugin.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServicedescriptorswithidEditPlugin.java
new file mode 100644
index 00000000000..46adae6e4b7
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServicedescriptorswithidEditPlugin.java
@@ -0,0 +1,89 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.provider;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Servicedescriptorswithid edit plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ServicedescriptorswithidEditPlugin extends EMFPlugin {
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final ServicedescriptorswithidEditPlugin INSTANCE = new ServicedescriptorswithidEditPlugin();
+
+ /**
+ * 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 ServicedescriptorswithidEditPlugin() {
+ super
+ (new ResourceLocator [] {
+ });
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ @Override
+ public ResourceLocator getPluginResourceLocator() {
+ return plugin;
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ public static Implementation getPlugin() {
+ return plugin;
+ }
+
+ /**
+ * The actual implementation of the Eclipse <b>Plugin</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static class Implementation extends EclipsePlugin {
+ /**
+ * Creates an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Implementation() {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServicedescriptorswithidItemProviderAdapterFactory.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServicedescriptorswithidItemProviderAdapterFactory.java
new file mode 100644
index 00000000000..78624c87ef2
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.edit/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/provider/ServicedescriptorswithidItemProviderAdapterFactory.java
@@ -0,0 +1,463 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.provider;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.edit.provider.ChangeNotifier;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.IDisposable;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.util.ServicedescriptorswithidAdapterFactory;
+
+/**
+ * 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 ServicedescriptorswithidItemProviderAdapterFactory extends ServicedescriptorswithidAdapterFactory 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<Object>();
+
+ /**
+ * This constructs an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorswithidItemProviderAdapterFactory() {
+ supportedTypes.add(IEditingDomainItemProvider.class);
+ supportedTypes.add(IStructuredItemContentProvider.class);
+ supportedTypes.add(ITreeItemContentProvider.class);
+ supportedTypes.add(IItemLabelProvider.class);
+ supportedTypes.add(IItemPropertySource.class);
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected RegistryIdDescItemProvider registryIdDescItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createRegistryIdDescAdapter() {
+ if (registryIdDescItemProvider == null) {
+ registryIdDescItemProvider = new RegistryIdDescItemProvider(this);
+ }
+
+ return registryIdDescItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceIdDescItemProvider serviceIdDescItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createServiceIdDescAdapter() {
+ if (serviceIdDescItemProvider == null) {
+ serviceIdDescItemProvider = new ServiceIdDescItemProvider(this);
+ }
+
+ return serviceIdDescItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceSetIdDescItemProvider serviceSetIdDescItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createServiceSetIdDescAdapter() {
+ if (serviceSetIdDescItemProvider == null) {
+ serviceSetIdDescItemProvider = new ServiceSetIdDescItemProvider(this);
+ }
+
+ return serviceSetIdDescItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AliasIdDescItemProvider aliasIdDescItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createAliasIdDescAdapter() {
+ if (aliasIdDescItemProvider == null) {
+ aliasIdDescItemProvider = new AliasIdDescItemProvider(this);
+ }
+
+ return aliasIdDescItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IdDescriptorsItemProvider idDescriptorsItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createIdDescriptorsAdapter() {
+ if (idDescriptorsItemProvider == null) {
+ idDescriptorsItemProvider = new IdDescriptorsItemProvider(this);
+ }
+
+ return idDescriptorsItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected PropertyInjectionItemProvider propertyInjectionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createPropertyInjectionAdapter() {
+ if (propertyInjectionItemProvider == null) {
+ propertyInjectionItemProvider = new PropertyInjectionItemProvider(this);
+ }
+
+ return propertyInjectionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected MethodInjectionItemProvider methodInjectionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createMethodInjectionAdapter() {
+ if (methodInjectionItemProvider == null) {
+ methodInjectionItemProvider = new MethodInjectionItemProvider(this);
+ }
+
+ return methodInjectionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ParameterInjectionItemProvider parameterInjectionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createParameterInjectionAdapter() {
+ if (parameterInjectionItemProvider == null) {
+ parameterInjectionItemProvider = new ParameterInjectionItemProvider(this);
+ }
+
+ return parameterInjectionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InjectedServiceItemProvider injectedServiceItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createInjectedServiceAdapter() {
+ if (injectedServiceItemProvider == null) {
+ injectedServiceItemProvider = new InjectedServiceItemProvider(this);
+ }
+
+ return injectedServiceItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected OpaqueInjectedValueItemProvider opaqueInjectedValueItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createOpaqueInjectedValueAdapter() {
+ if (opaqueInjectedValueItemProvider == null) {
+ opaqueInjectedValueItemProvider = new OpaqueInjectedValueItemProvider(this);
+ }
+
+ return opaqueInjectedValueItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ConstructorInjection} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ConstructorInjectionItemProvider constructorInjectionItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ConstructorInjection}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createConstructorInjectionAdapter() {
+ if (constructorInjectionItemProvider == null) {
+ constructorInjectionItemProvider = new ConstructorInjectionItemProvider(this);
+ }
+
+ return constructorInjectionItemProvider;
+ }
+
+ /**
+ * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceFactoryIdDesc} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceFactoryIdDescItemProvider serviceFactoryIdDescItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceFactoryIdDesc}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createServiceFactoryIdDescAdapter() {
+ if (serviceFactoryIdDescItemProvider == null) {
+ serviceFactoryIdDescItemProvider = new ServiceFactoryIdDescItemProvider(this);
+ }
+
+ return serviceFactoryIdDescItemProvider;
+ }
+
+ /**
+ * This returns the root adapter factory that contains this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ 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
+ */
+ 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
+ */
+ public void addListener(INotifyChangedListener notifyChangedListener) {
+ changeNotifier.addListener(notifyChangedListener);
+ }
+
+ /**
+ * This removes a listener.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void removeListener(INotifyChangedListener notifyChangedListener) {
+ changeNotifier.removeListener(notifyChangedListener);
+ }
+
+ /**
+ * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ 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
+ */
+ public void dispose() {
+ if (registryIdDescItemProvider != null) registryIdDescItemProvider.dispose();
+ if (serviceIdDescItemProvider != null) serviceIdDescItemProvider.dispose();
+ if (serviceSetIdDescItemProvider != null) serviceSetIdDescItemProvider.dispose();
+ if (aliasIdDescItemProvider != null) aliasIdDescItemProvider.dispose();
+ if (idDescriptorsItemProvider != null) idDescriptorsItemProvider.dispose();
+ if (propertyInjectionItemProvider != null) propertyInjectionItemProvider.dispose();
+ if (methodInjectionItemProvider != null) methodInjectionItemProvider.dispose();
+ if (parameterInjectionItemProvider != null) parameterInjectionItemProvider.dispose();
+ if (injectedServiceItemProvider != null) injectedServiceItemProvider.dispose();
+ if (opaqueInjectedValueItemProvider != null) opaqueInjectedValueItemProvider.dispose();
+ if (constructorInjectionItemProvider != null) constructorInjectionItemProvider.dispose();
+ if (serviceFactoryIdDescItemProvider != null) serviceFactoryIdDescItemProvider.dispose();
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/.classpath b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/.classpath
new file mode 100644
index 00000000000..ed2bc1287f0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/.project b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/.project
new file mode 100644
index 00000000000..046bf32ee5e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.core.serviceregistry.editor</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/META-INF/MANIFEST.MF b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..7da9cc74730
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.infra.core.serviceregistry.editor;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.presentation.ServicedescriptorswithidEditorPlugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.presentation
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources;visibility:=reexport,
+ org.eclipse.papyrus.infra.core.serviceregistry.edit;visibility:=reexport,
+ org.eclipse.emf.ecore.xmi;visibility:=reexport,
+ org.eclipse.emf.edit.ui;visibility:=reexport,
+ org.eclipse.ui.ide;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/build.properties b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/build.properties
new file mode 100644
index 00000000000..0f81e49d110
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/build.properties
@@ -0,0 +1,10 @@
+#
+
+bin.includes = .,\
+ icons/,\
+ META-INF/,\
+ plugin.xml,\
+ plugin.properties
+jars.compile.order = .
+source.. = src/
+output.. = bin
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/obj16/ServicedescriptorsModelFile.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/obj16/ServicedescriptorsModelFile.gif
new file mode 100644
index 00000000000..8315589c999
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/obj16/ServicedescriptorsModelFile.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/obj16/ServicedescriptorswithidModelFile.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/obj16/ServicedescriptorswithidModelFile.gif
new file mode 100644
index 00000000000..40ce4987ddf
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/obj16/ServicedescriptorswithidModelFile.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/wizban/NewServicedescriptors.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/wizban/NewServicedescriptors.gif
new file mode 100644
index 00000000000..a6b42e7444a
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/wizban/NewServicedescriptors.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/wizban/NewServicedescriptorswithid.gif b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/wizban/NewServicedescriptorswithid.gif
new file mode 100644
index 00000000000..5f38f495cb6
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/icons/full/wizban/NewServicedescriptorswithid.gif
Binary files differ
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/plugin.properties b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/plugin.properties
new file mode 100644
index 00000000000..a5e9be5690d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/plugin.properties
@@ -0,0 +1,68 @@
+#################################################################################
+# Copyright (c) 2012 Cedric Dumoulin.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+##################################################################################
+pluginName=Papyrus Service Registry
+providerName=Eclipse Modeling Project
+
+_UI_ServicedescriptorswithidEditor_menu = &Servicedescriptorswithid 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_ParentPage_label = Parent
+_UI_ListPage_label = List
+_UI_TreePage_label = Tree
+_UI_TablePage_label = Table
+_UI_TreeWithColumnsPage_label = Tree with Columns
+_UI_ObjectColumn_label = Object
+_UI_SelfColumn_label = Self
+
+_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_ServicedescriptorswithidModelWizard_label = Servicedescriptorswithid Model
+_UI_ServicedescriptorswithidModelWizard_description = Create a new Servicedescriptorswithid model
+
+_UI_ServicedescriptorswithidEditor_label = Servicedescriptorswithid Model Editor
+
+_UI_ServicedescriptorswithidEditorFilenameDefaultBase = My
+_UI_ServicedescriptorswithidEditorFilenameExtensions = servicedescriptorswithid
+
+_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_ServicedescriptorsEditor_menu = &Servicedescriptors Editor
+ _UI_ServicedescriptorsModelWizard_label = Servicedescriptors Model
+_UI_ServicedescriptorsModelWizard_description = Create a new Servicedescriptors model
+ _UI_ServicedescriptorsEditor_label = Servicedescriptors Model Editor
+ _UI_ServicedescriptorsEditorFilenameDefaultBase = My
+_UI_ServicedescriptorsEditorFilenameExtensions = servicedescriptors
+
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/plugin.xml b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/plugin.xml
new file mode 100644
index 00000000000..052a4975394
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/plugin.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+-->
+
+<plugin>
+
+ <extension point="org.eclipse.ui.newWizards">
+ <category
+ id="org.eclipse.emf.ecore.Wizard.category.ID"
+ name="%_UI_Wizard_category"/>
+ <wizard
+ id="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.presentation.ServicedescriptorswithidModelWizardID"
+ name="%_UI_ServicedescriptorswithidModelWizard_label"
+ class="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.presentation.ServicedescriptorswithidModelWizard"
+ category="org.eclipse.emf.ecore.Wizard.category.ID"
+ icon="icons/full/obj16/ServicedescriptorswithidModelFile.gif">
+ <description>%_UI_ServicedescriptorswithidModelWizard_description</description>
+ <selection class="org.eclipse.core.resources.IResource"/>
+ </wizard>
+ </extension>
+
+ <extension point="org.eclipse.ui.editors">
+ <editor
+ id="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.presentation.ServicedescriptorswithidEditorID"
+ name="%_UI_ServicedescriptorswithidEditor_label"
+ icon="icons/full/obj16/ServicedescriptorswithidModelFile.gif"
+ extensions="servicedescriptorswithid"
+ class="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.presentation.ServicedescriptorswithidEditor"
+ contributorClass="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.presentation.ServicedescriptorswithidActionBarContributor">
+ </editor>
+ </extension>
+
+</plugin>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsActionBarContributor.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsActionBarContributor.java
new file mode 100644
index 00000000000..ef6da6eb217
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsActionBarContributor.java
@@ -0,0 +1,423 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+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.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Servicedescriptors model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorsActionBarContributor
+ 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(ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {
+ @Override
+ public void run() {
+ try {
+ getPage().showView("org.eclipse.ui.views.PropertySheet");
+ }
+ catch (PartInitException exception) {
+ ServicedescriptorsEditorPlugin.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(ServicedescriptorsEditorPlugin.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 ServicedescriptorsActionBarContributor() {
+ super(ADDITIONS_LAST_STYLE);
+ loadResourceAction = new LoadResourceAction();
+ validateAction = new ValidateAction();
+ controlAction = new ControlAction();
+ }
+
+ /**
+ * This adds Separators for editor additions to the tool bar.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void contributeToToolBar(IToolBarManager toolBarManager) {
+ toolBarManager.add(new Separator("servicedescriptors-settings"));
+ toolBarManager.add(new Separator("servicedescriptors-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(ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorsEditor_menu"), "org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorsMenuID");
+ 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(ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ submenuManager.insertBefore("additions", createChildMenuManager);
+
+ // Prepare for CreateSibling item addition or removal.
+ //
+ createSiblingMenuManager = new MenuManager(ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+ submenuManager.insertBefore("additions", createSiblingMenuManager);
+
+ // Force an update because Eclipse hides empty menus now.
+ //
+ submenuManager.addMenuListener
+ (new IMenuListener() {
+ 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
+ */
+ 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<IAction>();
+ 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<IAction>();
+ 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(ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ populateManager(submenuManager, createChildActions, null);
+ menuManager.insertBefore("edit", submenuManager);
+
+ submenuManager = new MenuManager(ServicedescriptorsEditorPlugin.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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsEditor.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsEditor.java
new file mode 100644
index 00000000000..4de8e050981
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsEditor.java
@@ -0,0 +1,1812 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.viewers.ColumnWeightData;
+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.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+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.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.layout.FillLayout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+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.ViewerPane;
+
+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.EObject;
+import org.eclipse.emf.ecore.EValidator;
+
+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.infra.core.serviceregistry.servicedescriptors.provider.ServicedescriptorsItemProviderAdapterFactory;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Servicedescriptors model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorsEditor
+ extends MultiPageEditorPart
+ implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+ /**
+ * 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 PropertySheetPage propertySheetPage;
+
+ /**
+ * 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 inverts the roll of parent and child in the content provider and show parents as a tree.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected TreeViewer parentViewer;
+
+ /**
+ * This shows how a tree view works.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected TreeViewer treeViewer;
+
+ /**
+ * This shows how a list view works.
+ * A list viewer doesn't support icons.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ListViewer listViewer;
+
+ /**
+ * This shows how a table view works.
+ * A table can be used as a list with icons.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected TableViewer tableViewer;
+
+ /**
+ * This shows how a tree view with columns works.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected TreeViewer treeViewerWithColumns;
+
+ /**
+ * This keeps track of the active viewer pane, in the book.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ViewerPane currentViewerPane;
+
+ /**
+ * 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<ISelectionChangedListener>();
+
+ /**
+ * 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() {
+ public void partActivated(IWorkbenchPart p) {
+ if (p instanceof ContentOutline) {
+ if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+ getActionBarContributor().setActiveEditor(ServicedescriptorsEditor.this);
+
+ setCurrentViewer(contentOutlineViewer);
+ }
+ }
+ else if (p instanceof PropertySheet) {
+ if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+ getActionBarContributor().setActiveEditor(ServicedescriptorsEditor.this);
+ handleActivate();
+ }
+ }
+ else if (p == ServicedescriptorsEditor.this) {
+ handleActivate();
+ }
+ }
+ public void partBroughtToTop(IWorkbenchPart p) {
+ // Ignore.
+ }
+ public void partClosed(IWorkbenchPart p) {
+ // Ignore.
+ }
+ public void partDeactivated(IWorkbenchPart p) {
+ // Ignore.
+ }
+ 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<Resource>();
+
+ /**
+ * Resources that have been changed since last activation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+ /**
+ * Resources that have been saved.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+ /**
+ * Map to store the diagnostic associated with a resource.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+ /**
+ * 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() {
+ @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);
+ }
+
+ if (updateProblemIndication) {
+ getSite().getShell().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ updateProblemIndication();
+ }
+ });
+ }
+ break;
+ }
+ }
+ }
+ else {
+ super.notifyChanged(notification);
+ }
+ }
+
+ @Override
+ protected void setTarget(Resource target) {
+ basicSetTarget(target);
+ }
+
+ @Override
+ protected void unsetTarget(Resource target) {
+ basicUnsetTarget(target);
+ }
+ };
+
+ /**
+ * This listens for workspace changes.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IResourceChangeListener resourceChangeListener =
+ new IResourceChangeListener() {
+ 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<Resource>();
+ protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+ public boolean visit(IResourceDelta delta) {
+ if (delta.getResource().getType() == IResource.FILE) {
+ if (delta.getKind() == IResourceDelta.REMOVED ||
+ delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+ Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+ if (resource != null) {
+ if (delta.getKind() == IResourceDelta.REMOVED) {
+ removedResources.add(resource);
+ }
+ else if (!savedResources.remove(resource)) {
+ changedResources.add(resource);
+ }
+ }
+ }
+ }
+
+ 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() {
+ public void run() {
+ removedResources.addAll(visitor.getRemovedResources());
+ if (!isDirty()) {
+ getSite().getPage().closeEditor(ServicedescriptorsEditor.this, false);
+ }
+ }
+ });
+ }
+
+ if (!visitor.getChangedResources().isEmpty()) {
+ getSite().getShell().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ changedResources.addAll(visitor.getChangedResources());
+ if (getSite().getPage().getActiveEditor() == ServicedescriptorsEditor.this) {
+ handleActivate();
+ }
+ }
+ });
+ }
+ }
+ catch (CoreException exception) {
+ ServicedescriptorsEditorPlugin.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(ServicedescriptorsEditor.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())) {
+ if (isDirty()) {
+ changedResources.addAll(editingDomain.getResourceSet().getResources());
+ }
+ editingDomain.getCommandStack().flush();
+
+ updateProblemIndication = false;
+ for (Resource resource : changedResources) {
+ if (resource.isLoaded()) {
+ resource.unload();
+ try {
+ resource.load(Collections.EMPTY_MAP);
+ }
+ 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.infra.core.serviceregistry.editor",
+ 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) {
+ ServicedescriptorsEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+
+ if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+ markerHelper.deleteMarkers(editingDomain.getResourceSet());
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ try {
+ markerHelper.createMarkers(diagnostic);
+ }
+ catch (CoreException exception) {
+ ServicedescriptorsEditorPlugin.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 ServicedescriptorsEditor() {
+ 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 ServicedescriptorsItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+ // Create the command stack that will notify this editor as commands are executed.
+ //
+ BasicCommandStack commandStack = new BasicCommandStack();
+
+ // 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() {
+ public void commandStackChanged(final EventObject event) {
+ getContainer().getDisplay().asyncExec
+ (new Runnable() {
+ 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());
+ }
+ if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+ 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() {
+ 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
+ */
+ 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;
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setCurrentViewerPane(ViewerPane viewerPane) {
+ if (currentViewerPane != viewerPane) {
+ if (currentViewerPane != null) {
+ currentViewerPane.showFocus(false);
+ }
+ currentViewerPane = viewerPane;
+ }
+ setCurrentViewer(currentViewerPane.getViewer());
+ }
+
+ /**
+ * 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.
+ //
+ 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
+ */
+ 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() };
+ 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());
+ 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) {
+ if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+ BasicDiagnostic basicDiagnostic =
+ new BasicDiagnostic
+ (Diagnostic.ERROR,
+ "org.eclipse.papyrus.infra.core.serviceregistry.editor",
+ 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.infra.core.serviceregistry.editor",
+ 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.
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ServicedescriptorsEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ Tree tree = new Tree(composite, SWT.MULTI);
+ TreeViewer newTreeViewer = new TreeViewer(tree);
+ return newTreeViewer;
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+
+ selectionViewer = (TreeViewer)viewerPane.getViewer();
+ selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+
+ selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+ selectionViewer.setInput(editingDomain.getResourceSet());
+ selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+ viewerPane.setTitle(editingDomain.getResourceSet());
+
+ new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+ createContextMenuFor(selectionViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_SelectionPage_label"));
+ }
+
+ // Create a page for the parent tree view.
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ServicedescriptorsEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ Tree tree = new Tree(composite, SWT.MULTI);
+ TreeViewer newTreeViewer = new TreeViewer(tree);
+ return newTreeViewer;
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+
+ parentViewer = (TreeViewer)viewerPane.getViewer();
+ parentViewer.setAutoExpandLevel(30);
+ parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));
+ parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(parentViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_ParentPage_label"));
+ }
+
+ // This is the page for the list viewer
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ServicedescriptorsEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new ListViewer(composite);
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+ listViewer = (ListViewer)viewerPane.getViewer();
+ listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(listViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_ListPage_label"));
+ }
+
+ // This is the page for the tree viewer
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ServicedescriptorsEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new TreeViewer(composite);
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+ treeViewer = (TreeViewer)viewerPane.getViewer();
+ treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);
+
+ createContextMenuFor(treeViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_TreePage_label"));
+ }
+
+ // This is the page for the table viewer.
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ServicedescriptorsEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new TableViewer(composite);
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+ tableViewer = (TableViewer)viewerPane.getViewer();
+
+ Table table = tableViewer.getTable();
+ TableLayout layout = new TableLayout();
+ table.setLayout(layout);
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ TableColumn objectColumn = new TableColumn(table, SWT.NONE);
+ layout.addColumnData(new ColumnWeightData(3, 100, true));
+ objectColumn.setText(getString("_UI_ObjectColumn_label"));
+ objectColumn.setResizable(true);
+
+ TableColumn selfColumn = new TableColumn(table, SWT.NONE);
+ layout.addColumnData(new ColumnWeightData(2, 100, true));
+ selfColumn.setText(getString("_UI_SelfColumn_label"));
+ selfColumn.setResizable(true);
+
+ tableViewer.setColumnProperties(new String [] {"a", "b"});
+ tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(tableViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_TablePage_label"));
+ }
+
+ // This is the page for the table tree viewer.
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ServicedescriptorsEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new TreeViewer(composite);
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+
+ treeViewerWithColumns = (TreeViewer)viewerPane.getViewer();
+
+ Tree tree = treeViewerWithColumns.getTree();
+ tree.setLayoutData(new FillLayout());
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+
+ TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);
+ objectColumn.setText(getString("_UI_ObjectColumn_label"));
+ objectColumn.setResizable(true);
+ objectColumn.setWidth(250);
+
+ TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);
+ selfColumn.setText(getString("_UI_SelfColumn_label"));
+ selfColumn.setResizable(true);
+ selfColumn.setWidth(200);
+
+ treeViewerWithColumns.setColumnProperties(new String [] {"a", "b"});
+ treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(treeViewerWithColumns);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label"));
+ }
+
+ getSite().getShell().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ 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() {
+ 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) {
+ ((CTabFolder)getContainer()).setTabHeight(1);
+ Point point = getContainer().getSize();
+ getContainer().setSize(point.x, point.y + 6);
+ }
+ }
+ }
+
+ /**
+ * 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) {
+ ((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+ Point point = getContainer().getSize();
+ getContainer().setSize(point.x, point.y - 6);
+ }
+ }
+ }
+
+ /**
+ * 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
+ */
+ @SuppressWarnings("rawtypes")
+ @Override
+ public Object getAdapter(Class key) {
+ if (key.equals(IContentOutlinePage.class)) {
+ return showOutlineView() ? getContentOutlinePage() : null;
+ }
+ else if (key.equals(IPropertySheetPage.class)) {
+ return getPropertySheetPage();
+ }
+ else if (key.equals(IGotoMarker.class)) {
+ return this;
+ }
+ 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.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+ contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+ // 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.
+ //
+ 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() {
+ if (propertySheetPage == null) {
+ propertySheetPage =
+ new ExtendedPropertySheetPage(editingDomain) {
+ @Override
+ public void setSelectionToViewer(List<?> selection) {
+ ServicedescriptorsEditor.this.setSelectionToViewer(selection);
+ ServicedescriptorsEditor.this.setFocus();
+ }
+
+ @Override
+ public void setActionBars(IActionBars actionBars) {
+ super.setActionBars(actionBars);
+ getActionBarContributor().shareGlobalActions(this, actionBars);
+ }
+ };
+ propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+ }
+
+ 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 (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+ Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+ if (selectedElements.hasNext()) {
+ // Get the first selected element.
+ //
+ Object selectedElement = selectedElements.next();
+
+ // If it's the selection viewer, then we want it to select the same selection as this selection.
+ //
+ if (currentViewerPane.getViewer() == selectionViewer) {
+ ArrayList<Object> selectionList = new ArrayList<Object>();
+ selectionList.add(selectedElement);
+ while (selectedElements.hasNext()) {
+ selectionList.add(selectedElements.next());
+ }
+
+ // Set the selection to the widget.
+ //
+ selectionViewer.setSelection(new StructuredSelection(selectionList));
+ }
+ else {
+ // Set the input to the widget.
+ //
+ if (currentViewerPane.getViewer().getInput() != selectedElement) {
+ currentViewerPane.getViewer().setInput(selectedElement);
+ currentViewerPane.setTitle(selectedElement);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * 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 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<Object, Object>();
+ saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+ // 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;
+ for (Resource resource : editingDomain.getResourceSet().getResources()) {
+ 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.
+ //
+ ServicedescriptorsEditorPlugin.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
+ */
+ public void gotoMarker(IMarker marker) {
+ try {
+ if (marker.getType().equals(EValidator.MARKER)) {
+ String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+ if (uriAttribute != null) {
+ URI uri = URI.createURI(uriAttribute);
+ EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+ if (eObject != null) {
+ setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+ }
+ }
+ }
+ }
+ catch (CoreException exception) {
+ ServicedescriptorsEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+
+ /**
+ * 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() {
+ if (currentViewerPane != null) {
+ currentViewerPane.setFocus();
+ }
+ else {
+ getControl(getActivePage()).setFocus();
+ }
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ selectionChangedListeners.add(listener);
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ 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
+ */
+ 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
+ */
+ 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 ServicedescriptorsEditorPlugin.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 ServicedescriptorsEditorPlugin.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
+ */
+ 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);
+ }
+
+ if (propertySheetPage != null) {
+ 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 true;
+ }
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsEditorPlugin.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsEditorPlugin.java
new file mode 100644
index 00000000000..433280cd906
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsEditorPlugin.java
@@ -0,0 +1,91 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.presentation;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Servicedescriptors editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ServicedescriptorsEditorPlugin extends EMFPlugin {
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final ServicedescriptorsEditorPlugin INSTANCE = new ServicedescriptorsEditorPlugin();
+
+ /**
+ * 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 ServicedescriptorsEditorPlugin() {
+ super
+ (new ResourceLocator [] {
+ });
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ @Override
+ public ResourceLocator getPluginResourceLocator() {
+ return plugin;
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ public static Implementation getPlugin() {
+ return plugin;
+ }
+
+ /**
+ * The actual implementation of the Eclipse <b>Plugin</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static class Implementation extends EclipseUIPlugin {
+ /**
+ * Creates an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Implementation() {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsModelWizard.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsModelWizard.java
new file mode 100644
index 00000000000..1ee68c8e5fb
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/presentation/ServicedescriptorsModelWizard.java
@@ -0,0 +1,627 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.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.emf.common.CommonPlugin;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+
+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.EObject;
+
+import org.eclipse.emf.ecore.xmi.XMLResource;
+
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+
+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.jface.dialogs.MessageDialog;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.ModifyEvent;
+
+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.actions.WorkspaceModifyOperation;
+
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.ISetSelectionTarget;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.provider.ServicedescriptorsEditPlugin;
+
+
+import org.eclipse.core.runtime.Path;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+
+
+/**
+ * This is a simple wizard for creating a new model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorsModelWizard 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(ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorsEditorFilenameExtensions").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 =
+ ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorsEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");
+
+ /**
+ * This caches an instance of the model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServicedescriptorsPackage servicedescriptorsPackage = ServicedescriptorsPackage.eINSTANCE;
+
+ /**
+ * This caches an instance of the model factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServicedescriptorsFactory servicedescriptorsFactory = servicedescriptorsPackage.getServicedescriptorsFactory();
+
+ /**
+ * This is the file creation page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServicedescriptorsModelWizardNewFileCreationPage newFileCreationPage;
+
+ /**
+ * This is the initial object creation page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServicedescriptorsModelWizardInitialObjectCreationPage 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
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ this.workbench = workbench;
+ this.selection = selection;
+ setWindowTitle(ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));
+ setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(ServicedescriptorsEditorPlugin.INSTANCE.getImage("full/wizban/NewServicedescriptors")));
+ }
+
+ /**
+ * Returns the names of the types that can be created as the root object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<String> getInitialObjectNames() {
+ if (initialObjectNames == null) {
+ initialObjectNames = new ArrayList<String>();
+ for (EClassifier eClassifier : servicedescriptorsPackage.getEClassifiers()) {
+ if (eClassifier instanceof EClass) {
+ EClass eClass = (EClass)eClassifier;
+ if (!eClass.isAbstract()) {
+ initialObjectNames.add(eClass.getName());
+ }
+ }
+ }
+ Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());
+ }
+ return initialObjectNames;
+ }
+
+ /**
+ * Create a new model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EObject createInitialModel() {
+ EClass eClass = (EClass)servicedescriptorsPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+ EObject rootObject = servicedescriptorsFactory.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);
+
+ // 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<Object, Object>();
+ options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
+ resource.save(options);
+ }
+ catch (Exception exception) {
+ ServicedescriptorsEditorPlugin.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() {
+ 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()).getId());
+ }
+ catch (PartInitException exception) {
+ MessageDialog.openError(workbenchWindow.getShell(), ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());
+ return false;
+ }
+
+ return true;
+ }
+ catch (Exception exception) {
+ ServicedescriptorsEditorPlugin.INSTANCE.log(exception);
+ return false;
+ }
+ }
+
+ /**
+ * This is the one page of the wizard.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public class ServicedescriptorsModelWizardNewFileCreationPage extends WizardNewFileCreationPage {
+ /**
+ * Pass in the selection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorsModelWizardNewFileCreationPage(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(ServicedescriptorsEditorPlugin.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 ServicedescriptorsModelWizardInitialObjectCreationPage 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 ServicedescriptorsModelWizardInitialObjectCreationPage(String pageId) {
+ super(pageId);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ 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(ServicedescriptorsEditorPlugin.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(ServicedescriptorsEditorPlugin.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() {
+ 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 ServicedescriptorsEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");
+ }
+ catch(MissingResourceException mre) {
+ ServicedescriptorsEditorPlugin.INSTANCE.log(mre);
+ }
+ return typeName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<String> getEncodings() {
+ if (encodings == null) {
+ encodings = new ArrayList<String>();
+ for (StringTokenizer stringTokenizer = new StringTokenizer(ServicedescriptorsEditorPlugin.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 ServicedescriptorsModelWizardNewFileCreationPage("Whatever", selection);
+ newFileCreationPage.setTitle(ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorsModelWizard_label"));
+ newFileCreationPage.setDescription(ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorsModelWizard_description"));
+ newFileCreationPage.setFileName(ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorsEditorFilenameDefaultBase") + "." + 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 = ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorsEditorFilenameDefaultBase");
+ 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 ServicedescriptorsModelWizardInitialObjectCreationPage("Whatever2");
+ initialObjectCreationPage.setTitle(ServicedescriptorsEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorsModelWizard_label"));
+ initialObjectCreationPage.setDescription(ServicedescriptorsEditorPlugin.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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidActionBarContributor.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidActionBarContributor.java
new file mode 100644
index 00000000000..ad47561efe1
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidActionBarContributor.java
@@ -0,0 +1,423 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.LoadResourceAction;
+import org.eclipse.emf.edit.ui.action.ValidateAction;
+
+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.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * This is the action bar contributor for the Servicedescriptorswithid model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorswithidActionBarContributor
+ 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(ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_ShowPropertiesView_menu_item")) {
+ @Override
+ public void run() {
+ try {
+ getPage().showView("org.eclipse.ui.views.PropertySheet");
+ }
+ catch (PartInitException exception) {
+ ServicedescriptorswithidEditorPlugin.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(ServicedescriptorswithidEditorPlugin.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 ServicedescriptorswithidActionBarContributor() {
+ super(ADDITIONS_LAST_STYLE);
+ loadResourceAction = new LoadResourceAction();
+ validateAction = new ValidateAction();
+ controlAction = new ControlAction();
+ }
+
+ /**
+ * This adds Separators for editor additions to the tool bar.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void contributeToToolBar(IToolBarManager toolBarManager) {
+ toolBarManager.add(new Separator("servicedescriptorswithid-settings"));
+ toolBarManager.add(new Separator("servicedescriptorswithid-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(ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorswithidEditor_menu"), "org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithidMenuID");
+ 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(ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ submenuManager.insertBefore("additions", createChildMenuManager);
+
+ // Prepare for CreateSibling item addition or removal.
+ //
+ createSiblingMenuManager = new MenuManager(ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_CreateSibling_menu_item"));
+ submenuManager.insertBefore("additions", createSiblingMenuManager);
+
+ // Force an update because Eclipse hides empty menus now.
+ //
+ submenuManager.addMenuListener
+ (new IMenuListener() {
+ 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
+ */
+ 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<IAction>();
+ 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<IAction>();
+ 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(ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_CreateChild_menu_item"));
+ populateManager(submenuManager, createChildActions, null);
+ menuManager.insertBefore("edit", submenuManager);
+
+ submenuManager = new MenuManager(ServicedescriptorswithidEditorPlugin.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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidEditor.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidEditor.java
new file mode 100644
index 00000000000..0a954f7e429
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidEditor.java
@@ -0,0 +1,1812 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.viewers.ColumnWeightData;
+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.ListViewer;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+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.Transfer;
+
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+
+import org.eclipse.swt.graphics.Point;
+
+import org.eclipse.swt.layout.FillLayout;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+
+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.ViewerPane;
+
+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.EObject;
+import org.eclipse.emf.ecore.EValidator;
+
+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.infra.core.serviceregistry.servicedescriptorswithid.provider.ServicedescriptorswithidItemProviderAdapterFactory;
+
+import org.eclipse.ui.actions.WorkspaceModifyOperation;
+
+
+/**
+ * This is an example of a Servicedescriptorswithid model editor.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorswithidEditor
+ extends MultiPageEditorPart
+ implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+ /**
+ * 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 PropertySheetPage propertySheetPage;
+
+ /**
+ * 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 inverts the roll of parent and child in the content provider and show parents as a tree.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected TreeViewer parentViewer;
+
+ /**
+ * This shows how a tree view works.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected TreeViewer treeViewer;
+
+ /**
+ * This shows how a list view works.
+ * A list viewer doesn't support icons.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ListViewer listViewer;
+
+ /**
+ * This shows how a table view works.
+ * A table can be used as a list with icons.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected TableViewer tableViewer;
+
+ /**
+ * This shows how a tree view with columns works.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected TreeViewer treeViewerWithColumns;
+
+ /**
+ * This keeps track of the active viewer pane, in the book.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ViewerPane currentViewerPane;
+
+ /**
+ * 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<ISelectionChangedListener>();
+
+ /**
+ * 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() {
+ public void partActivated(IWorkbenchPart p) {
+ if (p instanceof ContentOutline) {
+ if (((ContentOutline)p).getCurrentPage() == contentOutlinePage) {
+ getActionBarContributor().setActiveEditor(ServicedescriptorswithidEditor.this);
+
+ setCurrentViewer(contentOutlineViewer);
+ }
+ }
+ else if (p instanceof PropertySheet) {
+ if (((PropertySheet)p).getCurrentPage() == propertySheetPage) {
+ getActionBarContributor().setActiveEditor(ServicedescriptorswithidEditor.this);
+ handleActivate();
+ }
+ }
+ else if (p == ServicedescriptorswithidEditor.this) {
+ handleActivate();
+ }
+ }
+ public void partBroughtToTop(IWorkbenchPart p) {
+ // Ignore.
+ }
+ public void partClosed(IWorkbenchPart p) {
+ // Ignore.
+ }
+ public void partDeactivated(IWorkbenchPart p) {
+ // Ignore.
+ }
+ 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<Resource>();
+
+ /**
+ * Resources that have been changed since last activation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<Resource> changedResources = new ArrayList<Resource>();
+
+ /**
+ * Resources that have been saved.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<Resource> savedResources = new ArrayList<Resource>();
+
+ /**
+ * Map to store the diagnostic associated with a resource.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Map<Resource, Diagnostic> resourceToDiagnosticMap = new LinkedHashMap<Resource, Diagnostic>();
+
+ /**
+ * 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() {
+ @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);
+ }
+
+ if (updateProblemIndication) {
+ getSite().getShell().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ updateProblemIndication();
+ }
+ });
+ }
+ break;
+ }
+ }
+ }
+ else {
+ super.notifyChanged(notification);
+ }
+ }
+
+ @Override
+ protected void setTarget(Resource target) {
+ basicSetTarget(target);
+ }
+
+ @Override
+ protected void unsetTarget(Resource target) {
+ basicUnsetTarget(target);
+ }
+ };
+
+ /**
+ * This listens for workspace changes.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IResourceChangeListener resourceChangeListener =
+ new IResourceChangeListener() {
+ 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<Resource>();
+ protected Collection<Resource> removedResources = new ArrayList<Resource>();
+
+ public boolean visit(IResourceDelta delta) {
+ if (delta.getResource().getType() == IResource.FILE) {
+ if (delta.getKind() == IResourceDelta.REMOVED ||
+ delta.getKind() == IResourceDelta.CHANGED && delta.getFlags() != IResourceDelta.MARKERS) {
+ Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(delta.getFullPath().toString(), true), false);
+ if (resource != null) {
+ if (delta.getKind() == IResourceDelta.REMOVED) {
+ removedResources.add(resource);
+ }
+ else if (!savedResources.remove(resource)) {
+ changedResources.add(resource);
+ }
+ }
+ }
+ }
+
+ 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() {
+ public void run() {
+ removedResources.addAll(visitor.getRemovedResources());
+ if (!isDirty()) {
+ getSite().getPage().closeEditor(ServicedescriptorswithidEditor.this, false);
+ }
+ }
+ });
+ }
+
+ if (!visitor.getChangedResources().isEmpty()) {
+ getSite().getShell().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ changedResources.addAll(visitor.getChangedResources());
+ if (getSite().getPage().getActiveEditor() == ServicedescriptorswithidEditor.this) {
+ handleActivate();
+ }
+ }
+ });
+ }
+ }
+ catch (CoreException exception) {
+ ServicedescriptorswithidEditorPlugin.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(ServicedescriptorswithidEditor.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())) {
+ if (isDirty()) {
+ changedResources.addAll(editingDomain.getResourceSet().getResources());
+ }
+ editingDomain.getCommandStack().flush();
+
+ updateProblemIndication = false;
+ for (Resource resource : changedResources) {
+ if (resource.isLoaded()) {
+ resource.unload();
+ try {
+ resource.load(Collections.EMPTY_MAP);
+ }
+ 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.infra.core.serviceregistry.editor",
+ 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) {
+ ServicedescriptorswithidEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+
+ if (markerHelper.hasMarkers(editingDomain.getResourceSet())) {
+ markerHelper.deleteMarkers(editingDomain.getResourceSet());
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ try {
+ markerHelper.createMarkers(diagnostic);
+ }
+ catch (CoreException exception) {
+ ServicedescriptorswithidEditorPlugin.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 ServicedescriptorswithidEditor() {
+ 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 ServicedescriptorswithidItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+ // Create the command stack that will notify this editor as commands are executed.
+ //
+ BasicCommandStack commandStack = new BasicCommandStack();
+
+ // 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() {
+ public void commandStackChanged(final EventObject event) {
+ getContainer().getDisplay().asyncExec
+ (new Runnable() {
+ 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());
+ }
+ if (propertySheetPage != null && !propertySheetPage.getControl().isDisposed()) {
+ 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() {
+ 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
+ */
+ 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;
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setCurrentViewerPane(ViewerPane viewerPane) {
+ if (currentViewerPane != viewerPane) {
+ if (currentViewerPane != null) {
+ currentViewerPane.showFocus(false);
+ }
+ currentViewerPane = viewerPane;
+ }
+ setCurrentViewer(currentViewerPane.getViewer());
+ }
+
+ /**
+ * 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.
+ //
+ 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
+ */
+ 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() };
+ 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());
+ 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) {
+ if (!resource.getErrors().isEmpty() || !resource.getWarnings().isEmpty()) {
+ BasicDiagnostic basicDiagnostic =
+ new BasicDiagnostic
+ (Diagnostic.ERROR,
+ "org.eclipse.papyrus.infra.core.serviceregistry.editor",
+ 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.infra.core.serviceregistry.editor",
+ 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.
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ServicedescriptorswithidEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ Tree tree = new Tree(composite, SWT.MULTI);
+ TreeViewer newTreeViewer = new TreeViewer(tree);
+ return newTreeViewer;
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+
+ selectionViewer = (TreeViewer)viewerPane.getViewer();
+ selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+
+ selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+ selectionViewer.setInput(editingDomain.getResourceSet());
+ selectionViewer.setSelection(new StructuredSelection(editingDomain.getResourceSet().getResources().get(0)), true);
+ viewerPane.setTitle(editingDomain.getResourceSet());
+
+ new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
+
+ createContextMenuFor(selectionViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_SelectionPage_label"));
+ }
+
+ // Create a page for the parent tree view.
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ServicedescriptorswithidEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ Tree tree = new Tree(composite, SWT.MULTI);
+ TreeViewer newTreeViewer = new TreeViewer(tree);
+ return newTreeViewer;
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+
+ parentViewer = (TreeViewer)viewerPane.getViewer();
+ parentViewer.setAutoExpandLevel(30);
+ parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));
+ parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(parentViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_ParentPage_label"));
+ }
+
+ // This is the page for the list viewer
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ServicedescriptorswithidEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new ListViewer(composite);
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+ listViewer = (ListViewer)viewerPane.getViewer();
+ listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(listViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_ListPage_label"));
+ }
+
+ // This is the page for the tree viewer
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ServicedescriptorswithidEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new TreeViewer(composite);
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+ treeViewer = (TreeViewer)viewerPane.getViewer();
+ treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);
+
+ createContextMenuFor(treeViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_TreePage_label"));
+ }
+
+ // This is the page for the table viewer.
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ServicedescriptorswithidEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new TableViewer(composite);
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+ tableViewer = (TableViewer)viewerPane.getViewer();
+
+ Table table = tableViewer.getTable();
+ TableLayout layout = new TableLayout();
+ table.setLayout(layout);
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ TableColumn objectColumn = new TableColumn(table, SWT.NONE);
+ layout.addColumnData(new ColumnWeightData(3, 100, true));
+ objectColumn.setText(getString("_UI_ObjectColumn_label"));
+ objectColumn.setResizable(true);
+
+ TableColumn selfColumn = new TableColumn(table, SWT.NONE);
+ layout.addColumnData(new ColumnWeightData(2, 100, true));
+ selfColumn.setText(getString("_UI_SelfColumn_label"));
+ selfColumn.setResizable(true);
+
+ tableViewer.setColumnProperties(new String [] {"a", "b"});
+ tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(tableViewer);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_TablePage_label"));
+ }
+
+ // This is the page for the table tree viewer.
+ //
+ {
+ ViewerPane viewerPane =
+ new ViewerPane(getSite().getPage(), ServicedescriptorswithidEditor.this) {
+ @Override
+ public Viewer createViewer(Composite composite) {
+ return new TreeViewer(composite);
+ }
+ @Override
+ public void requestActivation() {
+ super.requestActivation();
+ setCurrentViewerPane(this);
+ }
+ };
+ viewerPane.createControl(getContainer());
+
+ treeViewerWithColumns = (TreeViewer)viewerPane.getViewer();
+
+ Tree tree = treeViewerWithColumns.getTree();
+ tree.setLayoutData(new FillLayout());
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+
+ TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);
+ objectColumn.setText(getString("_UI_ObjectColumn_label"));
+ objectColumn.setResizable(true);
+ objectColumn.setWidth(250);
+
+ TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);
+ selfColumn.setText(getString("_UI_SelfColumn_label"));
+ selfColumn.setResizable(true);
+ selfColumn.setWidth(200);
+
+ treeViewerWithColumns.setColumnProperties(new String [] {"a", "b"});
+ treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+
+ createContextMenuFor(treeViewerWithColumns);
+ int pageIndex = addPage(viewerPane.getControl());
+ setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label"));
+ }
+
+ getSite().getShell().getDisplay().asyncExec
+ (new Runnable() {
+ public void run() {
+ 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() {
+ 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) {
+ ((CTabFolder)getContainer()).setTabHeight(1);
+ Point point = getContainer().getSize();
+ getContainer().setSize(point.x, point.y + 6);
+ }
+ }
+ }
+
+ /**
+ * 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) {
+ ((CTabFolder)getContainer()).setTabHeight(SWT.DEFAULT);
+ Point point = getContainer().getSize();
+ getContainer().setSize(point.x, point.y - 6);
+ }
+ }
+ }
+
+ /**
+ * 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
+ */
+ @SuppressWarnings("rawtypes")
+ @Override
+ public Object getAdapter(Class key) {
+ if (key.equals(IContentOutlinePage.class)) {
+ return showOutlineView() ? getContentOutlinePage() : null;
+ }
+ else if (key.equals(IPropertySheetPage.class)) {
+ return getPropertySheetPage();
+ }
+ else if (key.equals(IGotoMarker.class)) {
+ return this;
+ }
+ 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.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
+ contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
+ contentOutlineViewer.setInput(editingDomain.getResourceSet());
+
+ // 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.
+ //
+ 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() {
+ if (propertySheetPage == null) {
+ propertySheetPage =
+ new ExtendedPropertySheetPage(editingDomain) {
+ @Override
+ public void setSelectionToViewer(List<?> selection) {
+ ServicedescriptorswithidEditor.this.setSelectionToViewer(selection);
+ ServicedescriptorswithidEditor.this.setFocus();
+ }
+
+ @Override
+ public void setActionBars(IActionBars actionBars) {
+ super.setActionBars(actionBars);
+ getActionBarContributor().shareGlobalActions(this, actionBars);
+ }
+ };
+ propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
+ }
+
+ 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 (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
+ Iterator<?> selectedElements = ((IStructuredSelection)selection).iterator();
+ if (selectedElements.hasNext()) {
+ // Get the first selected element.
+ //
+ Object selectedElement = selectedElements.next();
+
+ // If it's the selection viewer, then we want it to select the same selection as this selection.
+ //
+ if (currentViewerPane.getViewer() == selectionViewer) {
+ ArrayList<Object> selectionList = new ArrayList<Object>();
+ selectionList.add(selectedElement);
+ while (selectedElements.hasNext()) {
+ selectionList.add(selectedElements.next());
+ }
+
+ // Set the selection to the widget.
+ //
+ selectionViewer.setSelection(new StructuredSelection(selectionList));
+ }
+ else {
+ // Set the input to the widget.
+ //
+ if (currentViewerPane.getViewer().getInput() != selectedElement) {
+ currentViewerPane.getViewer().setInput(selectedElement);
+ currentViewerPane.setTitle(selectedElement);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * 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 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<Object, Object>();
+ saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
+
+ // 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;
+ for (Resource resource : editingDomain.getResourceSet().getResources()) {
+ 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.
+ //
+ ServicedescriptorswithidEditorPlugin.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
+ */
+ public void gotoMarker(IMarker marker) {
+ try {
+ if (marker.getType().equals(EValidator.MARKER)) {
+ String uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
+ if (uriAttribute != null) {
+ URI uri = URI.createURI(uriAttribute);
+ EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
+ if (eObject != null) {
+ setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
+ }
+ }
+ }
+ }
+ catch (CoreException exception) {
+ ServicedescriptorswithidEditorPlugin.INSTANCE.log(exception);
+ }
+ }
+
+ /**
+ * 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() {
+ if (currentViewerPane != null) {
+ currentViewerPane.setFocus();
+ }
+ else {
+ getControl(getActivePage()).setFocus();
+ }
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {
+ selectionChangedListeners.add(listener);
+ }
+
+ /**
+ * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ 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
+ */
+ 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
+ */
+ 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 ServicedescriptorswithidEditorPlugin.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 ServicedescriptorswithidEditorPlugin.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
+ */
+ 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);
+ }
+
+ if (propertySheetPage != null) {
+ 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 true;
+ }
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidEditorPlugin.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidEditorPlugin.java
new file mode 100644
index 00000000000..20af5315039
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidEditorPlugin.java
@@ -0,0 +1,91 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.presentation;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.ui.EclipseUIPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the Servicedescriptorswithid editor plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class ServicedescriptorswithidEditorPlugin extends EMFPlugin {
+ /**
+ * Keep track of the singleton.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final ServicedescriptorswithidEditorPlugin INSTANCE = new ServicedescriptorswithidEditorPlugin();
+
+ /**
+ * 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 ServicedescriptorswithidEditorPlugin() {
+ super
+ (new ResourceLocator [] {
+ });
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ @Override
+ public ResourceLocator getPluginResourceLocator() {
+ return plugin;
+ }
+
+ /**
+ * Returns the singleton instance of the Eclipse plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the singleton instance.
+ * @generated
+ */
+ public static Implementation getPlugin() {
+ return plugin;
+ }
+
+ /**
+ * The actual implementation of the Eclipse <b>Plugin</b>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static class Implementation extends EclipseUIPlugin {
+ /**
+ * Creates an instance.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Implementation() {
+ super();
+
+ // Remember the static instance.
+ //
+ plugin = this;
+ }
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidModelWizard.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidModelWizard.java
new file mode 100644
index 00000000000..1ff6e60e43e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.editor/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/presentation/ServicedescriptorswithidModelWizard.java
@@ -0,0 +1,628 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.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.emf.common.CommonPlugin;
+
+import org.eclipse.emf.common.util.URI;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EClassifier;
+
+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.EObject;
+
+import org.eclipse.emf.ecore.xmi.XMLResource;
+
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+
+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.jface.dialogs.MessageDialog;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+
+import org.eclipse.swt.SWT;
+
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.ModifyEvent;
+
+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.actions.WorkspaceModifyOperation;
+
+import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
+
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.ui.part.ISetSelectionTarget;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.provider.ServicedescriptorswithidEditPlugin;
+
+
+import org.eclipse.core.runtime.Path;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+
+
+/**
+ * This is a simple wizard for creating a new model file.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorswithidModelWizard 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(ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorswithidEditorFilenameExtensions").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 =
+ ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorswithidEditorFilenameExtensions").replaceAll("\\s*,\\s*", ", ");
+
+ /**
+ * This caches an instance of the model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServicedescriptorswithidPackage servicedescriptorswithidPackage = ServicedescriptorswithidPackage.eINSTANCE;
+
+ /**
+ * This caches an instance of the model factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServicedescriptorswithidFactory servicedescriptorswithidFactory = servicedescriptorswithidPackage.getServicedescriptorswithidFactory();
+
+ /**
+ * This is the file creation page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServicedescriptorswithidModelWizardNewFileCreationPage newFileCreationPage;
+
+ /**
+ * This is the initial object creation page.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServicedescriptorswithidModelWizardInitialObjectCreationPage 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
+ */
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ this.workbench = workbench;
+ this.selection = selection;
+ setWindowTitle(ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_Wizard_label"));
+ setDefaultPageImageDescriptor(ExtendedImageRegistry.INSTANCE.getImageDescriptor(ServicedescriptorswithidEditorPlugin.INSTANCE.getImage("full/wizban/NewServicedescriptorswithid")));
+ }
+
+ /**
+ * Returns the names of the types that can be created as the root object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<String> getInitialObjectNames() {
+ if (initialObjectNames == null) {
+ initialObjectNames = new ArrayList<String>();
+ for (EClassifier eClassifier : servicedescriptorswithidPackage.getEClassifiers()) {
+ if (eClassifier instanceof EClass) {
+ EClass eClass = (EClass)eClassifier;
+ if (!eClass.isAbstract()) {
+ initialObjectNames.add(eClass.getName());
+ }
+ }
+ }
+ Collections.sort(initialObjectNames, CommonPlugin.INSTANCE.getComparator());
+ }
+ return initialObjectNames;
+ }
+
+ /**
+ * Create a new model.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected EObject createInitialModel() {
+ EClass eClass = (EClass)servicedescriptorswithidPackage.getEClassifier(initialObjectCreationPage.getInitialObjectName());
+ EObject rootObject = servicedescriptorswithidFactory.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);
+
+ // 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<Object, Object>();
+ options.put(XMLResource.OPTION_ENCODING, initialObjectCreationPage.getEncoding());
+ resource.save(options);
+ }
+ catch (Exception exception) {
+ ServicedescriptorswithidEditorPlugin.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() {
+ 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()).getId());
+ }
+ catch (PartInitException exception) {
+ MessageDialog.openError(workbenchWindow.getShell(), ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_OpenEditorError_label"), exception.getMessage());
+ return false;
+ }
+
+ return true;
+ }
+ catch (Exception exception) {
+ ServicedescriptorswithidEditorPlugin.INSTANCE.log(exception);
+ return false;
+ }
+ }
+
+ /**
+ * This is the one page of the wizard.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public class ServicedescriptorswithidModelWizardNewFileCreationPage extends WizardNewFileCreationPage {
+ /**
+ * Pass in the selection.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorswithidModelWizardNewFileCreationPage(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(ServicedescriptorswithidEditorPlugin.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 ServicedescriptorswithidModelWizardInitialObjectCreationPage 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 ServicedescriptorswithidModelWizardInitialObjectCreationPage(String pageId) {
+ super(pageId);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ 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(ServicedescriptorswithidEditorPlugin.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(ServicedescriptorswithidEditorPlugin.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() {
+ 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 ServicedescriptorswithidEditPlugin.INSTANCE.getString("_UI_" + typeName + "_type");
+ }
+ catch(MissingResourceException mre) {
+ ServicedescriptorswithidEditorPlugin.INSTANCE.log(mre);
+ }
+ return typeName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Collection<String> getEncodings() {
+ if (encodings == null) {
+ encodings = new ArrayList<String>();
+ for (StringTokenizer stringTokenizer = new StringTokenizer(ServicedescriptorswithidEditorPlugin.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 ServicedescriptorswithidModelWizardNewFileCreationPage("Whatever", selection);
+ newFileCreationPage.setTitle(ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorswithidModelWizard_label"));
+ newFileCreationPage.setDescription(ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorswithidModelWizard_description"));
+ newFileCreationPage.setFileName(ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorswithidEditorFilenameDefaultBase") + "." + 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 = ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorswithidEditorFilenameDefaultBase");
+ 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 ServicedescriptorswithidModelWizardInitialObjectCreationPage("Whatever2");
+ initialObjectCreationPage.setTitle(ServicedescriptorswithidEditorPlugin.INSTANCE.getString("_UI_ServicedescriptorswithidModelWizard_label"));
+ initialObjectCreationPage.setDescription(ServicedescriptorswithidEditorPlugin.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/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/.classpath b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/.classpath
new file mode 100644
index 00000000000..a2115fe74e0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/.classpath
@@ -0,0 +1,8 @@
+<?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/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="tests"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/.project b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/.project
new file mode 100644
index 00000000000..a03a4305f66
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.core.serviceregistry.tests</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/META-INF/MANIFEST.MF b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..6572d905f53
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.infra.core.serviceregistry.tests;singleton:=true
+Bundle-Version: 0.10.0.qualifier
+Fragment-Host: org.eclipse.papyrus.infra.core.serviceregistry;bundle-version="0.9.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Require-Bundle: org.junit,
+ org.eclipse.emf.ecore.xmi
+Bundle-Vendor: %providerName
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/build.properties b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/build.properties
new file mode 100644
index 00000000000..3f78ea4cf8d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ fragment.xml
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/fragment.xml b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/fragment.xml
new file mode 100644
index 00000000000..fa1feeceb5d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/fragment.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<fragment>
+
+</fragment>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/plugin.properties b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/plugin.properties
new file mode 100644
index 00000000000..376bf25e8b5
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/plugin.properties
@@ -0,0 +1,12 @@
+#################################################################################
+# Copyright (c) 2012 Cedric Dumoulin.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+##################################################################################
+pluginName=Papyrus Service Registry
+providerName=Eclipse Modeling Project
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/resources/plugin.xml b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/resources/plugin.xml
new file mode 100644
index 00000000000..27ce24a6ce3
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/resources/plugin.xml
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin
+>
+ <extension
+ point="org.eclipse.papyrus.infra.core.serviceregistry.service">
+ <servicesSet
+ id="simpleTest">
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceA"
+ priority="1"
+ startKind="startup">
+ </service>
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceC"
+ priority="1"
+ startKind="lazy">
+ <dependsOn
+ serviceId="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceA">
+ </dependsOn>
+ </service>
+ <extendedServiceSet
+ serviceSetId="papyrusWizard">
+ </extendedServiceSet>
+ </servicesSet>
+ <registry
+ id="simpleTestRegistry"
+ isUnique="false">
+ <serviceSets
+ serviceSetId="simpleTest">
+ </serviceSets>
+ </registry>
+ <servicesSet
+ id="papyrusWizard">
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceB"
+ priority="1"
+ startKind="startup">
+ </service>
+ </servicesSet>
+ <registry
+ id="papyrusWizardRegistry"
+ isUnique="false">
+ <serviceSets
+ serviceSetId="papyrusWizard">
+ </serviceSets>
+ </registry>
+ <servicesSet
+ id="setWithC">
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceC"
+ priority="1"
+ startKind="startup">
+ </service>
+ </servicesSet>
+ <servicesSet
+ id="extendingSet">
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceA"
+ priority="1"
+ startKind="startup">
+ </service>
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceB"
+ priority="1"
+ startKind="startup">
+ </service>
+ <extendedServiceSet
+ serviceSetId="setWithC">
+ </extendedServiceSet>
+ </servicesSet>
+ <registry
+ id="extendingSetRegistry"
+ isUnique="false">
+ <serviceSets
+ serviceSetId="extendingSet">
+ </serviceSets>
+ </registry>
+ <servicesSet
+ id="badSetExtendsIdMissing">
+ <service
+ classname="badService"
+ priority="1"
+ startKind="lazy">
+ </service>
+ <extendedServiceSet>
+ </extendedServiceSet>
+ </servicesSet>
+ <registry
+ id="badSetExtendsIdMissingRegistry"
+ isUnique="false">
+ <serviceSets
+ serviceSetId="badSetExtendsIdMissing">
+ </serviceSets>
+ </registry>
+ <servicesSet
+ id="dependantServices">
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceA"
+ priority="1"
+ startKind="startup">
+ <dependsOn
+ serviceId="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceB">
+ </dependsOn>
+ </service>
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceB"
+ priority="1"
+ startKind="lazy">
+ <dependsOn
+ serviceId="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceC">
+ </dependsOn>
+ </service>
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceC"
+ priority="1"
+ startKind="startup">
+ </service>
+ </servicesSet>
+ <registry
+ id="dependantServicesRegistry"
+ isUnique="false">
+ <serviceSets
+ serviceSetId="dependantServices">
+ </serviceSets>
+ </registry>
+ <servicesSet
+ id="setWithAlias">
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceA"
+ priority="1"
+ startKind="startup">
+ </service>
+ <alias
+ aliasedServiceId="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceA"
+ id="AnAlias"
+ priority="1">
+ </alias>
+ </servicesSet>
+ <registry
+ id="setWithAliasRegistry"
+ isUnique="false">
+ <serviceSets
+ serviceSetId="setWithAlias">
+ </serviceSets>
+ </registry>
+ </extension>
+ <extension
+ point="org.eclipse.papyrus.infra.core.serviceregistry.service">
+ <servicesSet
+ id="doubleName">
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceA"
+ priority="1"
+ startKind="startup">
+ </service>
+ </servicesSet>
+ <servicesSet
+ id="doubleName">
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceB"
+ priority="1"
+ startKind="startup">
+ </service>
+ </servicesSet>
+ <registry
+ id="doubleNameRegistry"
+ isUnique="false">
+ <serviceSets
+ serviceSetId="doubleName">
+ </serviceSets>
+ <serviceSets
+ serviceSetId="doubleName">
+ </serviceSets>
+ </registry>
+ </extension>
+ <extension
+ point="org.eclipse.papyrus.infra.core.serviceregistry.service">
+ <servicesSet
+ id="servicesSetA">
+ </servicesSet>
+ <servicesSet
+ id="servicesSetB">
+ </servicesSet>
+ <servicesSet
+ id="servicesSetC">
+ </servicesSet>
+ <registry
+ id="registryA"
+ isUnique="false">
+ <serviceSets
+ serviceSetId="servicesSetA">
+ </serviceSets>
+ <extendedRegistry
+ registryId="registryB">
+ </extendedRegistry>
+ <parentRegistry
+ registryId="registryC">
+ </parentRegistry>
+ </registry>
+ <registry
+ id="registryB"
+ isUnique="false">
+ </registry>
+ <registry
+ id="registryC"
+ isUnique="false">
+ </registry>
+ </extension>
+ <extension
+ point="org.eclipse.papyrus.infra.core.serviceregistry.service">
+ <servicesSet
+ id="fragmentA">
+ <service
+ classname="serviceA"
+ id="serviceA1"
+ priority="1"
+ startKind="lazy">
+ </service>
+ <service
+ id="serviceA2"
+ priority="1"
+ startKind="lazy">
+ </service>
+ <extendedServiceSet
+ serviceSetId="fragmentB">
+ </extendedServiceSet>
+ </servicesSet>
+ <servicesSet
+ id="fragmentB">
+ </servicesSet>
+ <servicesSet
+ id="fragmentC">
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.tests.Service3"
+ id="serviceC1"
+ priority="1"
+ startKind="lazy">
+ </service>
+ </servicesSet>
+ <servicesSet
+ id="multiFragmentA">
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.tests.Service4"
+ id="serviceM2"
+ priority="1"
+ startKind="lazy">
+ </service>
+ </servicesSet>
+ <servicesSet
+ id="multiFragmentA">
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.tests.Service4"
+ id="serviceM1"
+ priority="1"
+ startKind="lazy">
+ </service>
+ </servicesSet>
+ <servicesSet
+ id="multiFragmentA">
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.tests.Service4"
+ id="serviceM3"
+ priority="1"
+ startKind="lazy">
+ </service>
+ <extendedServiceSet
+ serviceSetId="fragmentB">
+ </extendedServiceSet>
+ </servicesSet>
+ </extension>
+</plugin>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/AbstractMethodInjectionTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/AbstractMethodInjectionTest.java
new file mode 100644
index 00000000000..c9a6ee52cac
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/AbstractMethodInjectionTest.java
@@ -0,0 +1,36 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractMethodInjection;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Abstract Method Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class AbstractMethodInjectionTest extends FeatureInjectionTest {
+
+ /**
+ * Constructs a new Abstract Method Injection test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AbstractMethodInjectionTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Abstract Method Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected AbstractMethodInjection getFixture() {
+ return (AbstractMethodInjection)fixture;
+ }
+
+} //AbstractMethodInjectionTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/AbstractServiceDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/AbstractServiceDescTest.java
new file mode 100644
index 00000000000..ea619bff869
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/AbstractServiceDescTest.java
@@ -0,0 +1,55 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Abstract Service Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class AbstractServiceDescTest extends TestCase {
+
+ /**
+ * The fixture for this Abstract Service Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AbstractServiceDesc fixture = null;
+
+ /**
+ * Constructs a new Abstract Service Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AbstractServiceDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Abstract Service Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(AbstractServiceDesc fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Abstract Service Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AbstractServiceDesc getFixture() {
+ return fixture;
+ }
+
+} //AbstractServiceDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/AliasDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/AliasDescTest.java
new file mode 100644
index 00000000000..8694ef3c1d8
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/AliasDescTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Alias Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AliasDescTest extends AbstractServiceDescTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(AliasDescTest.class);
+ }
+
+ /**
+ * Constructs a new Alias Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AliasDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Alias Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected AliasDesc getFixture() {
+ return (AliasDesc)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorsFactory.eINSTANCE.createAliasDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //AliasDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ConstructorInjectionTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ConstructorInjectionTest.java
new file mode 100644
index 00000000000..75f5e3cba17
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ConstructorInjectionTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ConstructorInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Constructor Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ConstructorInjectionTest extends AbstractMethodInjectionTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(ConstructorInjectionTest.class);
+ }
+
+ /**
+ * Constructs a new Constructor Injection test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ConstructorInjectionTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Constructor Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected ConstructorInjection getFixture() {
+ return (ConstructorInjection)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorsFactory.eINSTANCE.createConstructorInjection());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //ConstructorInjectionTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/DescriptorsTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/DescriptorsTest.java
new file mode 100644
index 00000000000..96e51da140d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/DescriptorsTest.java
@@ -0,0 +1,122 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Descriptors</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors#getRegistryDesc(java.lang.String) <em>Get Registry Desc</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors#getServiceSetDesc(java.lang.String) <em>Get Service Set Desc</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public class DescriptorsTest extends TestCase {
+
+ /**
+ * The fixture for this Descriptors test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Descriptors fixture = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(DescriptorsTest.class);
+ }
+
+ /**
+ * Constructs a new Descriptors test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public DescriptorsTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Descriptors test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(Descriptors fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Descriptors test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected Descriptors getFixture() {
+ return fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorsFactory.eINSTANCE.createDescriptors());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors#getRegistryDesc(java.lang.String) <em>Get Registry Desc</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors#getRegistryDesc(java.lang.String)
+ * @generated
+ */
+ public void testGetRegistryDesc__String() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors#getServiceSetDesc(java.lang.String) <em>Get Service Set Desc</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors#getServiceSetDesc(java.lang.String)
+ * @generated
+ */
+ public void testGetServiceSetDesc__String() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+} //DescriptorsTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/FeatureInjectionTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/FeatureInjectionTest.java
new file mode 100644
index 00000000000..ba350e73b1f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/FeatureInjectionTest.java
@@ -0,0 +1,55 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Feature Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class FeatureInjectionTest extends TestCase {
+
+ /**
+ * The fixture for this Feature Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected FeatureInjection fixture = null;
+
+ /**
+ * Constructs a new Feature Injection test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public FeatureInjectionTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Feature Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(FeatureInjection fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Feature Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected FeatureInjection getFixture() {
+ return fixture;
+ }
+
+} //FeatureInjectionTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/InjectedServiceTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/InjectedServiceTest.java
new file mode 100644
index 00000000000..caec66ff0c6
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/InjectedServiceTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Injected Service</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class InjectedServiceTest extends InjectedValueTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(InjectedServiceTest.class);
+ }
+
+ /**
+ * Constructs a new Injected Service test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InjectedServiceTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Injected Service test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected InjectedService getFixture() {
+ return (InjectedService)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorsFactory.eINSTANCE.createInjectedService());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //InjectedServiceTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/InjectedValueTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/InjectedValueTest.java
new file mode 100644
index 00000000000..0cce695c96c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/InjectedValueTest.java
@@ -0,0 +1,55 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Injected Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class InjectedValueTest extends TestCase {
+
+ /**
+ * The fixture for this Injected Value test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InjectedValue fixture = null;
+
+ /**
+ * Constructs a new Injected Value test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InjectedValueTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Injected Value test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(InjectedValue fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Injected Value test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InjectedValue getFixture() {
+ return fixture;
+ }
+
+} //InjectedValueTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/MethodInjectionTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/MethodInjectionTest.java
new file mode 100644
index 00000000000..d02d4d6a675
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/MethodInjectionTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Method Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MethodInjectionTest extends AbstractMethodInjectionTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(MethodInjectionTest.class);
+ }
+
+ /**
+ * Constructs a new Method Injection test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MethodInjectionTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Method Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected MethodInjection getFixture() {
+ return (MethodInjection)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorsFactory.eINSTANCE.createMethodInjection());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //MethodInjectionTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/OpaqueInjectedValueTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/OpaqueInjectedValueTest.java
new file mode 100644
index 00000000000..ca085a04d5e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/OpaqueInjectedValueTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Opaque Injected Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class OpaqueInjectedValueTest extends InjectedValueTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(OpaqueInjectedValueTest.class);
+ }
+
+ /**
+ * Constructs a new Opaque Injected Value test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public OpaqueInjectedValueTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Opaque Injected Value test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected OpaqueInjectedValue getFixture() {
+ return (OpaqueInjectedValue)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorsFactory.eINSTANCE.createOpaqueInjectedValue());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //OpaqueInjectedValueTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ParameterInjectionTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ParameterInjectionTest.java
new file mode 100644
index 00000000000..138923ed210
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ParameterInjectionTest.java
@@ -0,0 +1,89 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Parameter Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ParameterInjectionTest extends TestCase {
+
+ /**
+ * The fixture for this Parameter Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ParameterInjection fixture = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(ParameterInjectionTest.class);
+ }
+
+ /**
+ * Constructs a new Parameter Injection test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ParameterInjectionTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Parameter Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(ParameterInjection fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Parameter Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ParameterInjection getFixture() {
+ return fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorsFactory.eINSTANCE.createParameterInjection());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //ParameterInjectionTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/PropertyInjectionTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/PropertyInjectionTest.java
new file mode 100644
index 00000000000..ef497c6fe5e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/PropertyInjectionTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Property Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PropertyInjectionTest extends FeatureInjectionTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(PropertyInjectionTest.class);
+ }
+
+ /**
+ * Constructs a new Property Injection test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PropertyInjectionTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Property Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected PropertyInjection getFixture() {
+ return (PropertyInjection)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorsFactory.eINSTANCE.createPropertyInjection());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //PropertyInjectionTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/RegistryDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/RegistryDescTest.java
new file mode 100644
index 00000000000..bc64f02e8f9
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/RegistryDescTest.java
@@ -0,0 +1,150 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Registry Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getServiceDesc(java.lang.String) <em>Get Service Desc</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getServiceSetDesc(java.lang.String) <em>Get Service Set Desc</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#serviceSetsContains(java.lang.String) <em>Service Sets Contains</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#servicesContains(java.lang.String) <em>Services Contains</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public class RegistryDescTest extends TestCase {
+
+ /**
+ * The fixture for this Registry Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected RegistryDesc fixture = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(RegistryDescTest.class);
+ }
+
+ /**
+ * Constructs a new Registry Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public RegistryDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Registry Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(RegistryDesc fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Registry Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected RegistryDesc getFixture() {
+ return fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorsFactory.eINSTANCE.createRegistryDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getServiceDesc(java.lang.String) <em>Get Service Desc</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getServiceDesc(java.lang.String)
+ * @generated
+ */
+ public void testGetServiceDesc__String() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getServiceSetDesc(java.lang.String) <em>Get Service Set Desc</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getServiceSetDesc(java.lang.String)
+ * @generated
+ */
+ public void testGetServiceSetDesc__String() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#servicesContains(java.lang.String) <em>Services Contains</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#servicesContains(java.lang.String)
+ * @generated
+ */
+ public void testServicesContains__String() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#serviceSetsContains(java.lang.String) <em>Service Sets Contains</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#serviceSetsContains(java.lang.String)
+ * @generated
+ */
+ public void testServiceSetsContains__String() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+} //RegistryDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServiceDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServiceDescTest.java
new file mode 100644
index 00000000000..f4960f8f4c1
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServiceDescTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Service Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServiceDescTest extends AbstractServiceDescTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(ServiceDescTest.class);
+ }
+
+ /**
+ * Constructs a new Service Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Service Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected ServiceDesc getFixture() {
+ return (ServiceDesc)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorsFactory.eINSTANCE.createServiceDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //ServiceDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServiceFactoryDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServiceFactoryDescTest.java
new file mode 100644
index 00000000000..56115ee623d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServiceFactoryDescTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceFactoryDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Service Factory Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServiceFactoryDescTest extends ServiceDescTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(ServiceFactoryDescTest.class);
+ }
+
+ /**
+ * Constructs a new Service Factory Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceFactoryDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Service Factory Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected ServiceFactoryDesc getFixture() {
+ return (ServiceFactoryDesc)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorsFactory.eINSTANCE.createServiceFactoryDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //ServiceFactoryDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServiceSetDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServiceSetDescTest.java
new file mode 100644
index 00000000000..43be8e11052
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServiceSetDescTest.java
@@ -0,0 +1,122 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Service Set Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getServiceDesc(java.lang.String) <em>Get Service Desc</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#servicesContains(java.lang.String) <em>Services Contains</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public class ServiceSetDescTest extends TestCase {
+
+ /**
+ * The fixture for this Service Set Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceSetDesc fixture = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(ServiceSetDescTest.class);
+ }
+
+ /**
+ * Constructs a new Service Set Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceSetDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Service Set Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(ServiceSetDesc fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Service Set Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceSetDesc getFixture() {
+ return fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorsFactory.eINSTANCE.createServiceSetDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getServiceDesc(java.lang.String) <em>Get Service Desc</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getServiceDesc(java.lang.String)
+ * @generated
+ */
+ public void testGetServiceDesc__String() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#servicesContains(java.lang.String) <em>Services Contains</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#servicesContains(java.lang.String)
+ * @generated
+ */
+ public void testServicesContains__String() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+} //ServiceSetDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServicedescriptorsAllTests.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServicedescriptorsAllTests.java
new file mode 100644
index 00000000000..834b0233b41
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServicedescriptorsAllTests.java
@@ -0,0 +1,47 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>Servicedescriptors</b></em>' model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorsAllTests extends TestSuite {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(suite());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static Test suite() {
+ TestSuite suite = new ServicedescriptorsAllTests("Servicedescriptors Tests");
+ suite.addTest(ServicedescriptorsTests.suite());
+ return suite;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorsAllTests(String name) {
+ super(name);
+ }
+
+} //ServicedescriptorsAllTests
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServicedescriptorsExample.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServicedescriptorsExample.java
new file mode 100644
index 00000000000..de0853e7cb0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServicedescriptorsExample.java
@@ -0,0 +1,121 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import java.io.File;
+import java.io.IOException;
+
+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.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+import org.eclipse.emf.ecore.util.Diagnostician;
+
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * A sample utility for the '<em><b>servicedescriptors</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorsExample {
+ /**
+ * <!-- begin-user-doc -->
+ * Load all the argument file paths or URIs as instances of the model.
+ * <!-- end-user-doc -->
+ * @param args the file paths or URIs.
+ * @generated
+ */
+ public static void main(String[] args) {
+ // Create a resource set to hold the resources.
+ //
+ ResourceSet resourceSet = new ResourceSetImpl();
+
+ // Register the appropriate resource factory to handle all file extensions.
+ //
+ resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put
+ (Resource.Factory.Registry.DEFAULT_EXTENSION,
+ new XMIResourceFactoryImpl());
+
+ // Register the package to ensure it is available during loading.
+ //
+ resourceSet.getPackageRegistry().put
+ (ServicedescriptorsPackage.eNS_URI,
+ ServicedescriptorsPackage.eINSTANCE);
+
+ // If there are no arguments, emit an appropriate usage message.
+ //
+ if (args.length == 0) {
+ System.out.println("Enter a list of file paths or URIs that have content like this:");
+ try {
+ Resource resource = resourceSet.createResource(URI.createURI("http:///My.servicedescriptors"));
+ RegistryDesc root = ServicedescriptorsFactory.eINSTANCE.createRegistryDesc();
+ resource.getContents().add(root);
+ resource.save(System.out, null);
+ }
+ catch (IOException exception) {
+ exception.printStackTrace();
+ }
+ }
+ else {
+ // Iterate over all the arguments.
+ //
+ for (int i = 0; i < args.length; ++i) {
+ // Construct the URI for the instance file.
+ // The argument is treated as a file path only if it denotes an existing file.
+ // Otherwise, it's directly treated as a URL.
+ //
+ File file = new File(args[i]);
+ URI uri = file.isFile() ? URI.createFileURI(file.getAbsolutePath()): URI.createURI(args[i]);
+
+ try {
+ // Demand load resource for this file.
+ //
+ Resource resource = resourceSet.getResource(uri, true);
+ System.out.println("Loaded " + uri);
+
+ // Validate the contents of the loaded resource.
+ //
+ for (EObject eObject : resource.getContents()) {
+ Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eObject);
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ printDiagnostic(diagnostic, "");
+ }
+ }
+ }
+ catch (RuntimeException exception) {
+ System.out.println("Problem loading " + uri);
+ exception.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * Prints diagnostics with indentation.
+ * <!-- end-user-doc -->
+ * @param diagnostic the diagnostic to print.
+ * @param indent the indentation for printing.
+ * @generated
+ */
+ protected static void printDiagnostic(Diagnostic diagnostic, String indent) {
+ System.out.print(indent);
+ System.out.println(diagnostic.getMessage());
+ for (Diagnostic child : diagnostic.getChildren()) {
+ printDiagnostic(child, indent + " ");
+ }
+ }
+
+} //ServicedescriptorsExample
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServicedescriptorsTests.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServicedescriptorsTests.java
new file mode 100644
index 00000000000..d76e702407a
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/tests/ServicedescriptorsTests.java
@@ -0,0 +1,49 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.tests;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>servicedescriptors</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorsTests extends TestSuite {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(suite());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static Test suite() {
+ TestSuite suite = new ServicedescriptorsTests("servicedescriptors Tests");
+ suite.addTestSuite(RegistryDescTest.class);
+ suite.addTestSuite(ServiceSetDescTest.class);
+ suite.addTestSuite(DescriptorsTest.class);
+ return suite;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorsTests(String name) {
+ super(name);
+ }
+
+} //ServicedescriptorsTests
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AbstractMethodInjectionTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AbstractMethodInjectionTest.java
new file mode 100644
index 00000000000..d6b5769015e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AbstractMethodInjectionTest.java
@@ -0,0 +1,36 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractMethodInjection;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Abstract Method Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class AbstractMethodInjectionTest extends FeatureInjectionTest {
+
+ /**
+ * Constructs a new Abstract Method Injection test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AbstractMethodInjectionTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Abstract Method Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected AbstractMethodInjection getFixture() {
+ return (AbstractMethodInjection)fixture;
+ }
+
+} //AbstractMethodInjectionTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AbstractServiceDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AbstractServiceDescTest.java
new file mode 100644
index 00000000000..eff0ab73b8f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AbstractServiceDescTest.java
@@ -0,0 +1,55 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Abstract Service Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class AbstractServiceDescTest extends TestCase {
+
+ /**
+ * The fixture for this Abstract Service Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AbstractServiceIdDesc fixture = null;
+
+ /**
+ * Constructs a new Abstract Service Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AbstractServiceDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Abstract Service Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(AbstractServiceIdDesc fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Abstract Service Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AbstractServiceIdDesc getFixture() {
+ return fixture;
+ }
+
+} //AbstractServiceDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AbstractServiceIdDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AbstractServiceIdDescTest.java
new file mode 100644
index 00000000000..26cf5f233d2
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AbstractServiceIdDescTest.java
@@ -0,0 +1,55 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Abstract Service Id Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class AbstractServiceIdDescTest extends TestCase {
+
+ /**
+ * The fixture for this Abstract Service Id Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AbstractServiceIdDesc fixture = null;
+
+ /**
+ * Constructs a new Abstract Service Id Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AbstractServiceIdDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Abstract Service Id Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(AbstractServiceIdDesc fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Abstract Service Id Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AbstractServiceIdDesc getFixture() {
+ return fixture;
+ }
+
+} //AbstractServiceIdDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AliasDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AliasDescTest.java
new file mode 100644
index 00000000000..3f544f3e6da
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AliasDescTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Alias Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AliasDescTest extends AbstractServiceDescTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(AliasDescTest.class);
+ }
+
+ /**
+ * Constructs a new Alias Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AliasDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Alias Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected AliasIdDesc getFixture() {
+ return (AliasIdDesc)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createAliasIdDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //AliasDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AliasIdDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AliasIdDescTest.java
new file mode 100644
index 00000000000..19581511d5b
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/AliasIdDescTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Alias Id Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class AliasIdDescTest extends AbstractServiceIdDescTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(AliasIdDescTest.class);
+ }
+
+ /**
+ * Constructs a new Alias Id Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AliasIdDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Alias Id Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected AliasIdDesc getFixture() {
+ return (AliasIdDesc)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createAliasIdDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //AliasIdDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ConstructorInjectionTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ConstructorInjectionTest.java
new file mode 100644
index 00000000000..992c6fcb0bd
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ConstructorInjectionTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ConstructorInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Constructor Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ConstructorInjectionTest extends AbstractMethodInjectionTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(ConstructorInjectionTest.class);
+ }
+
+ /**
+ * Constructs a new Constructor Injection test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ConstructorInjectionTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Constructor Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected ConstructorInjection getFixture() {
+ return (ConstructorInjection)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createConstructorInjection());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //ConstructorInjectionTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/DescriptorsTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/DescriptorsTest.java
new file mode 100644
index 00000000000..ee0a665a61f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/DescriptorsTest.java
@@ -0,0 +1,89 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>IdDescriptors</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DescriptorsTest extends TestCase {
+
+ /**
+ * The fixture for this IdDescriptors test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IdDescriptors fixture = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(DescriptorsTest.class);
+ }
+
+ /**
+ * Constructs a new IdDescriptors test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public DescriptorsTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this IdDescriptors test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(IdDescriptors fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this IdDescriptors test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IdDescriptors getFixture() {
+ return fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createIdDescriptors());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //DescriptorsTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/FeatureInjectionTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/FeatureInjectionTest.java
new file mode 100644
index 00000000000..07ead17382a
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/FeatureInjectionTest.java
@@ -0,0 +1,55 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Feature Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class FeatureInjectionTest extends TestCase {
+
+ /**
+ * The fixture for this Feature Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected FeatureInjection fixture = null;
+
+ /**
+ * Constructs a new Feature Injection test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public FeatureInjectionTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Feature Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(FeatureInjection fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Feature Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected FeatureInjection getFixture() {
+ return fixture;
+ }
+
+} //FeatureInjectionTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/IdDescriptorsTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/IdDescriptorsTest.java
new file mode 100644
index 00000000000..1ae6bd9b81e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/IdDescriptorsTest.java
@@ -0,0 +1,89 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Id Descriptors</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class IdDescriptorsTest extends TestCase {
+
+ /**
+ * The fixture for this Id Descriptors test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IdDescriptors fixture = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(IdDescriptorsTest.class);
+ }
+
+ /**
+ * Constructs a new Id Descriptors test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public IdDescriptorsTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Id Descriptors test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(IdDescriptors fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Id Descriptors test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IdDescriptors getFixture() {
+ return fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createIdDescriptors());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //IdDescriptorsTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/InjectedServiceTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/InjectedServiceTest.java
new file mode 100644
index 00000000000..287a620a958
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/InjectedServiceTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Injected Service</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class InjectedServiceTest extends InjectedValueTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(InjectedServiceTest.class);
+ }
+
+ /**
+ * Constructs a new Injected Service test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InjectedServiceTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Injected Service test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected InjectedService getFixture() {
+ return (InjectedService)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createInjectedService());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //InjectedServiceTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/InjectedValueTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/InjectedValueTest.java
new file mode 100644
index 00000000000..c4625e2849b
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/InjectedValueTest.java
@@ -0,0 +1,55 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Injected Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public abstract class InjectedValueTest extends TestCase {
+
+ /**
+ * The fixture for this Injected Value test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InjectedValue fixture = null;
+
+ /**
+ * Constructs a new Injected Value test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InjectedValueTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Injected Value test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(InjectedValue fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Injected Value test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InjectedValue getFixture() {
+ return fixture;
+ }
+
+} //InjectedValueTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/MethodInjectionTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/MethodInjectionTest.java
new file mode 100644
index 00000000000..d340c0e2679
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/MethodInjectionTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Method Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class MethodInjectionTest extends AbstractMethodInjectionTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(MethodInjectionTest.class);
+ }
+
+ /**
+ * Constructs a new Method Injection test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MethodInjectionTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Method Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected MethodInjection getFixture() {
+ return (MethodInjection)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createMethodInjection());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //MethodInjectionTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/OpaqueInjectedValueTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/OpaqueInjectedValueTest.java
new file mode 100644
index 00000000000..afcc364878e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/OpaqueInjectedValueTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Opaque Injected Value</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class OpaqueInjectedValueTest extends InjectedValueTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(OpaqueInjectedValueTest.class);
+ }
+
+ /**
+ * Constructs a new Opaque Injected Value test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public OpaqueInjectedValueTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Opaque Injected Value test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected OpaqueInjectedValue getFixture() {
+ return (OpaqueInjectedValue)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createOpaqueInjectedValue());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //OpaqueInjectedValueTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ParameterInjectionTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ParameterInjectionTest.java
new file mode 100644
index 00000000000..c6cb7accb0c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ParameterInjectionTest.java
@@ -0,0 +1,89 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Parameter Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ParameterInjectionTest extends TestCase {
+
+ /**
+ * The fixture for this Parameter Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ParameterInjection fixture = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(ParameterInjectionTest.class);
+ }
+
+ /**
+ * Constructs a new Parameter Injection test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ParameterInjectionTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Parameter Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(ParameterInjection fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Parameter Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ParameterInjection getFixture() {
+ return fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createParameterInjection());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //ParameterInjectionTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/PropertyInjectionTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/PropertyInjectionTest.java
new file mode 100644
index 00000000000..b5ff948ab44
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/PropertyInjectionTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Property Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class PropertyInjectionTest extends FeatureInjectionTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(PropertyInjectionTest.class);
+ }
+
+ /**
+ * Constructs a new Property Injection test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PropertyInjectionTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Property Injection test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected PropertyInjection getFixture() {
+ return (PropertyInjection)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createPropertyInjection());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //PropertyInjectionTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/RegistryDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/RegistryDescTest.java
new file mode 100644
index 00000000000..15b4066b393
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/RegistryDescTest.java
@@ -0,0 +1,89 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Registry Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class RegistryDescTest extends TestCase {
+
+ /**
+ * The fixture for this Registry Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected RegistryIdDesc fixture = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(RegistryDescTest.class);
+ }
+
+ /**
+ * Constructs a new Registry Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public RegistryDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Registry Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(RegistryIdDesc fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Registry Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected RegistryIdDesc getFixture() {
+ return fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createRegistryIdDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //RegistryDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/RegistryIdDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/RegistryIdDescTest.java
new file mode 100644
index 00000000000..3ca2ab93c6b
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/RegistryIdDescTest.java
@@ -0,0 +1,89 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Registry Id Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class RegistryIdDescTest extends TestCase {
+
+ /**
+ * The fixture for this Registry Id Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected RegistryIdDesc fixture = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(RegistryIdDescTest.class);
+ }
+
+ /**
+ * Constructs a new Registry Id Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public RegistryIdDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Registry Id Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(RegistryIdDesc fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Registry Id Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected RegistryIdDesc getFixture() {
+ return fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createRegistryIdDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //RegistryIdDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceDescTest.java
new file mode 100644
index 00000000000..2ada63a45f2
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceDescTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Service Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServiceDescTest extends AbstractServiceDescTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(ServiceDescTest.class);
+ }
+
+ /**
+ * Constructs a new Service Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Service Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected ServiceIdDesc getFixture() {
+ return (ServiceIdDesc)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createServiceIdDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //ServiceDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceFactoryDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceFactoryDescTest.java
new file mode 100644
index 00000000000..de406302d79
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceFactoryDescTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceFactoryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Service Factory Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServiceFactoryDescTest extends ServiceDescTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(ServiceFactoryDescTest.class);
+ }
+
+ /**
+ * Constructs a new Service Factory Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceFactoryDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Service Factory Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected ServiceFactoryIdDesc getFixture() {
+ return (ServiceFactoryIdDesc)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createServiceFactoryIdDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //ServiceFactoryDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceFactoryIdDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceFactoryIdDescTest.java
new file mode 100644
index 00000000000..b2b7a365ab4
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceFactoryIdDescTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceFactoryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Service Factory Id Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServiceFactoryIdDescTest extends ServiceIdDescTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(ServiceFactoryIdDescTest.class);
+ }
+
+ /**
+ * Constructs a new Service Factory Id Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceFactoryIdDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Service Factory Id Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected ServiceFactoryIdDesc getFixture() {
+ return (ServiceFactoryIdDesc)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createServiceFactoryIdDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //ServiceFactoryIdDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceIdDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceIdDescTest.java
new file mode 100644
index 00000000000..b97ec068589
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceIdDescTest.java
@@ -0,0 +1,70 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Service Id Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServiceIdDescTest extends AbstractServiceIdDescTest {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(ServiceIdDescTest.class);
+ }
+
+ /**
+ * Constructs a new Service Id Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceIdDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Returns the fixture for this Service Id Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected ServiceIdDesc getFixture() {
+ return (ServiceIdDesc)fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createServiceIdDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+} //ServiceIdDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceSetIdDescTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceSetIdDescTest.java
new file mode 100644
index 00000000000..6fdf63d67aa
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceSetIdDescTest.java
@@ -0,0 +1,150 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Service Set Id Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getService(java.lang.Object) <em>Get Service</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#containsService(java.lang.Object) <em>Contains Service</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getService(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc) <em>Get Service</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#containsService(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc) <em>Contains Service</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public class ServiceSetIdDescTest extends TestCase {
+
+ /**
+ * The fixture for this Service Set Id Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceSetIdDesc fixture = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(ServiceSetIdDescTest.class);
+ }
+
+ /**
+ * Constructs a new Service Set Id Desc test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceSetIdDescTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Service Set Id Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(ServiceSetIdDesc fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Service Set Id Desc test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceSetIdDesc getFixture() {
+ return fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createServiceSetIdDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getService(java.lang.Object) <em>Get Service</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getService(java.lang.Object)
+ * @generated
+ */
+ public void testGetService__Object() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#containsService(java.lang.Object) <em>Contains Service</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#containsService(java.lang.Object)
+ * @generated
+ */
+ public void testContainsService__Object() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getService(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc) <em>Get Service</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getService(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc)
+ * @generated
+ */
+ public void testGetService__AbstractServiceIdDesc() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#containsService(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc) <em>Contains Service</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#containsService(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc)
+ * @generated
+ */
+ public void testContainsService__AbstractServiceIdDesc() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+} //ServiceSetIdDescTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceSetTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceSetTest.java
new file mode 100644
index 00000000000..40f76cc32ec
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServiceSetTest.java
@@ -0,0 +1,150 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Service Set</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getService(java.lang.Object) <em>Get Service</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#containsService(java.lang.Object) <em>Contains Service</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getService(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc) <em>Get Service</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#containsService(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc) <em>Contains Service</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public class ServiceSetTest extends TestCase {
+
+ /**
+ * The fixture for this Service Set test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceSetIdDesc fixture = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(ServiceSetTest.class);
+ }
+
+ /**
+ * Constructs a new Service Set test case with the given name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceSetTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Sets the fixture for this Service Set test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void setFixture(ServiceSetIdDesc fixture) {
+ this.fixture = fixture;
+ }
+
+ /**
+ * Returns the fixture for this Service Set test case.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceSetIdDesc getFixture() {
+ return fixture;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#setUp()
+ * @generated
+ */
+ @Override
+ protected void setUp() throws Exception {
+ setFixture(ServicedescriptorswithidFactory.eINSTANCE.createServiceSetIdDesc());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see junit.framework.TestCase#tearDown()
+ * @generated
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ setFixture(null);
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getService(java.lang.Object) <em>Get Service</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getService(java.lang.Object)
+ * @generated
+ */
+ public void testGetService__Object() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#containsService(java.lang.Object) <em>Contains Service</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#containsService(java.lang.Object)
+ * @generated
+ */
+ public void testContainsService__Object() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getService(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc) <em>Get Service</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getService(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc)
+ * @generated
+ */
+ public void testGetService__AbstractServiceDesc() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+ /**
+ * Tests the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#containsService(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc) <em>Contains Service</em>}' operation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#containsService(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc)
+ * @generated
+ */
+ public void testContainsService__AbstractServiceDesc() {
+ // TODO: implement this operation test method
+ // Ensure that you remove @generated or mark it @generated NOT
+ fail();
+ }
+
+} //ServiceSetTest
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServicedescriptorswithidAllTests.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServicedescriptorswithidAllTests.java
new file mode 100644
index 00000000000..5eb61538f26
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServicedescriptorswithidAllTests.java
@@ -0,0 +1,47 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>Servicedescriptorswithid</b></em>' model.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorswithidAllTests extends TestSuite {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(suite());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static Test suite() {
+ TestSuite suite = new ServicedescriptorswithidAllTests("Servicedescriptorswithid Tests");
+ suite.addTest(ServicedescriptorswithidTests.suite());
+ return suite;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorswithidAllTests(String name) {
+ super(name);
+ }
+
+} //ServicedescriptorswithidAllTests
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServicedescriptorswithidExample.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServicedescriptorswithidExample.java
new file mode 100644
index 00000000000..66b9d1ec3a9
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServicedescriptorswithidExample.java
@@ -0,0 +1,121 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import java.io.File;
+import java.io.IOException;
+
+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.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+
+import org.eclipse.emf.ecore.util.Diagnostician;
+
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * A sample utility for the '<em><b>servicedescriptorswithid</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorswithidExample {
+ /**
+ * <!-- begin-user-doc -->
+ * Load all the argument file paths or URIs as instances of the model.
+ * <!-- end-user-doc -->
+ * @param args the file paths or URIs.
+ * @generated
+ */
+ public static void main(String[] args) {
+ // Create a resource set to hold the resources.
+ //
+ ResourceSet resourceSet = new ResourceSetImpl();
+
+ // Register the appropriate resource factory to handle all file extensions.
+ //
+ resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put
+ (Resource.Factory.Registry.DEFAULT_EXTENSION,
+ new XMIResourceFactoryImpl());
+
+ // Register the package to ensure it is available during loading.
+ //
+ resourceSet.getPackageRegistry().put
+ (ServicedescriptorswithidPackage.eNS_URI,
+ ServicedescriptorswithidPackage.eINSTANCE);
+
+ // If there are no arguments, emit an appropriate usage message.
+ //
+ if (args.length == 0) {
+ System.out.println("Enter a list of file paths or URIs that have content like this:");
+ try {
+ Resource resource = resourceSet.createResource(URI.createURI("http:///My.servicedescriptorswithid"));
+ RegistryIdDesc root = ServicedescriptorswithidFactory.eINSTANCE.createRegistryIdDesc();
+ resource.getContents().add(root);
+ resource.save(System.out, null);
+ }
+ catch (IOException exception) {
+ exception.printStackTrace();
+ }
+ }
+ else {
+ // Iterate over all the arguments.
+ //
+ for (int i = 0; i < args.length; ++i) {
+ // Construct the URI for the instance file.
+ // The argument is treated as a file path only if it denotes an existing file.
+ // Otherwise, it's directly treated as a URL.
+ //
+ File file = new File(args[i]);
+ URI uri = file.isFile() ? URI.createFileURI(file.getAbsolutePath()): URI.createURI(args[i]);
+
+ try {
+ // Demand load resource for this file.
+ //
+ Resource resource = resourceSet.getResource(uri, true);
+ System.out.println("Loaded " + uri);
+
+ // Validate the contents of the loaded resource.
+ //
+ for (EObject eObject : resource.getContents()) {
+ Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eObject);
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ printDiagnostic(diagnostic, "");
+ }
+ }
+ }
+ catch (RuntimeException exception) {
+ System.out.println("Problem loading " + uri);
+ exception.printStackTrace();
+ }
+ }
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * Prints diagnostics with indentation.
+ * <!-- end-user-doc -->
+ * @param diagnostic the diagnostic to print.
+ * @param indent the indentation for printing.
+ * @generated
+ */
+ protected static void printDiagnostic(Diagnostic diagnostic, String indent) {
+ System.out.print(indent);
+ System.out.println(diagnostic.getMessage());
+ for (Diagnostic child : diagnostic.getChildren()) {
+ printDiagnostic(child, indent + " ");
+ }
+ }
+
+} //ServicedescriptorswithidExample
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServicedescriptorswithidTests.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServicedescriptorswithidTests.java
new file mode 100644
index 00000000000..e79416ac8ae
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/tests/ServicedescriptorswithidTests.java
@@ -0,0 +1,47 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.tests;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import junit.textui.TestRunner;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test suite for the '<em><b>servicedescriptorswithid</b></em>' package.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorswithidTests extends TestSuite {
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static void main(String[] args) {
+ TestRunner.run(suite());
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static Test suite() {
+ TestSuite suite = new ServicedescriptorswithidTests("servicedescriptorswithid Tests");
+ suite.addTestSuite(ServiceSetIdDescTest.class);
+ return suite;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorswithidTests(String name) {
+ super(name);
+ }
+
+} //ServicedescriptorswithidTests
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/AbstractServiceDescriptorsWithIdProviderTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/AbstractServiceDescriptorsWithIdProviderTest.java
new file mode 100644
index 00000000000..eddbd6257c3
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/AbstractServiceDescriptorsWithIdProviderTest.java
@@ -0,0 +1,195 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+import org.junit.Test;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+public abstract class AbstractServiceDescriptorsWithIdProviderTest {
+
+ static final String PLUGIN_XML = "resources/plugin.xml";
+
+ /**
+ * Load a RegistryDesc from the specified declaration file.
+ * @param extensionFileName The name of the resource containing declarations
+ * @param registryName The name of the registry to load.
+ * @return The descriptor for the registry.
+ *
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ abstract public RegistryIdDesc getRegistryDesc(String extensionFileName, String registryName ) throws IOException, ServiceException, DeclarationException;
+
+ /**
+ * Load a ServiceSetDesc from the specified declaration file.
+ *
+ * @param extensionFileName The name of the resource containing declarations
+ * @param serviceSetName The name of the serviceSet to load.
+ * @return The descriptor for the ServiceSet
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ abstract public ServiceSetIdDesc getServiceSetDesc(String extensionFileName, String serviceSetName ) throws IOException, ServiceException, DeclarationException;
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ExtensionServiceDescriptorsWithIdProvider#getRegistryDescriptor(java.lang.String)}.
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Test
+ public void testGetRegistryDescriptor() throws IOException, ServiceException, DeclarationException {
+
+ String readFromFile = "resources/plugin.xml";
+ RegistryIdDesc registryIdDesc = getRegistryDesc(readFromFile, "registryA");
+ assertNotNull("Get registered registry", registryIdDesc);
+
+ assertTrue( "extends found", registryIdDesc.getExtends().size()>0);
+ assertTrue( "extends found", registryIdDesc.getExtends().contains("registryB") );
+
+ assertTrue( "extends found", registryIdDesc.getParents().size()>0);
+ assertTrue( "extends found", registryIdDesc.getParents().contains("registryC") );
+
+ assertTrue( "extends found", registryIdDesc.getSets().size()>0);
+ assertTrue( "extends found", registryIdDesc.getSets().contains("servicesSetA") );
+
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ExtensionServiceDescriptorsWithIdProvider#getServiceSet(java.lang.String)}.
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Test
+ public void testGetServiceSet() throws IOException, ServiceException, DeclarationException {
+ // create provider, reading description from specified file.
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry("resources/plugin.xml");
+
+ ExtensionServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+
+ // Tests
+ assertNotNull("provider created", declarationsProvider);
+ ServiceSetIdDesc serviceSet = declarationsProvider.getServiceSet("fragmentA");
+
+ assertNotNull("Fragment exist", serviceSet);
+
+ assertTrue("extends set", serviceSet.getExtends().size()>0);
+ assertTrue("extends set", serviceSet.getExtends().contains("fragmentB" ) );
+
+ }
+
+ /**
+ * Test correctness of set parsing
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Test
+ public void testSetParsing() throws IOException, ServiceException, DeclarationException {
+ String serviceSetName = "extendingSet";
+ ServiceSetIdDesc serviceSet = getServiceSetDesc(PLUGIN_XML, serviceSetName);
+
+ // Tests
+ assertNotNull("service found", serviceSet);
+
+ assertTrue("extends set", serviceSet.getExtends().size()>0);
+ assertTrue("extends set", serviceSet.getExtends().contains("setWithC" ) );
+
+ String serviceAId = FakeServiceA.class.getName();
+ String serviceBId = FakeServiceB.class.getName();
+ assertTrue("service added", serviceSet.getServiceDescriptors().size()>0);
+ assertNotNull("service added", serviceSet.getService(serviceAId) );
+ assertNotNull("service added", serviceSet.getService(serviceBId) );
+
+ }
+
+ /**
+ * Test correctness of service parsing
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Test
+ public void testServiceParsing() throws IOException, ServiceException, DeclarationException {
+ // Indirectly read a specified service: first the set, second the service
+ String serviceSetName = "dependantServices";
+ String serviceAId = FakeServiceA.class.getName();
+ String serviceBId = FakeServiceB.class.getName();
+ String serviceCId = FakeServiceC.class.getName();
+
+ ServiceSetIdDesc serviceSet = getServiceSetDesc(PLUGIN_XML, serviceSetName);
+
+ AbstractServiceIdDesc serviceADesc = serviceSet.getService(serviceAId);
+ AbstractServiceIdDesc serviceBDesc = serviceSet.getService(serviceBId);
+ AbstractServiceIdDesc serviceCDesc = serviceSet.getService(serviceCId);
+
+ // Tests
+ assertNotNull("service found", serviceADesc);
+ assertNotNull("service found", serviceBDesc);
+ assertNotNull("service found", serviceCDesc);
+ // Check dependsOn
+ assertTrue( "dependsOn set", serviceADesc.getDependsOn().contains(serviceBId) );
+ assertTrue( "dependsOn set", serviceBDesc.getDependsOn().contains(serviceCId) );
+ }
+
+ /**
+ * Check if a serviceSet declared in several fragments with the same name is correctly loaded.
+ *
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ * @throws ServiceException
+ */
+ @Test
+ public void testLoadAlias() throws IOException, DeclarationException, ServiceException {
+
+ // Check if specified service are in the registry
+ String serviceSetName = "setWithAlias";
+ ServiceSetIdDesc serviceSet = getServiceSetDesc(PLUGIN_XML, serviceSetName);
+
+ String serviceAId = FakeServiceA.class.getName();
+ String aliasServiceId = "AnAlias";
+ AbstractServiceIdDesc serviceADesc = serviceSet.getService(serviceAId);
+ AbstractServiceIdDesc abstractAliasDesc = serviceSet.getService(aliasServiceId);
+
+ assertNotNull( "service found", serviceADesc );
+ assertNotNull( "service found", abstractAliasDesc );
+ assertTrue("right type", abstractAliasDesc instanceof AliasIdDesc) ;
+
+ AliasIdDesc aliasIdDesc = (AliasIdDesc)abstractAliasDesc;
+ assertEquals("alias set", serviceAId, aliasIdDesc.getAliasedService() );
+// assertTrue("alaised service added in dependencies", aliasDesc.getDependsOn().contains(serviceAId));
+ }
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/AllTests.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/AllTests.java
new file mode 100644
index 00000000000..f83b4cf6b39
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/AllTests.java
@@ -0,0 +1,32 @@
+/*****************************************************************************
+ * Copyright (c) 2010 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Remi Schnekenburger (CEA LIST) remi.schnekenburger@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistryTest;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+
+
+@RunWith(Suite.class)
+@SuiteClasses({
+// {oep}.core.services
+ServicesRegistryTest.class
+
+})
+/**
+ * Suite Class for all tests in the plugin
+ */
+public class AllTests {
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/AnnotatedClass.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/AnnotatedClass.java
new file mode 100644
index 00000000000..06d4e259ae0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/AnnotatedClass.java
@@ -0,0 +1,29 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.annotations.Service;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+
+@Service
+public class AnnotatedClass {
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/EclipseExtensionUtils.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/EclipseExtensionUtils.java
new file mode 100644
index 00000000000..3a1c27a274f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/EclipseExtensionUtils.java
@@ -0,0 +1,129 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.RegistryFactory;
+import org.eclipse.core.runtime.spi.RegistryContributor;
+
+
+/**
+ * Set of utilities helping to load eclipse extensions from predefined files.
+ *
+ * @author cedric dumoulin
+ *
+ * TODO This class is dedicated to the servicesREgistry.tests plugin. Can we make it more generic ?
+ *
+ */
+public class EclipseExtensionUtils {
+
+ /**
+ * Unique instance.
+ */
+ static final EclipseExtensionUtils instance = new EclipseExtensionUtils();
+
+ /**
+ * Create a new {@link IExtensionRegistry} and initialize it with the plugin.xml file found in the specified directory.
+ * Also add required plugin.xml files
+ *
+ * @param localfilepath
+ * @return
+ * @throws IOException
+ */
+ public IExtensionRegistry createRegistry( String localfilepath ) throws IOException {
+
+ // Create the registry
+ IExtensionRegistry registry = RegistryFactory.createRegistry(null, this, this);
+
+ // Load specified file
+ loadTestExtensionFile(registry, localfilepath);
+ // load regular plugin.xml in order to have the extension point definition
+ loadExtensionFile(registry, "org.eclipse.papyrus.infra.core.serviceregistry", "plugin.xml");
+ return registry;
+ }
+
+ /**
+ * Load the specified file (extension and extension points) into the registry.
+ * The file is located in the specified plugin.
+ *
+ * @param localfilepath
+ * @return
+ * @throws IOException
+ */
+ protected void loadExtensionFile( IExtensionRegistry registry, String pluginID, String localfilepath ) throws IOException {
+
+ InputStream inputStream;
+
+ if( Platform.isRunning()) {
+ // Load the specified plugin.xml file
+ URL url = new URL("platform:/plugin/" + pluginID + "/" + localfilepath);
+
+ // URL url = new URL("platform", PLUGIN_ID, localfilepath );
+ inputStream = url.openConnection().getInputStream();
+ }
+ else {
+ // try to read locally
+ // System.out.println("platform not running !!");
+
+ URL url = new URL("file:" + "../" + pluginID + "/" + localfilepath);
+ // URL url = new URL("platform", PLUGIN_ID, localfilepath );
+ inputStream = url.openConnection().getInputStream();
+ }
+
+ // Create a point contributor with fake ID
+ RegistryContributor pointContributor = new RegistryContributor(pluginID, pluginID, null, null);
+
+ registry.addContribution( inputStream, pointContributor, false, null, null, this);
+ }
+
+ /**
+ * Load the specified file (containing extension declarations) into the provided registry.
+ * The file is located in the same plugin as this class.
+ *
+ * @param localfilepath
+ * @return
+ * @throws IOException
+ */
+ public void loadTestExtensionFile( IExtensionRegistry registry, String localfilepath ) throws IOException {
+
+ String PLUGIN_ID = "org.eclipse.papyrus.infra.core.serviceregistry.test";
+ InputStream inputStream;
+
+ if( Platform.isRunning()) {
+ // Load the specified plugin.xml file
+ URL url = new URL("platform:/plugin/" + PLUGIN_ID + "/" + localfilepath);
+
+ // URL url = new URL("platform", PLUGIN_ID, localfilepath );
+ inputStream = url.openConnection().getInputStream();
+ }
+ else {
+ // try to read locally
+ // System.out.println("platform not running !!");
+ URL url = new URL("file:" + localfilepath);
+ // URL url = new URL("platform", PLUGIN_ID, localfilepath );
+ inputStream = url.openConnection().getInputStream();
+ }
+
+ // Create a point contributor with fake ID
+ RegistryContributor pointContributor = new RegistryContributor(PLUGIN_ID, PLUGIN_ID, null, null);
+ registry.addContribution( inputStream, pointContributor, false, null, null, this);
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProviderFromFile.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProviderFromFile.java
new file mode 100644
index 00000000000..b35789eb6c4
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProviderFromFile.java
@@ -0,0 +1,48 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import org.eclipse.core.runtime.IExtensionRegistry;
+
+
+/**
+ * @author dumoulin
+ *
+ */
+public class ExtensionServiceDescriptorsWithIdProviderFromFile extends ExtensionServiceDescriptorsWithIdProvider {
+
+ protected IExtensionRegistry extensionRegistry;
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param extensionRegistry
+ * @throws ServiceException
+ */
+ public ExtensionServiceDescriptorsWithIdProviderFromFile(IExtensionRegistry extensionRegistry) throws ServiceException {
+ super();
+ this.extensionRegistry = extensionRegistry;
+ }
+
+ /**
+ *
+ * @return
+ */
+ @Override
+ protected IExtensionRegistry getExtensionRegistry() {
+ return extensionRegistry;
+ }
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProviderIntegrationTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProviderIntegrationTest.java
new file mode 100644
index 00000000000..ff19e69f6ad
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProviderIntegrationTest.java
@@ -0,0 +1,305 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+public class ExtensionServiceDescriptorsWithIdProviderIntegrationTest {
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @Before
+ public void setUp() throws Exception {
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.internal.ServicesRegistryConfigurationReaderFromExtensions#loadServicesRegistryConfiguration(org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry, java.lang.String)}.
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Test
+ public void testLoadServicesSetConfiguration() throws IOException, ServiceException, DeclarationException {
+
+ // Create a declaration provider, and a factory
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry("resources/plugin.xml");
+ IServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+ ServiceRegistryFactory factory = new ServiceRegistryFactory(declarationsProvider);
+ // Create ServiceRegistry from factory
+ ServicesRegistry registry = factory.getServicesRegistry("simpleTestRegistry");
+
+// String servicesSetName = "simpleTest";
+
+ // Check if specified service are in the registry
+ Class<?> serviceA = FakeServiceA.class;
+ Class<?> serviceC = FakeServiceC.class;
+
+ assertNotNull( "service registered", registry.serviceState(serviceA) );
+ assertSame( "service registered", ServiceState.registered, registry.serviceState(serviceA) );
+ assertSame( "service registered", ServiceState.registered, registry.serviceState(serviceC) );
+
+ registry.startNewServices();
+ assertNotNull( "service found", registry.getService(serviceA) );
+ assertNotNull( "service found", registry.getService(serviceC) );
+
+ registry.disposeRegistry(true);
+ }
+
+ /**
+ * Test a set extending another set.
+ * * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Test
+ public void testLoadServicesSetWithExtends() throws IOException, ServiceException, DeclarationException {
+
+ // Create a declaration provider, and a factory
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry("resources/plugin.xml");
+ IServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+ ServiceRegistryFactory factory = new ServiceRegistryFactory(declarationsProvider);
+ // Create ServiceRegistry from factory
+ ServicesRegistry registry = factory.getServicesRegistry("extendingSetRegistry");
+
+ // Create a ServiceRegistry
+// String servicesSetName = "extendingSet";
+
+ // set(A, B) --> set(C)
+
+ // Check if specified service are in the registry
+ // C should be in the registry
+ Class<?> serviceA = FakeServiceA.class;
+ Class<?> serviceB = FakeServiceB.class;
+ Class<?> serviceC = FakeServiceC.class;
+
+ assertNotNull( "service registered", registry.serviceState(serviceA) );
+ assertSame( "service registered", ServiceState.registered, registry.serviceState(serviceA) );
+ assertSame( "service registered", ServiceState.registered, registry.serviceState(serviceB) );
+ assertSame( "service registered", ServiceState.registered, registry.serviceState(serviceC) );
+
+ registry.startNewServices();
+ assertNotNull( "service found", registry.getService(serviceA) );
+ assertNotNull( "service found", registry.getService(serviceC) );
+
+ registry.disposeRegistry(true);
+ }
+
+ /**
+ * Test a set extending another set.
+ * * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Test
+ public void testBadDeclaration() throws IOException, ServiceException, DeclarationException {
+ // Create a declaration provider, and a factory
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry("resources/plugin.xml");
+ IServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+ ServiceRegistryFactory factory = new ServiceRegistryFactory(declarationsProvider);
+ // Create ServiceRegistry from factory
+
+ // Create a ServiceRegistry
+ ServicesRegistry registry ;
+// String servicesSetName = "badSetExtendsIdMissing";
+ try {
+ registry = factory.getServicesRegistry("badSetExtendsIdMissingRegistry");
+ registry.startNewServices();
+ fail("Exception should be thrown");
+ } catch (DeclarationException e) {
+// e.printStackTrace();
+ }
+
+ }
+
+ /**
+ * Test a set extending another set.
+ * * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Test
+ public void testMissingBadServiceSetName() throws IOException, ServiceException, DeclarationException {
+ // Create a declaration provider, and a factory
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry("resources/plugin.xml");
+ IServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+ ServiceRegistryFactory factory = new ServiceRegistryFactory(declarationsProvider);
+
+ // Create a ServiceRegistry
+ ServicesRegistry registry ;
+// String servicesSetName = "NonExistingName";
+ try {
+ // Create ServiceRegistry from factory
+ registry = factory.getServicesRegistry("NonExistingName");
+ registry.startNewServices();
+ fail("Exception should be thrown");
+ } catch (DeclarationException e) {
+// e.printStackTrace();
+ }
+
+ }
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.internal.ServicesRegistryConfigurationReaderFromExtensions#loadServicesRegistryConfiguration(org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry, java.lang.String)}.
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Test
+ public void testServicesWithExtends() throws IOException, ServiceException, DeclarationException {
+
+ // Create a declaration provider, and a factory
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry("resources/plugin.xml");
+ IServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+ ServiceRegistryFactory factory = new ServiceRegistryFactory(declarationsProvider);
+ // Create ServiceRegistry from factory
+ ServicesRegistry registry = factory.getServicesRegistry("dependantServicesRegistry");
+
+// String servicesSetName = "dependantServices";
+ FakeService.getTrace().reset();
+ registry.startNewServices();
+
+
+ // check services
+ Class<?> serviceA = FakeServiceA.class;
+ Class<?> serviceB = FakeServiceB.class;
+ Class<?> serviceC = FakeServiceC.class;
+ // A and C should be started, B should not be started.
+ assertTrue("A started", registry.isStarted(serviceA));
+ assertFalse("B not started", registry.isStarted(serviceB));
+ assertTrue("C started", registry.isStarted(serviceC));
+
+ // Check if we can get them
+ assertNotNull("got service started", registry.getService(serviceC));
+ assertNotNull("got service started", registry.getService(serviceA));
+
+ // check creation order (C then A)
+ // order should be C, A
+ TestTrace trace = FakeService.getTrace();
+ int i = 0;
+ assertEquals("order", serviceC.getSimpleName() + ",create", trace.getNameTrace(i++));
+ assertEquals("order", serviceA.getSimpleName() + ",create", trace.getNameTrace(i++));
+
+ assertEquals("order", serviceC.getSimpleName() + ",init", trace.getNameTrace(i++));
+ assertEquals("order", serviceA.getSimpleName() + ",init", trace.getNameTrace(i++));
+
+ assertEquals("order", serviceC.getSimpleName() + ",start", trace.getNameTrace(i++));
+ assertEquals("order", serviceA.getSimpleName() + ",start", trace.getNameTrace(i++));
+
+ // start B
+ assertNotNull("got service started", registry.getService(serviceB));
+ assertTrue("B started", registry.isStarted(serviceB));
+
+ registry.disposeRegistry(true);
+ }
+
+
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.internal.ServicesRegistryConfigurationReaderFromExtensions#loadServicesSetConfiguration(org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry, java.lang.String)}.
+ */
+ @Test
+ public void testLoadServicesRegistryConfiguration() {
+ fail("Not yet implemented");
+ }
+
+ /**
+ * Check if a serviceSet declared in several fragments with the same name is correctly loaded.
+ *
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Test
+ public void testLoadServicesSetFromPartialFragments() throws IOException, ServiceException, DeclarationException {
+
+ // Create a declaration provider, and a factory
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry("resources/plugin.xml");
+ IServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+ ServiceRegistryFactory factory = new ServiceRegistryFactory(declarationsProvider);
+ // Create ServiceRegistry from factory
+ ServicesRegistry registry = factory.getServicesRegistry("doubleNameRegistry");
+
+ // Create a ServiceRegistry
+// String servicesSetName = "doubleName";
+
+ // Check if specified service are in the registry
+ Class<?> serviceA = FakeServiceA.class;
+ Class<?> serviceB = FakeServiceB.class;
+
+ assertNotNull( "service registered", registry.serviceState(serviceA) );
+ assertSame( "service registered", ServiceState.registered, registry.serviceState(serviceA) );
+ assertSame( "service registered", ServiceState.registered, registry.serviceState(serviceB) );
+
+ registry.startNewServices();
+ assertNotNull( "service found", registry.getService(serviceA) );
+ assertNotNull( "service found", registry.getService(serviceB) );
+
+ registry.disposeRegistry(true);
+ }
+
+ /**
+ * Check if a serviceSet declared in several fragments with the same name is correctly loaded.
+ *
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ * @throws ServiceException
+ */
+ @Test
+ public void testLoadAlias() throws IOException, DeclarationException, ServiceException {
+
+ // Create a declaration provider, and a factory
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry("resources/plugin.xml");
+ IServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+ ServiceRegistryFactory factory = new ServiceRegistryFactory(declarationsProvider);
+ // Create ServiceRegistry from factory
+ ServicesRegistry registry = factory.getServicesRegistry("setWithAliasRegistry");
+ registry.startNewServices();
+
+ // Check if specified service are in the registry
+ Class<?> serviceA = FakeServiceA.class;
+ String aliasService = "AnAlias";
+ assertNotNull( "service found", registry.getService(serviceA) );
+ assertNotNull( "service found", registry.getService(aliasService) );
+ assertSame("same service", registry.getService(serviceA), registry.getService(aliasService));
+ registry.disposeRegistry(true);
+ }
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProviderTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProviderTest.java
new file mode 100644
index 00000000000..b37f5a0adb7
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProviderTest.java
@@ -0,0 +1,174 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+public class ExtensionServiceDescriptorsWithIdProviderTest extends AbstractServiceDescriptorsWithIdProviderTest{
+
+ static final String PLUGIN_XML = "resources/plugin.xml";
+ /**
+ * @throws java.lang.Exception
+ */
+ @Before
+ public void setUp() throws Exception {
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ /**
+ * Load a RegistryDesc from the specified declaration file.
+ * @param extensionFileName The name of the resource containing declarations
+ * @param registryName The name of the registry to load.
+ * @return The descriptor for the registry.
+ *
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ public RegistryIdDesc getRegistryDesc(String extensionFileName, String registryName ) throws IOException, ServiceException, DeclarationException {
+ // create provider, reading description from specified file.
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry(extensionFileName);
+
+ ExtensionServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+ assertNotNull("provider created", declarationsProvider);
+
+ RegistryIdDesc registryIdDesc = declarationsProvider.getRegistryDescriptor(registryName);
+
+ return registryIdDesc;
+ }
+
+ /**
+ * Load a ServiceSetDesc from the specified declaration file.
+ *
+ * @param extensionFileName The name of the resource containing declarations
+ * @param serviceSetName The name of the serviceSet to load.
+ * @return The descriptor for the ServiceSet
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ public ServiceSetIdDesc getServiceSetDesc(String extensionFileName, String serviceSetName ) throws IOException, ServiceException, DeclarationException {
+ // create provider, reading description from specified file.
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry(extensionFileName);
+
+ ExtensionServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+ assertNotNull("provider created", declarationsProvider);
+
+ ServiceSetIdDesc serviceSetIdDesc = declarationsProvider.getServiceSet(serviceSetName);
+
+ return serviceSetIdDesc;
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ExtensionServiceDescriptorsWithIdProvider#getServiceSetFragments(java.lang.String)}.
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Test
+ public void testGetServiceSetFragments() throws IOException, ServiceException, DeclarationException {
+ // create provider, reading description from specified file.
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry("resources/plugin.xml");
+
+ ExtensionServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+
+ // Tests
+ assertNotNull("provider created", declarationsProvider);
+ List<ServiceSetIdDesc> fragments = declarationsProvider.getServiceSetFragments("fragmentA");
+ assertNotNull("Get fragments", fragments);
+
+ assertTrue( "fragments found", fragments.size()>0);
+ // Get the first fragment and test it
+ ServiceSetIdDesc serviceSet = fragments.get(0);
+ assertNotNull("Fragment exist", serviceSet);
+
+ assertTrue("extends set", serviceSet.getExtends().size()>0);
+ assertTrue("extends set", serviceSet.getExtends().contains("fragmentB" ) );
+
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ExtensionServiceDescriptorsWithIdProvider#getServiceSetFragments(java.lang.String)}.
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Test
+ public void testGetServiceSetFragmentsWithMultiFragments() throws IOException, ServiceException, DeclarationException {
+ // create provider, reading description from specified file.
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry("resources/plugin.xml");
+
+ ExtensionServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+
+ // Tests
+ assertNotNull("provider created", declarationsProvider);
+ List<ServiceSetIdDesc> fragments = declarationsProvider.getServiceSetFragments("multiFragmentA");
+ assertNotNull("Get fragments", fragments);
+
+ assertTrue( "fragments found", fragments.size()>0);
+ assertTrue( "fragments found", fragments.size()>1);
+ }
+
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ExtensionServiceDescriptorsWithIdProvider#getServiceSet(java.lang.String)}.
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Test
+ public void testGetServiceSetFromMultiFragment() throws IOException, ServiceException, DeclarationException {
+ // create provider, reading description from specified file.
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry("resources/plugin.xml");
+
+ ExtensionServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+
+ // Tests
+ assertNotNull("provider created", declarationsProvider);
+ ServiceSetIdDesc serviceSet = declarationsProvider.getServiceSet("multiFragmentA");
+
+ assertNotNull("Fragment exist", serviceSet);
+
+ assertTrue("extends set", serviceSet.getExtends().size()>0);
+ assertTrue("extends set", serviceSet.getExtends().contains("fragmentB" ) );
+
+ }
+
+
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeService.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeService.java
new file mode 100644
index 00000000000..f259efeae46
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeService.java
@@ -0,0 +1,77 @@
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.IService;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry;
+
+
+/**
+ * Fake service for testing purpose.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class FakeService implements IService {
+
+
+ static public TestTrace trace = new TestTrace();
+
+ static int count = 0;
+
+ public String name = "name" + count++;
+
+
+ /**
+ *
+ * Constructor.
+ *
+ */
+ public FakeService() {
+ trace.addTrace(name, "create");
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param name
+ */
+ public FakeService(String name) {
+ this.name = name;
+ trace.addTrace(name, "create");
+ }
+
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @return the trace
+ */
+ static public TestTrace getTrace() {
+ return trace;
+ }
+
+
+ /**
+ * @param trace the trace to set
+ */
+ public void setTrace(TestTrace trace) {
+ FakeService.trace = trace;
+ }
+
+ public void init(ServicesRegistry servicesRegistry) {
+ trace.addTrace(name, "init", servicesRegistry);
+ }
+
+ public void startService() {
+ trace.addTrace(name, "start");
+ }
+
+ public void disposeService() {
+ trace.addTrace(name, "dispose");
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceA.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceA.java
new file mode 100644
index 00000000000..c241b00d170
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceA.java
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+public class FakeServiceA extends FakeService {
+
+ public FakeServiceA() {
+ super(FakeServiceA.class.getSimpleName());
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceB.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceB.java
new file mode 100644
index 00000000000..93265bd6b22
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceB.java
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+public class FakeServiceB extends FakeService {
+
+ public FakeServiceB() {
+ super(FakeServiceB.class.getSimpleName());
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceC.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceC.java
new file mode 100644
index 00000000000..7b4d2753c4f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceC.java
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+public class FakeServiceC extends FakeService {
+
+ public FakeServiceC() {
+ super(FakeServiceC.class.getSimpleName());
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceDescriptor.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceDescriptor.java
new file mode 100644
index 00000000000..fbd23443c65
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceDescriptor.java
@@ -0,0 +1,43 @@
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.List;
+
+/**
+ * Service Descriptor used to create a named FakeService.
+ */
+public class FakeServiceDescriptor extends ServiceDescriptor {
+
+ /**
+ *
+ * Constructor.
+ * Create a descriptor for a FakeService with a specified name.
+ *
+ * @param key
+ * @param startKind
+ */
+ public FakeServiceDescriptor( String key, ServiceStartKind startKind) {
+ super(key, FakeService.class.getName(), startKind, 1 );
+ }
+
+ /**
+ *
+ * Constructor.
+ * Create a descriptor for a FakeService with a specified name.
+ *
+ * @param key
+ * @param startKind
+ * @param requiredService
+ */
+ public FakeServiceDescriptor( String key, ServiceStartKind startKind, List<String> requiredService) {
+ super(key, FakeService.class.getName(), startKind, 1, requiredService );
+ }
+
+ /**
+ * Get the type of the created service.
+ * @return
+ */
+ static public Class<?> getServiceType() {
+ return FakeService.class;
+ }
+}
+
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceFactory.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceFactory.java
new file mode 100644
index 00000000000..badab2e5d1a
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeServiceFactory.java
@@ -0,0 +1,67 @@
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.IServiceFactory;
+
+
+/**
+ * Fake service factory for testing purpose.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class FakeServiceFactory extends FakeService implements IServiceFactory {
+
+
+ /**
+ *
+ * Constructor.
+ *
+ */
+ public FakeServiceFactory() {
+
+ super( "factoryName" + count++ );
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param name
+ */
+ public FakeServiceFactory(String name) {
+ super(name);
+ }
+
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Create the service
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.IServiceFactory#createServiceInstance()
+ *
+ * @return
+ */
+ public Object createServiceInstance() {
+ trace.addTrace(getName(), "createInstance");
+ return new FakeCreatedService();
+ }
+
+ /**
+ * Pseudo service created by the factory.
+ * @author dumoulin
+ *
+ */
+ public class FakeCreatedService {
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+ }
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeWithRequiredServiceFactory.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeWithRequiredServiceFactory.java
new file mode 100644
index 00000000000..d14ad805e7c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/FakeWithRequiredServiceFactory.java
@@ -0,0 +1,56 @@
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.IServiceFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry;
+
+
+/**
+ * Fake service factory for testing purpose.
+ * This service require the
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class FakeWithRequiredServiceFactory extends FakeServiceFactory implements IServiceFactory {
+
+
+ /**
+ *
+ * Constructor.
+ *
+ */
+ public FakeWithRequiredServiceFactory() {
+
+ super( "factoryName" + count++ );
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param name
+ */
+ public FakeWithRequiredServiceFactory(String name) {
+ super(name);
+ }
+
+
+ /**
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.FakeService#init(org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry)
+ *
+ * @param servicesRegistry
+ */
+ @Override
+ public void init(ServicesRegistry servicesRegistry) {
+
+ trace.addTrace(name, "init");
+ Object foundService = null;
+ try {
+ foundService = servicesRegistry.getService("C");
+ } catch (ServiceException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ trace.addTrace(name, "initEnd", foundService);
+ }
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceA.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceA.java
new file mode 100644
index 00000000000..985bbc1f0e9
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceA.java
@@ -0,0 +1,52 @@
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.IService;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry;
+
+public class ServiceA implements IService {
+
+ public enum TraceKind {
+ init, start, dispose
+ };
+
+ static List<TraceKind> trace = new ArrayList<TraceKind>();
+
+ static List<String> nametrace = new ArrayList<String>();
+
+
+
+ static public TraceKind getEvent(int index) {
+ return trace.get(index);
+ }
+
+ static public String getTraceName(int index) {
+ return nametrace.get(index);
+ }
+
+ static public void resetTrace() {
+ trace.clear();
+ nametrace.clear();
+ }
+
+ public void init(ServicesRegistry servicesRegistry) {
+ trace.add(TraceKind.init);
+ nametrace.add(this.getClass().getSimpleName());
+
+ }
+
+ public void startService() {
+ trace.add(TraceKind.start);
+ nametrace.add(this.getClass().getSimpleName());
+
+ }
+
+ public void disposeService() {
+ trace.add(TraceKind.dispose);
+ nametrace.add(this.getClass().getSimpleName());
+
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceA10.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceA10.java
new file mode 100644
index 00000000000..f4036ffc6da
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceA10.java
@@ -0,0 +1,6 @@
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+
+public class ServiceA10 extends ServiceA {
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceB.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceB.java
new file mode 100644
index 00000000000..b1fb167ebcd
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceB.java
@@ -0,0 +1,6 @@
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+
+public class ServiceB extends ServiceA {
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceC.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceC.java
new file mode 100644
index 00000000000..6ce1bfa77cc
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceC.java
@@ -0,0 +1,6 @@
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+
+public class ServiceC extends ServiceA {
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptorsWithIdProviderCollectionTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptorsWithIdProviderCollectionTest.java
new file mode 100644
index 00000000000..9df8abdd9fb
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptorsWithIdProviderCollectionTest.java
@@ -0,0 +1,110 @@
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import static org.junit.Assert.*;
+
+import java.io.IOException;
+
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+
+public class ServiceDescriptorsWithIdProviderCollectionTest extends AbstractServiceDescriptorsWithIdProviderTest {
+
+ /**
+ * Load a RegistryDesc from the specified declaration file.
+ * @param extensionFileName The name of the resource containing declarations
+ * @param registryName The name of the registry to load.
+ * @return The descriptor for the registry.
+ *
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Override
+ public RegistryIdDesc getRegistryDesc(String extensionFileName, String registryName) throws IOException, ServiceException, DeclarationException {
+ // create provider, reading description from specified file.
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry(extensionFileName);
+
+ ExtensionServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+ assertNotNull("provider created", declarationsProvider);
+
+ // Create the collection
+ ServiceDescriptorsWithIdProviderCollection providerCollection = new ServiceDescriptorsWithIdProviderCollection();
+ providerCollection.addAll(declarationsProvider);
+
+ // Get the registry thru the collection
+ RegistryIdDesc registryIdDesc = providerCollection.getRegistryIdDesc(registryName);
+
+ return registryIdDesc;
+ }
+
+ /**
+ * Load a ServiceSetDesc from the specified declaration file.
+ *
+ * @param extensionFileName The name of the resource containing declarations
+ * @param serviceSetName The name of the serviceSet to load.
+ * @return The descriptor for the ServiceSet
+ * @throws IOException
+ * @throws ServiceException
+ * @throws DeclarationException
+ */
+ @Override
+ public ServiceSetIdDesc getServiceSetDesc(String extensionFileName, String serviceSetName) throws IOException, ServiceException, DeclarationException {
+ // create provider, reading description from specified file.
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry(extensionFileName);
+
+ ExtensionServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+ assertNotNull("provider created", declarationsProvider);
+
+ // Create the collection
+ ServiceDescriptorsWithIdProviderCollection providerCollection = new ServiceDescriptorsWithIdProviderCollection();
+ providerCollection.addAll(declarationsProvider);
+
+ // Get the set thru the collection
+ ServiceSetIdDesc serviceSetIdDesc = providerCollection.getServiceSet(serviceSetName);
+ return serviceSetIdDesc;
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void testServiceDescriptorsWithIdProviderCollection() {
+ ServiceDescriptorsWithIdProviderCollection providerCollection = new ServiceDescriptorsWithIdProviderCollection();
+ assertNotNull("collection created", providerCollection);
+ }
+
+ /**
+ * @throws IOException
+ * @throws ServiceException
+ *
+ */
+ @Test
+ public void testAddAll() throws IOException, ServiceException {
+ // create provider, reading description from specified file.
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry(PLUGIN_XML);
+
+ ExtensionServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+ assertNotNull("provider created", declarationsProvider);
+
+ // Create the collection
+ ServiceDescriptorsWithIdProviderCollection providerCollection = new ServiceDescriptorsWithIdProviderCollection();
+ providerCollection.addAll(declarationsProvider);
+ assertNotNull("collection created", providerCollection);
+
+ }
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServicePojoA.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServicePojoA.java
new file mode 100644
index 00000000000..577e3e9e784
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServicePojoA.java
@@ -0,0 +1,6 @@
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+
+public class ServicePojoA extends ServiceA {
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceRegistryFactoryTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceRegistryFactoryTest.java
new file mode 100644
index 00000000000..617bb46a0e9
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceRegistryFactoryTest.java
@@ -0,0 +1,87 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import static org.junit.Assert.*;
+
+import java.io.IOException;
+
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+public class ServiceRegistryFactoryTest {
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @Before
+ public void setUp() throws Exception {
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ /**
+ * Integration test.
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ServiceRegistryFactory#getServicesRegistry(java.lang.String)}.
+ * @throws DeclarationException
+ * @throws IOException
+ * @throws ServiceMultiException
+ */
+ @Test
+ public void testGetServicesRegistryString() throws DeclarationException, ServiceException, IOException {
+
+
+ // Initialize Factory
+ IExtensionRegistry extensionRegistry = EclipseExtensionUtils.instance.createRegistry("resources/plugin.xml");
+
+ IServiceDescriptorsWithIdProvider declarationsProvider = new ExtensionServiceDescriptorsWithIdProviderFromFile(extensionRegistry);
+ ServiceRegistryFactory factory = new ServiceRegistryFactory(declarationsProvider);
+
+
+ String serviceA = FakeServiceA.class.getName();
+ String serviceB = FakeServiceB.class.getName();
+ // Create ServiceRegistry from factory
+ ServicesRegistry servicesRegistry = factory.getServicesRegistry("simpleTestRegistry");
+ servicesRegistry.startNewServices();
+
+ // Check result
+ assertNotNull("registry created", servicesRegistry);
+
+ assertNotNull("Get registered service", servicesRegistry.getService(serviceA));
+ assertNotNull("Get registered service", servicesRegistry.getService(serviceB));
+
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ServiceRegistryFactory#extendsServicesRegistry(org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry, java.lang.String)}.
+ */
+ @Test
+ public void testExtendsServicesRegistryServicesRegistryString() {
+ fail("Not yet implemented");
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceTest.java
new file mode 100644
index 00000000000..d2daa691836
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServiceTest.java
@@ -0,0 +1,52 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+public class ServiceTest {
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.annotations.Service#value()}.
+ */
+ @Test
+ public void testValue() {
+ fail("Not yet implemented");
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.annotations.Service#startupKind()}.
+ */
+ @Test
+ public void testStartupKind() {
+ fail("Not yet implemented");
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.annotations.Service#priority()}.
+ */
+ @Test
+ public void testPriority() {
+ fail("Not yet implemented");
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistryTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistryTest.java
new file mode 100644
index 00000000000..0475d3ee0a2
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistryTest.java
@@ -0,0 +1,892 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.Arrays;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.FakeServiceFactory.FakeCreatedService;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceA.TraceKind;
+import org.junit.Test;
+
+
+/**
+ * @author dumoulin
+ *
+ */
+public class ServicesRegistryTest extends TestCase {
+
+ /** The registry to test */
+ ServicesRegistry servicesRegistry;
+
+ ServiceDescriptor serviceADesc = new LazyServiceADescriptor();
+
+ ServiceDescriptor serviceA10Desc = new LazyServiceA10Descriptor();
+
+ ServiceDescriptor serviceBDesc = new LazyServiceBDescriptor();
+
+ ServiceDescriptor serviceCDesc = new ServiceCDescriptor();
+
+ ServiceDescriptor servicePojoADesc = new LazyServicePojoADescriptor();
+
+ public ServicesRegistryTest(String name) {
+ super(name);
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ protected void setUp() throws Exception {
+ servicesRegistry = new ServicesRegistry();
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ protected void tearDown() throws Exception {
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry#add(org.eclipse.papyrus.infra.core.serviceregistry.ServiceDescriptor)} .
+ * @throws ServiceMultiException
+ */
+ public void testAdd() throws ServiceMultiException {
+
+ servicesRegistry.add(serviceADesc);
+ servicesRegistry.add(serviceBDesc);
+ servicesRegistry.add(serviceCDesc);
+ servicesRegistry.add(servicePojoADesc);
+
+ // Test entries creation
+// try {
+// assertFalse("serviceA stopped", servicesRegistry.isStarted(serviceADesc.getKey()));
+// assertFalse("serviceB stopped", servicesRegistry.isStarted(serviceBDesc.getKey()));
+// assertFalse("serviceC stopped", servicesRegistry.isStarted(serviceCDesc.getKey()));
+// assertFalse("servicePojoA stopped", servicesRegistry.isStarted(servicePojoADesc.getKey()));
+// } catch (ServiceNotFoundException e) {
+// fail("Service should exist." + e.getMessage());
+// }
+
+ // Test startup
+ servicesRegistry.startNewServices();
+
+ // Test always started
+ try {
+ assertFalse("serviceA stopped", servicesRegistry.isStarted(serviceADesc.getKey()));
+ assertFalse("serviceB stopped", servicesRegistry.isStarted(serviceBDesc.getKey()));
+ assertEquals("serviceC state", ServiceState.started, servicesRegistry.serviceState(serviceCDesc.getKey()));
+ assertTrue("serviceC started", servicesRegistry.isStarted(serviceCDesc.getKey()));
+ assertFalse("servicePojoA stopped", servicesRegistry.isStarted(servicePojoADesc.getKey()));
+ } catch (ServiceNotFoundException e) {
+ fail("Service should exist.");
+ }
+
+
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry#getService(java.lang.Object)}.
+ *
+ * @throws ServiceException
+ */
+ public void testGetService() throws ServiceException {
+ servicesRegistry.add(serviceADesc);
+ servicesRegistry.add(serviceBDesc);
+ servicesRegistry.add(serviceCDesc);
+ servicesRegistry.add(servicePojoADesc);
+
+
+ servicesRegistry.startNewServices();
+
+ // Test lazy service
+ Object serviceA = servicesRegistry.getService(serviceADesc.getKey());
+ assertNotNull("service created", serviceA);
+ assertEquals("right class", ServiceA.class, serviceA.getClass());
+
+ Object serviceA2 = servicesRegistry.getService(serviceADesc.getKey());
+ assertEquals("Second retrieve get the same service", serviceA, serviceA2);
+
+ // test startup service
+ Object serviceC = servicesRegistry.getService(serviceCDesc.getKey());
+ assertNotNull("service created", serviceC);
+ assertEquals("right class", ServiceC.class, serviceC.getClass());
+
+ Object serviceC2 = servicesRegistry.getService(serviceCDesc.getKey());
+ assertEquals("Second retrieve get the same service", serviceC, serviceC2);
+
+ // test pojo service
+ Object servicePojo = servicesRegistry.getService(servicePojoADesc.getKey());
+ assertNotNull("service created", servicePojo);
+ assertEquals("right class", ServicePojoA.class, servicePojo.getClass());
+
+ Object servicePojo2 = servicesRegistry.getService(servicePojoADesc.getKey());
+ assertEquals("Second retrieve get the same service", servicePojo, servicePojo2);
+
+
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry#getService(java.lang.Object)}.
+ *
+ * @throws ServiceException
+ */
+ public void testGetServiceByClass() throws ServiceException {
+ servicesRegistry.add(serviceADesc);
+ servicesRegistry.add(serviceBDesc);
+ servicesRegistry.add(serviceCDesc);
+ servicesRegistry.add(servicePojoADesc);
+
+
+ servicesRegistry.startNewServices();
+
+ // Test lazy service
+ ServiceA serviceA = servicesRegistry.getService(ServiceA.class);
+ assertNotNull("service created", serviceA);
+ assertEquals("right class", ServiceA.class, serviceA.getClass());
+
+ ServiceA serviceA2 = servicesRegistry.getService(ServiceA.class);
+ assertEquals("Second retrieve get the same service", serviceA, serviceA2);
+
+ // test startup service
+ ServiceC serviceC = servicesRegistry.getService(ServiceC.class);
+ assertNotNull("service created", serviceC);
+ assertEquals("right class", ServiceC.class, serviceC.getClass());
+
+ // test pojo service
+ ServicePojoA servicePojo = servicesRegistry.getService(ServicePojoA.class);
+ assertNotNull("service created", servicePojo);
+ assertEquals("right class", ServicePojoA.class, servicePojo.getClass());
+
+ Object servicePojo2 = servicesRegistry.getService(ServicePojoA.class);
+ assertEquals("Second retrieve get the same service", servicePojo, servicePojo2);
+
+
+ }
+
+ /**
+ * Try to register 2 services under the same name, but with different priorities.
+ *
+ * @throws ServiceException
+ */
+ public void testPriority() throws ServiceException {
+ servicesRegistry.add(serviceADesc);
+ servicesRegistry.add(serviceA10Desc);
+ servicesRegistry.add(serviceBDesc);
+
+ // Test creation
+// try {
+// assertFalse("serviceA stopped", servicesRegistry.isStarted(serviceADesc.getKey()));
+// assertFalse("serviceB stopped", servicesRegistry.isStarted(serviceBDesc.getKey()));
+// } catch (ServiceNotFoundException e) {
+// fail("Service should exist.");
+// }
+
+ servicesRegistry.startNewServices();
+
+ Object serviceA = servicesRegistry.getService(serviceADesc.getKey());
+
+ assertNotNull("Service created", serviceA);
+ assertEquals("right class", ServiceA10.class, serviceA.getClass());
+
+
+ }
+
+ /**
+ * Test add for a direct instance of service.
+ *
+ * @throws ServiceException
+ */
+ public void testAddDirectInstance() throws ServiceException {
+ IService instanciatedService = new ServiceA();
+ String key = instanciatedService.getClass().getName();
+
+ servicesRegistry.add(key, 1, instanciatedService);
+
+ servicesRegistry.add(serviceCDesc);
+ servicesRegistry.add(serviceBDesc);
+
+ servicesRegistry.startNewServices();
+
+ Object serviceA = servicesRegistry.getService(key);
+
+ assertNotNull("Service created", serviceA);
+ assertEquals("right object", instanciatedService, serviceA);
+ assertEquals("right class", ServiceA.class, serviceA.getClass());
+
+
+ }
+
+ /**
+ * Test life cycle for directly registered services
+ * @throws ServiceException
+ */
+ public void testCallsOrder() throws ServiceException {
+ // Register services as STARTUP !
+ servicesRegistry.add(ServiceA.class, 1, new ServiceA() );
+ // Lazy - generate no trace
+ servicesRegistry.add(ServiceB.class, 1, new ServiceB(), ServiceStartKind.LAZY);
+ servicesRegistry.add(ServiceC.class, 1, new ServiceC());
+ servicesRegistry.add(ServicePojoA.class, 1, new ServicePojoA());
+
+
+ ServiceA.resetTrace();
+ servicesRegistry.startNewServices();
+
+ // Check orders
+ //
+ int i=0;
+ assertEquals("service", TraceKind.init, ServiceA.getEvent(i++));
+ assertEquals("service", TraceKind.init, ServiceA.getEvent(i++));
+ assertEquals("service", TraceKind.init, ServiceA.getEvent(i++));
+// assertEquals("service", TraceKind.init, ServiceA.getEvent(i++));
+
+ assertEquals("service", TraceKind.start, ServiceA.getEvent(i++));
+ assertEquals("service", TraceKind.start, ServiceA.getEvent(i++));
+ assertEquals("service", TraceKind.start, ServiceA.getEvent(i++));
+// assertEquals("service", TraceKind.start, ServiceA.getEvent(i++));
+
+ // Now, start lazy service
+ ServiceB service = servicesRegistry.getService(ServiceB.class);
+ assertNotNull("service found", service);
+ assertEquals("service", TraceKind.init, ServiceA.getEvent(i++));
+ assertEquals("service", TraceKind.start, ServiceA.getEvent(i++));
+
+
+ // Check dispose
+ servicesRegistry.disposeRegistry();
+ assertEquals("service", TraceKind.dispose, ServiceA.getEvent(i++));
+ assertEquals("service", TraceKind.dispose, ServiceA.getEvent(i++));
+ assertEquals("service", TraceKind.dispose, ServiceA.getEvent(i++));
+// assertEquals("service", TraceKind.dispose, ServiceA.getEvent(i++));
+
+ //
+ }
+
+ /**
+ * Test life cycle for services registered wih descriptors
+ * @throws ServiceException
+ */
+ public void testCallsOrderForDescriptors() throws ServiceException {
+ // Register services as STARTUP !
+ // Lazy - generate no trace
+ servicesRegistry.add( new LazyServiceBDescriptor() );
+ servicesRegistry.add( new ServiceCDescriptor());
+
+
+ ServiceA.resetTrace();
+ servicesRegistry.startNewServices();
+
+ // Check orders
+ //
+ int i=0;
+ assertEquals("service", TraceKind.init, ServiceA.getEvent(i++));
+// assertEquals("service", TraceKind.init, ServiceA.getEvent(i++));
+
+ assertEquals("service", TraceKind.start, ServiceA.getEvent(i++));
+// assertEquals("service", TraceKind.start, ServiceA.getEvent(i++));
+
+ // Now, start lazy service
+ ServiceB service = (ServiceB)servicesRegistry.getService(ServiceB.class.getName());
+ assertNotNull("service found", service);
+ assertEquals("service", TraceKind.init, ServiceA.getEvent(i++));
+ assertEquals("service", TraceKind.start, ServiceA.getEvent(i++));
+
+
+ // Check dispose
+ servicesRegistry.disposeRegistry();
+ assertEquals("service", TraceKind.dispose, ServiceA.getEvent(i++));
+ assertEquals("service", TraceKind.dispose, ServiceA.getEvent(i++));
+// assertEquals("service", TraceKind.dispose, ServiceA.getEvent(i++));
+
+ //
+ }
+
+ /**
+ * Test the start order for services of type Start and Service
+ * @throws ServiceException
+ */
+ public void testStartDependantOrder() throws ServiceException {
+
+ String A = "A";
+ String B = "B";
+ String C = "C";
+ String D = "D";
+ String E = "E";
+// String F = "F";
+
+ // Create services E --> D --> C --> B --> A
+ FakeService.getTrace().reset();
+
+ servicesRegistry.add( new ServiceDesc( E, ServiceStartKind.STARTUP, Arrays.asList(D) ));
+ servicesRegistry.add( new ServiceDesc( D, ServiceStartKind.STARTUP, Arrays.asList(C) ));
+ servicesRegistry.add( new ServiceDesc( C, ServiceStartKind.STARTUP, Arrays.asList(B) ));
+ servicesRegistry.add( new ServiceDesc( B, ServiceStartKind.STARTUP, Arrays.asList(A) ));
+ servicesRegistry.add( new ServiceDesc( A, ServiceStartKind.STARTUP ));
+// servicesRegistry.add( new ServiceIdDesc( F, ServiceStartKind.STARTUP, Arrays.asList(E) ));
+
+ // Start services
+ servicesRegistry.startNewServices();
+
+ // check services
+ assertTrue("service started", servicesRegistry.isStarted(A));
+ assertTrue("service started", servicesRegistry.isStarted(B));
+ assertNotSame("services are different", servicesRegistry.getService(A), servicesRegistry.getService(B));
+
+ // Get names of created services
+ String nameA = ((FakeService)servicesRegistry.getService(A)).getName();
+ String nameB = ((FakeService)servicesRegistry.getService(B)).getName();
+ String nameC = ((FakeService)servicesRegistry.getService(C)).getName();
+ String nameD = ((FakeService)servicesRegistry.getService(D)).getName();
+ String nameE = ((FakeService)servicesRegistry.getService(E)).getName();
+// String nameF = ((FakeService)servicesRegistry.getService(F)).getName();
+
+
+ // check order (E and F order are not guaranteed)
+ // order should be A, B, C, D, E
+ TestTrace trace = FakeService.getTrace();
+ int i = 0;
+// assertEquals("order", nameF + ",create", trace.getNameTrace(i++));
+ assertEquals("order", nameA + ",create", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",create", trace.getNameTrace(i++));
+ assertEquals("order", nameC + ",create", trace.getNameTrace(i++));
+ assertEquals("order", nameD + ",create", trace.getNameTrace(i++));
+ assertEquals("order", nameE + ",create", trace.getNameTrace(i++));
+
+// assertEquals("order", nameF + ",init", trace.getNameTrace(i++));
+ assertEquals("order", nameA + ",init", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",init", trace.getNameTrace(i++));
+ assertEquals("order", nameC + ",init", trace.getNameTrace(i++));
+ assertEquals("order", nameD + ",init", trace.getNameTrace(i++));
+ assertEquals("order", nameE + ",init", trace.getNameTrace(i++));
+
+// assertEquals("order", nameF + ",start", trace.getNameTrace(i++));
+ assertEquals("order", nameA + ",start", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",start", trace.getNameTrace(i++));
+ assertEquals("order", nameC + ",start", trace.getNameTrace(i++));
+ assertEquals("order", nameD + ",start", trace.getNameTrace(i++));
+ assertEquals("order", nameE + ",start", trace.getNameTrace(i++));
+
+ }
+
+ /**
+ * Start regular services, then add a new service and try to start it.
+ * This should work.
+ * @throws ServiceException
+ */
+ public void testStartRegistryAndThenAddNewServiceAndStartIt() throws ServiceException {
+
+ // Register some services
+ String A = "A";
+ String B = "B";
+ String C = "C";
+ servicesRegistry.add( new ServiceFactoryDesc( C, ServiceStartKind.STARTUP ));
+ servicesRegistry.add( new ServiceFactoryDesc( B, ServiceStartKind.STARTUP, Arrays.asList(C) ));
+ servicesRegistry.add( new ServiceFactoryDesc( A, ServiceStartKind.STARTUP, Arrays.asList(B) ));
+
+ // Start them
+ servicesRegistry.startNewServices();
+
+ // Register another services as pojo
+ IService instanciatedService = new ServiceA();
+ String key = instanciatedService.getClass().getName();
+ servicesRegistry.add(key, 1, instanciatedService);
+
+ // Try to start it
+ servicesRegistry.startServices(key);
+
+ // check services
+ assertTrue("service started", servicesRegistry.isStarted(A));
+ assertTrue("service started", servicesRegistry.isStarted(B));
+ assertTrue("service started", servicesRegistry.isStarted(C));
+
+ assertTrue("service started", servicesRegistry.isStarted(key));
+
+ assertEquals("get registered service", instanciatedService, servicesRegistry.getService(key));
+
+ }
+
+ /**
+ * Test Service Factory creation
+ * @throws ServiceException
+ */
+ public void testServiceFactoryCreation() throws ServiceException {
+
+ String A = "A";
+ String B = "B";
+ String C = "C";
+
+ // Create services
+ FakeService.getTrace().reset();
+
+ servicesRegistry.add( new ServiceFactoryDesc( C, ServiceStartKind.STARTUP ));
+ servicesRegistry.add( new ServiceFactoryDesc( B, ServiceStartKind.STARTUP, Arrays.asList(C) ));
+ servicesRegistry.add( new ServiceFactoryDesc( A, ServiceStartKind.STARTUP, Arrays.asList(B) ));
+
+ // Start services
+ servicesRegistry.startNewServices();
+
+ // check services
+ assertSame("service type", FakeCreatedService.class, servicesRegistry.getService(A).getClass());
+ assertSame("service type", FakeCreatedService.class, servicesRegistry.getService(B).getClass());
+
+ // Get names of created services
+ String nameA = ((FakeCreatedService)servicesRegistry.getService(A)).getName();
+ String nameB = ((FakeCreatedService)servicesRegistry.getService(B)).getName();
+ String nameC = ((FakeCreatedService)servicesRegistry.getService(C)).getName();
+
+
+ // check order
+ // Order should be: C, B, A
+ TestTrace trace = FakeService.getTrace();
+ int i = 0;
+ assertEquals("order", nameC + ",create", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",create", trace.getNameTrace(i++));
+ assertEquals("order", nameA + ",create", trace.getNameTrace(i++));
+
+ assertEquals("order", nameC + ",init", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",init", trace.getNameTrace(i++));
+ assertEquals("order", nameA + ",init", trace.getNameTrace(i++));
+
+ assertEquals("order", nameC + ",start", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",start", trace.getNameTrace(i++));
+ assertEquals("order", nameA + ",start", trace.getNameTrace(i++));
+
+ // next order is the order of getService()
+ assertEquals("order", nameA + ",createInstance", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",createInstance", trace.getNameTrace(i++));
+ assertEquals("order", nameC + ",createInstance", trace.getNameTrace(i++));
+ }
+
+ /**
+ * Test Creation of Service Factory used with class as key.
+ * @throws ServiceException
+ */
+ public void testServiceFactoryWithClassKey() throws ServiceException {
+
+ //
+ Class<?> A = ServiceA.class;
+ Class<?> B = ServiceB.class;
+ Class<?> C = ServiceC.class;
+
+ // Specify service types as String
+ String serviceClassname1 = FakeServiceFactory.class.getName();;
+ String serviceClassname2 = FakeServiceFactory.class.getName();
+ String serviceClassname3 = FakeServiceFactory.class.getName();
+
+ // Create services
+ FakeService.getTrace().reset();
+
+ servicesRegistry.add( new ServiceFactoryDesc( C, serviceClassname3, ServiceStartKind.STARTUP ));
+ servicesRegistry.add( new ServiceFactoryDesc( B, serviceClassname2, ServiceStartKind.STARTUP , Arrays.asList(C.getName()) ));
+ servicesRegistry.add( new ServiceFactoryDesc( A, serviceClassname1, ServiceStartKind.STARTUP , Arrays.asList(B.getName()) ));
+
+ // Start services
+ servicesRegistry.startNewServices();
+
+ // check services
+ assertSame("service type", FakeCreatedService.class, servicesRegistry.getService(A).getClass());
+ assertSame("service type", FakeCreatedService.class, servicesRegistry.getService(B).getClass());
+
+ // Get names of created services
+ String nameA = ((FakeCreatedService)servicesRegistry.getService(A)).getName();
+ String nameB = ((FakeCreatedService)servicesRegistry.getService(B)).getName();
+ String nameC = ((FakeCreatedService)servicesRegistry.getService(C)).getName();
+
+
+ // check order (E and F order are not guaranteed)
+ // Order should be
+ TestTrace trace = FakeService.getTrace();
+ int i = 0;
+ assertEquals("order", nameC + ",create", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",create", trace.getNameTrace(i++));
+ assertEquals("order", nameA + ",create", trace.getNameTrace(i++));
+
+ assertEquals("order", nameC + ",init", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",init", trace.getNameTrace(i++));
+ assertEquals("order", nameA + ",init", trace.getNameTrace(i++));
+
+ assertEquals("order", nameC + ",start", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",start", trace.getNameTrace(i++));
+ assertEquals("order", nameA + ",start", trace.getNameTrace(i++));
+
+ // next order is the order of getService()
+ assertEquals("order", nameA + ",createInstance", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",createInstance", trace.getNameTrace(i++));
+ assertEquals("order", nameC + ",createInstance", trace.getNameTrace(i++));
+ }
+
+ /**
+ * Test Service Factory creation order.
+ * One of the factory try to get the required service from its init() method.
+ * @throws ServiceException
+ */
+ public void testServiceFactoryWithRequiredInInit() throws ServiceException {
+
+ String A = "A";
+ String B = "B";
+ String C = "C";
+
+ // Create services C --> A --> B
+ FakeService.getTrace().reset();
+
+ // FakeWithRequiredServiceFactory try to retrieve service "C"
+ servicesRegistry.add( new ServiceFactoryDesc( B, FakeWithRequiredServiceFactory.class.getName(), ServiceStartKind.STARTUP, 1, Arrays.asList(C) ));
+ servicesRegistry.add( new ServiceFactoryDesc( A, FakeWithRequiredServiceFactory.class.getName(), ServiceStartKind.STARTUP, 1, Arrays.asList(B, C) ));
+ servicesRegistry.add( new ServiceFactoryDesc( C, FakeServiceFactory.class.getName(), ServiceStartKind.STARTUP, 1 ));
+
+ // Start services
+ servicesRegistry.startNewServices();
+
+ // check services
+ assertSame("service type", FakeCreatedService.class, servicesRegistry.getService(A).getClass());
+ assertSame("service type", FakeCreatedService.class, servicesRegistry.getService(B).getClass());
+
+ // Get names of created services
+ String nameA = ((FakeCreatedService)servicesRegistry.getService(A)).getName();
+ String nameB = ((FakeCreatedService)servicesRegistry.getService(B)).getName();
+ String nameC = ((FakeCreatedService)servicesRegistry.getService(C)).getName();
+
+
+ // check order
+ // Order should be: C, B, A
+ TestTrace trace = FakeService.getTrace();
+ int i = 0;
+ assertEquals("order", nameC + ",create", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",create", trace.getNameTrace(i++));
+ assertEquals("order", nameA + ",create", trace.getNameTrace(i++));
+
+ assertEquals("order", nameC + ",init", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",init", trace.getNameTrace(i++));
+
+ assertEquals("order", nameC + ",createInstance", trace.getNameTrace(i++));
+ assertEquals("value", servicesRegistry.getService(C), trace.getValue(i));
+ assertEquals("order", nameB + ",initEnd", trace.getNameTrace(i++));
+
+ assertEquals("order", nameA + ",init", trace.getNameTrace(i++));
+ assertEquals("order", nameA + ",initEnd", trace.getNameTrace(i++));
+
+ assertEquals("order", nameC + ",start", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",start", trace.getNameTrace(i++));
+ assertEquals("order", nameA + ",start", trace.getNameTrace(i++));
+
+ // next order is the order of getService()
+ assertEquals("order", nameA + ",createInstance", trace.getNameTrace(i++));
+// assertEquals("order", nameB + ",createInstance", trace.getNameTrace(i++));
+// assertEquals("order", nameC + ",createInstance", trace.getNameTrace(i++));
+ }
+
+ /**
+ * Test {@link ServicesRegistry#startServicesByClassKeys(List)}.
+ * Check that services are started.
+ *
+ * @throws ServiceException
+ */
+ public void testStartService() throws ServiceException {
+
+ String A = "A";
+ String B = "B";
+ String C = "C";
+ String D = "D";
+ String E = "E";
+
+ // Create services E --> D --> C --> B --> A
+ FakeService.getTrace().reset();
+
+ servicesRegistry.add( new ServiceDesc( E, ServiceStartKind.STARTUP, Arrays.asList(D) ));
+ servicesRegistry.add( new ServiceDesc( D, ServiceStartKind.STARTUP, Arrays.asList(C) ));
+ servicesRegistry.add( new ServiceDesc( C, ServiceStartKind.STARTUP, Arrays.asList(A, B) ));
+ servicesRegistry.add( new ServiceDesc( B, ServiceStartKind.STARTUP, Arrays.asList(A) ));
+ servicesRegistry.add( new ServiceDesc( A, ServiceStartKind.STARTUP ));
+
+ // Start services
+ servicesRegistry.startServices(Arrays.asList(C));
+
+ // check services
+ assertTrue("service started", servicesRegistry.isStarted(A));
+ assertTrue("service started", servicesRegistry.isStarted(B));
+ assertTrue("service started", servicesRegistry.isStarted(C));
+
+ // Get names of created services
+ String nameA = ((FakeService)servicesRegistry.getService(A)).getName();
+ String nameB = ((FakeService)servicesRegistry.getService(B)).getName();
+ String nameC = ((FakeService)servicesRegistry.getService(C)).getName();
+// String nameD = ((FakeService)servicesRegistry.getService(D)).getName();
+// String nameE = ((FakeService)servicesRegistry.getService(E)).getName();
+// String nameF = ((FakeService)servicesRegistry.getService(F)).getName();
+
+
+ // check order (E and F order are not guaranteed)
+ // order should be A, B, C
+ TestTrace trace = FakeService.getTrace();
+ int i = 0;
+ assertEquals("order", nameA + ",create", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",create", trace.getNameTrace(i++));
+ assertEquals("order", nameC + ",create", trace.getNameTrace(i++));
+// assertEquals("order", nameD + ",create", trace.getNameTrace(i++));
+// assertEquals("order", nameE + ",create", trace.getNameTrace(i++));
+
+ assertEquals("order", nameA + ",init", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",init", trace.getNameTrace(i++));
+ assertEquals("order", nameC + ",init", trace.getNameTrace(i++));
+// assertEquals("order", nameD + ",init", trace.getNameTrace(i++));
+// assertEquals("order", nameE + ",init", trace.getNameTrace(i++));
+
+ assertEquals("order", nameA + ",start", trace.getNameTrace(i++));
+ assertEquals("order", nameB + ",start", trace.getNameTrace(i++));
+ assertEquals("order", nameC + ",start", trace.getNameTrace(i++));
+// assertEquals("order", nameD + ",start", trace.getNameTrace(i++));
+// assertEquals("order", nameE + ",start", trace.getNameTrace(i++));
+
+ }
+
+ /* **************************************** */
+
+
+
+ /**
+ * Test the alias service.
+ * @throws ServiceException
+ */
+ @Test
+ public void testSimpleStartServices() throws ServiceException {
+
+ Class<?> serviceA = FakeServiceA.class;
+ Class<?> serviceB = FakeServiceB.class;
+ Class<?> serviceC = FakeServiceC.class;
+
+ // services A --> B
+ FakeService.getTrace().reset();
+
+ // Create an alias to B
+ ServicesRegistry registryA = new ServicesRegistry();
+ registryA.add( new ServiceDescriptor( serviceA.getName(), ServiceStartKind.STARTUP, 1, Arrays.asList(serviceB.getName())) );
+ registryA.add( new ServiceDescriptor( serviceB.getName(), ServiceStartKind.STARTUP, 1 ));
+ registryA.add( new ServiceDescriptor( serviceC.getName(), ServiceStartKind.STARTUP, 1 ));
+
+ registryA.startNewServices();
+
+
+ // check services
+ assertNotNull("got service started", registryA.getService(serviceB));
+ assertNotNull("got service started", registryA.getService(serviceC));
+ assertNotNull("got service started", registryA.getService(serviceA));
+
+ }
+
+ /**
+ * Test the alias service.
+ * @throws ServiceException
+ */
+ @Test
+ public void testChainWithLazyStartServices() throws ServiceException {
+
+ Class<?> serviceA = FakeServiceA.class;
+ Class<?> serviceB = FakeServiceB.class;
+ Class<?> serviceC = FakeServiceC.class;
+
+ FakeService.getTrace().reset();
+
+ // services A --> B (lazy) --> C
+ ServicesRegistry registryA = new ServicesRegistry();
+ registryA.add( new ServiceDescriptor( serviceA.getName(), ServiceStartKind.STARTUP, 1, Arrays.asList(serviceB.getName())) );
+ registryA.add( new ServiceDescriptor( serviceB.getName(), ServiceStartKind.LAZY , 1, Arrays.asList(serviceC.getName()) ));
+ registryA.add( new ServiceDescriptor( serviceC.getName(), ServiceStartKind.STARTUP, 1 ));
+
+ FakeService.getTrace().reset();
+ registryA.startNewServices();
+
+
+ // check services
+ // A and C should be started, B should not be started.
+ assertTrue("A started", registryA.isStarted(serviceA));
+ assertFalse("B not started", registryA.isStarted(serviceB));
+ assertTrue("C started", registryA.isStarted(serviceC));
+
+ // Check if we can get them
+ assertNotNull("got service started", registryA.getService(serviceC));
+ assertNotNull("got service started", registryA.getService(serviceA));
+
+ // check creation order (C then A)
+ // order should be C, A
+ TestTrace trace = FakeService.getTrace();
+ int i = 0;
+ assertEquals("order", serviceC.getSimpleName() + ",create", trace.getNameTrace(i++));
+ assertEquals("order", serviceA.getSimpleName() + ",create", trace.getNameTrace(i++));
+
+ assertEquals("order", serviceC.getSimpleName() + ",init", trace.getNameTrace(i++));
+ assertEquals("order", serviceA.getSimpleName() + ",init", trace.getNameTrace(i++));
+
+ assertEquals("order", serviceC.getSimpleName() + ",start", trace.getNameTrace(i++));
+ assertEquals("order", serviceA.getSimpleName() + ",start", trace.getNameTrace(i++));
+
+ // start B
+ assertNotNull("got service started", registryA.getService(serviceB));
+ assertTrue("B started", registryA.isStarted(serviceB));
+
+
+ }
+
+
+
+ /**
+ * Test the alias service.
+ * @throws ServiceException
+ */
+ @Test
+ public void testAliasServices() throws ServiceException {
+
+ Class<?> serviceA = FakeServiceA.class;
+ Class<?> serviceB = FakeServiceB.class;
+ Class<?> serviceC = FakeServiceC.class;
+
+ String aliasService2 = "AnAlias";
+
+ // services A --> B
+ FakeService.getTrace().reset();
+
+ // Create an alias to B
+ ServicesRegistry registryA = new ServicesRegistry();
+ registryA.add( new AliasDescriptor( serviceA.getName(), serviceB.getName(), 1) );
+ registryA.add( new AliasDescriptor( aliasService2, serviceC.getName(), 1) );
+ registryA.add( new ServiceDescriptor( serviceB, serviceB.getName(), ServiceStartKind.STARTUP, 1 ));
+ registryA.add( new ServiceDescriptor( serviceC.getName(), ServiceStartKind.STARTUP, 1 ));
+
+ registryA.startNewServices();
+
+
+ // check services
+ assertNotNull("got service started", registryA.getService(serviceB));
+ assertNotNull("got service started", registryA.getService(serviceC));
+ assertNotNull("got service started", registryA.getService(serviceA));
+ assertNotNull("got service started", registryA.getService(aliasService2));
+
+ assertEquals("Got the same service", registryA.getService(serviceA), registryA.getService(serviceB) );
+ assertEquals("Got the same service", registryA.getService(serviceC), registryA.getService(aliasService2) );
+
+ }
+
+ /**
+ * General purpose descriptor.
+ * @deprecated use {@link FakeServiceDescriptor}
+ */
+ public class ServiceDesc extends ServiceDescriptor {
+
+
+ public ServiceDesc( String key, ServiceStartKind startKind) {
+ super(key, FakeService.class.getName(), startKind, 1 );
+ }
+
+ public ServiceDesc( String key, ServiceStartKind startKind, List<String> requiredService) {
+ super(key, FakeService.class.getName(), startKind, 1, requiredService );
+ }
+ }
+
+ /**
+ * General purpose descriptor.
+ */
+ public class ServiceFactoryDesc extends ServiceDescriptor {
+
+
+ public ServiceFactoryDesc( String key, ServiceStartKind startKind) {
+ super(key, FakeServiceFactory.class.getName(), startKind, 1 );
+ setServiceTypeKind(ServiceTypeKind.serviceFactory);
+ }
+
+ public ServiceFactoryDesc( String key, ServiceStartKind startKind, List<String> requiredService) {
+ super(key, FakeServiceFactory.class.getName(), startKind, 1, requiredService );
+ setServiceTypeKind(ServiceTypeKind.serviceFactory);
+ }
+ /**
+ * Constructor with a classname and {@link ServiceDescriptor#isStartAtStartup()} = true.
+ * Constructor.
+ *
+ * @param key
+ * @param startKind
+ * @param requiredService
+ */
+ public ServiceFactoryDesc( Class<?> key, String classname, ServiceStartKind startKind, List<String> requiredService) {
+ super(key, classname, startKind, 1, requiredService );
+ setServiceTypeKind(ServiceTypeKind.serviceFactory);
+ }
+ /**
+ * Constructor with a classname and {@link ServiceDescriptor#isStartAtStartup()} = true.
+ * Constructor.
+ *
+ * @param key
+ * @param startKind
+ * @param requiredService
+ */
+ public ServiceFactoryDesc( Class<?> key, String classname, ServiceStartKind startKind) {
+ super(key, classname, startKind, 1 );
+ setServiceTypeKind(ServiceTypeKind.serviceFactory);
+ }
+
+ public ServiceFactoryDesc(String key, String serviceClassname, ServiceStartKind serviceStartKind, int priority, List<String> requiredServices) {
+ super(key, serviceClassname, serviceStartKind, priority, requiredServices);
+ setServiceTypeKind(ServiceTypeKind.serviceFactory);
+ }
+
+ public ServiceFactoryDesc(String key, String serviceClassname, ServiceStartKind serviceStartKind, int priority) {
+ super(key, serviceClassname, serviceStartKind, priority);
+ setServiceTypeKind(ServiceTypeKind.serviceFactory);
+ }
+ }
+
+ /**
+ *
+ * @author dumoulin
+ *
+ */
+ public class LazyServiceADescriptor extends ServiceDescriptor {
+
+
+ public LazyServiceADescriptor() {
+ super(ServiceA.class.getName(), ServiceStartKind.LAZY, 1);
+ }
+ }
+
+ public class LazyServiceA10Descriptor extends ServiceDescriptor {
+
+
+ public LazyServiceA10Descriptor() {
+ super(ServiceA.class.getName(), ServiceA10.class.getName(), ServiceStartKind.LAZY, 10);
+ }
+ }
+
+ public class LazyServiceBDescriptor extends ServiceDescriptor {
+
+
+ public LazyServiceBDescriptor() {
+ super(ServiceB.class.getName(), ServiceStartKind.LAZY, 1);
+ }
+ }
+
+ public class ServiceCDescriptor extends ServiceDescriptor {
+
+
+ public ServiceCDescriptor() {
+ super(ServiceC.class.getName(), ServiceStartKind.STARTUP, 1);
+ }
+ }
+
+ public class LazyServicePojoADescriptor extends ServiceDescriptor {
+
+
+ public LazyServicePojoADescriptor() {
+ super(ServicePojoA.class.getName(), ServiceStartKind.LAZY, 1);
+ }
+ }
+
+ public class PojoServiceDescriptor extends ServiceDescriptor {
+
+
+ public PojoServiceDescriptor() {
+ super(Object.class.getName(), ServiceStartKind.STARTUP, 1);
+ }
+ }
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistryWithParentTest.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistryWithParentTest.java
new file mode 100644
index 00000000000..38fb822713a
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistryWithParentTest.java
@@ -0,0 +1,357 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+
+/**
+ * Tests ServicesRegistry with a parent registry.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class ServicesRegistryWithParentTest {
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @Before
+ public void setUp() throws Exception {
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry#addParentRegistry(org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry)}.
+ */
+ @Test
+ public void testAddParentRegistry() {
+
+ // Create a service registry
+ ServicesRegistry registry = new ServicesRegistry();
+ // Add a parent
+ ServicesRegistry parentRegistry1 = new ServicesRegistry();
+ registry.addParentRegistry(parentRegistry1);
+
+ // Add a second parent
+ ServicesRegistry parentRegistry2 = new ServicesRegistry();
+ registry.addParentRegistry(parentRegistry2);
+
+ // Check if parents are set
+ // No way to do that. Just check the registry (but this will always succeed)
+ assertNotNull("registry created", registry);
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry#getService(java.lang.Object)}.
+ * Create a registry with 2 parents.
+ * Add a service in each registry
+ * Try to get each service from the main regitry.
+ * @throws ServiceException
+ *
+ */
+ @Test
+ public void testGetServiceObject() throws ServiceException {
+
+ String A = "serviceA";
+ String B = "serviceB";
+ String C = "serviceC";
+
+ FakeService.getTrace().reset();
+
+ // Create a service registry
+ ServicesRegistry registry = new ServicesRegistry();
+ // Add a service
+ registry.add( new FakeServiceDescriptor( A, ServiceStartKind.STARTUP ));
+ registry.startNewServices();
+
+
+ // Create parent registry with one service
+ ServicesRegistry registryB = new ServicesRegistry();
+ registryB.add( new FakeServiceDescriptor( B, ServiceStartKind.STARTUP ));
+ registryB.startNewServices();
+ // Add as parent
+ registry.addParentRegistry(registryB);
+
+ // Create parent registry with one service
+ ServicesRegistry registryC = new ServicesRegistry();
+ registryC.add( new FakeServiceDescriptor( C, ServiceStartKind.STARTUP ));
+ registryC.startNewServices();
+ // Add as parent
+ registry.addParentRegistry(registryC);
+
+ // Check if we can retrieve service
+
+ assertNotNull("got service", registry.getService(A));
+ assertTrue("Right type", FakeServiceDescriptor.getServiceType().isInstance(registry.getService(A)));
+
+ assertNotNull("got service", registry.getService(B));
+ assertTrue("Right type", FakeServiceDescriptor.getServiceType().isInstance(registry.getService(B)));
+
+ assertNotNull("got service", registry.getService(C));
+ assertTrue("Right type", FakeServiceDescriptor.getServiceType().isInstance(registry.getService(C)));
+
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry#getService(java.lang.Class)}.
+ * @throws ServiceException
+ */
+ @Test
+ public void testGetServiceClassOfS() throws ServiceException {
+
+ FakeService.getTrace().reset();
+
+ // Create a service registry
+ ServicesRegistry registry = new ServicesRegistry();
+ // Add a service
+ registry.add( new ServiceDescriptor( FakeServiceA.class.getName(), ServiceStartKind.STARTUP, 1 ));
+ registry.startNewServices();
+
+
+ // Create parent registry with one service
+ ServicesRegistry registryB = new ServicesRegistry();
+ registryB.add( new ServiceDescriptor( FakeServiceB.class.getName(), ServiceStartKind.STARTUP, 1 ));
+ registryB.startNewServices();
+ // Add as parent
+ registry.addParentRegistry(registryB);
+
+ // Create parent registry with one service
+ ServicesRegistry registryC = new ServicesRegistry();
+ registryC.add( new ServiceDescriptor( FakeServiceC.class.getName(), ServiceStartKind.STARTUP, 1 ));
+ registryC.startNewServices();
+ // Add as parent
+ registry.addParentRegistry(registryC);
+
+ // Check if we can retrieve service
+
+ assertNotNull("got service", registry.getService(FakeServiceA.class));
+ assertTrue("Right type", FakeServiceDescriptor.getServiceType().isInstance(registry.getService(FakeServiceA.class)));
+
+ assertNotNull("got service", registry.getService(FakeServiceB.class));
+ assertTrue("Right type", FakeServiceDescriptor.getServiceType().isInstance(registry.getService(FakeServiceB.class)));
+
+ assertNotNull("got service", registry.getService(FakeServiceC.class));
+ assertTrue("Right type", FakeServiceDescriptor.getServiceType().isInstance(registry.getService(FakeServiceC.class)));
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry#startRegistry()}.
+ * @throws ServiceException
+ */
+ @Test
+ public void testStartRegistry() throws ServiceException {
+ FakeService.getTrace().reset();
+
+ // Create a service registry
+ ServicesRegistry registry = new ServicesRegistry();
+ // Add a service
+ registry.add( new ServiceDescriptor( FakeServiceA.class.getName(), ServiceStartKind.STARTUP, 1 ));
+ registry.startNewServices();
+
+ assertTrue("registry and service started", registry.isStarted(FakeServiceA.class.getName()) );
+ }
+
+ /**
+ * Test method for {@link org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry#disposeRegistry()}.
+ * @throws ServiceMultiException
+ */
+ @Test
+ public void testDisposeRegistry() throws ServiceMultiException {
+ FakeService.getTrace().reset();
+
+ // Create a service registry
+ ServicesRegistry registry = new ServicesRegistry();
+ // Add a service
+ registry.add( new ServiceDescriptor( FakeServiceA.class.getName(), ServiceStartKind.STARTUP, 1 ));
+ registry.startNewServices();
+
+
+ // Create parent registry with one service
+ ServicesRegistry registryB = new ServicesRegistry();
+ registryB.add( new ServiceDescriptor( FakeServiceB.class.getName(), ServiceStartKind.STARTUP, 1 ));
+ registryB.startNewServices();
+ // Add as parent
+ registry.addParentRegistry(registryB);
+
+ // Create parent registry with one service
+ ServicesRegistry registryC = new ServicesRegistry();
+ registryC.add( new ServiceDescriptor( FakeServiceC.class.getName(), ServiceStartKind.STARTUP, 1 ));
+ registryC.startNewServices();
+ // Add as parent
+ registry.addParentRegistry(registryC);
+
+ // Check recursive dispose
+ FakeService.getTrace().reset();
+ registry.disposeRegistry();
+
+ //
+ TestTrace trace = FakeService.getTrace();
+ assertTrue("dispose called", trace.contains(FakeServiceA.class.getSimpleName(), "dispose"));
+ assertTrue("dispose called", trace.contains(FakeServiceB.class.getSimpleName(), "dispose"));
+ assertTrue("dispose called", trace.contains(FakeServiceC.class.getSimpleName(), "dispose"));
+ }
+
+ /**
+ * Test the start order for services having a dependency in a parent registry
+ * @throws ServiceException
+ */
+ @Test
+ public void testStartServicesWithOutsideDependencies() throws ServiceException {
+
+ Class<?> serviceA = FakeServiceA.class;
+ Class<?> serviceB = FakeServiceB.class;
+
+ // services A --> B
+ FakeService.getTrace().reset();
+
+ // Create parent registry B with one service
+ ServicesRegistry registryB = new ServicesRegistry();
+ registryB.add( new ServiceDescriptor( serviceB.getName(), ServiceStartKind.STARTUP, 1 ));
+ registryB.startNewServices();
+
+ // Create a service registry A -parent-> B
+ ServicesRegistry registryA = new ServicesRegistry();
+ registryA.add( new ServiceDescriptor( serviceA.getName(), ServiceStartKind.STARTUP, 1, Arrays.asList(serviceB.getName())));
+
+ registryA.addParentRegistry(registryB);
+ registryA.startNewServices();
+
+
+ // check services
+ assertTrue("service started", registryA.isStarted(serviceA));
+ assertTrue("service started", registryB.isStarted(serviceB));
+ assertTrue("service started", registryA.isStarted(serviceB));
+
+ }
+
+ /**
+ * Test {@link ServicesRegistry#isStarted(Object)} for services in a parent registry
+ * @throws ServiceException
+ */
+ @Test
+ public void testIsStarted() throws ServiceException {
+
+ Class<?> serviceA = FakeServiceA.class;
+ Class<?> serviceB = FakeServiceB.class;
+
+ // services A --> B
+ FakeService.getTrace().reset();
+
+ // Create parent registry B with one service
+ ServicesRegistry registryB = new ServicesRegistry();
+ registryB.add( new ServiceDescriptor( serviceB.getName(), ServiceStartKind.STARTUP, 1 ));
+ registryB.startNewServices();
+
+ // Create a service registry A -parent-> B
+ ServicesRegistry registryA = new ServicesRegistry();
+ registryA.add( new ServiceDescriptor( serviceA.getName(), ServiceStartKind.STARTUP, 1 ));
+
+ registryA.addParentRegistry(registryB);
+ registryA.startNewServices();
+
+
+ // check services
+ assertTrue("service started", registryA.isStarted(serviceA));
+ assertTrue("service started", registryB.isStarted(serviceB));
+ // Access from registryA
+ assertTrue("service started", registryA.isStarted(serviceB));
+
+ }
+
+ /**
+ * Test {@link ServicesRegistry#isStarted(Object)} for services in a parent registry
+ * @throws ServiceException
+ */
+ @Test
+ public void testServiceState() throws ServiceException {
+
+ Class<?> serviceA = FakeServiceA.class;
+ Class<?> serviceB = FakeServiceB.class;
+
+ // services A --> B
+ FakeService.getTrace().reset();
+
+ // Create parent registry B with one service
+ ServicesRegistry registryB = new ServicesRegistry();
+ registryB.add( new ServiceDescriptor( serviceB.getName(), ServiceStartKind.STARTUP, 1 ));
+ registryB.startNewServices();
+
+ // Create a service registry A -parent-> B
+ ServicesRegistry registryA = new ServicesRegistry();
+ registryA.add( new ServiceDescriptor( serviceA.getName(), ServiceStartKind.STARTUP, 1 ));
+
+ registryA.addParentRegistry(registryB);
+ registryA.startNewServices();
+
+
+ // check services
+ assertEquals("service started", ServiceState.started, registryA.serviceState(serviceA));
+ assertEquals("service started", ServiceState.started, registryB.serviceState(serviceB));
+ // Access from registryA
+ assertEquals("service started", ServiceState.started, registryA.serviceState(serviceB));
+
+ }
+
+ /**
+ * Test the alias service.
+ * @throws ServiceException
+ */
+ @Test
+ public void testAliasServices() throws ServiceException {
+
+ Class<?> serviceA = FakeServiceA.class;
+ Class<?> serviceB = FakeServiceB.class;
+
+ // services A --> B
+ FakeService.getTrace().reset();
+
+ // Create parent registry B with one service
+ ServicesRegistry registryB = new ServicesRegistry();
+ registryB.add( new ServiceDescriptor( serviceB.getName(), ServiceStartKind.STARTUP, 1 ));
+ registryB.startNewServices();
+
+ // Create an alias to B
+ ServicesRegistry registryA = new ServicesRegistry();
+ registryA.add( new AliasDescriptor( serviceA.getName(), serviceB.getName(), 1) );
+
+ registryA.addParentRegistry(registryB);
+ registryA.startNewServices();
+
+
+ // check services
+ assertNotNull("got service started", registryA.getService(serviceA));
+ assertNotNull("got service started", registryB.getService(serviceB));
+
+ assertEquals("Got the same service", registryA.getService(serviceA), registryA.getService(serviceB) );
+
+ }
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/TestTrace.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/TestTrace.java
new file mode 100644
index 00000000000..95585fddc3c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry.test/tests/org/eclipse/papyrus/infra/core/serviceregistry/TestTrace.java
@@ -0,0 +1,181 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * A class used to record traces for tests
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class TestTrace {
+
+ public List<TraceRecord>traces = new ArrayList<TraceRecord>();
+
+ /**
+ * Record a new trace.
+ * @param trace
+ */
+ public void addTrace(String trace) {
+ addTrace(null, trace, null);
+ }
+
+ /**
+ * Record a new trace.
+ * @param trace
+ */
+ public void addTrace(String name, String trace) {
+ addTrace(name, trace, null);
+ }
+
+ /**
+ * Record a new trace.
+ * @param trace
+ */
+ public void addTrace(String name, String trace, Object value) {
+ traces.add(new TraceRecord( name, trace, value));
+ }
+
+ /**
+ * Return the name and the trace in one concatenated string ("name,trace").
+ * @param i Index of the requested trace
+ * @return
+ */
+ public String getNameTrace(int i) {
+ return traces.get(i).getNameTrace();
+ }
+
+ /**
+ * Get the value
+ * @param i
+ * @return
+ */
+ public Object getValue(int i) {
+ return traces.get(i).value;
+ }
+
+ /**
+ * Return true if the trace contains the specified events.
+ * @return
+ */
+ public boolean contains( String name, String trace) {
+
+ return indexOfNameTrace(name, trace) >= 0;
+ }
+
+ /**
+ * Returns the index of the first occurrence of the specified elements
+ * in these lists, or -1 if this list does not contain the element.
+ */
+ public int indexOf(String name, String trace, Object value) {
+
+ for (int i = 0; i < traces.size(); i++) {
+ TraceRecord record = traces.get(i);
+
+ if( name.equals(record.name) && trace.equals(record.trace) )
+ return i;
+ }
+
+ return -1;
+ }
+
+ /**
+ * Returns the index of the first occurrence of the specified elements
+ * in these lists, or -1 if this list does not contain the element.
+ */
+ public int indexOfNameTrace(String name, String trace) {
+
+ for (int i = 0; i < traces.size(); i++) {
+ TraceRecord record = traces.get(i);
+
+ if( name.equals(record.name) && trace.equals(record.trace) )
+ return i;
+ }
+
+ return -1;
+ }
+
+ /**
+ * Returns the index of the first occurrence of the specified elements
+ * in these lists, or -1 if this list does not contain the element.
+ */
+ public int indexOfTrace(String trace) {
+
+ for (int i = 0; i < traces.size(); i++) {
+ TraceRecord record = traces.get(i);
+
+ if( trace.equals(record.trace) )
+ return i;
+ }
+
+ return -1;
+ }
+
+ /**
+ * Returns the index of the first occurrence of the specified elements
+ * in these lists, or -1 if this list does not contain the element.
+ */
+ public int indexOfName(String name) {
+
+ for (int i = 0; i < traces.size(); i++) {
+ TraceRecord record = traces.get(i);
+
+ if( name.equals(record.name) )
+ return i;
+ }
+
+ return -1;
+ }
+
+ /**
+ * Reset the trace.
+ */
+ public void reset() {
+ traces.clear();
+ }
+
+
+ /**
+ * @return the traces
+ */
+ public List<TraceRecord> getTraces() {
+ return traces;
+ }
+
+ /**
+ * A Record of the trace.
+ */
+ public class TraceRecord {
+ public String name;
+ public String trace;
+ public Object value;
+ /**
+ * Constructor.
+ *
+ * @param name
+ * @param trace
+ * @param value
+ */
+ public TraceRecord(String name, String trace, Object value) {
+ this.name = name;
+ this.trace = trace;
+ this.value = value;
+ }
+
+ /**
+ *
+ * @return
+ */
+ public String getNameTrace() {
+ // TODO Auto-generated method stub
+ return name + "," + trace;
+ }
+
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/.classpath b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/.classpath
new file mode 100644
index 00000000000..45f024e850e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/.project b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/.project
new file mode 100644
index 00000000000..d686710282c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.papyrus.infra.core.serviceregistry</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/META-INF/MANIFEST.MF b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..33da65242c3
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.papyrus.infra.core.serviceregistry;singleton:=true
+Bundle-Version: 0.10.0.qualifier
+Bundle-Vendor: %providerName
+Require-Bundle: org.eclipse.core.runtime;bundle-version="3.8.0",
+ org.eclipse.ui.ide;bundle-version="3.8.0",
+ org.eclipse.papyrus.infra.core.log;bundle-version="0.9.0",
+ org.junit,
+ org.eclipse.emf.common,
+ org.eclipse.emf.ecore
+Bundle-Activator: org.eclipse.papyrus.infra.core.serviceregistry.Activator
+Export-Package: org.eclipse.papyrus.infra.core.serviceregistry,
+ org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors,
+ org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl,
+ org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.util,
+ org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid,
+ org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl,
+ org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.util
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/build.properties b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/build.properties
new file mode 100644
index 00000000000..53c8b373787
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/architectures.di b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/architectures.di
new file mode 100644
index 00000000000..ce359390af3
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/architectures.di
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="ASCII"?>
+<di:SashWindowsMngr xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.eclipse.org/papyrus/0.7.0/sashdi">
+ <pageList>
+ <availablePage>
+ <emfPageIdentifier href="architectures.notation#_gYyIAH1yEeGcMtmaQ3nQLw"/>
+ </availablePage>
+ <availablePage>
+ <emfPageIdentifier href="architectures.notation#_G-TU4H12EeGOQuKePEwyrw"/>
+ </availablePage>
+ <availablePage>
+ <emfPageIdentifier href="architectures.notation#_0FULMI4UEeGjLtNqkbcdmg"/>
+ </availablePage>
+ <availablePage>
+ <emfPageIdentifier href="architectures.notation#_wkuvYL-jEeGnLN6u0QNctQ"/>
+ </availablePage>
+ </pageList>
+ <sashModel currentSelection="//@sashModel/@windows.0/@children.0">
+ <windows>
+ <children xsi:type="di:TabFolder">
+ <children>
+ <emfPageIdentifier href="architectures.notation#_gYyIAH1yEeGcMtmaQ3nQLw"/>
+ </children>
+ <children>
+ <emfPageIdentifier href="architectures.notation#_G-TU4H12EeGOQuKePEwyrw"/>
+ </children>
+ <children>
+ <emfPageIdentifier href="architectures.notation#_0FULMI4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children>
+ <emfPageIdentifier href="architectures.notation#_wkuvYL-jEeGnLN6u0QNctQ"/>
+ </children>
+ </children>
+ </windows>
+ </sashModel>
+</di:SashWindowsMngr>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/architectures.notation b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/architectures.notation
new file mode 100644
index 00000000000..449facf21bc
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/architectures.notation
@@ -0,0 +1,1155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:uml="http://www.eclipse.org/uml2/4.0.0/UML">
+ <notation:Diagram xmi:id="_gYyIAH1yEeGcMtmaQ3nQLw" type="PapyrusUMLClassDiagram" name="NewDiagram" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_zrJwkH1yEeGcMtmaQ3nQLw" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zrK-sH1yEeGcMtmaQ3nQLw" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zrK-sX1yEeGcMtmaQ3nQLw" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zrK-sn1yEeGcMtmaQ3nQLw" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zrK-s31yEeGcMtmaQ3nQLw" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zrK-tH1yEeGcMtmaQ3nQLw" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zrK-tX1yEeGcMtmaQ3nQLw" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_zrK-tn1yEeGcMtmaQ3nQLw" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_zrLlwH1yEeGcMtmaQ3nQLw" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_zrLlwX1yEeGcMtmaQ3nQLw"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_zrLlwn1yEeGcMtmaQ3nQLw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_zrLlw31yEeGcMtmaQ3nQLw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zrLlxH1yEeGcMtmaQ3nQLw"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_zrLlxX1yEeGcMtmaQ3nQLw" type="7018">
+ <children xmi:type="notation:Shape" xmi:id="_xm6EEH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_BKa1QH13EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EYvLYH13EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_vNLzoH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xm6EEX12EeGOQuKePEwyrw" x="37" y="10"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_xoXcoH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_BKcqcH13EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_EYxAkH13EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_vNNBwH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xoXcoX12EeGOQuKePEwyrw" x="37" y="10"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_zrLlxn1yEeGcMtmaQ3nQLw"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_zrLlx31yEeGcMtmaQ3nQLw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_zrLlyH1yEeGcMtmaQ3nQLw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zrLlyX1yEeGcMtmaQ3nQLw"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_zrLlyn1yEeGcMtmaQ3nQLw" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_zrLly31yEeGcMtmaQ3nQLw"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_zrLlzH1yEeGcMtmaQ3nQLw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_zrLlzX1yEeGcMtmaQ3nQLw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zrLlzn1yEeGcMtmaQ3nQLw"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_zqu50H1yEeGcMtmaQ3nQLw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zrJwkX1yEeGcMtmaQ3nQLw" x="138" y="216" width="373"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_T9yNoH13EeGOQuKePEwyrw" type="2004" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_T9y0sH13EeGOQuKePEwyrw" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_T9y0sX13EeGOQuKePEwyrw" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_T9y0sn13EeGOQuKePEwyrw" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_T9y0s313EeGOQuKePEwyrw" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_T9y0tH13EeGOQuKePEwyrw" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_T9zbwH13EeGOQuKePEwyrw" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_T9zbwX13EeGOQuKePEwyrw" type="5011"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_T9zbwn13EeGOQuKePEwyrw" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_T9zbw313EeGOQuKePEwyrw"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_T9zbxH13EeGOQuKePEwyrw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_T9zbxX13EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_T9zbxn13EeGOQuKePEwyrw"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_T9zbx313EeGOQuKePEwyrw" type="7007">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_T9zbyH13EeGOQuKePEwyrw"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_T9zbyX13EeGOQuKePEwyrw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_T9zbyn13EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_T9zby313EeGOQuKePEwyrw"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_T9zbzH13EeGOQuKePEwyrw" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_T9zbzX13EeGOQuKePEwyrw"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_T9zbzn13EeGOQuKePEwyrw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_T9zbz313EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_T9zb0H13EeGOQuKePEwyrw"/>
+ </children>
+ <element xmi:type="uml:Interface" href="architectures.uml#_TYM0UH13EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_T9yNoX13EeGOQuKePEwyrw" x="756" y="150"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_gYyIAX1yEeGcMtmaQ3nQLw"/>
+ <element xmi:type="uml:Model" href="architectures.uml#_gYo-EH1yEeGcMtmaQ3nQLw"/>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_G-TU4H12EeGOQuKePEwyrw" type="PapyrusUMLClassDiagram" name="services v1" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_HqnBQH12EeGOQuKePEwyrw" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Hqo2cH12EeGOQuKePEwyrw" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Hqo2cX12EeGOQuKePEwyrw" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HqpdgH12EeGOQuKePEwyrw" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HqpdgX12EeGOQuKePEwyrw" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Hqpdgn12EeGOQuKePEwyrw" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Hqpdg312EeGOQuKePEwyrw" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HqqEkH12EeGOQuKePEwyrw" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HqqEkX12EeGOQuKePEwyrw" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HqqEkn12EeGOQuKePEwyrw"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HqqEk312EeGOQuKePEwyrw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HqqElH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HqqElX12EeGOQuKePEwyrw"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HqqEln12EeGOQuKePEwyrw" type="7018">
+ <children xmi:type="notation:Shape" xmi:id="_KCkXIH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UOLPgH12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2WMgH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AUZosH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KCkXIX12EeGOQuKePEwyrw" x="56" y="18"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_KEd0kH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UOOS0H12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2YBsH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AUcE8H12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KEd0kX12EeGOQuKePEwyrw" x="56" y="18"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_KF4w4H12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UOQvEH12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2Z24H12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AUehMH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KF4w4X12EeGOQuKePEwyrw" x="56" y="18"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_KHdeMH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UOUZcH12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2dhQH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AUhkgH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KHdeMX12EeGOQuKePEwyrw" x="56" y="18"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_KI4agH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UOW1sH12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2fWcH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AUkn0H12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KI4agX12EeGOQuKePEwyrw" x="56" y="18"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_KKNQMH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aAuc8H12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2hLoH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AUo5QH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KKNQMX12EeGOQuKePEwyrw" x="56" y="18"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_KLmXUH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aAvrEH12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2jA0H12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AUrVgH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KLmXUX12EeGOQuKePEwyrw" x="56" y="18"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_KNAskH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aAxgQH12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2k2AH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AUwOAH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KNAskX12EeGOQuKePEwyrw" x="56" y="18"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_KONmcH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aAyuYH12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2mEIH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AVB60H12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KONmcX12EeGOQuKePEwyrw" x="56" y="18"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_KPmtkH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aAzVcX12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2nSQH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AVDI8H12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KPmtkX12EeGOQuKePEwyrw" x="56" y="18"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_QU20kH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aA0jkH12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2ogYH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AVEXEH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QU20kX12EeGOQuKePEwyrw" x="136" y="232"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_QWU0MH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aA1KoH12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2pHcH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AVOIEH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QWU0MX12EeGOQuKePEwyrw" x="136" y="232"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_QX0B8H12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UOSkQH12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2bsEH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AVSZgH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QX0B8X12EeGOQuKePEwyrw" x="136" y="232"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_QZRagH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aA1xsX12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2qVkH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AVWq8H12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QZRagX12EeGOQuKePEwyrw" x="136" y="232"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Qa5LIH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aA2YwX12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2q8oH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AVX5EH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Qa5LIX12EeGOQuKePEwyrw" x="136" y="232"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_QcV8oH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aA3m4X12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2sKwH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AWIHAH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QcV8oX12EeGOQuKePEwyrw" x="136" y="232"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_QeAJgH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aA41AH12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2tY4H12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AWLKUH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QeAJgX12EeGOQuKePEwyrw" x="136" y="232"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Qfld4H12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aA5cEX12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2t_8H12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AWONoH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Qfld4X12EeGOQuKePEwyrw" x="136" y="232"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_QiXFEH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aA6qMH12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2vOEH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AWR4AH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QiXFEX12EeGOQuKePEwyrw" x="136" y="232"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Qj6kQH12EeGOQuKePEwyrw" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aA7RQH12EeGOQuKePEwyrw" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_f2wcMH12EeGOQuKePEwyrw" key="CustomAppearance_MaskValue" value="4874"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_AWU7UH12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Qj6kQX12EeGOQuKePEwyrw" x="136" y="232"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HqqEl312EeGOQuKePEwyrw"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HqqEmH12EeGOQuKePEwyrw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HqqEmX12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HqqEmn12EeGOQuKePEwyrw"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HqqEm312EeGOQuKePEwyrw" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HqqEnH12EeGOQuKePEwyrw"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HqqEnX12EeGOQuKePEwyrw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HqqEnn12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HqqEn312EeGOQuKePEwyrw"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_4OeqcH11EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HqnBQX12EeGOQuKePEwyrw" x="156" y="120" height="493"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_G-TU4X12EeGOQuKePEwyrw"/>
+ <element xmi:type="uml:Package" href="architectures.uml#_4OVgg311EeGOQuKePEwyrw"/>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_0FULMI4UEeGjLtNqkbcdmg" type="PapyrusUMLClassDiagram" name="service v1 entries" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_2IiAII4UEeGjLtNqkbcdmg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_2IkcYI4UEeGjLtNqkbcdmg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2IkcYY4UEeGjLtNqkbcdmg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_2IlDcI4UEeGjLtNqkbcdmg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2IlDcY4UEeGjLtNqkbcdmg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_2IlqgI4UEeGjLtNqkbcdmg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2IlqgY4UEeGjLtNqkbcdmg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_2Ilqgo4UEeGjLtNqkbcdmg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_2ImRkI4UEeGjLtNqkbcdmg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_2ImRkY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_2ImRko4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_2ImRk44UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2ImRlI4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_2ImRlY4UEeGjLtNqkbcdmg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_2ImRlo4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_2ImRl44UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_2ImRmI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2ImRmY4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_2Im4oI4UEeGjLtNqkbcdmg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_2Im4oY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_2Im4oo4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_2Im4o44UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2Im4pI4UEeGjLtNqkbcdmg"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_wKAMMI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2IiAIY4UEeGjLtNqkbcdmg" x="474" y="456"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_2KXMII4UEeGjLtNqkbcdmg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_2KYaQI4UEeGjLtNqkbcdmg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2KYaQY4UEeGjLtNqkbcdmg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_2KYaQo4UEeGjLtNqkbcdmg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2KYaQ44UEeGjLtNqkbcdmg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_2KYaRI4UEeGjLtNqkbcdmg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2KZBUI4UEeGjLtNqkbcdmg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_2KZBUY4UEeGjLtNqkbcdmg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_2KZBUo4UEeGjLtNqkbcdmg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_EGCc0I4VEeGjLtNqkbcdmg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="architectures.uml#_wMGd8I4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_EGCc0Y4VEeGjLtNqkbcdmg" x="37" y="16"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_2KZBU44UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_2KZBVI4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_2KZBVY4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2KZBVo4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_2KZBV44UEeGjLtNqkbcdmg" type="7018">
+ <children xmi:type="notation:Shape" xmi:id="_WnJyII4WEeGjLtNqkbcdmg" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wxkQkI4WEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zUNzgI4WEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="4872"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_wMwlQI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_WnJyIY4WEeGjLtNqkbcdmg" x="46" y="18"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ZQQiYI4WEeGjLtNqkbcdmg" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wxmFwI4WEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zUPosI4WEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="4872"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_wMyacI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ZQQiYY4WEeGjLtNqkbcdmg" x="84" y="25"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ZRQA4I4WEeGjLtNqkbcdmg" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wxnT4I4WEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zUQ20I4WEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="4872"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_wM0PoI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ZRQA4Y4WEeGjLtNqkbcdmg" x="84" y="25"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ZSRUkI4WEeGjLtNqkbcdmg" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wxrlUI4WEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zUSE8I4WEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="4872"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_wM2r4I4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ZSRUkY4WEeGjLtNqkbcdmg" x="84" y="25"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_ZTL6kI4WEeGjLtNqkbcdmg" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wxuBkI4WEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zUTTEI4WEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="4872"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_wM36AI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ZTL6kY4WEeGjLtNqkbcdmg" x="84" y="25"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_2KZBWI4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_2KZBWY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_2KZBWo4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2KZBW44UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_2KZBXI4UEeGjLtNqkbcdmg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_2KZBXY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_2KZBXo4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_2KZBX44UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2KZBYI4UEeGjLtNqkbcdmg"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_wIeiMI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_2KXMIY4UEeGjLtNqkbcdmg" x="420" y="186"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_3RVbQI4UEeGjLtNqkbcdmg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_3RWpYI4UEeGjLtNqkbcdmg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_3RWpYY4UEeGjLtNqkbcdmg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_3RWpYo4UEeGjLtNqkbcdmg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_3RXQcI4UEeGjLtNqkbcdmg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_3RXQcY4UEeGjLtNqkbcdmg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_3RXQco4UEeGjLtNqkbcdmg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_3RXQc44UEeGjLtNqkbcdmg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_3RXQdI4UEeGjLtNqkbcdmg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_3RXQdY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_3RXQdo4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_3RXQd44UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3RXQeI4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_3RX3gI4UEeGjLtNqkbcdmg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_3RX3gY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_3RX3go4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_3RX3g44UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3RX3hI4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_3RX3hY4UEeGjLtNqkbcdmg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_3RX3ho4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_3RX3h44UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_3RX3iI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3RX3iY4UEeGjLtNqkbcdmg"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_wJgc8I4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_3RVbQY4UEeGjLtNqkbcdmg" x="318" y="456"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_5NKOwI4UEeGjLtNqkbcdmg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5NLc4I4UEeGjLtNqkbcdmg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5NMD8I4UEeGjLtNqkbcdmg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5NMD8Y4UEeGjLtNqkbcdmg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5NMD8o4UEeGjLtNqkbcdmg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5NMD844UEeGjLtNqkbcdmg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5NMrAI4UEeGjLtNqkbcdmg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_5NMrAY4UEeGjLtNqkbcdmg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5NMrAo4UEeGjLtNqkbcdmg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5NMrA44UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5NMrBI4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5NMrBY4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5NMrBo4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5NMrB44UEeGjLtNqkbcdmg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5NMrCI4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5NMrCY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5NMrCo4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5NMrC44UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5NNSEI4UEeGjLtNqkbcdmg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5NNSEY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5NNSEo4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5NNSE44UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5NNSFI4UEeGjLtNqkbcdmg"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_wI5Y8I4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5NKOwY4UEeGjLtNqkbcdmg" x="924" y="456"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_5OTeQI4UEeGjLtNqkbcdmg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5OUFUI4UEeGjLtNqkbcdmg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5OUFUY4UEeGjLtNqkbcdmg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5OUFUo4UEeGjLtNqkbcdmg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5OUFU44UEeGjLtNqkbcdmg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5OUFVI4UEeGjLtNqkbcdmg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5OUFVY4UEeGjLtNqkbcdmg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_5OUFVo4UEeGjLtNqkbcdmg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5OUFV44UEeGjLtNqkbcdmg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5OUFWI4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5OUFWY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5OUFWo4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5OUFW44UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5OUsYI4UEeGjLtNqkbcdmg" type="7018">
+ <children xmi:type="notation:Shape" xmi:id="_e4CDMI4WEeGjLtNqkbcdmg" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wxv2wI4WEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zUUhMI4WEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="4872"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_wLv4oI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_e4CDMY4WEeGjLtNqkbcdmg" x="78" y="10"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gDqv4I4WEeGjLtNqkbcdmg" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wxxr8I4WEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zUWWYI4WEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="4872"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_wLqZEI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gDqv4Y4WEeGjLtNqkbcdmg" x="76" y="25"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_gqDacI4WEeGjLtNqkbcdmg" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wx1WUI4WEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zUXkgI4WEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="4872"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_wLsOQI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gqDacY4WEeGjLtNqkbcdmg" x="141" y="43"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_hlg9II4WEeGjLtNqkbcdmg" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wx2kcI4WEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zUYyoI4WEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="4872"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_wLuqgI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_hlg9IY4WEeGjLtNqkbcdmg" x="126" y="65"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_iKboEI4WEeGjLtNqkbcdmg" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wx3ykI4WEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zUZZsI4WEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="4872"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_wLyU4I4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_iKboEY4WEeGjLtNqkbcdmg" x="74" y="87"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5OUsYY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5OUsYo4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5OUsY44UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5OUsZI4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5OUsZY4UEeGjLtNqkbcdmg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5OUsZo4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5OUsZ44UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5OUsaI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5OUsaY4UEeGjLtNqkbcdmg"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_AUXMcX12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5OTeQY4UEeGjLtNqkbcdmg" x="906" y="186" height="199"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_66deEI4UEeGjLtNqkbcdmg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_66esMI4UEeGjLtNqkbcdmg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_66esMY4UEeGjLtNqkbcdmg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_66fTQI4UEeGjLtNqkbcdmg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_66fTQY4UEeGjLtNqkbcdmg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_66fTQo4UEeGjLtNqkbcdmg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_66fTQ44UEeGjLtNqkbcdmg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_66fTRI4UEeGjLtNqkbcdmg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_66f6UI4UEeGjLtNqkbcdmg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_66f6UY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_66f6Uo4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_66f6U44UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_66f6VI4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_66f6VY4UEeGjLtNqkbcdmg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_66f6Vo4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_66f6V44UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_66f6WI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_66f6WY4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_66ghYI4UEeGjLtNqkbcdmg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_66ghYY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_66ghYo4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_66ghY44UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_66ghZI4UEeGjLtNqkbcdmg"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_wIctAI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_66deEY4UEeGjLtNqkbcdmg" x="612" y="456"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_99FhkI4UEeGjLtNqkbcdmg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_99GvsI4UEeGjLtNqkbcdmg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_99GvsY4UEeGjLtNqkbcdmg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_99HWwI4UEeGjLtNqkbcdmg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_99HWwY4UEeGjLtNqkbcdmg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_99HWwo4UEeGjLtNqkbcdmg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_99HWw44UEeGjLtNqkbcdmg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_99HWxI4UEeGjLtNqkbcdmg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_99H90I4UEeGjLtNqkbcdmg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_99H90Y4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_99H90o4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_99H9044UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_99H91I4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_99H91Y4UEeGjLtNqkbcdmg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_99H91o4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_99H9144UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_99H92I4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_99H92Y4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_99Ik4I4UEeGjLtNqkbcdmg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_99Ik4Y4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_99Ik4o4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_99Ik444UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_99Ik5I4UEeGjLtNqkbcdmg"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_wKTHII4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_99FhkY4UEeGjLtNqkbcdmg" x="138" y="456"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="__-5BQI4UEeGjLtNqkbcdmg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="__-6PYI4UEeGjLtNqkbcdmg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__-6PYY4UEeGjLtNqkbcdmg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="__-6PYo4UEeGjLtNqkbcdmg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__-6PY44UEeGjLtNqkbcdmg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="__-62cI4UEeGjLtNqkbcdmg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__-62cY4UEeGjLtNqkbcdmg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="__-62co4UEeGjLtNqkbcdmg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="__-7dgI4UEeGjLtNqkbcdmg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="__-7dgY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="__-7dgo4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="__-7dg44UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__-7dhI4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="__-7dhY4UEeGjLtNqkbcdmg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="__-7dho4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="__-7dh44UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="__-7diI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__-7diY4UEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="__-8EkI4UEeGjLtNqkbcdmg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="__-8EkY4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="__-8Eko4UEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="__-8Ek44UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__-8ElI4UEeGjLtNqkbcdmg"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_wM8LcI4UEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="__-5BQY4UEeGjLtNqkbcdmg" x="1092" y="456"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_HgDsoI4VEeGjLtNqkbcdmg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HgE6wI4VEeGjLtNqkbcdmg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HgE6wY4VEeGjLtNqkbcdmg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HgE6wo4VEeGjLtNqkbcdmg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HgFh0I4VEeGjLtNqkbcdmg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HgFh0Y4VEeGjLtNqkbcdmg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HgFh0o4VEeGjLtNqkbcdmg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HgFh044VEeGjLtNqkbcdmg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HgFh1I4VEeGjLtNqkbcdmg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_xoNaII4VEeGjLtNqkbcdmg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="architectures.uml#_tBr68I4VEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xoNaIY4VEeGjLtNqkbcdmg" x="79" y="16"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_xpRxII4VEeGjLtNqkbcdmg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="architectures.uml#_tBuXMI4VEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xpRxIY4VEeGjLtNqkbcdmg" x="79" y="16"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_xqPacI4VEeGjLtNqkbcdmg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="architectures.uml#_tBwzcI4VEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xqQBgI4VEeGjLtNqkbcdmg" x="79" y="16"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_xrLOkI4VEeGjLtNqkbcdmg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="architectures.uml#_tByooI4VEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xrLOkY4VEeGjLtNqkbcdmg" x="79" y="16"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_xsL7MI4VEeGjLtNqkbcdmg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="architectures.uml#_tB0d0I4VEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xsL7MY4VEeGjLtNqkbcdmg" x="79" y="16"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_0oMZUI4VEeGjLtNqkbcdmg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="architectures.uml#_tB59YI4VEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_0oMZUY4VEeGjLtNqkbcdmg" x="141" y="110"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HgFh1Y4VEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HgFh1o4VEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HgFh144VEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HgFh2I4VEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HgGI4I4VEeGjLtNqkbcdmg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HgGI4Y4VEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HgGI4o4VEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HgGI444VEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HgGI5I4VEeGjLtNqkbcdmg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HgGI5Y4VEeGjLtNqkbcdmg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HgGI5o4VEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HgGI544VEeGjLtNqkbcdmg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HgGI6I4VEeGjLtNqkbcdmg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HgGI6Y4VEeGjLtNqkbcdmg"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_AUZBoX12EeGOQuKePEwyrw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HgDsoY4VEeGjLtNqkbcdmg" x="18" y="126"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_kmiWsI7dEeGR4_nY7YyRrQ" type="2012" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_kmmBEI7dEeGR4_nY7YyRrQ" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kmmBEY7dEeGR4_nY7YyRrQ" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_kmmoII7dEeGR4_nY7YyRrQ" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kmmoIY7dEeGR4_nY7YyRrQ" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_kmnPMI7dEeGR4_nY7YyRrQ" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kmnPMY7dEeGR4_nY7YyRrQ" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kmnPMo7dEeGR4_nY7YyRrQ" type="5038"/>
+ <element xmi:type="uml:Comment" href="architectures.uml#_kk6mEI7dEeGR4_nY7YyRrQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kmiWsY7dEeGR4_nY7YyRrQ" x="1254" y="114"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_0FULMY4UEeGjLtNqkbcdmg"/>
+ <element xmi:type="uml:Package" href="architectures.uml#_AUXMcH12EeGOQuKePEwyrw"/>
+ <edges xmi:type="notation:Connector" xmi:id="_2MJ74I4UEeGjLtNqkbcdmg" type="4002" source="_2IiAII4UEeGjLtNqkbcdmg" target="_2KXMII4UEeGjLtNqkbcdmg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_2MLKAI4UEeGjLtNqkbcdmg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2MLKAY4UEeGjLtNqkbcdmg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_2MJ74Y4UEeGjLtNqkbcdmg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="architectures.uml#_wKBaUI4UEeGjLtNqkbcdmg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2MJ74o4UEeGjLtNqkbcdmg" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_3SdcoI4UEeGjLtNqkbcdmg" type="4002" source="_3RVbQI4UEeGjLtNqkbcdmg" target="_2KXMII4UEeGjLtNqkbcdmg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_3SeDsI4UEeGjLtNqkbcdmg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_3SeDsY4UEeGjLtNqkbcdmg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_3SdcoY4UEeGjLtNqkbcdmg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="architectures.uml#_wJhEAY4UEeGjLtNqkbcdmg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_3Sdcoo4UEeGjLtNqkbcdmg" points="[0, 0, -511, -236]$[456, 210, -55, -26]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_5PUx8I4UEeGjLtNqkbcdmg" type="4002" source="_5NKOwI4UEeGjLtNqkbcdmg" target="_5OTeQI4UEeGjLtNqkbcdmg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_5PWAEI4UEeGjLtNqkbcdmg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_5PWAEY4UEeGjLtNqkbcdmg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_5PUx8Y4UEeGjLtNqkbcdmg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="architectures.uml#_wI6nEI4UEeGjLtNqkbcdmg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_5PUx8o4UEeGjLtNqkbcdmg" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_67y60I4UEeGjLtNqkbcdmg" type="4002" source="_66deEI4UEeGjLtNqkbcdmg" target="_2KXMII4UEeGjLtNqkbcdmg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_67zh4I4UEeGjLtNqkbcdmg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_67zh4Y4UEeGjLtNqkbcdmg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_67y60Y4UEeGjLtNqkbcdmg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="architectures.uml#_wIfJQI4UEeGjLtNqkbcdmg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_67y60o4UEeGjLtNqkbcdmg" points="[0, 0, -511, -236]$[456, 210, -55, -26]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_9-TCgI4UEeGjLtNqkbcdmg" type="4002" source="_99FhkI4UEeGjLtNqkbcdmg" target="_2KXMII4UEeGjLtNqkbcdmg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_9-TpkI4UEeGjLtNqkbcdmg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_9-TpkY4UEeGjLtNqkbcdmg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_9-TCgY4UEeGjLtNqkbcdmg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="architectures.uml#_wKUVQI4UEeGjLtNqkbcdmg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_9-TCgo4UEeGjLtNqkbcdmg" points="[0, 0, -511, -236]$[456, 210, -55, -26]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="___34sI4UEeGjLtNqkbcdmg" type="4002" source="__-5BQI4UEeGjLtNqkbcdmg" target="_5OTeQI4UEeGjLtNqkbcdmg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="___5G0I4UEeGjLtNqkbcdmg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="___5G0Y4UEeGjLtNqkbcdmg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="___34sY4UEeGjLtNqkbcdmg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="architectures.uml#_wM9ZkY4UEeGjLtNqkbcdmg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="___34so4UEeGjLtNqkbcdmg" points="[0, 0, -947, -389]$[884, 363, -63, -26]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_HhJ40I4VEeGjLtNqkbcdmg" type="4001" source="_HgDsoI4VEeGjLtNqkbcdmg" target="_2KXMII4UEeGjLtNqkbcdmg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_HhLG8I4VEeGjLtNqkbcdmg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HhLG8Y4VEeGjLtNqkbcdmg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HhLG8o4VEeGjLtNqkbcdmg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HhLG844VEeGjLtNqkbcdmg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HhLG9I4VEeGjLtNqkbcdmg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WZ2LYI4VEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_WsR_MI4VEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HhLG9Y4VEeGjLtNqkbcdmg" x="37" y="-26"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HhLG9o4VEeGjLtNqkbcdmg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ZY8ZwI4VEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ZpHjwI4VEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HhLG944VEeGjLtNqkbcdmg" x="-55" y="24"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HhLuAI4VEeGjLtNqkbcdmg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_cm4VYI4VEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_dPB6gI4VEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HhLuAY4VEeGjLtNqkbcdmg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HhLuAo4VEeGjLtNqkbcdmg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_cm6KkI4VEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_dPDvsI4VEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_HhLuA44VEeGjLtNqkbcdmg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_HhJ40Y4VEeGjLtNqkbcdmg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="architectures.uml#_G8H5II4VEeGjLtNqkbcdmg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_HhJ40o4VEeGjLtNqkbcdmg" points="[0, 0, -529, -238]$[456, 204, -73, -34]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kTWR0I4VEeGjLtNqkbcdmg" id="(0.9878542510121457,0.5245098039215687)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ni_BII4WEeGjLtNqkbcdmg" id="(0.04276315789473684,0.24615384615384617)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_N6cWII4VEeGjLtNqkbcdmg" type="4001" source="_2KXMII4UEeGjLtNqkbcdmg" target="_5OTeQI4UEeGjLtNqkbcdmg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_N6dkQI4VEeGjLtNqkbcdmg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_N6dkQY4VEeGjLtNqkbcdmg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_N6dkQo4VEeGjLtNqkbcdmg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_N6dkQ44VEeGjLtNqkbcdmg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_N6eLUI4VEeGjLtNqkbcdmg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WZ4AkI4VEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_WsSmQI4VEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_N6eLUY4VEeGjLtNqkbcdmg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_N6eLUo4VEeGjLtNqkbcdmg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ZY-O8I4VEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ZpIx4I4VEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_N6eLU44VEeGjLtNqkbcdmg" x="-50" y="19"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_N6eLVI4VEeGjLtNqkbcdmg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_cm7_wI4VEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_dPE90I4VEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_N6eLVY4VEeGjLtNqkbcdmg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_N6eLVo4VEeGjLtNqkbcdmg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_cm9N4I4VEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_dPGL8I4VEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_N6eLV44VEeGjLtNqkbcdmg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_N6cWIY4VEeGjLtNqkbcdmg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="architectures.uml#_NPvMQI4VEeGjLtNqkbcdmg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_N6cWIo4VEeGjLtNqkbcdmg" points="[74, -8, -366, 0]$[377, 0, -63, 8]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_P4RUwI4VEeGjLtNqkbcdmg" type="4001" source="_5OTeQI4UEeGjLtNqkbcdmg" target="_5OTeQI4UEeGjLtNqkbcdmg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_P4Si4I4VEeGjLtNqkbcdmg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_P4Si4Y4VEeGjLtNqkbcdmg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_P4TJ8I4VEeGjLtNqkbcdmg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_P4TJ8Y4VEeGjLtNqkbcdmg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_P4TJ8o4VEeGjLtNqkbcdmg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_WZ51wI4VEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_WsT0YI4VEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_P4TJ844VEeGjLtNqkbcdmg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_P4TJ9I4VEeGjLtNqkbcdmg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_cm_DEI4VEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_dPIBII4VEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_P4TxAI4VEeGjLtNqkbcdmg" x="7" y="25"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_P4TxAY4VEeGjLtNqkbcdmg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_cnARMI4VEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_dPJ2UI4VEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_P4TxAo4VEeGjLtNqkbcdmg" x="-15" y="14"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_P4TxA44VEeGjLtNqkbcdmg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ZY_dEI4VEeGjLtNqkbcdmg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ZpLOII4VEeGjLtNqkbcdmg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_P4UYEI4VEeGjLtNqkbcdmg" x="31" y="-22"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_P4RUwY4VEeGjLtNqkbcdmg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="architectures.uml#_PErUoI4VEeGjLtNqkbcdmg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_P4RUwo4VEeGjLtNqkbcdmg" points="[4, 1, 152, -4]$[88, 1, 236, -4]$[88, -136, 236, -141]$[-148, -136, 0, -141]$[-148, -94, 0, -99]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_puq1kI4WEeGjLtNqkbcdmg" id="(0.9868421052631579,0.4723618090452261)"/>
+ </edges>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_wkuvYL-jEeGnLN6u0QNctQ" type="PapyrusUMLClassDiagram" name="services v2" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_yxcekL-jEeGnLN6u0QNctQ" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_yxdssL-jEeGnLN6u0QNctQ" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_yxdssb-jEeGnLN6u0QNctQ" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_yxdssr-jEeGnLN6u0QNctQ" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_yxdss7-jEeGnLN6u0QNctQ" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_yxdstL-jEeGnLN6u0QNctQ" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_yxdstb-jEeGnLN6u0QNctQ" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_yxdstr-jEeGnLN6u0QNctQ" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_yxdst7-jEeGnLN6u0QNctQ" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yxdsuL-jEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_yxdsub-jEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_yxdsur-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yxdsu7-jEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_yxeTwL-jEeGnLN6u0QNctQ" type="7018">
+ <children xmi:type="notation:Shape" xmi:id="_zydaML-kEeGnLN6u0QNctQ" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_3TJ5wL-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_42zd0L-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="6920"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_rx-LAL-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_zydaMb-kEeGnLN6u0QNctQ" x="49" y="17"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_zzfU8L-kEeGnLN6u0QNctQ" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5W-LoL-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6RIt0L-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="4872"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_ryGt4L-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_zzfU8b-kEeGnLN6u0QNctQ" x="49" y="17"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yxeTwb-jEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_yxeTwr-jEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_yxeTw7-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yxeTxL-jEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_yxeTxb-jEeGnLN6u0QNctQ" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yxeTxr-jEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_yxeTx7-jEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_yxeTyL-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yxeTyb-jEeGnLN6u0QNctQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_rx1oIL-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yxcekb-jEeGnLN6u0QNctQ" x="492" y="522"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_7UtgIL-jEeGnLN6u0QNctQ" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_7UvVUL-jEeGnLN6u0QNctQ" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_7UvVUb-jEeGnLN6u0QNctQ" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_7UvVUr-jEeGnLN6u0QNctQ" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_7Uv8YL-jEeGnLN6u0QNctQ" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_7Uv8Yb-jEeGnLN6u0QNctQ" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_7Uv8Yr-jEeGnLN6u0QNctQ" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7Uv8Y7-jEeGnLN6u0QNctQ" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_7UwjcL-jEeGnLN6u0QNctQ" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_7Uwjcb-jEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_7Uwjcr-jEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_7Uwjc7-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7UwjdL-jEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_7Uwjdb-jEeGnLN6u0QNctQ" type="7018">
+ <children xmi:type="notation:Shape" xmi:id="_ByoJUL-lEeGnLN6u0QNctQ" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D7nPEL-lEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GFBLkL-lEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="21256"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_rqr3QL-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ByoJUb-lEeGnLN6u0QNctQ" x="73" y="34"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_BztHYL-lEeGnLN6u0QNctQ" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HEfrkL-lEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_IMgcgL-lEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="21256"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="architectures.uml#_rqx94L-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_BztHYb-lEeGnLN6u0QNctQ" x="73" y="34"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_7Uwjdr-jEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_7Uwjd7-jEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_7UwjeL-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7Uwjeb-jEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_7Uwjer-jEeGnLN6u0QNctQ" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_7Uwje7-jEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_7UwjfL-jEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_7Uwjfb-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7Uwjfr-jEeGnLN6u0QNctQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_rqaxgL-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7UuHML-jEeGnLN6u0QNctQ" x="636" y="126" height="244"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_DydvkL-kEeGnLN6u0QNctQ" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Dye9sL-kEeGnLN6u0QNctQ" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_DyfkwL-kEeGnLN6u0QNctQ" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Dyfkwb-kEeGnLN6u0QNctQ" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Dyfkwr-kEeGnLN6u0QNctQ" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Dyfkw7-kEeGnLN6u0QNctQ" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_DygL0L-kEeGnLN6u0QNctQ" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_DygL0b-kEeGnLN6u0QNctQ" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_DygL0r-kEeGnLN6u0QNctQ" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_DygL07-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DygL1L-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DygL1b-kEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DygL1r-kEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_DygL17-kEeGnLN6u0QNctQ" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_DygL2L-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DygL2b-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DygL2r-kEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DygL27-kEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Dygy4L-kEeGnLN6u0QNctQ" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Dygy4b-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Dygy4r-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Dygy47-kEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Dygy5L-kEeGnLN6u0QNctQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_rqg4IL-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Dydvkb-kEeGnLN6u0QNctQ" x="1098" y="120" width="199"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Hh2LYL-kEeGnLN6u0QNctQ" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Hh2ycL-kEeGnLN6u0QNctQ" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Hh2ycb-kEeGnLN6u0QNctQ" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Hh2ycr-kEeGnLN6u0QNctQ" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Hh2yc7-kEeGnLN6u0QNctQ" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Hh2ydL-kEeGnLN6u0QNctQ" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Hh2ydb-kEeGnLN6u0QNctQ" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Hh3ZgL-kEeGnLN6u0QNctQ" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Hh3Zgb-kEeGnLN6u0QNctQ" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Hh3Zgr-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Hh3Zg7-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Hh3ZhL-kEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Hh3Zhb-kEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Hh3Zhr-kEeGnLN6u0QNctQ" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Hh3Zh7-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Hh3ZiL-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Hh3Zib-kEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Hh3Zir-kEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Hh3Zi7-kEeGnLN6u0QNctQ" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Hh3ZjL-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Hh3Zjb-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Hh3Zjr-kEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Hh3Zj7-kEeGnLN6u0QNctQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="architectures.uml#_rqkigL-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Hh2LYb-kEeGnLN6u0QNctQ" x="300" y="126"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_mtqHIL-kEeGnLN6u0QNctQ" type="2004" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mtrVQL-kEeGnLN6u0QNctQ" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mtr8UL-kEeGnLN6u0QNctQ" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mtr8Ub-kEeGnLN6u0QNctQ" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mtr8Ur-kEeGnLN6u0QNctQ" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mtr8U7-kEeGnLN6u0QNctQ" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mtsjYL-kEeGnLN6u0QNctQ" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_mtsjYb-kEeGnLN6u0QNctQ" type="5011"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_mtsjYr-kEeGnLN6u0QNctQ" type="7006">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_mtsjY7-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_mtsjZL-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_mtsjZb-kEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mtsjZr-kEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_mtsjZ7-kEeGnLN6u0QNctQ" type="7007">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_mtsjaL-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_mtsjab-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_mtsjar-kEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mtsja7-kEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_mttKcL-kEeGnLN6u0QNctQ" type="7008">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_mttKcb-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_mttKcr-kEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_mttKc7-kEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mttKdL-kEeGnLN6u0QNctQ"/>
+ </children>
+ <element xmi:type="uml:Interface" href="architectures.uml#_rqoM4L-jEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_mtqHIb-kEeGnLN6u0QNctQ" x="12" y="120"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_wkuvYb-jEeGnLN6u0QNctQ"/>
+ <element xmi:type="uml:Package" href="architectures.uml#_rqUq4L-jEeGnLN6u0QNctQ"/>
+ <edges xmi:type="notation:Connector" xmi:id="_7VtlsL-jEeGnLN6u0QNctQ" type="4001" source="_7UtgIL-jEeGnLN6u0QNctQ" target="_yxcekL-jEeGnLN6u0QNctQ" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_7VuMwL-jEeGnLN6u0QNctQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7VuMwb-jEeGnLN6u0QNctQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7VuMwr-jEeGnLN6u0QNctQ" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7VuMw7-jEeGnLN6u0QNctQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7Vuz0L-jEeGnLN6u0QNctQ" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_MF3wML-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_M2t-UL-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7Vuz0b-jEeGnLN6u0QNctQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7Vuz0r-jEeGnLN6u0QNctQ" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_PXCmAL-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Pi0_QL-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7Vuz07-jEeGnLN6u0QNctQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7Vuz1L-jEeGnLN6u0QNctQ" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_OF4gIL-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Oyix0L-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7Vuz1b-jEeGnLN6u0QNctQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7Vuz1r-jEeGnLN6u0QNctQ" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Ndg4kL-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_NrXuYL-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_7Vuz17-jEeGnLN6u0QNctQ" x="26" y="-99"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_7Vtlsb-jEeGnLN6u0QNctQ" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="architectures.uml#_6y8P0L-jEeGnLN6u0QNctQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_7Vtlsr-jEeGnLN6u0QNctQ" points="[0, 0, -582, -331]$[508, 288, -74, -43]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_DzaKwL-kEeGnLN6u0QNctQ" type="4001" source="_DydvkL-kEeGnLN6u0QNctQ" target="_7UtgIL-jEeGnLN6u0QNctQ" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_DzbY4L-kEeGnLN6u0QNctQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_DzbY4b-kEeGnLN6u0QNctQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_DzbY4r-kEeGnLN6u0QNctQ" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_DzbY47-kEeGnLN6u0QNctQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_DzbY5L-kEeGnLN6u0QNctQ" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_RDvYYL-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_RNfKQL-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_DzbY5b-kEeGnLN6u0QNctQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_DzbY5r-kEeGnLN6u0QNctQ" visible="false" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_R7k_UL-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_SJSrML-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_DzbY57-kEeGnLN6u0QNctQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Dzb_8L-kEeGnLN6u0QNctQ" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_QarNQL-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Qo3aQL-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Dzb_8b-kEeGnLN6u0QNctQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Dzb_8r-kEeGnLN6u0QNctQ" visible="false" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ShM04L-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_SuEzQL-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Dzb_87-kEeGnLN6u0QNctQ" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_DzaKwb-kEeGnLN6u0QNctQ" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="architectures.uml#_CfTekL-kEeGnLN6u0QNctQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_DzaKwr-kEeGnLN6u0QNctQ" points="[0, 0, -417, -224]$[360, 193, -57, -31]"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_wQUJIL-kEeGnLN6u0QNctQ" id="(0.9130434782608695,0.25)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_Hi0bwL-kEeGnLN6u0QNctQ" type="4001" source="_Hh2LYL-kEeGnLN6u0QNctQ" target="_7UtgIL-jEeGnLN6u0QNctQ" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Hi1C0L-kEeGnLN6u0QNctQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Hi1p4L-kEeGnLN6u0QNctQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Hi1p4b-kEeGnLN6u0QNctQ" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Hi1p4r-kEeGnLN6u0QNctQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Hi1p47-kEeGnLN6u0QNctQ" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_TVIMML-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Tg9owL-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Hi1p5L-kEeGnLN6u0QNctQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Hi1p5b-kEeGnLN6u0QNctQ" visible="false" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_VjI74L-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_WMdlsL-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Hi1p5r-kEeGnLN6u0QNctQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Hi1p57-kEeGnLN6u0QNctQ" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UC7GUL-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_UQ3bsL-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Hi1p6L-kEeGnLN6u0QNctQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Hi2Q8L-kEeGnLN6u0QNctQ" visible="false" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_U2t6wL-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_VAUisL-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Hi2Q8b-kEeGnLN6u0QNctQ" x="-31" y="13"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Hi0bwb-kEeGnLN6u0QNctQ" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="architectures.uml#_G2_3kL-kEeGnLN6u0QNctQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Hi0bwr-kEeGnLN6u0QNctQ" points="[99, 24, -195, -48]$[237, 57, -57, -15]"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fCd9EL-kEeGnLN6u0QNctQ" id="(0.13043478260869565,0.2540983606557377)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_mut3EL-kEeGnLN6u0QNctQ" type="4001" source="_mtqHIL-kEeGnLN6u0QNctQ" target="_Hh2LYL-kEeGnLN6u0QNctQ" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_muvFML-kEeGnLN6u0QNctQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_muvFMb-kEeGnLN6u0QNctQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_muvFMr-kEeGnLN6u0QNctQ" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_muvFM7-kEeGnLN6u0QNctQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_muvFNL-kEeGnLN6u0QNctQ" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_pyS80L-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_p-JAcL-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_muvFNb-kEeGnLN6u0QNctQ" x="30" y="-58"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_muvFNr-kEeGnLN6u0QNctQ" visible="false" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_pKLz8L-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_pX44wL-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_muvsQL-kEeGnLN6u0QNctQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_muvsQb-kEeGnLN6u0QNctQ" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_qXBagL-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_qpYV0L-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_muvsQr-kEeGnLN6u0QNctQ" x="-5" y="35"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_muvsQ7-kEeGnLN6u0QNctQ" visible="false" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_oc0-sL-kEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_oqRk0L-kEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_muvsRL-kEeGnLN6u0QNctQ" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_mut3Eb-kEeGnLN6u0QNctQ" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="architectures.uml#_l2cLQL-kEeGnLN6u0QNctQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mut3Er-kEeGnLN6u0QNctQ" points="[0, 0, -273, -176]$[195, 126, -78, -50]"/>
+ </edges>
+ </notation:Diagram>
+</xmi:XMI>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/architectures.uml b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/architectures.uml
new file mode 100644
index 00000000000..b124c69401b
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/architectures.uml
@@ -0,0 +1,3852 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="20110701" xmlns:xmi="http://www.omg.org/spec/XMI/20110701" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:java="http://www.eclipse.org/papyrus/JAVA/1" xmlns:uml="http://www.eclipse.org/uml2/4.0.0/UML">
+ <uml:Model xmi:id="_gYo-EH1yEeGcMtmaQ3nQLw" name="model">
+ <packagedElement xmi:type="uml:Model" xmi:id="_kaJEoH1yEeGcMtmaQ3nQLw" name="serviceregistry">
+ <packagedElement xmi:type="uml:Class" xmi:id="_zqu50H1yEeGcMtmaQ3nQLw" name="ServiceRegistry">
+ <ownedComment xmi:id="_rIDxUH12EeGOQuKePEwyrw">
+ <body> &lt;java:JavaProject xmi:id=&quot;_0TY_0H1zEeGOQuKePEwyrw&quot; srcName=&quot;src&quot; projectName=&quot;org.eclipse.papyrus.infra.core.serviceregistry&quot; base_Package=&quot;_kaJEoH1yEeGcMtmaQ3nQLw&quot;/>
+</body>
+ </ownedComment>
+ <ownedComment xmi:id="_t3cIsH12EeGOQuKePEwyrw">
+ <body> &lt;java:JavaProject xmi:id=&quot;_0TY_0H1zEeGOQuKePEwyrw&quot; srcName=&quot;src&quot; projectName=&quot;org.eclipse.papyrus.infra.core.serviceregistry&quot; base_Package=&quot;_kaJEoH1yEeGcMtmaQ3nQLw&quot;/>
+</body>
+ </ownedComment>
+ <ownedOperation xmi:id="_vNLzoH12EeGOQuKePEwyrw" name="getService" visibility="public">
+ <ownedComment xmi:id="_vNLzoX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Get the requested service by its key. The key is usually the classname of&#xD;
+ * the service.&#xD;
+ * &#xD;
+ * @param serviceClass&#xD;
+ * @return&#xD;
+ * @throws ServiceException&#xD;
+ * If servive can't be started&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_vNLzon12EeGOQuKePEwyrw" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_vNLzo312EeGOQuKePEwyrw" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_vNNBwH12EeGOQuKePEwyrw" name="getService" visibility="public">
+ <ownedComment xmi:id="_vNNBwX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Get the requested service by its class (the service has to be registered&#xD;
+ * by its class object).&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * The service class.&#xD;
+ * @return The service.&#xD;
+ * @throws ServiceException&#xD;
+ * If service can't be started&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_vNNBwn12EeGOQuKePEwyrw" type="_AVPWMH12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_vNNBw312EeGOQuKePEwyrw" name="key" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_EuybQH10EeGOQuKePEwyrw" name="impl"/>
+ <packagedElement xmi:type="uml:Interface" xmi:id="_TYM0UH13EeGOQuKePEwyrw" name="IService">
+ <ownedComment xmi:id="_TYM0UX13EeGOQuKePEwyrw">
+ <body>&#xD;
+ * An Service that can be registered in the {@link ServicesRegistry}. A service&#xD;
+ * is a singleton available throw the registry. A service can be shared across&#xD;
+ * editors. &lt;br>&#xD;
+ * The life cycle is as follow:&#xD;
+ * &lt;ul>&#xD;
+ * &lt;li>service creation&lt;/li>&#xD;
+ * &lt;li>{@link #init(ServicesRegistry)} - Other service can be retrieved from the registry, but are not started yet.&lt;/li>&#xD;
+ * &lt;li>{@link #startService()} - service is started.&lt;/li>&#xD;
+ * &lt;li>Service can be used&lt;/li>&#xD;
+ * &lt;li>{@link #disposeService()} - service is disposed and should not be used anymore.&lt;/li>&#xD;
+ * &lt;/ul>&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedOperation xmi:id="_TYM0Un13EeGOQuKePEwyrw" name="init" visibility="public">
+ <ownedComment xmi:id="_TYM0U313EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Init the service and set its associated Registry. The registry can be&#xD;
+ * used to retrieve other services.&#xD;
+ * &#xD;
+ * @param servicesRegistry&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_TYM0VH13EeGOQuKePEwyrw" name="servicesRegistry" type="_4OeqcH11EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_TYM0VX13EeGOQuKePEwyrw" name="startService" visibility="public">
+ <ownedComment xmi:id="_TYM0Vn13EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Start the service. This method is called when the service is started.&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_TYM0V313EeGOQuKePEwyrw" name="disposeService" visibility="public">
+ <ownedComment xmi:id="_TYM0WH13EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Dispose the service.&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Model" xmi:id="_4NJNsH11EeGOQuKePEwyrw" name="generated"/>
+ <packagedElement xmi:type="uml:Model" xmi:id="_4OUSYH11EeGOQuKePEwyrw" name="infra">
+ <packagedElement xmi:type="uml:Package" xmi:id="_4OU5cH11EeGOQuKePEwyrw" name="org">
+ <packagedElement xmi:type="uml:Package" xmi:id="_4OU5cX11EeGOQuKePEwyrw" name="eclipse">
+ <packagedElement xmi:type="uml:Package" xmi:id="_4OVggH11EeGOQuKePEwyrw" name="papyrus">
+ <packagedElement xmi:type="uml:Package" xmi:id="_4OVggX11EeGOQuKePEwyrw" name="infra">
+ <packagedElement xmi:type="uml:Package" xmi:id="_4OVggn11EeGOQuKePEwyrw" name="core">
+ <packagedElement xmi:type="uml:Package" xmi:id="_4OVgg311EeGOQuKePEwyrw" name="services">
+ <packagedElement xmi:type="uml:Interface" xmi:id="_4OZx8H11EeGOQuKePEwyrw" name="IService">
+ <ownedComment xmi:id="_4OaZAH11EeGOQuKePEwyrw">
+ <body>&#xD;
+ * An Service that can be registered in the {@link ServicesRegistry}. A service&#xD;
+ * is a singleton available throw the registry. A service can be shared across&#xD;
+ * editors. &lt;br>&#xD;
+ * The life cycle is as follow:&#xD;
+ * &lt;ul>&#xD;
+ * &lt;li>service creation&lt;/li>&#xD;
+ * &lt;li>{@link #init(ServicesRegistry)} - Other service can be retrieved from the registry, but are not started yet.&lt;/li>&#xD;
+ * &lt;li>{@link #startService()} - service is started.&lt;/li>&#xD;
+ * &lt;li>Service can be used&lt;/li>&#xD;
+ * &lt;li>{@link #disposeService()} - service is disposed and should not be used anymore.&lt;/li>&#xD;
+ * &lt;/ul>&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedOperation xmi:id="_4OfRgH11EeGOQuKePEwyrw" name="init" visibility="public">
+ <ownedComment xmi:id="_4Of4kH11EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Init the service and set its associated Registry. The registry can be&#xD;
+ * used to retrieve other services.&#xD;
+ * &#xD;
+ * @param servicesRegistry&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_4OgfoH11EeGOQuKePEwyrw" name="servicesRegistry" type="_4OeqcH11EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_4OgfoX11EeGOQuKePEwyrw" name="startService" visibility="public">
+ <ownedComment xmi:id="_4Ogfon11EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Start the service. This method is called when the service is started.&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_4OhGsH11EeGOQuKePEwyrw" name="disposeService" visibility="public">
+ <ownedComment xmi:id="_4OhGsX11EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Dispose the service.&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_4OeqcH11EeGOQuKePEwyrw" name="ServicesRegistry">
+ <ownedComment xmi:id="_AUST8H12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * A registry of services. This registry allows to get a service by its&#xD;
+ * identifier. The identifier is generally the classname of the service.&#xD;
+ * Services can be added using the Eclipse extension mechanism (if you use {@link ExtensionServicesRegistry}). &lt;br>&#xD;
+ * A Service is a class providing operations. The ServiceRegistry is used to&#xD;
+ * share objects (i.e. services) between nested editors and also the core main&#xD;
+ * editor.&#xD;
+ * &#xD;
+ * &lt;br>&#xD;
+ * In this implementation, services should be added to the registry before the&#xD;
+ * call to createServices(). If a service is added after the call, it will not&#xD;
+ * be started (except if it is a lazy service). &lt;br>&#xD;
+ * A typical usage is:&#xD;
+ * &#xD;
+ * &lt;pre>&#xD;
+ * &lt;code>&#xD;
+ * ServicesRegistry serviceRegistry = new ServiceRegistry();&#xD;
+ * // Add your services&#xD;
+ * serviceRegistry.add( ...);&#xD;
+ * serviceRegistry.add( ...);&#xD;
+ * &#xD;
+ * // start the services&#xD;
+ * serviceRegistry.startRegistry();&#xD;
+ * &#xD;
+ * // Retrieve a service&#xD;
+ * myService = serviceRegistry.getService( serviceKey );&#xD;
+ * &lt;/code>&#xD;
+ * &lt;/pre>&#xD;
+ * &#xD;
+ * It is possible to register new services after the serviceRegistry has been&#xD;
+ * started. In this case, you need to start them explicitly if they are of type&#xD;
+ * ServiceStartKind.STARTUP.&#xD;
+ * &#xD;
+ * &lt;pre>&#xD;
+ * &lt;code>&#xD;
+ * // Add your new services&#xD;
+ * serviceRegistry.add( key1, ...);&#xD;
+ * serviceRegistry.add( key2, ...);&#xD;
+ * &#xD;
+ * // start the new services&#xD;
+ * serviceRegistry.startRegistry(key1, key2);&#xD;
+ * &lt;/code>&#xD;
+ * &lt;/pre>&#xD;
+ * &#xD;
+ * &lt;ul>&#xD;
+ * &lt;li>&lt;/li>&#xD;
+ * &lt;li>&lt;/li>&#xD;
+ * &lt;/ul>&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ * &#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedAttribute xmi:id="_AUUJIH12EeGOQuKePEwyrw" name="log" visibility="protected" type="_AUTiEX12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_AUUwMH12EeGOQuKePEwyrw">
+ <body> Log object </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_AUVXQH12EeGOQuKePEwyrw" name="addedServices" visibility="private" type="_AUUwMX12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_AUV-UH12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * A Map of services added to the register (thow the addXxx() methods), but&#xD;
+ * not yet registered. They will be registered after a call to startXxx().&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_AUV-UX12EeGOQuKePEwyrw" name="namedServices" visibility="private" type="_AUUwMX12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_AUWlYH12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Map of services registered with a name.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_AUXzgH12EeGOQuKePEwyrw" name="anonymousServices" visibility="private" type="_AUXMcX12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_AUXzgX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Map of services registered without a name (anonymous). Such services&#xD;
+ * can't be retrieved.&#xD;
+ </body>
+ </ownedComment>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AUYakH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AUZBoH12EeGOQuKePEwyrw" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_AUZosH12EeGOQuKePEwyrw" name="add" visibility="public">
+ <ownedComment xmi:id="_AUZosX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Add a service by its ServiceDescriptor.&#xD;
+ * &#xD;
+ * @param serviceDescriptor&#xD;
+ * Descriptor describing the service.&#xD;
+ * @throws ServiceException&#xD;
+ * If an error occurs while initializing service.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AUaPwH12EeGOQuKePEwyrw" name="serviceDescriptor" type="_AUZBoX12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AUcE8H12EeGOQuKePEwyrw" name="add" visibility="public">
+ <ownedComment xmi:id="_AUcE8X12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Add a service. The descriptor will be created.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AUcsAH12EeGOQuKePEwyrw" name="key" type="_AUa20H12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUdTEH12EeGOQuKePEwyrw" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUd6IH12EeGOQuKePEwyrw" name="serviceInstance" type="_4OZx8H11EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AUehMH12EeGOQuKePEwyrw" name="add" visibility="public">
+ <ownedComment xmi:id="_AUehMX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Add a service. The descriptor will be created.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AUfIQH12EeGOQuKePEwyrw" name="key" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUfvUH12EeGOQuKePEwyrw" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUgWYH12EeGOQuKePEwyrw" name="serviceInstance" type="_4OZx8H11EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AUhkgH12EeGOQuKePEwyrw" name="add" visibility="public">
+ <ownedComment xmi:id="_AUhkgX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Add a service. The descriptor will be created.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AUiLkH12EeGOQuKePEwyrw" name="key" type="_AUa20H12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUiyoH12EeGOQuKePEwyrw" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUjZsH12EeGOQuKePEwyrw" name="serviceInstance" type="_4OZx8H11EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUkAwH12EeGOQuKePEwyrw" name="startKind" type="_AUg9cH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AUkn0H12EeGOQuKePEwyrw" name="add" visibility="public">
+ <ownedComment xmi:id="_AUkn0X12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Add a service. The descriptor will be created.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key Class used as key. The classname is used as key.&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AUl18H12EeGOQuKePEwyrw" name="key" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUmdAH12EeGOQuKePEwyrw" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUnEEH12EeGOQuKePEwyrw" name="serviceInstance" type="_4OZx8H11EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUnrIH12EeGOQuKePEwyrw" name="startKind" type="_AUg9cH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AUo5QH12EeGOQuKePEwyrw" name="add" visibility="public">
+ <ownedComment xmi:id="_AUo5QX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Add an already instanciated pojo (Plain Old Java Object) as Service. The&#xD;
+ * descriptor will be created. No life cycle methods are called on the&#xD;
+ * service.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AUpgUH12EeGOQuKePEwyrw" name="key" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUqHYH12EeGOQuKePEwyrw" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUqucH12EeGOQuKePEwyrw" name="serviceInstance" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AUrVgH12EeGOQuKePEwyrw" name="add" visibility="public">
+ <ownedComment xmi:id="_AUrVgX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Add an already instanciated pojo (Plain Old Java Object) as Service. The&#xD;
+ * descriptor will be created. No life cycle methods are called on the&#xD;
+ * service.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ * @param startKind&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AUr8kH12EeGOQuKePEwyrw" name="key" type="_AUa20H12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUsjoH12EeGOQuKePEwyrw" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUu_4H12EeGOQuKePEwyrw" name="serviceInstance" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AUvm8H12EeGOQuKePEwyrw" name="startKind" type="_AUg9cH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AUwOAH12EeGOQuKePEwyrw" name="add" visibility="public">
+ <ownedComment xmi:id="_AUw1EH12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Add an already instanciated pojo (Plain Old Java Object) as Service. The&#xD;
+ * descriptor will be created. No life cycle methods are called on the&#xD;
+ * service.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key Class used as key. The classname is used as key.&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ * @param startKind&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AUxcIH12EeGOQuKePEwyrw" name="key" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AVAFoH12EeGOQuKePEwyrw" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AVAssH12EeGOQuKePEwyrw" name="serviceInstance" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AVBTwH12EeGOQuKePEwyrw" name="startKind" type="_AUg9cH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVB60H12EeGOQuKePEwyrw" name="remove" visibility="public">
+ <ownedComment xmi:id="_AVB60X12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Remove the specified service from the registry.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVCh4H12EeGOQuKePEwyrw" name="serviceDescriptor" type="_AUZBoX12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVDI8H12EeGOQuKePEwyrw" name="remove" visibility="public">
+ <ownedComment xmi:id="_AVDwAH12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Remove the specified service from the registry.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVDwAX12EeGOQuKePEwyrw" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVEXEH12EeGOQuKePEwyrw" name="getService" visibility="public">
+ <ownedComment xmi:id="_AVE-IH12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Get the requested service by its key. The key is usually the classname of&#xD;
+ * the service.&#xD;
+ * &#xD;
+ * @param serviceClass&#xD;
+ * @return&#xD;
+ * @throws ServiceException&#xD;
+ * If servive can't be started&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVHaYH12EeGOQuKePEwyrw" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_AVIBcH12EeGOQuKePEwyrw" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVOIEH12EeGOQuKePEwyrw" name="getService" visibility="public">
+ <ownedComment xmi:id="_AVOvIH12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Get the requested service by its class (the service has to be registered&#xD;
+ * by its class object).&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * The service class.&#xD;
+ * @return The service.&#xD;
+ * @throws ServiceException&#xD;
+ * If service can't be started&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVP9QH12EeGOQuKePEwyrw" type="_AVPWMH12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_AVRycH12EeGOQuKePEwyrw" name="key" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVSZgH12EeGOQuKePEwyrw" name="isStarted" visibility="public">
+ <ownedComment xmi:id="_AVSZgX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Return true if the service is instantiated. Return false otherwise.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVTnoH12EeGOQuKePEwyrw" type="_AVTAkH12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_AVUOsH12EeGOQuKePEwyrw" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVU1wH12EeGOQuKePEwyrw" name="serviceState" visibility="public">
+ <ownedComment xmi:id="_AVU1wX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Return the state of the specified service.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVWD4H12EeGOQuKePEwyrw" type="_AVVc0H12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_AVWD4X12EeGOQuKePEwyrw" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVWq8H12EeGOQuKePEwyrw" name="startRegistry" visibility="public">
+ <ownedComment xmi:id="_AVXSAH12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Start the registry. Start all services marked as start = STARTUP are&#xD;
+ * started. All services are first created, then initialized and finally&#xD;
+ * started. If an error occur on a service during one of this step, the&#xD;
+ * service is removed from the registry and and the error is logged.&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVX5EH12EeGOQuKePEwyrw" name="startServices" visibility="public">
+ <ownedComment xmi:id="_AVX5EX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Same as {@link #startServices(List)}, but with an array as input.&#xD;
+ * &#xD;
+ * @see #startServices(List)&#xD;
+ * &#xD;
+ * @param serviceKeys&#xD;
+ * Keys of services to start.&#xD;
+ * @throws ServiceMultiException&#xD;
+ * @throws ServiceNotFoundException&#xD;
+ * If a service can't be retrieved by its key.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVYgIH12EeGOQuKePEwyrw" name="serviceKeys" type="_AUa20H12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AVZHMH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AVZuQH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVa8YH12EeGOQuKePEwyrw" name="startServicesByClassKeys" visibility="public">
+ <ownedComment xmi:id="_AVa8YX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Same as {@link #startServicesByClassKeys(List)}, but with an array as&#xD;
+ * input.&#xD;
+ * &#xD;
+ * @see #startServices(List)&#xD;
+ * &#xD;
+ * @param serviceKeys&#xD;
+ * Keys of services to start.&#xD;
+ * @throws ServiceMultiException&#xD;
+ * @throws ServiceNotFoundException&#xD;
+ * If a service can't be retrieved by its key.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVcKgH12EeGOQuKePEwyrw" name="serviceKeys" type="_AUd6IX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AVcKgX12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AVcxkH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVemwH12EeGOQuKePEwyrw" name="startServices" visibility="private">
+ <ownedComment xmi:id="_AVemwX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Start the specified services, and their required services. The specifies&#xD;
+ * services should be in the specified map. The map is also used to resolves&#xD;
+ * dependencies. Start all services marked as start = STARTUP . All eligible&#xD;
+ * services are first created, then initialized and finally started. If an&#xD;
+ * error occur on a service during one of this step, the service is removed&#xD;
+ * from the registry and and the error is logged.&#xD;
+ * &#xD;
+ * @param services&#xD;
+ * Services to start&#xD;
+ * @param map&#xD;
+ * a table of (key, service) used to get a service by its key.&#xD;
+ * @throws ServiceMultiException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVf04H12EeGOQuKePEwyrw" name="services" type="_AUXMcX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AVgb8H12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AVhDAH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AVhqEH12EeGOQuKePEwyrw" name="map" type="_AVd_sH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AViRIH12EeGOQuKePEwyrw" name="keysToServices" visibility="private">
+ <ownedComment xmi:id="_AViRIX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Return a list of services from a list of services keys.&#xD;
+ * &#xD;
+ * @param serviceKeys&#xD;
+ * @param map&#xD;
+ * @return&#xD;
+ * @throws ServiceNotFoundException&#xD;
+ * If a service can't be retrieved by its key.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVi4MH12EeGOQuKePEwyrw" type="_AUXMcX12EeGOQuKePEwyrw" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AVjfQH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AVkGUH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AVktYH12EeGOQuKePEwyrw" name="serviceKeys" type="_AUa20H12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AVlUcH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AVl7gH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AVmikH12EeGOQuKePEwyrw" name="map" type="_AVd_sH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVnJoH12EeGOQuKePEwyrw" name="classKeysToServices" visibility="private">
+ <ownedComment xmi:id="_AVnJoX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Return a list of services from a list of services keys.&#xD;
+ * &#xD;
+ * @param serviceKeys&#xD;
+ * @param map&#xD;
+ * @return&#xD;
+ * @throws ServiceNotFoundException&#xD;
+ * If a service can't be retrieved by its key.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVnwsH12EeGOQuKePEwyrw" type="_AUXMcX12EeGOQuKePEwyrw" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AVoXwH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AVo-0H12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AVpl4H12EeGOQuKePEwyrw" name="serviceKeys" type="_AUd6IX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AVqM8H12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AVq0AH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AVrbEH12EeGOQuKePEwyrw" name="map" type="_AVd_sH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVsCIH12EeGOQuKePEwyrw" name="showServices" visibility="private">
+ <ownedComment xmi:id="_AVsCIX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Print the services. For debug purpose&#xD;
+ * &#xD;
+ * @param roots&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVspMH12EeGOQuKePEwyrw" name="message" type="_AUa20H12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AVt3UH12EeGOQuKePEwyrw" name="roots" type="_AUXMcX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AVueYH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AVueYX12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVvFcH12EeGOQuKePEwyrw" name="checkDependencies" visibility="private">
+ <ownedComment xmi:id="_AVvsgH12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Check if all dependencies exist. Throw an error if a declared dependency&#xD;
+ * has no corresponding service.&#xD;
+ * &#xD;
+ * @param services&#xD;
+ * Services to check&#xD;
+ * @param map&#xD;
+ * Map of services by keys.&#xD;
+ * @throws ServiceMultiException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVwTkH12EeGOQuKePEwyrw" name="services" type="_AUXMcX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AVw6oH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AVw6oX12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AVxhsH12EeGOQuKePEwyrw" name="map" type="_AVd_sH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AVyIwH12EeGOQuKePEwyrw" name="retainsToStartServices" visibility="private">
+ <ownedComment xmi:id="_AVyv0H12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Retains only the services that should be started. Retains only services&#xD;
+ * with startupkind = START and state == REGISTERED&#xD;
+ * &#xD;
+ * @param services&#xD;
+ * Collection to filter&#xD;
+ * @return a new Collection containing the services to start.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AVzW4H12EeGOQuKePEwyrw" type="_AUXMcX12EeGOQuKePEwyrw" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AVzW4X12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AVz98H12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AV0lAH12EeGOQuKePEwyrw" name="services" type="_AUXMcX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AV1MEH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AV1zIH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AV2aMH12EeGOQuKePEwyrw" name="checkCycle" visibility="private">
+ <ownedComment xmi:id="_AV2aMX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Check for cycles. Throws an exception if a cycle is discovered. Each root&#xD;
+ * is checked to see if it contains a cycle.&#xD;
+ * &#xD;
+ * @param roots&#xD;
+ * @param map&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AV3BQH12EeGOQuKePEwyrw" name="roots" type="_AUXMcX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AV3oUH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AV4PYH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AV42cH12EeGOQuKePEwyrw" name="map" type="_AVd_sH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AV5dgH12EeGOQuKePEwyrw" name="buildTopologicalListOfServicesToStart" visibility="private">
+ <ownedComment xmi:id="_AV6EkH12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Build a list of services to start, in the topological order (right&#xD;
+ * order). The required services are placed before the dependent services in&#xD;
+ * the list. Services already started are disguarded.&#xD;
+ * &#xD;
+ * @param roots&#xD;
+ * @param map&#xD;
+ * Map used to resolve the entry by their key.&#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AV6roH12EeGOQuKePEwyrw" type="_AUXMcX12EeGOQuKePEwyrw" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AV6roX12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AV7SsH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AV75wH12EeGOQuKePEwyrw" name="roots" type="_AUXMcX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AV8g0H12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AV9H4H12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AV9u8H12EeGOQuKePEwyrw" name="map" type="_AVd_sH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AV-WAH12EeGOQuKePEwyrw" name="walkGraphDepthFirst" visibility="private">
+ <ownedComment xmi:id="_AV-9EH12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Add recursively the provided node, and then its direct children.&#xD;
+ * &#xD;
+ * @param result&#xD;
+ * The list where the node are added&#xD;
+ * @param node&#xD;
+ * The node to add&#xD;
+ * @param map&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AV_kIH12EeGOQuKePEwyrw" name="result" type="_AUXMcX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AWALMH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AWAyQH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AWBZUH12EeGOQuKePEwyrw" name="node" type="_AUXMcX12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_AWCAYH12EeGOQuKePEwyrw" name="map" type="_AVd_sH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AWCncH12EeGOQuKePEwyrw" name="getServiceRoots" visibility="private">
+ <ownedComment xmi:id="_AWCncX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Create a List of the root services. The roots are services that are not&#xD;
+ * required by any service.&#xD;
+ * &#xD;
+ * @param addedServices&#xD;
+ * A collection from which roots are required. The collection is&#xD;
+ * unmodified.&#xD;
+ * @param map&#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AWDOgH12EeGOQuKePEwyrw" type="_AUXMcX12EeGOQuKePEwyrw" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AWD1kH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AWEcoH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AWFDsH12EeGOQuKePEwyrw" name="addedServices" type="_AUXMcX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AWFDsX12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AWFqwH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AWGR0H12EeGOQuKePEwyrw" name="keyServiceMap" type="_AVd_sH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AWG44H12EeGOQuKePEwyrw" name="disposeRegistry" visibility="public">
+ <ownedComment xmi:id="_AWG44X12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Dispose all services.&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AWIHAH12EeGOQuKePEwyrw" name="createServices" visibility="private">
+ <ownedComment xmi:id="_AWIuEH12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Create all services provided in the list&#xD;
+ * &#xD;
+ * @param toStart&#xD;
+ * List of services to create.&#xD;
+ * @param errors&#xD;
+ * Exception to collect errors.&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ * If an error occure during the creation&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AWJVIH12EeGOQuKePEwyrw" name="toStart" type="_AUXMcX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AWJVIX12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AWJ8MH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AWKjQH12EeGOQuKePEwyrw" name="errors" type="_AWHf8H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AWLKUH12EeGOQuKePEwyrw" name="registerServices" visibility="private">
+ <ownedComment xmi:id="_AWLKUX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Register all services provided in the list. After this operation,&#xD;
+ * services are available thru {@link #getService(Class)}.&#xD;
+ * &#xD;
+ * @param toStart&#xD;
+ * List of services to register.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AWMYcH12EeGOQuKePEwyrw" name="toStart" type="_AUXMcX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AWM_gH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AWM_gX12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AWONoH12EeGOQuKePEwyrw" name="initServices" visibility="private">
+ <ownedComment xmi:id="_AWONoX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Init all services provided in the list&#xD;
+ * &#xD;
+ * @param toStart&#xD;
+ * List of services to init.&#xD;
+ * @param errors&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ * If an error occure during the process&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AWO0sH12EeGOQuKePEwyrw" name="toStart" type="_AUXMcX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AWPbwH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AWQC0H12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AWQp4H12EeGOQuKePEwyrw" name="errors" type="_AWHf8H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AWR4AH12EeGOQuKePEwyrw" name="startServices" visibility="private">
+ <ownedComment xmi:id="_AWR4AX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Init all services provided in the list&#xD;
+ * &#xD;
+ * @param toStart&#xD;
+ * List of services to init.&#xD;
+ * @param errors&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ * If an error occure during the process&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AWSfEH12EeGOQuKePEwyrw" name="toStart" type="_AUXMcX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AWTGIH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AWTtMH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AWUUQH12EeGOQuKePEwyrw" name="errors" type="_AWHf8H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AWU7UH12EeGOQuKePEwyrw" name="disposeServices" visibility="private">
+ <ownedComment xmi:id="_AWU7UX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Dispose all started services.&#xD;
+ * Services are disposed in creation reverse order&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AWViYH12EeGOQuKePEwyrw" name="services" type="_AUXMcX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_AWWJcH12EeGOQuKePEwyrw"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_AWWwgH12EeGOQuKePEwyrw" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_AWXXkH12EeGOQuKePEwyrw" name="errors" type="_AWHf8H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_AVd_sH12EeGOQuKePEwyrw" name="LookupMap" visibility="private">
+ <ownedComment xmi:id="_AWZMwH12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * This class represents a union of two maps of &lt;String,&#xD;
+ * ServiceStartupEntry>. It provide specific methods to retrieve a {@link ServiceStartupEntry} by its key.&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedAttribute xmi:id="_AWZz0H12EeGOQuKePEwyrw" name="map1" type="_AUUwMX12EeGOQuKePEwyrw" isUnique="false"/>
+ <ownedAttribute xmi:id="_AWbB8H12EeGOQuKePEwyrw" name="map2" type="_AUUwMX12EeGOQuKePEwyrw" isUnique="false"/>
+ <ownedOperation xmi:id="_AWbpAH12EeGOQuKePEwyrw" name="get" visibility="public">
+ <ownedComment xmi:id="_AWbpAX12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Get a service by its key.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * @return the service or null if not found.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AWcQEH12EeGOQuKePEwyrw" type="_AUXMcX12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_AWc3IH12EeGOQuKePEwyrw" name="key" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_AWdeMH12EeGOQuKePEwyrw" name="getChecked" visibility="public">
+ <ownedComment xmi:id="_AWeFQH12EeGOQuKePEwyrw">
+ <body>&#xD;
+ * Get a service by its key.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * @return The requested service.&#xD;
+ * @throws ServiceNotFoundException&#xD;
+ * if the service can't be found.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_AWesUH12EeGOQuKePEwyrw" type="_AUXMcX12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_AWfTYH12EeGOQuKePEwyrw" name="key" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ </nestedClassifier>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_AUXMcH12EeGOQuKePEwyrw" name="internal">
+ <ownedComment xmi:id="_kk6mEI7dEeGR4_nY7YyRrQ">
+ <body>Not used</body>
+ </ownedComment>
+ <packagedElement xmi:type="uml:Class" xmi:id="_AUXMcX12EeGOQuKePEwyrw" name="ServiceStartupEntry" isAbstract="true">
+ <ownedComment xmi:id="_wLjEUI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Base class for the different types of service startups (lazy, synchronized).&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedAttribute xmi:id="_wLkScI4UEeGjLtNqkbcdmg" name="serviceEntry" visibility="protected" type="_wIeiMI4UEeGjLtNqkbcdmg" isUnique="false" aggregation="composite" association="_NPvMQI4VEeGjLtNqkbcdmg">
+ <ownedComment xmi:id="_wLlgkI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * The ServiceEntry, according to its type.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_wLmusI4UEeGjLtNqkbcdmg" name="requiredServices" visibility="protected" type="_AUXMcX12EeGOQuKePEwyrw" isUnique="false" aggregation="composite" association="_PErUoI4VEeGjLtNqkbcdmg">
+ <ownedComment xmi:id="_wLn80I4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Entries of Services required by this service.&#xD;
+ </body>
+ </ownedComment>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_wLoj4I4UEeGjLtNqkbcdmg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_wLpyAI4UEeGjLtNqkbcdmg" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_wLqZEI4UEeGjLtNqkbcdmg" name="createService" visibility="public" isAbstract="true">
+ <ownedComment xmi:id="_wLrAII4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Create the associated service if not a Lazy Service.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wLsOQI4UEeGjLtNqkbcdmg" name="initService" visibility="public" isAbstract="true">
+ <ownedComment xmi:id="_wLsOQY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Init the associated service if not a Lazy Service.&#xD;
+ * &#xD;
+ * @param servicesRegistry&#xD;
+ * The servicesRegistry containing this service.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wLtcYI4UEeGjLtNqkbcdmg" name="servicesRegistry" type="_4OeqcH11EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wLuqgI4UEeGjLtNqkbcdmg" name="startService" visibility="public" isAbstract="true">
+ <ownedComment xmi:id="_wLuqgY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Start the associated service if not a Lazy Service.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wLv4oI4UEeGjLtNqkbcdmg" name="getServiceInstance" visibility="public" isAbstract="true">
+ <ownedComment xmi:id="_wLv4oY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Get the service instance.&#xD;
+ * &#xD;
+ * @return&#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wLxGwI4UEeGjLtNqkbcdmg" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wLyU4I4UEeGjLtNqkbcdmg" name="disposeService" visibility="public" isAbstract="true">
+ <ownedComment xmi:id="_wLyU4Y4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Dispose associated service.&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wLzjAI4UEeGjLtNqkbcdmg" name="getRequiredServices" visibility="public">
+ <ownedComment xmi:id="_wL0KEI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Return the list of the {@link ServiceStartupEntry} required by this&#xD;
+ * service.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wL0xII4UEeGjLtNqkbcdmg" type="_AUXMcX12EeGOQuKePEwyrw" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_wL1_QI4UEeGjLtNqkbcdmg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_wL2mUI4UEeGjLtNqkbcdmg" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wL30cI4UEeGjLtNqkbcdmg" name="getDescriptor" visibility="public">
+ <ownedComment xmi:id="_wL30cY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Get {@link ServiceDescriptor} associated to this entry.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wL4bgI4UEeGjLtNqkbcdmg" type="_AUZBoX12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wL5poI4UEeGjLtNqkbcdmg" name="getState" visibility="public">
+ <ownedComment xmi:id="_wL5poY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @return the state of the service&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wL6QsI4UEeGjLtNqkbcdmg" type="_AVVc0H12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wL63wI4UEeGjLtNqkbcdmg" name="isStarted" visibility="public">
+ <ownedComment xmi:id="_wL7e0I4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Return true if the service is started. Return false otherwise.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wL8F4I4UEeGjLtNqkbcdmg" type="_AVTAkH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wL9UAI4UEeGjLtNqkbcdmg" name="toString" visibility="public">
+ <ownedComment xmi:id="_wL9UAY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * &#xD;
+ * @see java.lang.Object#toString()&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wL97EI4UEeGjLtNqkbcdmg" type="_AUa20H12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_wIctAI4UEeGjLtNqkbcdmg" name="ErrorServiceTypeEntry">
+ <ownedComment xmi:id="_wIdUEI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * A service entry used for faulty services. In this implementation, methods do&#xD;
+ * nothings or throw an error.&#xD;
+ * &#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <generalization xmi:id="_wIfJQI4UEeGjLtNqkbcdmg" general="_wIeiMI4UEeGjLtNqkbcdmg"/>
+ <ownedAttribute xmi:id="_wIkBwI4UEeGjLtNqkbcdmg" name="descriptor" visibility="private" type="_AUZBoX12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_wIlP4I4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * The original service descriptor.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_wImeAI4UEeGjLtNqkbcdmg" name="getServiceInstance" visibility="public">
+ <ownedComment xmi:id="_wInFEI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * &#xD;
+ * @see org.eclipse.papyrus.infra.core.services.internal.ServiceTypeEntry#getServiceInstance()&#xD;
+ * &#xD;
+ * @return&#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wIphUI4UEeGjLtNqkbcdmg" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wIqvcI4UEeGjLtNqkbcdmg" name="createService" visibility="public">
+ <ownedComment xmi:id="_wIqvcY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * &#xD;
+ * @see org.eclipse.papyrus.infra.core.services.internal.ServiceTypeEntry#createService()&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wIskoI4UEeGjLtNqkbcdmg" name="initService" visibility="public">
+ <ownedComment xmi:id="_wIskoY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * &#xD;
+ * @see org.eclipse.papyrus.infra.core.services.internal.ServiceTypeEntry#initService(ServicesRegistry)&#xD;
+ * &#xD;
+ * @param servicesRegistry&#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wItywI4UEeGjLtNqkbcdmg" name="servicesRegistry" type="_4OeqcH11EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wIuZ0I4UEeGjLtNqkbcdmg" name="startService" visibility="public">
+ <ownedComment xmi:id="_wIuZ0Y4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * &#xD;
+ * @see org.eclipse.papyrus.infra.core.services.internal.ServiceTypeEntry#startService()&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wIvn8I4UEeGjLtNqkbcdmg" name="disposeService" visibility="public">
+ <ownedComment xmi:id="_wIvn8Y4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * &#xD;
+ * @see org.eclipse.papyrus.infra.core.services.internal.ServiceTypeEntry#disposeService()&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_wIeiMI4UEeGjLtNqkbcdmg" name="ServiceTypeEntry" isAbstract="true">
+ <ownedComment xmi:id="_wMFP0I4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Base class for the different types of service entries (PoJo, Service,&#xD;
+ * ServiceFactory, ...).&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ </body>
+ </ownedComment>
+ <ownedAttribute xmi:id="_wMGd8I4UEeGjLtNqkbcdmg" name="state" visibility="protected" type="_AVVc0H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_wMHsEI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Current state of the service.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_wMITII4UEeGjLtNqkbcdmg" name="serviceDescriptor" visibility="protected" type="_AUZBoX12EeGOQuKePEwyrw" isUnique="false" aggregation="composite" association="_G8H5II4VEeGjLtNqkbcdmg">
+ <ownedComment xmi:id="_wMJhQI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Descriptor of the service associated to this entry.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_wMKvYI4UEeGjLtNqkbcdmg" name="setState" visibility="protected">
+ <ownedComment xmi:id="_wMKvYY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Change the state of the service.&#xD;
+ * &#xD;
+ * @param newState&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wML9gI4UEeGjLtNqkbcdmg" name="newState" type="_AVVc0H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wMNysI4UEeGjLtNqkbcdmg" name="getState" visibility="public">
+ <ownedComment xmi:id="_wMNysY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @return the state&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wMOZwI4UEeGjLtNqkbcdmg" type="_AVVc0H12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wMPn4I4UEeGjLtNqkbcdmg" name="checkState" visibility="protected">
+ <ownedComment xmi:id="_wMPn4Y4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Check if the current state is the proposed state. Throws an exception if&#xD;
+ * the state is different.&#xD;
+ * &#xD;
+ * @param expectedState&#xD;
+ * @throws BadStateException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wMQO8I4UEeGjLtNqkbcdmg" name="expectedState" type="_AVVc0H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wMRdEI4UEeGjLtNqkbcdmg" name="getDescriptor" visibility="public">
+ <ownedComment xmi:id="_wMRdEY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Get the descriptor of the service associated to this entry.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wMSrMI4UEeGjLtNqkbcdmg" type="_AUZBoX12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wMTSQI4UEeGjLtNqkbcdmg" name="instanciateService" visibility="protected">
+ <ownedComment xmi:id="_wMTSQY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Instanciate the service as specified in serviceClassname.&#xD;
+ * &#xD;
+ * @return the created service.&#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wMVHcI4UEeGjLtNqkbcdmg" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wMWVkI4UEeGjLtNqkbcdmg" name="loadClass" visibility="private">
+ <ownedComment xmi:id="_wMWVkY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Load the Class object. Try from current ClassLoader, then try using the&#xD;
+ * plugin referenced in the serviceDescriptor.PluginId&#xD;
+ * &#xD;
+ * @return&#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wMth8I4UEeGjLtNqkbcdmg" type="_AUd6IX12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wMuwEI4UEeGjLtNqkbcdmg" name="isStarted" visibility="public">
+ <ownedComment xmi:id="_wMuwEY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Return true if the service is started. Return false otherwise.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wMvXII4UEeGjLtNqkbcdmg" type="_AVTAkH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wMwlQI4UEeGjLtNqkbcdmg" name="getServiceInstance" visibility="public" isAbstract="true">
+ <ownedComment xmi:id="_wMwlQY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Get the service instance.&#xD;
+ * &#xD;
+ * @return&#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wMxzYI4UEeGjLtNqkbcdmg" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wMyacI4UEeGjLtNqkbcdmg" name="createService" visibility="public" isAbstract="true">
+ <ownedComment xmi:id="_wMzBgI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Create the associated service if not a Lazy Service.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wM0PoI4UEeGjLtNqkbcdmg" name="initService" visibility="public" isAbstract="true">
+ <ownedComment xmi:id="_wM0PoY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Start the associated service if not a Lazy Service.&#xD;
+ * &#xD;
+ * @param servicesRegistry&#xD;
+ * The servicesRegistry containing this service.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wM1dwI4UEeGjLtNqkbcdmg" name="servicesRegistry" type="_4OeqcH11EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wM2r4I4UEeGjLtNqkbcdmg" name="startService" visibility="public" isAbstract="true">
+ <ownedComment xmi:id="_wM2r4Y4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Start the associated service if not a Lazy Service.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wM36AI4UEeGjLtNqkbcdmg" name="disposeService" visibility="public" isAbstract="true">
+ <ownedComment xmi:id="_wM36AY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Dispose associated service.&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_wI5Y8I4UEeGjLtNqkbcdmg" name="LazyStartupEntry">
+ <ownedComment xmi:id="_wI6AAI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * An ServiceEntry managing {@link IService} registered as lazy start.&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <generalization xmi:id="_wI6nEI4UEeGjLtNqkbcdmg" general="_AUXMcX12EeGOQuKePEwyrw"/>
+ <ownedAttribute xmi:id="_wI71MI4UEeGjLtNqkbcdmg" name="registry" visibility="protected" type="_4OeqcH11EeGOQuKePEwyrw" isUnique="false"/>
+ <ownedOperation xmi:id="_wI9qYI4UEeGjLtNqkbcdmg" name="getServiceInstance" visibility="public">
+ <ownedComment xmi:id="_wI9qYY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * &#xD;
+ * @see org.eclipse.papyrus.infra.core.services.internal.ServiceStartupEntry#getServiceInstance()&#xD;
+ * &#xD;
+ * @return&#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wI-4gI4UEeGjLtNqkbcdmg" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wJAGoI4UEeGjLtNqkbcdmg" name="createService" visibility="public">
+ <ownedComment xmi:id="_wJAGoY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Do nothing&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wJAtsI4UEeGjLtNqkbcdmg" name="initService" visibility="public">
+ <ownedComment xmi:id="_wJBUwI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Do nothing&#xD;
+ * &#xD;
+ * @param servicesRegistry&#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wJVd0I4UEeGjLtNqkbcdmg" name="servicesRegistry" type="_4OeqcH11EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wJWr8I4UEeGjLtNqkbcdmg" name="startService" visibility="public">
+ <ownedComment xmi:id="_wJWr8Y4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Do nothing.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wJXTAI4UEeGjLtNqkbcdmg" name="disposeService" visibility="public">
+ <ownedComment xmi:id="_wJXTAY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @see org.eclipse.papyrus.infra.core.services.AbstractServiceEntry#disposeService()&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_wJgc8I4UEeGjLtNqkbcdmg" name="PojoServiceEntry">
+ <ownedComment xmi:id="_wJhEAI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Entry for a service provided as POJO.&#xD;
+ * &#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ </body>
+ </ownedComment>
+ <generalization xmi:id="_wJhEAY4UEeGjLtNqkbcdmg" general="_wIeiMI4UEeGjLtNqkbcdmg"/>
+ <ownedAttribute xmi:id="_wJiSII4UEeGjLtNqkbcdmg" name="serviceInstance" visibility="private" type="_AUoSMH12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_wJi5MI4UEeGjLtNqkbcdmg">
+ <body> Instance of the service, if started. </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_wJjgQI4UEeGjLtNqkbcdmg" name="getServiceInstance" visibility="public">
+ <ownedComment xmi:id="_wJkHUI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Get the service instance.&#xD;
+ * &#xD;
+ * @return&#xD;
+ * @throws ServiceException&#xD;
+ * If service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wJkuYI4UEeGjLtNqkbcdmg" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wJlVcI4UEeGjLtNqkbcdmg" name="createService" visibility="public">
+ <ownedComment xmi:id="_wJlVcY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Already created : do nothing.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wJmjkI4UEeGjLtNqkbcdmg" name="initService" visibility="public">
+ <ownedComment xmi:id="_wJmjkY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Pojo : can't initialize the service. Do nothing.&#xD;
+ * &#xD;
+ * @param servicesRegistry&#xD;
+ * The servicesRegistry containing this service.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wJnKoI4UEeGjLtNqkbcdmg" name="servicesRegistry" type="_4OeqcH11EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wJnxsI4UEeGjLtNqkbcdmg" name="startService" visibility="public">
+ <ownedComment xmi:id="_wJoYwI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Already started : do nothing.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wJo_0I4UEeGjLtNqkbcdmg" name="disposeService" visibility="public">
+ <ownedComment xmi:id="_wJo_0Y4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Do nothing.&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_wKAMMI4UEeGjLtNqkbcdmg" name="ServiceEntry">
+ <ownedComment xmi:id="_wKAzQI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Entry of a Service implementing {@link IService}. This class provide methods&#xD;
+ * to manage the Service life cycle.&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <generalization xmi:id="_wKBaUI4UEeGjLtNqkbcdmg" general="_wIeiMI4UEeGjLtNqkbcdmg"/>
+ <ownedAttribute xmi:id="_wKCocI4UEeGjLtNqkbcdmg" name="serviceInstance" visibility="private" type="_4OZx8H11EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_wKDPgI4UEeGjLtNqkbcdmg">
+ <body> Instance of the service, if started. </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_wKEdoI4UEeGjLtNqkbcdmg" name="getServiceInstance" visibility="public">
+ <ownedComment xmi:id="_wKEdoY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Get the service instance, even if it is not started. The service should&#xD;
+ * be created.&#xD;
+ * &#xD;
+ * @return&#xD;
+ * @throws ServiceException&#xD;
+ * If service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wKFEsI4UEeGjLtNqkbcdmg" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wKFrwI4UEeGjLtNqkbcdmg" name="toString" visibility="public">
+ <ownedComment xmi:id="_wKGS0I4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @see java.lang.Object#toString()&#xD;
+ * @return&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wKG54I4UEeGjLtNqkbcdmg" type="_AUa20H12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wKHg8I4UEeGjLtNqkbcdmg" name="createService" visibility="public">
+ <ownedComment xmi:id="_wKHg8Y4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Create the associated service if not a Lazy Service.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wKIIAI4UEeGjLtNqkbcdmg" name="initService" visibility="public">
+ <ownedComment xmi:id="_wKIIAY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Start the associated service if not a Lazy Service.&#xD;
+ * &#xD;
+ * @param servicesRegistry&#xD;
+ * The servicesRegistry containing this service.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wKJWII4UEeGjLtNqkbcdmg" name="servicesRegistry" type="_4OeqcH11EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wKJ9MI4UEeGjLtNqkbcdmg" name="startService" visibility="public">
+ <ownedComment xmi:id="_wKJ9MY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Start the associated service if not a Lazy Service.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wKKkQI4UEeGjLtNqkbcdmg" name="disposeService" visibility="public">
+ <ownedComment xmi:id="_wKLLUI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Dispose the service.&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_wKTHII4UEeGjLtNqkbcdmg" name="ServiceFactoryEntry">
+ <ownedComment xmi:id="_wKTuMI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Entry of a Service implementing {@link IServiceFactory}. This class provide&#xD;
+ * methods to manage the Service life cycle.&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <generalization xmi:id="_wKUVQI4UEeGjLtNqkbcdmg" general="_wIeiMI4UEeGjLtNqkbcdmg"/>
+ <ownedAttribute xmi:id="_wKU8UI4UEeGjLtNqkbcdmg" name="serviceInstance" visibility="private" type="_AUoSMH12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_wKWKcI4UEeGjLtNqkbcdmg">
+ <body> Instance of the service, if started. </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_wKX_oI4UEeGjLtNqkbcdmg" name="factoryInstance" visibility="private" type="_wKXYkI4UEeGjLtNqkbcdmg" isUnique="false">
+ <ownedComment xmi:id="_wKZNwI4UEeGjLtNqkbcdmg">
+ <body> Instance of the factory, if created. </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_wKZ00I4UEeGjLtNqkbcdmg" name="getServiceInstance" visibility="public">
+ <ownedComment xmi:id="_wKZ00Y4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Get the service instance, even if it is not started. The service should&#xD;
+ * be created.&#xD;
+ * &#xD;
+ * @return&#xD;
+ * @throws ServiceException&#xD;
+ * If service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wKab4I4UEeGjLtNqkbcdmg" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wKbqAI4UEeGjLtNqkbcdmg" name="toString" visibility="public">
+ <ownedComment xmi:id="_wKbqAY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @see java.lang.Object#toString()&#xD;
+ * @return&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wKcREI4UEeGjLtNqkbcdmg" type="_AUa20H12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wKc4II4UEeGjLtNqkbcdmg" name="createService" visibility="public">
+ <ownedComment xmi:id="_wKc4IY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Create the associated service if not a Lazy Service.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wKeGQI4UEeGjLtNqkbcdmg" name="initService" visibility="public">
+ <ownedComment xmi:id="_wKeGQY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Start the associated service if not a Lazy Service.&#xD;
+ * &#xD;
+ * @param servicesRegistry&#xD;
+ * The servicesRegistry containing this service.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wKetUI4UEeGjLtNqkbcdmg" name="servicesRegistry" type="_4OeqcH11EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wKf7cI4UEeGjLtNqkbcdmg" name="startService" visibility="public">
+ <ownedComment xmi:id="_wKf7cY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Start the associated service if not a Lazy Service.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wKiXsI4UEeGjLtNqkbcdmg" name="disposeService" visibility="public">
+ <ownedComment xmi:id="_wKiXsY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Dispose the service.&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_wM8LcI4UEeGjLtNqkbcdmg" name="StartStartupEntry">
+ <ownedComment xmi:id="_wM9ZkI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * An ServiceEntry managing {@link IService} that should be started when the&#xD;
+ * registry is started.&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <generalization xmi:id="_wM9ZkY4UEeGjLtNqkbcdmg" general="_AUXMcX12EeGOQuKePEwyrw"/>
+ <ownedOperation xmi:id="_wM-nsI4UEeGjLtNqkbcdmg" name="getServiceInstance" visibility="public">
+ <ownedComment xmi:id="_wM-nsY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * &#xD;
+ * @see org.eclipse.papyrus.infra.core.services.internal.ServiceStartupEntry#getServiceInstance()&#xD;
+ * &#xD;
+ * @return&#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wM_10I4UEeGjLtNqkbcdmg" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wNAc4I4UEeGjLtNqkbcdmg" name="createService" visibility="public">
+ <ownedComment xmi:id="_wNAc4Y4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Do nothing&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wNBrAI4UEeGjLtNqkbcdmg" name="initService" visibility="public">
+ <ownedComment xmi:id="_wNCSEI4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Do nothing&#xD;
+ * &#xD;
+ * @param servicesRegistry&#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_wNC5II4UEeGjLtNqkbcdmg" name="servicesRegistry" type="_4OeqcH11EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wNEHQI4UEeGjLtNqkbcdmg" name="startService" visibility="public">
+ <ownedComment xmi:id="_wNEHQY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Do nothing.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_wNEuUI4UEeGjLtNqkbcdmg" name="disposeService" visibility="public">
+ <ownedComment xmi:id="_wNEuUY4UEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @see org.eclipse.papyrus.infra.core.services.AbstractServiceEntry#disposeService()&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_G8H5II4VEeGjLtNqkbcdmg" name="A_serviceDescriptor_serviceTypeEntry" memberEnd="_wMITII4UEeGjLtNqkbcdmg _G8LjgI4VEeGjLtNqkbcdmg">
+ <ownedEnd xmi:id="_G8LjgI4VEeGjLtNqkbcdmg" name="serviceTypeEntry" type="_wIeiMI4UEeGjLtNqkbcdmg" association="_G8H5II4VEeGjLtNqkbcdmg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_G8MxoI4VEeGjLtNqkbcdmg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_G8NYsI4VEeGjLtNqkbcdmg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_NPvMQI4VEeGjLtNqkbcdmg" name="A_serviceEntry_serviceStartupEntry" memberEnd="_wLkScI4UEeGjLtNqkbcdmg _NPyPkI4VEeGjLtNqkbcdmg">
+ <ownedEnd xmi:id="_NPyPkI4VEeGjLtNqkbcdmg" name="serviceStartupEntry" type="_AUXMcX12EeGOQuKePEwyrw" association="_NPvMQI4VEeGjLtNqkbcdmg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_NPzdsI4VEeGjLtNqkbcdmg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_NP1S4I4VEeGjLtNqkbcdmg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_PErUoI4VEeGjLtNqkbcdmg" name="A_requiredServices_serviceStartupEntry" memberEnd="_wLmusI4UEeGjLtNqkbcdmg _PEuX8I4VEeGjLtNqkbcdmg">
+ <ownedEnd xmi:id="_PEuX8I4VEeGjLtNqkbcdmg" name="serviceStartupEntry" type="_AUXMcX12EeGOQuKePEwyrw" association="_PErUoI4VEeGjLtNqkbcdmg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PEwNII4VEeGjLtNqkbcdmg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_PExbQI4VEeGjLtNqkbcdmg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_AUZBoX12EeGOQuKePEwyrw" name="ServiceDescriptor">
+ <ownedComment xmi:id="_tBqs0I4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Descriptor of a service. This descriptor describe a service.&#xD;
+ * &#xD;
+ * @author cedirc dumoulin&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedAttribute xmi:id="_tBr68I4VEeGjLtNqkbcdmg" name="serviceClassname" visibility="private" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_tBtJEI4VEeGjLtNqkbcdmg">
+ <body> Classname of the service. USed to start the service </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_tBuXMI4VEeGjLtNqkbcdmg" name="serviceStartKind" visibility="private" type="_AUg9cH12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_tBu-QI4VEeGjLtNqkbcdmg">
+ <body> Kind of start for this service </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_tBwzcI4VEeGjLtNqkbcdmg" name="serviceTypeKind" visibility="private" type="_tBwMYI4VEeGjLtNqkbcdmg" isUnique="false">
+ <ownedComment xmi:id="_tBxagI4VEeGjLtNqkbcdmg">
+ <body> Kind of service </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_tByooI4VEeGjLtNqkbcdmg" name="priority" visibility="private" type="_AUbd4X12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_tBzPsI4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Service priority. If two service are registered under the same key, only&#xD;
+ * the one with the higher priority is started.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_tB0d0I4VEeGjLtNqkbcdmg" name="key" visibility="private" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_tB1E4I4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Key used to register the service.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_tB2TAI4VEeGjLtNqkbcdmg" name="classBundleID" visibility="private" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_tB26EI4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Id of the bundle owning the .class that is referenced by&#xD;
+ * serviceClassname. Requested when instanciating the class.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_tB4IMI4VEeGjLtNqkbcdmg" name="isAnonymous" visibility="private" type="_AVTAkH12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_tB4vQI4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * If set to true, the service is anonymous : it is not registered and can't&#xD;
+ * be retrieved with getService().&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_tB59YI4VEeGjLtNqkbcdmg" name="requiredServices" visibility="private" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_tB7LgI4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * List of keys of Services required by this service.&#xD;
+ </body>
+ </ownedComment>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_tB7ykI4VEeGjLtNqkbcdmg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_tB8ZoI4VEeGjLtNqkbcdmg" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_tB9AsI4VEeGjLtNqkbcdmg" name="EMPTY_LIST_STRING" visibility="private" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_tB-O0I4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Empty list.&#xD;
+ </body>
+ </ownedComment>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_tB_c8I4VEeGjLtNqkbcdmg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_tCAEAI4VEeGjLtNqkbcdmg" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_tCArEI4VEeGjLtNqkbcdmg" name="getServiceStartKind" visibility="public">
+ <ownedComment xmi:id="_tCArEY4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @return the serviceStartKind&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCBSII4VEeGjLtNqkbcdmg" type="_AUg9cH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_tCCgQI4VEeGjLtNqkbcdmg" name="isStartAtStartup" visibility="public">
+ <ownedComment xmi:id="_tCCgQY4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Return true if StartKind is 'always'.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCDHUI4VEeGjLtNqkbcdmg" type="_AVTAkH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_tCDuYI4VEeGjLtNqkbcdmg" name="getPriority" visibility="public">
+ <ownedComment xmi:id="_tCEVcI4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @return the priority&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCE8gI4VEeGjLtNqkbcdmg" type="_AUbd4X12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_tCFjkI4VEeGjLtNqkbcdmg" name="getKey" visibility="public">
+ <ownedComment xmi:id="_tCGKoI4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @return the key&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCGxsI4VEeGjLtNqkbcdmg" type="_AUa20H12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_tCHYwI4VEeGjLtNqkbcdmg" name="getServiceClassname" visibility="public">
+ <ownedComment xmi:id="_tCHYwY4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @return the serviceClassname&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCH_0I4VEeGjLtNqkbcdmg" type="_AUa20H12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_tCJN8I4VEeGjLtNqkbcdmg" name="getClassBundleID" visibility="public">
+ <ownedComment xmi:id="_tCJN8Y4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @return the classBundleID&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCJ1AI4VEeGjLtNqkbcdmg" type="_AUa20H12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_tCKcEI4VEeGjLtNqkbcdmg" name="setClassBundleID" visibility="public">
+ <ownedComment xmi:id="_tCLDII4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @param classBundleId&#xD;
+ * the classBundleID to set&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCLqMI4VEeGjLtNqkbcdmg" name="classBundleId" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_tCMRQI4VEeGjLtNqkbcdmg" name="getRequiredServiceKeys" visibility="public">
+ <ownedComment xmi:id="_tCM4UI4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * Get the keys of all the required services&#xD;
+ * &#xD;
+ * @return the requiredServices&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCNfYI4VEeGjLtNqkbcdmg" type="_AUa20H12EeGOQuKePEwyrw" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_tCOGcI4VEeGjLtNqkbcdmg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_tCPUkI4VEeGjLtNqkbcdmg" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_tCP7oI4VEeGjLtNqkbcdmg" name="setRequiredServiceKeys" visibility="public">
+ <ownedComment xmi:id="_tCP7oY4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @param requiredServices&#xD;
+ * the requiredServices to set&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCRJwI4VEeGjLtNqkbcdmg" name="requiredServices" type="_AUa20H12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_tCRw0I4VEeGjLtNqkbcdmg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_tCS-8I4VEeGjLtNqkbcdmg" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_tCTmAI4VEeGjLtNqkbcdmg" name="toString" visibility="public">
+ <ownedComment xmi:id="_tCTmAY4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @see java.lang.Object#toString()&#xD;
+ * @return&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCUNEI4VEeGjLtNqkbcdmg" type="_AUa20H12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_tCVbMI4VEeGjLtNqkbcdmg" name="isAnonymous" visibility="public">
+ <ownedComment xmi:id="_tCVbMY4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @return the isAnonymous&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCWCQI4VEeGjLtNqkbcdmg" type="_AVTAkH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_tCXQYI4VEeGjLtNqkbcdmg" name="setAnonymous" visibility="public">
+ <ownedComment xmi:id="_tCXQYY4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @param isAnonymous&#xD;
+ * the isAnonymous to set&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCYegI4VEeGjLtNqkbcdmg" name="isAnonymous" type="_AVTAkH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_tCZFkI4VEeGjLtNqkbcdmg" name="getServiceTypeKind" visibility="public">
+ <ownedComment xmi:id="_tCZFkY4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @return the serviceTypeKind&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCZsoI4VEeGjLtNqkbcdmg" type="_tBwMYI4VEeGjLtNqkbcdmg" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_tCa6wI4VEeGjLtNqkbcdmg" name="setServiceTypeKind" visibility="public">
+ <ownedComment xmi:id="_tCa6wY4VEeGjLtNqkbcdmg">
+ <body>&#xD;
+ * @param serviceTypeKind&#xD;
+ * the serviceTypeKind to set&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_tCbh0I4VEeGjLtNqkbcdmg" name="serviceTypeKind" type="_tBwMYI4VEeGjLtNqkbcdmg"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_AUg9cH12EeGOQuKePEwyrw" name="ServiceStartKind"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_AVPWMH12EeGOQuKePEwyrw" name="S"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_AVVc0H12EeGOQuKePEwyrw" name="ServiceState"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_AWHf8H12EeGOQuKePEwyrw" name="ServiceMultiException"/>
+ <packagedElement xmi:type="uml:Interface" xmi:id="_wKXYkI4UEeGjLtNqkbcdmg" name="IServiceFactory"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_tBwMYI4VEeGjLtNqkbcdmg" name="ServiceTypeKind"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_rqUq4L-jEeGnLN6u0QNctQ" name="serviceregistry">
+ <packagedElement xmi:type="uml:Class" xmi:id="_rqaxgL-jEeGnLN6u0QNctQ" name="DescriptorsCache">
+ <ownedComment xmi:id="_rqbYkL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * A cache used to query the {@link IDeclaredDescriptorsProvider}. The cache return resolved descriptors, &#xD;
+ * in the form of instance of the ServiceDescriptors model.&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ *&#xD;
+ </body>
+ </ownedComment>
+ <ownedAttribute xmi:id="_rqhfML-jEeGnLN6u0QNctQ" name="descriptorsCache" visibility="protected" type="_rqg4IL-jEeGnLN6u0QNctQ" isUnique="false" aggregation="composite" association="_CfTekL-kEeGnLN6u0QNctQ">
+ <ownedComment xmi:id="_rqjUYL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * The cache of descriptors.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rqlJkL-jEeGnLN6u0QNctQ" name="declaredDescriptorProvider" visibility="protected" type="_rqkigL-jEeGnLN6u0QNctQ" isUnique="false" aggregation="composite" association="_G2_3kL-kEeGnLN6u0QNctQ">
+ <ownedComment xmi:id="_rqmXsL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * The provider used to query declarations.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_rqpbAL-jEeGnLN6u0QNctQ" name="addAll" visibility="public">
+ <ownedComment xmi:id="_rqpbAb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Add all the provided {@link IDeclaredDescriptorsProvider} to the list of providers to use.&#xD;
+ * @param declaredDescriptorProviders&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rqrQML-jEeGnLN6u0QNctQ" name="declaredDescriptorProviders" type="_rqoM4L-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rqr3QL-jEeGnLN6u0QNctQ" name="getRegistryDesc" visibility="public">
+ <ownedComment xmi:id="_rqseUL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the descriptor for the specified registry.&#xD;
+ * The descriptor is built from the declarations found in {@link #declaredDescriptorProvider}.&#xD;
+ * The descriptor is cached. This mean that subsequent calls for the same name will return the same &#xD;
+ * result.&#xD;
+ * &lt;br/>&#xD;
+ * If the registry is not found, throws an exception.&#xD;
+ * &#xD;
+ * @param registryName The name of the registry for which the descriptor is required.&#xD;
+ * &#xD;
+ * @return The registry descriptor&#xD;
+ * @throws DeclarationException If an error occur while reading declarations.&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rqvhoL-jEeGnLN6u0QNctQ" type="_rqtFYL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rqwvwL-jEeGnLN6u0QNctQ" name="registryName" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rqx94L-jEeGnLN6u0QNctQ" name="getServiceSetDesc" visibility="public">
+ <ownedComment xmi:id="_rqx94b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the {@link ServiceSetDesc} for the specified name.&#xD;
+ * The descriptor is built from the declarations found in {@link #declaredDescriptorProvider}.&#xD;
+ * The descriptor is cached. This mean that subsequent calls for the same name will return the same &#xD;
+ * result.&#xD;
+ * &lt;br/>&#xD;
+ * If the descriptor is not found, throws an exception.&#xD;
+ * &#xD;
+ * @param serviceSetId&#xD;
+ * @return&#xD;
+ * @throws DeclarationException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rqzMAb-jEeGnLN6u0QNctQ" type="_rqzMAL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rq1oQL-jEeGnLN6u0QNctQ" name="serviceSetId" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rq4rkL-jEeGnLN6u0QNctQ" name="transformAbstractServiceIdDescToRef" visibility="private">
+ <ownedComment xmi:id="_rq4rkb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Transform {@link AncestorEvent} {@link AbstractServiceIdDesc} to an {@link AbstractServiceDesc}.&#xD;
+ * &#xD;
+ * @param serviceIdDesc&#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rq7u4L-jEeGnLN6u0QNctQ" type="_rq5SoL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rq8V8L-jEeGnLN6u0QNctQ" name="serviceIdDesc" type="_rq3dcL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rq_ZQL-jEeGnLN6u0QNctQ" name="transformServiceIdDescToRef" visibility="private">
+ <ownedComment xmi:id="_rq_ZQb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * &#xD;
+ * @param serviceIdDesc&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rrAnYL-jEeGnLN6u0QNctQ" name="serviceIdDesc" type="_rq-yML-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rrGG8L-jEeGnLN6u0QNctQ" name="transformStartKind" visibility="private">
+ <ownedComment xmi:id="_rrGG8b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * &#xD;
+ * @param startKind&#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rrH8IL-jEeGnLN6u0QNctQ" type="_rrHVEL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rrJKQL-jEeGnLN6u0QNctQ" name="startKind" type="_rrFf4b-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rrK_cL-jEeGnLN6u0QNctQ" name="transformAliasIdDescToRef" visibility="private">
+ <ownedComment xmi:id="_rrK_cb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * &#xD;
+ * @param serviceIdDesc&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rrMNkL-jEeGnLN6u0QNctQ" name="serviceIdDesc" type="_rrKYYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rrOCwL-jEeGnLN6u0QNctQ" name="transformServiceFactoryIdDescToRef" visibility="private">
+ <ownedComment xmi:id="_rrOp0L-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * &#xD;
+ * @param serviceIdDesc&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rrPQ4L-jEeGnLN6u0QNctQ" name="serviceIdDesc" type="_rrNbsL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rrQfAL-jEeGnLN6u0QNctQ" name="computeRegistryServices" visibility="private">
+ <ownedComment xmi:id="_rrQfAb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Compute the services available from this registry. This implies &#xD;
+ * resolving inheritances from extends.&#xD;
+ * @param registryDesc The descriptor for which services should be computed.&#xD;
+ * &#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rrRtIL-jEeGnLN6u0QNctQ" name="registryDesc" type="_rqtFYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rrSUML-jEeGnLN6u0QNctQ" name="computeServiceSetServices" visibility="private">
+ <ownedComment xmi:id="_rrSUMb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Compute the services available from the specified {@link ServiceSetDesc}. This reset and compute &#xD;
+ * the {@link ServiceSetDesc#getServices()} property.&#xD;
+ * &#xD;
+ * @param serviceSetDesc&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rrTiUL-jEeGnLN6u0QNctQ" name="serviceSetDesc" type="_rqzMAL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rrVXgL-jEeGnLN6u0QNctQ" name="collectMissingServices" visibility="private">
+ <ownedComment xmi:id="_rrVXgb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Collect the services that are set in the parent, but not found in the collect.&#xD;
+ * @param res&#xD;
+ * @param resolvedServiceSet&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rrWloL-jEeGnLN6u0QNctQ" name="collect" type="_rrUwcL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_rrXMsL-jEeGnLN6u0QNctQ" name="parent" type="_rrUwcL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_rqgREL-jEeGnLN6u0QNctQ" name="servicedescriptors">
+ <packagedElement xmi:type="uml:Class" xmi:id="_rqg4IL-jEeGnLN6u0QNctQ" name="Descriptors"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rqtFYL-jEeGnLN6u0QNctQ" name="RegistryDesc"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rqzMAL-jEeGnLN6u0QNctQ" name="ServiceSetDesc"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rq5SoL-jEeGnLN6u0QNctQ" name="AbstractServiceDesc"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rrHVEL-jEeGnLN6u0QNctQ" name="StartupKind"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rqkigL-jEeGnLN6u0QNctQ" name="DescriptorsProviderCollection">
+ <ownedComment xmi:id="_rrmdQL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * A collection of DescriptorsProviders.&#xD;
+ * This provide nearly the same method as DescriptorsProviders, but the search is done over&#xD;
+ * a collection of DescriptorsProviders.&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ *&#xD;
+ * TODO : complete&#xD;
+ </body>
+ </ownedComment>
+ <ownedAttribute xmi:id="_rrnrYL-jEeGnLN6u0QNctQ" name="descriptorsProviders" visibility="protected" type="_rqoM4L-jEeGnLN6u0QNctQ" isUnique="false" aggregation="composite" association="_l2cLQL-kEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rrpgkL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rrqusL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_rrrVwL-jEeGnLN6u0QNctQ" name="addAll" visibility="public">
+ <ownedComment xmi:id="_rrrVwb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Add all the provided {@link IDeclaredDescriptorsProvider} to the list of providers to use.&#xD;
+ * @param declaredDescriptorProviders&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rrtK8L-jEeGnLN6u0QNctQ" name="declaredDescriptorProviders" type="_rqoM4L-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rruZEL-jEeGnLN6u0QNctQ" name="getRegistryIdDesc" visibility="public">
+ <ownedComment xmi:id="_rruZEb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the descriptor for the specified registry.&#xD;
+ * If the registry is found more than one, throw an exception.&#xD;
+ * If the registry is not found, throws an exception.&#xD;
+ * &#xD;
+ * @param registryName The name of the registry for which the descriptor is required.&#xD;
+ * &#xD;
+ * @return The registry descriptor&#xD;
+ * @throws DeclarationException If an error occur while reading declarations.&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rrwOQL-jEeGnLN6u0QNctQ" type="_rrvnML-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rrxcYL-jEeGnLN6u0QNctQ" name="registryName" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rrzRkL-jEeGnLN6u0QNctQ" name="getResolvedRegistryIdDesc" visibility="public">
+ <ownedComment xmi:id="_rrzRkb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the descriptor for the specified registry, with all inheritance resolved. This mean that &#xD;
+ * the returned descriptor has no inheritance, but the found inheritance are added in the inner properties&#xD;
+ * (sets, parents).&#xD;
+ * &#xD;
+ * @param registryName&#xD;
+ * @return&#xD;
+ * @throws DeclarationException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rr0fsL-jEeGnLN6u0QNctQ" type="_rrvnML-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rr1GwL-jEeGnLN6u0QNctQ" name="registryName" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rr2U4L-jEeGnLN6u0QNctQ" name="getResolvedServiceSetIdDesc" visibility="public">
+ <ownedComment xmi:id="_rr2U4b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the descriptor for the specified ServiceSetIdDesc, with all inheritance resolved. This mean that &#xD;
+ * the returned {@link ServiceSetIdDesc} has no inheritance. All services found from inherited sets are added in the set, &#xD;
+ * according to the following rules:&#xD;
+ * &lt;ul>&#xD;
+ * &lt;li>Names found in children hides names in parent (overloading)&lt;/li>&#xD;
+ * &lt;li>&lt;/li>&#xD;
+ * &lt;li>&lt;/li>&#xD;
+ * &lt;/ul>&#xD;
+ * @param setName&#xD;
+ * @return&#xD;
+ * @throws DeclarationException &#xD;
+ * @throws DeclarationNotFoundException If the set is not found&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rr3jAL-jEeGnLN6u0QNctQ" type="_rrUwcL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rr4xIL-jEeGnLN6u0QNctQ" name="setName" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rr5_QL-jEeGnLN6u0QNctQ" name="collectMissingServices" visibility="private">
+ <ownedComment xmi:id="_rr5_Qb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Collect the services that are set in the parent, but not found in the collect.&#xD;
+ * @param res&#xD;
+ * @param resolvedServiceSet&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rr_e0L-jEeGnLN6u0QNctQ" name="collect" type="_rrUwcL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_rsAs8L-jEeGnLN6u0QNctQ" name="parent" type="_rrUwcL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rsHaoL-jEeGnLN6u0QNctQ" name="getServiceSetIdDesc" visibility="public">
+ <ownedComment xmi:id="_rsHaob-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the {@link ServiceSetIdDesc} concatenating all fragments declaring a part of the ServiceSetIdDesc.&#xD;
+ * &#xD;
+ * &#xD;
+ * @param setName&#xD;
+ * @return&#xD;
+ * @throws DeclarationNotFoundException &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rsIowL-jEeGnLN6u0QNctQ" type="_rrUwcL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rsJ24L-jEeGnLN6u0QNctQ" name="serviceSetName" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rsKd8L-jEeGnLN6u0QNctQ" name="removeDoubleName" visibility="private">
+ <ownedComment xmi:id="_rsLFAL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Remove double names from the provided list.&#xD;
+ * @param list&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rsMTIL-jEeGnLN6u0QNctQ" name="list" type="_AUa20H12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rsNhQL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rsOvYL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Interface" xmi:id="_rqoM4L-jEeGnLN6u0QNctQ" name="IDeclaredDescriptorsProvider">
+ <ownedComment xmi:id="_rwF7sL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * A declared descriptor provider is used to read declared descriptor.&#xD;
+ * Real implementation can read declared descriptor from various sources (Eclipse extension, model, ...).&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ *&#xD;
+ </body>
+ </ownedComment>
+ <ownedOperation xmi:id="_rwHJ0L-jEeGnLN6u0QNctQ" name="getRegistryDescriptor" visibility="public">
+ <ownedComment xmi:id="_rwHw4L-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the requested descriptor.&#xD;
+ * If the registry is found more than one, throw an exception.&#xD;
+ * If the registry is not found, return null.&#xD;
+ * @param registryName&#xD;
+ * @return The {@link RegistryIdDesc} or null if not found.&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rwJmEL-jEeGnLN6u0QNctQ" type="_rrvnML-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rwK0ML-jEeGnLN6u0QNctQ" name="registryName" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rwMpYL-jEeGnLN6u0QNctQ" name="getServiceSetFragments" visibility="public">
+ <ownedComment xmi:id="_rwMpYb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get all the declared fragments for the specified serviceSet.&#xD;
+ * &#xD;
+ * @param serviceSetName The name of the set for which fragments are required.&#xD;
+ * &#xD;
+ * @return A list of fragment. The list can be empty if no fragment is found.&#xD;
+ * @throws DeclarationException &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rwN3gL-jEeGnLN6u0QNctQ" type="_rrUwcL-jEeGnLN6u0QNctQ" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rwPssL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rwQ60L-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_rwSwAL-jEeGnLN6u0QNctQ" name="serviceSetName" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rwT-IL-jEeGnLN6u0QNctQ" name="getServiceSet" visibility="public" isAbstract="true">
+ <ownedParameter xmi:id="_rwVMQL-jEeGnLN6u0QNctQ" type="_rrUwcL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rwXBcL-jEeGnLN6u0QNctQ" name="serviceSetName" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_rq22YL-jEeGnLN6u0QNctQ" name="servicedescriptorswithid">
+ <packagedElement xmi:type="uml:Class" xmi:id="_rq3dcL-jEeGnLN6u0QNctQ" name="AbstractServiceIdDesc"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rq-yML-jEeGnLN6u0QNctQ" name="ServiceIdDesc"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rrKYYL-jEeGnLN6u0QNctQ" name="AliasIdDesc"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rrNbsL-jEeGnLN6u0QNctQ" name="ServiceFactoryIdDesc"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rrUwcL-jEeGnLN6u0QNctQ" name="ServiceSetIdDesc"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rrvnML-jEeGnLN6u0QNctQ" name="RegistryIdDesc"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_rrCckL-jEeGnLN6u0QNctQ" name="org">
+ <packagedElement xmi:type="uml:Package" xmi:id="_rrDDoL-jEeGnLN6u0QNctQ" name="eclipse">
+ <packagedElement xmi:type="uml:Package" xmi:id="_rrDDob-jEeGnLN6u0QNctQ" name="papyrus">
+ <packagedElement xmi:type="uml:Package" xmi:id="_rrDqsL-jEeGnLN6u0QNctQ" name="infra">
+ <packagedElement xmi:type="uml:Package" xmi:id="_rrERwL-jEeGnLN6u0QNctQ" name="core">
+ <packagedElement xmi:type="uml:Package" xmi:id="_rrE40L-jEeGnLN6u0QNctQ" name="serviceregistry">
+ <packagedElement xmi:type="uml:Package" xmi:id="_rrFf4L-jEeGnLN6u0QNctQ" name="servicedescriptorswithid">
+ <packagedElement xmi:type="uml:Class" xmi:id="_rrFf4b-jEeGnLN6u0QNctQ" name="StartupKind"/>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rs6r4L-jEeGnLN6u0QNctQ" clientDependency="_rtFrAL-jEeGnLN6u0QNctQ" name="ExtensionDeclaredDescriptorsProvider">
+ <ownedComment xmi:id="_rs76AL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * A declared service provider reading declaration from eclipse extensions (plugin.xml).&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ *&#xD;
+ </body>
+ </ownedComment>
+ <ownedAttribute xmi:id="_rtIHQL-jEeGnLN6u0QNctQ" name="extensionPointNamespace" visibility="public" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rtJVYL-jEeGnLN6u0QNctQ">
+ <body> Namespace where to look for the extension points. </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rtLKkL-jEeGnLN6u0QNctQ" name="SERVICE_EXTENSION_ID" visibility="public" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rtMYsL-jEeGnLN6u0QNctQ">
+ <body> ID of the extension (schema filename) </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rtUUgL-jEeGnLN6u0QNctQ" name="REGISTRY_ELEMENT_NAME" visibility="public" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rtWJsL-jEeGnLN6u0QNctQ">
+ <body> Extension point name inside the extension description *</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rtX-4L-jEeGnLN6u0QNctQ" name="REGISTRY_EXTENDS_ELEMENT" visibility="public" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rtZNAL-jEeGnLN6u0QNctQ">
+ <body> Extension point name inside the extension description *</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rtdecL-jEeGnLN6u0QNctQ" name="REGISTRY_PARENT_ELEMENT" visibility="public" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rtfToL-jEeGnLN6u0QNctQ">
+ <body> Extension point name inside the extension description *</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rthI0L-jEeGnLN6u0QNctQ" name="REGISTRY_SERVICE_SETS_ELEMENT" visibility="public" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rtpEoL-jEeGnLN6u0QNctQ">
+ <body> Extension point name inside the extension description *</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rtq50L-jEeGnLN6u0QNctQ" name="SERVICE_ELEMENT_NAME" visibility="public" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rtsvAL-jEeGnLN6u0QNctQ">
+ <body> Extension point name inside the extension description *</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rtvLQL-jEeGnLN6u0QNctQ" name="SERVICE_SET_ELEMENT_NAME" visibility="public" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rtwZYL-jEeGnLN6u0QNctQ">
+ <body> servicesSet name *</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rtyOkL-jEeGnLN6u0QNctQ" name="SERVICE_FACTORY_ELEMENT_NAME" visibility="public" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rtzcsL-jEeGnLN6u0QNctQ">
+ <body> ServiceFactory Extension point *</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rt1R4L-jEeGnLN6u0QNctQ" name="ALIAS_ELEMENT_NAME" visibility="public" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rt2gAL-jEeGnLN6u0QNctQ">
+ <body> ServiceFactory Extension point *</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rt48QL-jEeGnLN6u0QNctQ" name="ALIASED_SERVICE_ID_ATTRIBUTE" visibility="public" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rt6KYL-jEeGnLN6u0QNctQ">
+ <body> ServiceFactory Extension point *</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rt7_kL-jEeGnLN6u0QNctQ" name="ID_ATTRIBUTE" visibility="private" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rt90wL-jEeGnLN6u0QNctQ">
+ <body> id attribute </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rt_p8L-jEeGnLN6u0QNctQ" name="CONTEXTCLASS_ATTRIBUTE" visibility="public" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_ruA4EL-jEeGnLN6u0QNctQ">
+ <body> constant for the attribute factoryClass *</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ruCtQL-jEeGnLN6u0QNctQ" name="STARTKIND_PROPERTY" visibility="private" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_ruD7YL-jEeGnLN6u0QNctQ">
+ <body> extension point propertyname </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ruGXoL-jEeGnLN6u0QNctQ" name="DEPENDSON_ELEMENT_NAME" visibility="private" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_ruHlwL-jEeGnLN6u0QNctQ">
+ <body> name of the dependsOn element </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ruJa8L-jEeGnLN6u0QNctQ" name="SERVICE_ID_ATTRIBUTE_NAME" visibility="private" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_ruLQIL-jEeGnLN6u0QNctQ">
+ <body> </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ruNFUL-jEeGnLN6u0QNctQ" name="SERVICE_SET_EXTENDS_ELEMENT" visibility="private" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_ruOTcL-jEeGnLN6u0QNctQ">
+ <body> </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ruQIoL-jEeGnLN6u0QNctQ" name="DESCRIPTION_ATTRIBUTE" visibility="private" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_ruR90L-jEeGnLN6u0QNctQ">
+ <body> </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ruTzAL-jEeGnLN6u0QNctQ" name="IS_UNIQUE_ATTRIBUTE" visibility="private" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_ruVBIL-jEeGnLN6u0QNctQ">
+ <body> </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ruW2UL-jEeGnLN6u0QNctQ" name="REGISTRY_ID_ATTRIBUTE" visibility="private" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_ruYrgL-jEeGnLN6u0QNctQ">
+ <body> </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ruZ5oL-jEeGnLN6u0QNctQ" name="SERVICE_SET_ID_ATTRIBUTE" visibility="private" isLeaf="true" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rubu0L-jEeGnLN6u0QNctQ">
+ <body> </body>
+ </ownedComment>
+ </ownedAttribute>
+ <interfaceRealization xmi:id="_rtFrAL-jEeGnLN6u0QNctQ" name="ExtensionDeclaredDescriptorsProvider implements IDeclaredDescriptorsProvider" client="_rs6r4L-jEeGnLN6u0QNctQ" supplier="_rqoM4L-jEeGnLN6u0QNctQ" contract="_rqoM4L-jEeGnLN6u0QNctQ"/>
+ <ownedOperation xmi:id="_rudkAL-jEeGnLN6u0QNctQ" name="getRegistryDescriptor" visibility="public">
+ <ownedComment xmi:id="_rudkAb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the descriptor for the specified registry.&#xD;
+ * Return null if not found.&#xD;
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.IDeclaredDescriptorsProvider#getRegistryDescriptor(java.lang.String)&#xD;
+ *&#xD;
+ * @param registryName&#xD;
+ * @return The specified descriptor, or null if not found&#xD;
+ * @throws DeclarationException If there is more than one registry declared under the name.&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rueyIL-jEeGnLN6u0QNctQ" type="_rrvnML-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rugAQL-jEeGnLN6u0QNctQ" name="registryName" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rumt8L-jEeGnLN6u0QNctQ" name="parseRegistryDescriptor" visibility="private">
+ <ownedComment xmi:id="_rumt8b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Parse the RegistryDescriptor from the provided {@link IConfigurationElement}.&#xD;
+ * &#xD;
+ * @param ele The {@link IConfigurationElement} representing a RegistryDescriptor.&#xD;
+ * @param warnings A list used to record encountered warnings.&#xD;
+ * @return A registry descriptor.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_ruojIL-jEeGnLN6u0QNctQ" type="_rrvnML-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rupxQL-jEeGnLN6u0QNctQ" name="ele" type="_ruk4wL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_ruq_YL-jEeGnLN6u0QNctQ" name="warnings" type="_rumG4L-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rusNgL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rutboL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_ruupwL-jEeGnLN6u0QNctQ" name="parseRegistryServiceSetId" visibility="private">
+ <ownedComment xmi:id="_ruupwb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Parse the declared sets of a Registry.&#xD;
+ * &#xD;
+ * @param ele&#xD;
+ * @param registryIdDesc&#xD;
+ * @param warnings&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_ruv34L-jEeGnLN6u0QNctQ" name="parentElement" type="_ruk4wL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_ruxGAL-jEeGnLN6u0QNctQ" name="registryIdDesc" type="_rrvnML-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_ruyUIL-jEeGnLN6u0QNctQ" name="warnings" type="_rumG4L-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ruy7ML-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ru0JUL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_ru1XcL-jEeGnLN6u0QNctQ" name="parseRegistryParent" visibility="private">
+ <ownedComment xmi:id="_ru1Xcb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Parse the parent declaration of a Registry.&#xD;
+ * @param ele&#xD;
+ * @param registryIdDesc&#xD;
+ * @param warnings&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_ru2lkL-jEeGnLN6u0QNctQ" name="parentElement" type="_ruk4wL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_ru3zsL-jEeGnLN6u0QNctQ" name="registryIdDesc" type="_rrvnML-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_ru5B0L-jEeGnLN6u0QNctQ" name="warnings" type="_rumG4L-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ru5o4L-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ru63AL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_ru8FIL-jEeGnLN6u0QNctQ" name="parseRegistryExtends" visibility="private">
+ <ownedComment xmi:id="_ru8FIb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Parse the extends declaration of a Registry.&#xD;
+ * @param parentElement The element to parse. This element must represent a Registry.&#xD;
+ * @param registryIdDesc The registry into which the result is stored&#xD;
+ * @param warnings A list used to record encountered warnings.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_ru9TQL-jEeGnLN6u0QNctQ" name="parentElement" type="_ruk4wL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_ru-hYL-jEeGnLN6u0QNctQ" name="registryIdDesc" type="_rrvnML-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_ru_vgL-jEeGnLN6u0QNctQ" name="warnings" type="_rumG4L-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rvA9oL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rvBksL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rvCy0L-jEeGnLN6u0QNctQ" name="getServiceSetFragments" visibility="public">
+ <ownedComment xmi:id="_rvCy0b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get all fragments contributing to the declaration of the specified ServiceSetIdDesc.&#xD;
+ * &#xD;
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.IDeclaredDescriptorsProvider#getServiceSetFragments(java.lang.String)&#xD;
+ *&#xD;
+ * @param serviceSetName&#xD;
+ * @return&#xD;
+ * @throws DeclarationMultiException &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rvEA8L-jEeGnLN6u0QNctQ" type="_rrUwcL-jEeGnLN6u0QNctQ" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rvFPEL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rvF2IL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_rvHEQL-jEeGnLN6u0QNctQ" name="serviceSetName" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rvISYL-jEeGnLN6u0QNctQ" name="getServiceSet" visibility="public">
+ <ownedComment xmi:id="_rvISYb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the requested ServiceSetIdDesc. If several fragmants are used to declare the ServiceSetIdDesc, &#xD;
+ * this fragments are concatenated in one ServiceSetIdDesc.&#xD;
+ * &#xD;
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.IDeclaredDescriptorsProvider#getServiceSetFragments(java.lang.String)&#xD;
+ *&#xD;
+ * @param serviceSetName&#xD;
+ * @return &#xD;
+ * @throws DeclarationMultiException &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rvJggL-jEeGnLN6u0QNctQ" type="_rrUwcL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rvKuoL-jEeGnLN6u0QNctQ" name="serviceSetName" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rvL8wL-jEeGnLN6u0QNctQ" name="parseServiceSetDescriptor" visibility="private">
+ <ownedComment xmi:id="_rvL8wb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Add the ServiceSetIdDesc declarations found in the provided {@link IConfigurationElement}, and add&#xD;
+ * it to the provided {@link ServiceSetIdDesc}.&#xD;
+ * @param ele&#xD;
+ * @param warnings&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rvNK4L-jEeGnLN6u0QNctQ" name="ele" type="_ruk4wL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_rvOZAL-jEeGnLN6u0QNctQ" name="serviceSet" type="_rrUwcL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_rvPnIL-jEeGnLN6u0QNctQ" name="warnings" type="_rumG4L-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rvQ1QL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rvRcUL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rvSqcL-jEeGnLN6u0QNctQ" name="parseServiceSetDescriptor" visibility="private">
+ <ownedComment xmi:id="_rvTRgL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Parse a {@link ServiceSetIdDesc}&#xD;
+ * @param ele&#xD;
+ * @param warnings&#xD;
+ * @return A newly created ServiceSetIdDesc initialized with the declaration found in ele.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rvT4kL-jEeGnLN6u0QNctQ" type="_rrUwcL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rvVGsL-jEeGnLN6u0QNctQ" name="ele" type="_ruk4wL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_rvWU0L-jEeGnLN6u0QNctQ" name="warnings" type="_rumG4L-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rvXi8L-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rvYKAL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rvZYIL-jEeGnLN6u0QNctQ" name="parseServiceSetExtends" visibility="private">
+ <ownedComment xmi:id="_rvZYIb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Parse the extended attribute of a ServiceSetIdDesc declaration.&#xD;
+ * @param parentElement&#xD;
+ * @param serviceSet&#xD;
+ * @param warnings&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rvamQL-jEeGnLN6u0QNctQ" name="parentElement" type="_ruk4wL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_rvb0YL-jEeGnLN6u0QNctQ" name="serviceSet" type="_rrUwcL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_rvdCgL-jEeGnLN6u0QNctQ" name="warnings" type="_rumG4L-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rveQoL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rve3sL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rvgs4L-jEeGnLN6u0QNctQ" name="parseServiceSetServices" visibility="private">
+ <ownedComment xmi:id="_rvgs4b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Read services descriptors from the specified element configuration.&#xD;
+ * The element configuration should contains service elements declarations.&#xD;
+ * IdDescriptors are added to the specified list&#xD;
+ * &#xD;
+ * @param descriptors The list into which descriptors are added&#xD;
+ * @param parentElement The configuration element containing some service declarations.&#xD;
+ * @param serviceSet &#xD;
+ * @param exceptions List used to add encountered exceptions.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rviiEL-jEeGnLN6u0QNctQ" name="parentElement" type="_ruk4wL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_rvjwML-jEeGnLN6u0QNctQ" name="descriptors" type="_rq3dcL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rvk-UL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rvmMcL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_rvnakL-jEeGnLN6u0QNctQ" name="exceptions" type="_rumG4L-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rvoosL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rvpPwL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rvqd4L-jEeGnLN6u0QNctQ" name="parseAliasDescriptor" visibility="private">
+ <ownedComment xmi:id="_rvqd4b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Read an alias descriptor.&#xD;
+ * @param ele&#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rvrsAL-jEeGnLN6u0QNctQ" type="_rrKYYL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rvs6IL-jEeGnLN6u0QNctQ" name="ele" type="_ruk4wL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rvuIQL-jEeGnLN6u0QNctQ" name="parseServiceDescriptor" visibility="private">
+ <ownedComment xmi:id="_rvuIQb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Read descriptor values from provided element.&#xD;
+ * &#xD;
+ * @param ele&#xD;
+ * @return&#xD;
+ * @throws ServiceException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rvuvUL-jEeGnLN6u0QNctQ" type="_rq-yML-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rvv9cL-jEeGnLN6u0QNctQ" name="ele" type="_ruk4wL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rvxLkL-jEeGnLN6u0QNctQ" name="parseStartKindAttribute" visibility="private">
+ <ownedComment xmi:id="_rvxyoL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Parse the StartupKind attribute.&#xD;
+ * @param ele&#xD;
+ * @return&#xD;
+ * @throws DeclarationException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rvyZsL-jEeGnLN6u0QNctQ" type="_rrFf4b-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_rvzn0L-jEeGnLN6u0QNctQ" name="ele" type="_ruk4wL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rv3SML-jEeGnLN6u0QNctQ" name="parsePriorityAttribute" visibility="private">
+ <ownedComment xmi:id="_rv3SMb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @param ele&#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rv4gUL-jEeGnLN6u0QNctQ" type="_AUbd4X12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_rv5ucL-jEeGnLN6u0QNctQ" name="ele" type="_ruk4wL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rv68kL-jEeGnLN6u0QNctQ" name="parseServiceDependsOn" visibility="private">
+ <ownedComment xmi:id="_rv68kb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Parse the dependsOn attribute of a service.&#xD;
+ * @param parentElement The {@link IConfigurationElement} containing a dependsOn attribute.&#xD;
+ * @param dependsOnServices Parsed value are added in this list.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rv8KsL-jEeGnLN6u0QNctQ" name="parentElement" type="_ruk4wL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_rv9_4L-jEeGnLN6u0QNctQ" name="dependsOnServices" type="_AUa20H12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rv_OAL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rwAcIL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rwBDML-jEeGnLN6u0QNctQ" name="getExtensionRegistry" visibility="protected">
+ <ownedComment xmi:id="_rwBDMb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the Eclipse extensionRegistry.&#xD;
+ * This method can be overloaded by subclasses. This is useful for tests.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rwC4YL-jEeGnLN6u0QNctQ" type="_rwCRUL-jEeGnLN6u0QNctQ" direction="return"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rwgLYL-jEeGnLN6u0QNctQ" name="ServiceDescriptor">
+ <ownedComment xmi:id="_rwhZgL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Descriptor of a service. This descriptor describe a service.&#xD;
+ * &#xD;
+ * @author cedirc dumoulin&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedAttribute xmi:id="_rwinoL-jEeGnLN6u0QNctQ" name="serviceClassname" visibility="private" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rwkc0L-jEeGnLN6u0QNctQ">
+ <body> Classname of the service. USed to start the service </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rwmSAL-jEeGnLN6u0QNctQ" name="serviceStartKind" visibility="private" type="_rwlq8L-jEeGnLN6u0QNctQ" isUnique="false">
+ <ownedComment xmi:id="_rwngIL-jEeGnLN6u0QNctQ">
+ <body> Kind of start for this service </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rwqjcL-jEeGnLN6u0QNctQ" name="serviceTypeKind" visibility="private" type="_rwpVUL-jEeGnLN6u0QNctQ" isUnique="false">
+ <ownedComment xmi:id="_rwtmwL-jEeGnLN6u0QNctQ">
+ <body> Kind of service </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rwu04L-jEeGnLN6u0QNctQ" name="priority" visibility="private" type="_AUbd4X12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rwwqEL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Service priority. If two service are registered under the same key, only&#xD;
+ * the one with the higher priority is started.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rwx4ML-jEeGnLN6u0QNctQ" name="key" visibility="private" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rwztYL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Key used to register the service.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rw07gL-jEeGnLN6u0QNctQ" name="classBundleID" visibility="private" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rw2JoL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Id of the bundle owning the .class that is referenced by&#xD;
+ * serviceClassname. Requested when instanciating the class.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rw3XwL-jEeGnLN6u0QNctQ" name="isAnonymous" visibility="private" type="_AVTAkH12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rw5M8L-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * If set to true, the service is anonymous : it is not registered and can't&#xD;
+ * be retrieved with getService().&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rw6bEL-jEeGnLN6u0QNctQ" name="requiredServices" visibility="private" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rw8QQL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * List of keys of Services required by this service.&#xD;
+ </body>
+ </ownedComment>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rw9eYL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rw-FcL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rw_TkL-jEeGnLN6u0QNctQ" name="EMPTY_LIST_STRING" visibility="private" isStatic="true" type="_AUa20H12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rxBIwL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Empty list.&#xD;
+ </body>
+ </ownedComment>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rxC98L-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rxEMEL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_rxFaML-jEeGnLN6u0QNctQ" name="getServiceStartKind" visibility="public">
+ <ownedComment xmi:id="_rxGBQL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @return the serviceStartKind&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxHPYL-jEeGnLN6u0QNctQ" type="_rwlq8L-jEeGnLN6u0QNctQ" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rxIdgL-jEeGnLN6u0QNctQ" name="isStartAtStartup" visibility="public">
+ <ownedComment xmi:id="_rxIdgb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Return true if StartKind is 'always'.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxJroL-jEeGnLN6u0QNctQ" type="_AVTAkH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rxK5wL-jEeGnLN6u0QNctQ" name="getPriority" visibility="public">
+ <ownedComment xmi:id="_rxK5wb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @return the priority&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxMH4L-jEeGnLN6u0QNctQ" type="_AUbd4X12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rxNWAL-jEeGnLN6u0QNctQ" name="getKey" visibility="public">
+ <ownedComment xmi:id="_rxNWAb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @return the key&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxOkIL-jEeGnLN6u0QNctQ" type="_AUa20H12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rxPLML-jEeGnLN6u0QNctQ" name="getServiceClassname" visibility="public">
+ <ownedComment xmi:id="_rxPyQL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @return the serviceClassname&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxRAYL-jEeGnLN6u0QNctQ" type="_AUa20H12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rxSOgL-jEeGnLN6u0QNctQ" name="getClassBundleID" visibility="public">
+ <ownedComment xmi:id="_rxSOgb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @return the classBundleID&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxTcoL-jEeGnLN6u0QNctQ" type="_AUa20H12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rxUqwL-jEeGnLN6u0QNctQ" name="setClassBundleID" visibility="public">
+ <ownedComment xmi:id="_rxUqwb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @param classBundleId&#xD;
+ * the classBundleID to set&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxV44L-jEeGnLN6u0QNctQ" name="classBundleId" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rxXHAL-jEeGnLN6u0QNctQ" name="getRequiredServiceKeys" visibility="public">
+ <ownedComment xmi:id="_rxXHAb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the keys of all the required services&#xD;
+ * &#xD;
+ * @return the requiredServices&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxY8ML-jEeGnLN6u0QNctQ" type="_AUa20H12EeGOQuKePEwyrw" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rxaKUL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rxbYcL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rxcmkL-jEeGnLN6u0QNctQ" name="setRequiredServiceKeys" visibility="public">
+ <ownedComment xmi:id="_rxcmkb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @param requiredServices&#xD;
+ * the requiredServices to set&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxd0sL-jEeGnLN6u0QNctQ" name="requiredServices" type="_AUa20H12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rxebwL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rxfp4L-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rxg4AL-jEeGnLN6u0QNctQ" name="toString" visibility="public">
+ <ownedComment xmi:id="_rxhfEL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @see java.lang.Object#toString()&#xD;
+ * @return&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxitML-jEeGnLN6u0QNctQ" type="_AUa20H12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rxj7UL-jEeGnLN6u0QNctQ" name="isAnonymous" visibility="public">
+ <ownedComment xmi:id="_rxj7Ub-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @return the isAnonymous&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxkiYL-jEeGnLN6u0QNctQ" type="_AVTAkH12EeGOQuKePEwyrw" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rxnlsL-jEeGnLN6u0QNctQ" name="setAnonymous" visibility="public">
+ <ownedComment xmi:id="_rxoMwL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @param isAnonymous&#xD;
+ * the isAnonymous to set&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxpa4L-jEeGnLN6u0QNctQ" name="isAnonymous" type="_AVTAkH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rxqpAL-jEeGnLN6u0QNctQ" name="getServiceTypeKind" visibility="public">
+ <ownedComment xmi:id="_rxrQEL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @return the serviceTypeKind&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxtFQL-jEeGnLN6u0QNctQ" type="_rwpVUL-jEeGnLN6u0QNctQ" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rxuTYL-jEeGnLN6u0QNctQ" name="setServiceTypeKind" visibility="public">
+ <ownedComment xmi:id="_rxuTYb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @param serviceTypeKind&#xD;
+ * the serviceTypeKind to set&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rxvhgL-jEeGnLN6u0QNctQ" name="serviceTypeKind" type="_rwpVUL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rwlq8L-jEeGnLN6u0QNctQ" name="ServiceStartKind"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rwpVUL-jEeGnLN6u0QNctQ" name="ServiceTypeKind"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rx1oIL-jEeGnLN6u0QNctQ" name="ServiceRegistryFactory">
+ <ownedComment xmi:id="_rx22QL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * @author cedric dumoulin&#xD;
+ *&#xD;
+ </body>
+ </ownedComment>
+ <ownedAttribute xmi:id="_rx4EYL-jEeGnLN6u0QNctQ" name="singleRegistries" visibility="protected" type="_AUUwMX12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_rx55kL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Repository of single registries.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rx7HsL-jEeGnLN6u0QNctQ" name="descriptorProviders" visibility="protected" type="_rqaxgL-jEeGnLN6u0QNctQ" isUnique="false" aggregation="composite" association="_6y8P0L-jEeGnLN6u0QNctQ">
+ <ownedComment xmi:id="_rx884L-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * DescriptorProviders access point.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_rx-LAL-jEeGnLN6u0QNctQ" name="getServicesRegistry" visibility="public">
+ <ownedComment xmi:id="_rx-LAb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Create a {@link ServicesRegistry} from the specified description.&#xD;
+ * The description is searched in the associated {@link DescriptorsProviderCollection}.&#xD;
+ * &#xD;
+ * @param registryName The name of the description used to initialized the ServicesRegistry.&#xD;
+ * &#xD;
+ * @return The requested {@link ServicesRegistry}&#xD;
+ * @throws DeclarationException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_ryAnQL-jEeGnLN6u0QNctQ" type="_rx_ZIL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_ryB1YL-jEeGnLN6u0QNctQ" name="registryName" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_ryDDgL-jEeGnLN6u0QNctQ" name="getServicesRegistry" visibility="protected">
+ <ownedComment xmi:id="_ryDDgb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get a {@link ServicesRegistry} corresponding to the specified descriptor. Also create recursively referenced&#xD;
+ * registries and services.&#xD;
+ * &#xD;
+ * If the registry is &quot;unique&quot;, lookup for an already existing instance, and return it if found.&#xD;
+ * If the registry is not unique, create a new instance corresponding to the descriptor.&#xD;
+ * Referenced descriptions are searched in the associated ConfigurationProvider.&#xD;
+ * &#xD;
+ * @param registryIdDesc The descriptor used to initialized the ServicesRegistry.&#xD;
+ * &#xD;
+ * @return The requested {@link ServicesRegistry}&#xD;
+ * @throws DeclarationException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_ryERoL-jEeGnLN6u0QNctQ" type="_rx_ZIL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_ryFfwL-jEeGnLN6u0QNctQ" name="registryIdDesc" type="_rqtFYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_ryGt4L-jEeGnLN6u0QNctQ" name="extendsServicesRegistry" visibility="public">
+ <ownedComment xmi:id="_ryGt4b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Extends the specified registry with all services and parents declared in the specified descriptor.&#xD;
+ * Only missing services and parents are added.&#xD;
+ * &lt;br>If both the original registry and the additional registry contain a service with the same name, &#xD;
+ * the service from the original registry is conserved.&#xD;
+ * &#xD;
+ * @param registry The registry to extends.&#xD;
+ * @param extendsWithRegistryName The name of the descriptor used to extends the registry.&#xD;
+ * @return&#xD;
+ * @throws DeclarationException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_ryH8AL-jEeGnLN6u0QNctQ" type="_rx_ZIL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_ryJKIL-jEeGnLN6u0QNctQ" name="registry" type="_rx_ZIL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_ryKYQL-jEeGnLN6u0QNctQ" name="extendsWithRegistryName" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_ryMNcL-jEeGnLN6u0QNctQ" name="extendsServicesRegistry" visibility="protected">
+ <ownedComment xmi:id="_ryMNcb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Extends the specified registry with all services and parents declared in the specified descriptor.&#xD;
+ * Only missing services and parents are added.&#xD;
+ * &lt;br>If both the original registry and the additional registry contain a service with the same name, &#xD;
+ * the service from the original registry is conserved.&#xD;
+ * &#xD;
+ * @param extendRegistryDesc The descriptor used to initialized the ServicesRegistry.&#xD;
+ * &#xD;
+ * @return The requested {@link ServicesRegistry}&#xD;
+ * @throws DeclarationException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_ryNbkL-jEeGnLN6u0QNctQ" type="_rx_ZIL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_ryOpsL-jEeGnLN6u0QNctQ" name="registry" type="_rx_ZIL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_ryP30L-jEeGnLN6u0QNctQ" name="extendRegistryDesc" type="_rqtFYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_ryRF8L-jEeGnLN6u0QNctQ" name="getSingleRegistry" visibility="private">
+ <ownedComment xmi:id="_ryRF8b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the specified single registry by its name.&#xD;
+ * Return null if not found or if the repository do not exist.&#xD;
+ * &#xD;
+ * @param registryIdDesc&#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_ryS7IL-jEeGnLN6u0QNctQ" type="_rx_ZIL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_ryUJQL-jEeGnLN6u0QNctQ" name="registryIdDesc" type="_rqtFYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rx_ZIL-jEeGnLN6u0QNctQ" name="ServicesRegistry">
+ <ownedComment xmi:id="_rytK0L-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * A registry of services. This registry allows to get a service by its&#xD;
+ * identifier. The identifier is generally the classname of the service.&#xD;
+ * Services can be added using the Eclipse extension mechanism (if you use {@link ExtensionServicesRegistry}). &lt;br>&#xD;
+ * A Service is a class providing operations. The ServiceRegistry is used to&#xD;
+ * share objects (i.e. services) between nested editors and also the core main&#xD;
+ * editor.&#xD;
+ * &#xD;
+ * &lt;br>&#xD;
+ * In this implementation, services should be added to the registry before the&#xD;
+ * call to createServices(). If a service is added after the call, it will not&#xD;
+ * be started (except if it is a lazy service). &lt;br>&#xD;
+ * A typical usage is:&#xD;
+ * &#xD;
+ * &lt;pre>&#xD;
+ * &lt;code>&#xD;
+ * ServicesRegistry serviceRegistry = new ServiceRegistry();&#xD;
+ * // Add your services&#xD;
+ * serviceRegistry.add( ...);&#xD;
+ * serviceRegistry.add( ...);&#xD;
+ * &#xD;
+ * // start the services&#xD;
+ * serviceRegistry.startRegistry();&#xD;
+ * &#xD;
+ * // Retrieve a service&#xD;
+ * myService = serviceRegistry.getService( serviceKey );&#xD;
+ * &lt;/code>&#xD;
+ * &lt;/pre>&#xD;
+ * &#xD;
+ * It is possible to register new services after the serviceRegistry has been&#xD;
+ * started. In this case, you need to start them explicitly if they are of type&#xD;
+ * ServiceStartKind.STARTUP.&#xD;
+ * &#xD;
+ * &lt;pre>&#xD;
+ * &lt;code>&#xD;
+ * // Add your new services&#xD;
+ * serviceRegistry.add( key1, ...);&#xD;
+ * serviceRegistry.add( key2, ...);&#xD;
+ * &#xD;
+ * // start the new services&#xD;
+ * serviceRegistry.startRegistry(key1, key2);&#xD;
+ * &lt;/code>&#xD;
+ * &lt;/pre>&#xD;
+ * &#xD;
+ * &lt;ul>&#xD;
+ * &lt;li>&lt;/li>&#xD;
+ * &lt;li>&lt;/li>&#xD;
+ * &lt;/ul>&#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ * &#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedAttribute xmi:id="_ryvAAL-jEeGnLN6u0QNctQ" name="log" visibility="protected" type="_AUTiEX12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_ryzRcL-jEeGnLN6u0QNctQ">
+ <body> Log object </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ry0fkL-jEeGnLN6u0QNctQ" name="addedServices" visibility="private" type="_AUUwMX12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_ry2UwL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * A Map of services added to the register (thow the addXxx() methods), but&#xD;
+ * not yet registered. They will be registered after a call to startXxx().&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ry4J8L-jEeGnLN6u0QNctQ" name="namedServices" visibility="private" type="_AUUwMX12EeGOQuKePEwyrw" isUnique="false">
+ <ownedComment xmi:id="_ry5_IL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Map of services registered with a name.&#xD;
+ </body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ry8bYL-jEeGnLN6u0QNctQ" name="anonymousServices" visibility="private" type="_ry70UL-jEeGnLN6u0QNctQ" isUnique="false">
+ <ownedComment xmi:id="_ry-QkL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Map of services registered without a name (anonymous). Such services&#xD;
+ * can't be retrieved.&#xD;
+ </body>
+ </ownedComment>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ry_esL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rzB68L-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rzDwIL-jEeGnLN6u0QNctQ" name="parents" visibility="private" type="_rx_ZIL-jEeGnLN6u0QNctQ" isUnique="false">
+ <ownedComment xmi:id="_rzFlUL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * List of parents used as fallback if the service is not found in this registry.&#xD;
+ </body>
+ </ownedComment>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rzGzcL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rzIooL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_rzJ2wL-jEeGnLN6u0QNctQ" name="add" visibility="public">
+ <ownedComment xmi:id="_rzJ2wb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Add a service by its ServiceDescriptor.&#xD;
+ * &#xD;
+ * @param serviceDescriptor&#xD;
+ * Descriptor describing the service.&#xD;
+ * @throws ServiceException&#xD;
+ * If an error occurs while initializing service.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rzLr8L-jEeGnLN6u0QNctQ" name="serviceDescriptor" type="_rwgLYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rzNhIL-jEeGnLN6u0QNctQ" name="add" visibility="public">
+ <ownedComment xmi:id="_rzNhIb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Add a service. The descriptor will be created.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rzOvQL-jEeGnLN6u0QNctQ" name="key" type="_AUa20H12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rzQkcL-jEeGnLN6u0QNctQ" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rzRykL-jEeGnLN6u0QNctQ" name="serviceInstance" type="_TYM0UH13EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rzTAsL-jEeGnLN6u0QNctQ" name="add" visibility="public">
+ <ownedComment xmi:id="_rzTAsb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Add a service. The descriptor will be created.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rzU14L-jEeGnLN6u0QNctQ" name="key" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rzWEAL-jEeGnLN6u0QNctQ" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rzXSIL-jEeGnLN6u0QNctQ" name="serviceInstance" type="_TYM0UH13EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rzZHUL-jEeGnLN6u0QNctQ" name="add" visibility="public">
+ <ownedComment xmi:id="_rzZHUb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Add a service. The descriptor will be created.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rza8gL-jEeGnLN6u0QNctQ" name="key" type="_AUa20H12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rzcxsL-jEeGnLN6u0QNctQ" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rzem4L-jEeGnLN6u0QNctQ" name="serviceInstance" type="_TYM0UH13EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rzf1AL-jEeGnLN6u0QNctQ" name="startKind" type="_rwlq8L-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rzhqML-jEeGnLN6u0QNctQ" name="add" visibility="public">
+ <ownedComment xmi:id="_rzhqMb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Add a service. The descriptor will be created.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key Class used as key. The classname is used as key.&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rzjfYL-jEeGnLN6u0QNctQ" name="key" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rzktgL-jEeGnLN6u0QNctQ" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rznJwL-jEeGnLN6u0QNctQ" name="serviceInstance" type="_TYM0UH13EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rzo-8L-jEeGnLN6u0QNctQ" name="startKind" type="_rwlq8L-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rzq0IL-jEeGnLN6u0QNctQ" name="add" visibility="public">
+ <ownedComment xmi:id="_rzq0Ib-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Add an already instanciated pojo (Plain Old Java Object) as Service. The&#xD;
+ * descriptor will be created. No life cycle methods are called on the&#xD;
+ * service.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rzspUL-jEeGnLN6u0QNctQ" name="key" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rzuegL-jEeGnLN6u0QNctQ" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rzwTsL-jEeGnLN6u0QNctQ" name="serviceInstance" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rzyI4L-jEeGnLN6u0QNctQ" name="add" visibility="public">
+ <ownedComment xmi:id="_rzyI4b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Add an already instanciated pojo (Plain Old Java Object) as Service. The&#xD;
+ * descriptor will be created. No life cycle methods are called on the&#xD;
+ * service.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ * @param startKind&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rzz-EL-jEeGnLN6u0QNctQ" name="key" type="_AUa20H12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rz1zQL-jEeGnLN6u0QNctQ" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rz3BYL-jEeGnLN6u0QNctQ" name="serviceInstance" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rz5doL-jEeGnLN6u0QNctQ" name="startKind" type="_rwlq8L-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_rz6rwL-jEeGnLN6u0QNctQ" name="add" visibility="public">
+ <ownedComment xmi:id="_rz7S0L-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Add an already instanciated pojo (Plain Old Java Object) as Service. The&#xD;
+ * descriptor will be created. No life cycle methods are called on the&#xD;
+ * service.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * Service key Class used as key. The classname is used as key.&#xD;
+ * @param priority&#xD;
+ * service priority&#xD;
+ * @param serviceInstance&#xD;
+ * The instance of the service&#xD;
+ * @param startKind&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_rz8g8L-jEeGnLN6u0QNctQ" name="key" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_rz-WIL-jEeGnLN6u0QNctQ" name="priority" type="_AUbd4X12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_r0ALUL-jEeGnLN6u0QNctQ" name="serviceInstance" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_r0CAgL-jEeGnLN6u0QNctQ" name="startKind" type="_rwlq8L-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r0D1sL-jEeGnLN6u0QNctQ" name="addParentRegistry" visibility="public">
+ <ownedComment xmi:id="_r0D1sb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Remove the specified Registry as parent of this registry.&#xD;
+ * . &#xD;
+ * @param parentRegistry&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r0Fq4L-jEeGnLN6u0QNctQ" name="parentRegistry" type="_rx_ZIL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r0HgEL-jEeGnLN6u0QNctQ" name="removeParentRegistry" visibility="public">
+ <ownedComment xmi:id="_r0HgEb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * &#xD;
+ * @param parentRegistry&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r0JVQL-jEeGnLN6u0QNctQ" name="parentRegistry" type="_rx_ZIL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r0KjYL-jEeGnLN6u0QNctQ" name="remove" visibility="public">
+ <ownedComment xmi:id="_r0KjYb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Remove the specified service from the registry.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r0MYkL-jEeGnLN6u0QNctQ" name="serviceDescriptor" type="_rwgLYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r0ONwL-jEeGnLN6u0QNctQ" name="remove" visibility="public">
+ <ownedComment xmi:id="_r0ONwb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Remove the specified service from the registry.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r0Pb4L-jEeGnLN6u0QNctQ" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r0R4IL-jEeGnLN6u0QNctQ" name="getService" visibility="public">
+ <ownedComment xmi:id="_r0R4Ib-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the requested service by its key. The key is usually the classname of&#xD;
+ * the service.&#xD;
+ * &#xD;
+ * @param serviceClass&#xD;
+ * @return&#xD;
+ * @throws ServiceException&#xD;
+ * If servive can't be started&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r0TtUL-jEeGnLN6u0QNctQ" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_r0U7cL-jEeGnLN6u0QNctQ" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r0WwoL-jEeGnLN6u0QNctQ" name="getService" visibility="public">
+ <ownedComment xmi:id="_r0Wwob-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the requested service by its class (the service has to be registered&#xD;
+ * by its class object).&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * The service class.&#xD;
+ * @return The service.&#xD;
+ * @throws ServiceException&#xD;
+ * If service can't be started&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r0abAL-jEeGnLN6u0QNctQ" type="_r0ZM4L-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_r0bpIL-jEeGnLN6u0QNctQ" name="key" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r0deUL-jEeGnLN6u0QNctQ" name="getServiceFromParents" visibility="private">
+ <ownedComment xmi:id="_r0eFYL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the requested service by its class (the service has to be registered&#xD;
+ * by its class object).&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * The service class.&#xD;
+ * @return The service.&#xD;
+ * @throws ServiceException&#xD;
+ * If service can't be started&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r0fTgL-jEeGnLN6u0QNctQ" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_r0hIsL-jEeGnLN6u0QNctQ" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r0i94L-jEeGnLN6u0QNctQ" name="getServiceUnchecked" visibility="protected">
+ <ownedComment xmi:id="_r0i94b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get the requested service by its key. The key is usually the classname of&#xD;
+ * the service.&#xD;
+ * Return the service, or null if not found.&#xD;
+ * This is for internal use.&#xD;
+ * &#xD;
+ * @param serviceClass&#xD;
+ * @return The service, or null if not found.&#xD;
+ * @throws ServiceException&#xD;
+ * If servive can't be started&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r0mBML-jEeGnLN6u0QNctQ" type="_AUoSMH12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_r0nPUL-jEeGnLN6u0QNctQ" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r0pEgL-jEeGnLN6u0QNctQ" name="getServiceStartupEntry" visibility="protected">
+ <ownedComment xmi:id="_r0prkL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Try to get the {@link ServiceStartupEntry} of the specified service.&#xD;
+ * Search in local namedServices.&#xD;
+ * Also lookup in parents. Return null if not found.&#xD;
+ * The returned entry should not be modified by caller.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * @return The requested entry, or null if not found.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r0tV8L-jEeGnLN6u0QNctQ" type="_ry70UL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_r0vLIL-jEeGnLN6u0QNctQ" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r0xAUL-jEeGnLN6u0QNctQ" name="getServiceStartupEntry" visibility="protected">
+ <ownedComment xmi:id="_r0xAUb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Try to get the {@link ServiceStartupEntry} of the specified service.&#xD;
+ * Search in local namedServices.&#xD;
+ * Also lookup in parents. Return null if not found.&#xD;
+ * The returned entry should not be modified by caller.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * @param searchInParent True if we should search in parent, false if search take place in this registry only.&#xD;
+ * @return The requested entry, or null if not found.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r0y1gL-jEeGnLN6u0QNctQ" type="_ry70UL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_r00DoL-jEeGnLN6u0QNctQ" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_r01RwL-jEeGnLN6u0QNctQ" name="searchInParent" type="_AVTAkH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r03G8L-jEeGnLN6u0QNctQ" name="isStarted" visibility="public">
+ <ownedComment xmi:id="_r03G8b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Return true if the service is instantiated. Return false otherwise.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r048IL-jEeGnLN6u0QNctQ" type="_AVTAkH12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_r06KQL-jEeGnLN6u0QNctQ" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r07YYL-jEeGnLN6u0QNctQ" name="isStarted" visibility="public">
+ <ownedComment xmi:id="_r07YYb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Return true if the service is instantiated. Return false otherwise.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r09NkL-jEeGnLN6u0QNctQ" type="_AVTAkH12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_r0-bsL-jEeGnLN6u0QNctQ" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_r1AQ4L-jEeGnLN6u0QNctQ" name="searchInParents" type="_AVTAkH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r1CtIL-jEeGnLN6u0QNctQ" name="isStarted" visibility="public">
+ <ownedComment xmi:id="_r1CtIb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Return true if the service is instantiated. Return false otherwise.&#xD;
+ * The service type is converted to its name, then the method is performed.&#xD;
+ * @see #isStarted(Class)&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r1EiUL-jEeGnLN6u0QNctQ" type="_AVTAkH12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_r1FwcL-jEeGnLN6u0QNctQ" name="serviceType" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r1HloL-jEeGnLN6u0QNctQ" name="isStarted" visibility="public">
+ <ownedComment xmi:id="_r1IzwL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Return true if the service is instantiated. Return false otherwise.&#xD;
+ * The service type is converted to its name, then the method is performed.&#xD;
+ * @see #isStarted(Class)&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r1KB4L-jEeGnLN6u0QNctQ" type="_AVTAkH12EeGOQuKePEwyrw" direction="return"/>
+ <ownedParameter xmi:id="_r1L3EL-jEeGnLN6u0QNctQ" name="serviceType" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_r1NFML-jEeGnLN6u0QNctQ" name="searchInParents" type="_AVTAkH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r1PhcL-jEeGnLN6u0QNctQ" name="serviceState" visibility="public">
+ <ownedComment xmi:id="_r1Phcb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Return the state of the specified service.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r1SkwL-jEeGnLN6u0QNctQ" type="_r1RWoL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_r1UZ8L-jEeGnLN6u0QNctQ" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r1VoEL-jEeGnLN6u0QNctQ" name="serviceState" visibility="public">
+ <ownedComment xmi:id="_r1WPIL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Return the state of the specified service.&#xD;
+ * @param key&#xD;
+ * @param searchInParents&#xD;
+ * @return&#xD;
+ * @throws ServiceNotFoundException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r1XdQL-jEeGnLN6u0QNctQ" type="_r1RWoL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_r1agkL-jEeGnLN6u0QNctQ" name="key" type="_AUoSMH12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_r1cVwL-jEeGnLN6u0QNctQ" name="searchInParents" type="_AVTAkH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r1dj4L-jEeGnLN6u0QNctQ" name="serviceState" visibility="public">
+ <ownedComment xmi:id="_r1eK8L-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Return the state of the specified service.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r1fZEL-jEeGnLN6u0QNctQ" type="_r1RWoL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_r1hOQL-jEeGnLN6u0QNctQ" name="serviceType" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r1jDcL-jEeGnLN6u0QNctQ" name="serviceState" visibility="public">
+ <ownedComment xmi:id="_r1jDcb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Return the state of the specified service.&#xD;
+ * &#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r1kRkL-jEeGnLN6u0QNctQ" type="_r1RWoL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_r1nU4L-jEeGnLN6u0QNctQ" name="serviceType" type="_AUd6IX12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_r1pKEL-jEeGnLN6u0QNctQ" name="searchInParents" type="_AVTAkH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r1qYML-jEeGnLN6u0QNctQ" name="startNewServices" visibility="public">
+ <ownedComment xmi:id="_r1qYMb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Start services newly added.&#xD;
+ * Start all services marked as start = STARTUP. &#xD;
+ * All services are first created, then initialized and finally&#xD;
+ * started. If an error occur on a service during one of this step, the&#xD;
+ * service is removed from the registry and and the error is logged.&#xD;
+&#xD;
+ * @throws ServiceMultiException&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r1sNYL-jEeGnLN6u0QNctQ" name="startRegistry" visibility="protected">
+ <ownedComment xmi:id="_r1sNYb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Start the registry. Start all services marked as start = STARTUP are&#xD;
+ * started. All services are first created, then initialized and finally&#xD;
+ * started. If an error occur on a service during one of this step, the&#xD;
+ * service is removed from the registry and and the error is logged.&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ * &#xD;
+ * @deprecated Use {@link #startNewServices()} &#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r1upoL-jEeGnLN6u0QNctQ" name="startServices" visibility="public">
+ <ownedComment xmi:id="_r1upob-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Same as {@link #startServices(List)}, but with an array as input.&#xD;
+ * &#xD;
+ * @see #startServices(List)&#xD;
+ * &#xD;
+ * @param serviceKeys&#xD;
+ * Keys of services to start.&#xD;
+ * @throws ServiceMultiException&#xD;
+ * @throws ServiceNotFoundException&#xD;
+ * If a service can't be retrieved by its key.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r1we0L-jEeGnLN6u0QNctQ" name="serviceKeys" type="_AUa20H12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r1yUAL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r10JML-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r13MgL-jEeGnLN6u0QNctQ" name="startServicesByClassKeys" visibility="public">
+ <ownedComment xmi:id="_r13Mgb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Same as {@link #startServicesByClassKeys(List)}, but with an array as&#xD;
+ * input.&#xD;
+ * &#xD;
+ * @see #startServices(List)&#xD;
+ * &#xD;
+ * @param serviceKeys&#xD;
+ * Keys of services to start.&#xD;
+ * @throws ServiceMultiException&#xD;
+ * @throws ServiceNotFoundException&#xD;
+ * If a service can't be retrieved by its key.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r15owL-jEeGnLN6u0QNctQ" name="serviceKeys" type="_AUd6IX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r1624L-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r18sEL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r2A9gL-jEeGnLN6u0QNctQ" name="startServices" visibility="private">
+ <ownedComment xmi:id="_r2BkkL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Start the specified services, and their required services. The specifies&#xD;
+ * services should be in the specified map. The map is also used to resolves&#xD;
+ * dependencies. Start all services marked as start = STARTUP . All eligible&#xD;
+ * services are first created, then initialized and finally started. If an&#xD;
+ * error occur on a service during one of this step, the service is removed&#xD;
+ * from the registry and and the error is logged.&#xD;
+ * &#xD;
+ * @param services&#xD;
+ * Services to start&#xD;
+ * @param map&#xD;
+ * a table of (key, service) used to get a service by its key.&#xD;
+ * @throws ServiceMultiException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r2CysL-jEeGnLN6u0QNctQ" name="services" type="_ry70UL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r2En4L-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r2GdEL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r2HrML-jEeGnLN6u0QNctQ" name="map" type="_r1_vYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r2JgYL-jEeGnLN6u0QNctQ" name="keysToServices" visibility="private">
+ <ownedComment xmi:id="_r2JgYb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Return a list of services from a list of services keys.&#xD;
+ * &#xD;
+ * @param serviceKeys&#xD;
+ * @param map&#xD;
+ * @return&#xD;
+ * @throws ServiceNotFoundException&#xD;
+ * If a service can't be retrieved by its key.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r2MjsL-jEeGnLN6u0QNctQ" type="_ry70UL-jEeGnLN6u0QNctQ" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r2dpcL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r2feoL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r2gswL-jEeGnLN6u0QNctQ" name="serviceKeys" type="_AUa20H12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r2kXIL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r2ookL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r2qdwL-jEeGnLN6u0QNctQ" name="map" type="_r1_vYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r2sS8L-jEeGnLN6u0QNctQ" name="classKeysToServices" visibility="private">
+ <ownedComment xmi:id="_r2sS8b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Return a list of services from a list of services keys.&#xD;
+ * &#xD;
+ * @param serviceKeys&#xD;
+ * @param map&#xD;
+ * @return&#xD;
+ * @throws ServiceNotFoundException&#xD;
+ * If a service can't be retrieved by its key.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r2uIIL-jEeGnLN6u0QNctQ" type="_ry70UL-jEeGnLN6u0QNctQ" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r2vWQL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r2xLcL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r2yZkL-jEeGnLN6u0QNctQ" name="serviceKeys" type="_AUd6IX12EeGOQuKePEwyrw">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r20OwL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r25uUL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r268cL-jEeGnLN6u0QNctQ" name="map" type="_r1_vYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r29YsL-jEeGnLN6u0QNctQ" name="showServices" visibility="private">
+ <ownedComment xmi:id="_r29Ysb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Print the services. For debug purpose&#xD;
+ * &#xD;
+ * @param roots&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r2_N4L-jEeGnLN6u0QNctQ" name="message" type="_AUa20H12EeGOQuKePEwyrw"/>
+ <ownedParameter xmi:id="_r3BDEL-jEeGnLN6u0QNctQ" name="roots" type="_ry70UL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r3DfUL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r3EtcL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r3GioL-jEeGnLN6u0QNctQ" name="checkDependencies" visibility="private">
+ <ownedComment xmi:id="_r3Giob-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Check if all dependencies exist. Throw an error if a declared dependency&#xD;
+ * has no corresponding service.&#xD;
+ * &#xD;
+ * @param services&#xD;
+ * Services to check&#xD;
+ * @param map&#xD;
+ * Map of services by keys.&#xD;
+ * @throws ServiceMultiException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r3I-4L-jEeGnLN6u0QNctQ" name="services" type="_ry70UL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r3KNAL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r3MCML-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r3PFgL-jEeGnLN6u0QNctQ" name="map" type="_r1_vYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r3RhwL-jEeGnLN6u0QNctQ" name="retainsToStartServices" visibility="private">
+ <ownedComment xmi:id="_r3Rhwb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Retains only the services that should be started. Retains only services&#xD;
+ * with startupkind = START and state == REGISTERED&#xD;
+ * &#xD;
+ * @param services&#xD;
+ * Collection to filter&#xD;
+ * @return a new Collection containing the services to start.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r3T-AL-jEeGnLN6u0QNctQ" type="_ry70UL-jEeGnLN6u0QNctQ" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r3VzML-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r3XBUL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r3Y2gL-jEeGnLN6u0QNctQ" name="services" type="_ry70UL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r3arsL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r3cg4L-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r3dvAL-jEeGnLN6u0QNctQ" name="checkCycle" visibility="private">
+ <ownedComment xmi:id="_r3eWEL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Check for cycles. Throws an exception if a cycle is discovered. Each root&#xD;
+ * is checked to see if it contains a cycle.&#xD;
+ * &#xD;
+ * @param roots&#xD;
+ * @param map&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r3gLQL-jEeGnLN6u0QNctQ" name="roots" type="_ry70UL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r3iAcL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r3jOkL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r3lDwL-jEeGnLN6u0QNctQ" name="map" type="_r1_vYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r3m48L-jEeGnLN6u0QNctQ" name="buildTopologicalListOfServicesToStart" visibility="private">
+ <ownedComment xmi:id="_r3m48b-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Build a list of services to start, in the topological order (right&#xD;
+ * order). The required services are placed before the dependent services in&#xD;
+ * the list. Services already started are disguarded.&#xD;
+ * &#xD;
+ * @param roots&#xD;
+ * @param map&#xD;
+ * Map used to resolve the entry by their key.&#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r3ouIL-jEeGnLN6u0QNctQ" type="_ry70UL-jEeGnLN6u0QNctQ" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r3qjUL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r3rxcL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r3tmoL-jEeGnLN6u0QNctQ" name="roots" type="_ry70UL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r3u0wL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r3wC4L-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r3xRAL-jEeGnLN6u0QNctQ" name="map" type="_r1_vYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r3zGML-jEeGnLN6u0QNctQ" name="walkGraphDepthFirst" visibility="private">
+ <ownedComment xmi:id="_r3zGMb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Add recursively the provided node, and then its direct children.&#xD;
+ * &#xD;
+ * @param result&#xD;
+ * The list where the node are added&#xD;
+ * @param node&#xD;
+ * The node to add&#xD;
+ * @param map&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r307YL-jEeGnLN6u0QNctQ" name="result" type="_ry70UL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r32JgL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r33XoL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r35M0L-jEeGnLN6u0QNctQ" name="node" type="_ry70UL-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_r36a8L-jEeGnLN6u0QNctQ" name="map" type="_r1_vYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r38QIL-jEeGnLN6u0QNctQ" name="getServiceRoots" visibility="private">
+ <ownedComment xmi:id="_r38QIb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Create a List of the root services. The roots are services that are not&#xD;
+ * required by any service.&#xD;
+ * &#xD;
+ * @param addedServices&#xD;
+ * A collection from which roots are required. The collection is&#xD;
+ * unmodified.&#xD;
+ * @param map&#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r3-FUL-jEeGnLN6u0QNctQ" type="_ry70UL-jEeGnLN6u0QNctQ" direction="return">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r3_TcL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r4AhkL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r4CWwL-jEeGnLN6u0QNctQ" name="addedServices" type="_ry70UL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r4Dk4L-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r4FaEL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r4GoML-jEeGnLN6u0QNctQ" name="keyServiceMap" type="_r1_vYL-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r4IdYL-jEeGnLN6u0QNctQ" name="disposeRegistry" visibility="public">
+ <ownedComment xmi:id="_r4IdYb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Dispose all services for this registry and its parents.&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ </body>
+ </ownedComment>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r4JrgL-jEeGnLN6u0QNctQ" name="disposeRegistry" visibility="public">
+ <ownedComment xmi:id="_r4Jrgb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Dispose all services, and parent registries if any.&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r4MHwL-jEeGnLN6u0QNctQ" name="isRecursive" type="_AVTAkH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r4PLEL-jEeGnLN6u0QNctQ" name="disposeRegistry" visibility="protected">
+ <ownedComment xmi:id="_r4PLEb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Dispose all services, and parent registries if any.&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r4RAQL-jEeGnLN6u0QNctQ" name="errors" type="_r4N88L-jEeGnLN6u0QNctQ"/>
+ <ownedParameter xmi:id="_r4S1cL-jEeGnLN6u0QNctQ" name="isRecursive" type="_AVTAkH12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r4UqoL-jEeGnLN6u0QNctQ" name="createServices" visibility="private">
+ <ownedComment xmi:id="_r4Uqob-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Create all services provided in the list&#xD;
+ * &#xD;
+ * @param toStart&#xD;
+ * List of services to create.&#xD;
+ * @param errors&#xD;
+ * Exception to collect errors.&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ * If an error occure during the creation&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r4Wf0L-jEeGnLN6u0QNctQ" name="toStart" type="_ry70UL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r4Xt8L-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r4Y8EL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r4axQL-jEeGnLN6u0QNctQ" name="errors" type="_r4N88L-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r4cmcL-jEeGnLN6u0QNctQ" name="registerServices" visibility="private">
+ <ownedComment xmi:id="_r4cmcb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Register all services provided in the list. After this operation,&#xD;
+ * services are available thru {@link #getService(Class)}.&#xD;
+ * &#xD;
+ * @param toStart&#xD;
+ * List of services to register.&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r4eboL-jEeGnLN6u0QNctQ" name="toStart" type="_ry70UL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r4gQ0L-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r4he8L-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r4jUIL-jEeGnLN6u0QNctQ" name="initServices" visibility="private">
+ <ownedComment xmi:id="_r4jUIb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Init all services provided in the list&#xD;
+ * &#xD;
+ * @param toStart&#xD;
+ * List of services to init.&#xD;
+ * @param errors&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ * If an error occure during the process&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r4lJUL-jEeGnLN6u0QNctQ" name="toStart" type="_ry70UL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r4mXcL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r4nlkL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r4pawL-jEeGnLN6u0QNctQ" name="errors" type="_r4N88L-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r4qo4L-jEeGnLN6u0QNctQ" name="startServices" visibility="private">
+ <ownedComment xmi:id="_r4rP8L-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Init all services provided in the list&#xD;
+ * &#xD;
+ * @param toStart&#xD;
+ * List of services to init.&#xD;
+ * @param errors&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ * If an error occure during the process&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r4tFIL-jEeGnLN6u0QNctQ" name="toStart" type="_ry70UL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r4uTQL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r4vhYL-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r4xWkL-jEeGnLN6u0QNctQ" name="errors" type="_r4N88L-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r4yksL-jEeGnLN6u0QNctQ" name="disposeServices" visibility="private">
+ <ownedComment xmi:id="_r4zLwL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Dispose all started services.&#xD;
+ * Services are disposed in creation reverse order&#xD;
+ * &#xD;
+ * @throws ServiceMultiException&#xD;
+ * &#xD;
+ * @throws ServiceException&#xD;
+ * If a service can't be started.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r40Z4L-jEeGnLN6u0QNctQ" name="services" type="_ry70UL-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r42PEL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r43dML-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedParameter>
+ <ownedParameter xmi:id="_r45SYL-jEeGnLN6u0QNctQ" name="errors" type="_r4N88L-jEeGnLN6u0QNctQ"/>
+ </ownedOperation>
+ <nestedClassifier xmi:type="uml:Class" xmi:id="_r1_vYL-jEeGnLN6u0QNctQ" name="LookupMap" visibility="private">
+ <ownedComment xmi:id="_r48VsL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * This class represents a union of two maps of &lt;String,&#xD;
+ * ServiceStartupEntry>. It provide specific methods to retrieve a {@link ServiceStartupEntry} by its key.&#xD;
+ * &lt;br>&#xD;
+ * This class is used to lookup {@link ServiceStartupEntry} in multiple namespaces (2 maps, and then registries).&#xD;
+ * &#xD;
+ * &#xD;
+ * @author cedric dumoulin&#xD;
+ * &#xD;
+ </body>
+ </ownedComment>
+ <ownedAttribute xmi:id="_r4-K4L-jEeGnLN6u0QNctQ" name="map1" type="_AUUwMX12EeGOQuKePEwyrw" isUnique="false"/>
+ <ownedAttribute xmi:id="_r5AnIL-jEeGnLN6u0QNctQ" name="map2" type="_AUUwMX12EeGOQuKePEwyrw" isUnique="false"/>
+ <ownedAttribute xmi:id="_r5DqcL-jEeGnLN6u0QNctQ" name="registries" type="_rx_ZIL-jEeGnLN6u0QNctQ" isUnique="false">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_r5GGsL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_r5H74L-jEeGnLN6u0QNctQ" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_r5JxEL-jEeGnLN6u0QNctQ" name="get" visibility="public">
+ <ownedComment xmi:id="_r5JxEb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get a service by its key.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * @return the service or null if not found.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r5LmQL-jEeGnLN6u0QNctQ" type="_ry70UL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_r5NbcL-jEeGnLN6u0QNctQ" name="key" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r5PQoL-jEeGnLN6u0QNctQ" name="getChecked" visibility="public">
+ <ownedComment xmi:id="_r5P3sL-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Get a service by its key.&#xD;
+ * &#xD;
+ * @param key&#xD;
+ * @return The requested service.&#xD;
+ * @throws ServiceNotFoundException&#xD;
+ * if the service can't be found.&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r5Rs4L-jEeGnLN6u0QNctQ" type="_ry70UL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_r5TiEL-jEeGnLN6u0QNctQ" name="key" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_r5VXQL-jEeGnLN6u0QNctQ" name="getFromRegistries" visibility="private">
+ <ownedComment xmi:id="_r5VXQb-jEeGnLN6u0QNctQ">
+ <body>&#xD;
+ * Try to get the entry from the registries.&#xD;
+ * @param key&#xD;
+ * @return&#xD;
+ </body>
+ </ownedComment>
+ <ownedParameter xmi:id="_r5YakL-jEeGnLN6u0QNctQ" type="_ry70UL-jEeGnLN6u0QNctQ" direction="return"/>
+ <ownedParameter xmi:id="_r5nrIL-jEeGnLN6u0QNctQ" name="key" type="_AUa20H12EeGOQuKePEwyrw"/>
+ </ownedOperation>
+ </nestedClassifier>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_ry7NQL-jEeGnLN6u0QNctQ" name="internal">
+ <packagedElement xmi:type="uml:Class" xmi:id="_ry70UL-jEeGnLN6u0QNctQ" name="ServiceStartupEntry"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_r0ZM4L-jEeGnLN6u0QNctQ" name="S"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_r1RWoL-jEeGnLN6u0QNctQ" name="ServiceState"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_r4N88L-jEeGnLN6u0QNctQ" name="ServiceMultiException"/>
+ <packagedElement xmi:type="uml:Association" xmi:id="_6y8P0L-jEeGnLN6u0QNctQ" name="A_descriptorProviders_serviceRegistryFactory" memberEnd="_rx7HsL-jEeGnLN6u0QNctQ _6zCWcL-jEeGnLN6u0QNctQ">
+ <ownedEnd xmi:id="_6zCWcL-jEeGnLN6u0QNctQ" name="serviceRegistryFactory" type="_rx1oIL-jEeGnLN6u0QNctQ" association="_6y8P0L-jEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_6zFZwL-jEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_6zIdEL-jEeGnLN6u0QNctQ" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_CfTekL-kEeGnLN6u0QNctQ" name="A_descriptorsCache_descriptorsCache" memberEnd="_rqhfML-jEeGnLN6u0QNctQ _CfXI8L-kEeGnLN6u0QNctQ">
+ <ownedEnd xmi:id="_CfXI8L-kEeGnLN6u0QNctQ" name="descriptorsCache" type="_rqaxgL-jEeGnLN6u0QNctQ" association="_CfTekL-kEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_CfYXEL-kEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_CfaMQL-kEeGnLN6u0QNctQ" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_G2_3kL-kEeGnLN6u0QNctQ" name="A_declaredDescriptorProvider_descriptorsCache" memberEnd="_rqlJkL-jEeGnLN6u0QNctQ _G3F-ML-kEeGnLN6u0QNctQ">
+ <ownedEnd xmi:id="_G3F-ML-kEeGnLN6u0QNctQ" name="descriptorsCache" type="_rqaxgL-jEeGnLN6u0QNctQ" association="_G2_3kL-kEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_G3JBgL-kEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_G3ME0L-kEeGnLN6u0QNctQ" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_l2cLQL-kEeGnLN6u0QNctQ" name="A_descriptorsProviders_descriptorsProviderCollection" memberEnd="_rrnrYL-jEeGnLN6u0QNctQ _l2i48L-kEeGnLN6u0QNctQ">
+ <ownedEnd xmi:id="_l2i48L-kEeGnLN6u0QNctQ" name="descriptorsProviderCollection" type="_rqkigL-jEeGnLN6u0QNctQ" association="_l2cLQL-kEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_l2mjUL-kEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_l2o_kL-kEeGnLN6u0QNctQ" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Model" xmi:id="_AUS7AH12EeGOQuKePEwyrw" name="java">
+ <packagedElement xmi:type="uml:Package" xmi:id="_AUS7AX12EeGOQuKePEwyrw" name="java">
+ <packagedElement xmi:type="uml:Package" xmi:id="_AUS7An12EeGOQuKePEwyrw" name="util">
+ <packagedElement xmi:type="uml:Package" xmi:id="_AUTiEH12EeGOQuKePEwyrw" name="logging">
+ <packagedElement xmi:type="uml:Class" xmi:id="_AUTiEX12EeGOQuKePEwyrw" name="Logger"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_AUUwMX12EeGOQuKePEwyrw" name="Map"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_AUaPwX12EeGOQuKePEwyrw" name="lang">
+ <packagedElement xmi:type="uml:Class" xmi:id="_AUa20H12EeGOQuKePEwyrw" name="String"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_AUd6IX12EeGOQuKePEwyrw" name="Class"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_AUoSMH12EeGOQuKePEwyrw" name="Object"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_rumG4L-jEeGnLN6u0QNctQ" name="Throwable"/>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Model" xmi:id="_AUa20X12EeGOQuKePEwyrw" name="datatype">
+ <packagedElement xmi:type="uml:Package" xmi:id="_AUbd4H12EeGOQuKePEwyrw" name="datatype">
+ <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_AUbd4X12EeGOQuKePEwyrw" name="Integer"/>
+ <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_AVTAkH12EeGOQuKePEwyrw" name="Boolean"/>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Model" xmi:id="_rugnUL-jEeGnLN6u0QNctQ" name="core">
+ <packagedElement xmi:type="uml:Package" xmi:id="_ruh1cL-jEeGnLN6u0QNctQ" name="org">
+ <packagedElement xmi:type="uml:Package" xmi:id="_ruicgL-jEeGnLN6u0QNctQ" name="eclipse">
+ <packagedElement xmi:type="uml:Package" xmi:id="_rujqoL-jEeGnLN6u0QNctQ" name="core">
+ <packagedElement xmi:type="uml:Package" xmi:id="_rukRsL-jEeGnLN6u0QNctQ" name="runtime">
+ <packagedElement xmi:type="uml:Interface" xmi:id="_ruk4wL-jEeGnLN6u0QNctQ" name="IConfigurationElement"/>
+ <packagedElement xmi:type="uml:Interface" xmi:id="_rwCRUL-jEeGnLN6u0QNctQ" name="IExtensionRegistry"/>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ <profileApplication xmi:id="_sQQ24H1zEeGOQuKePEwyrw">
+ <eAnnotations xmi:id="_sQrtoH1zEeGOQuKePEwyrw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/JAVA/1#/"/>
+ </eAnnotations>
+ <appliedProfile href="pathmap://Papyrus_JAVA_PROFILES/java.profile.uml#_6TYLMN0yEd6P1qtlpBOZyg"/>
+ </profileApplication>
+ </uml:Model>
+ <java:JavaPackage_ xmi:id="_cBGEIH10EeGOQuKePEwyrw" srcName="src" projectName="org.eclipse.papyrus.infra.core.serviceregistry" packageName="org.eclipse.papyrus.infra.core.serviceregistry" base_Package="_kaJEoH1yEeGcMtmaQ3nQLw"/>
+</xmi:XMI>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.di b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.di
new file mode 100644
index 00000000000..0a572c37440
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.di
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ASCII"?>
+<di:SashWindowsMngr xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.eclipse.org/papyrus/0.7.0/sashdi">
+ <pageList>
+ <availablePage>
+ <emfPageIdentifier href="servicedescriptors.notation#_uOttEIV1EeGphc0tcQWDWg"/>
+ </availablePage>
+ <availablePage>
+ <emfPageIdentifier href="servicedescriptors.notation#_xTlMQIV1EeGphc0tcQWDWg"/>
+ </availablePage>
+ <availablePage/>
+ <availablePage>
+ <emfPageIdentifier href="servicedescriptors.notation#_bZI7kIehEeGphc0tcQWDWg"/>
+ </availablePage>
+ </pageList>
+ <sashModel currentSelection="//@sashModel/@windows.0/@children.0">
+ <windows>
+ <children xsi:type="di:TabFolder">
+ <children>
+ <emfPageIdentifier href="servicedescriptors.notation#_xTlMQIV1EeGphc0tcQWDWg"/>
+ </children>
+ <children>
+ <emfPageIdentifier href="servicedescriptors.notation#_uOttEIV1EeGphc0tcQWDWg"/>
+ </children>
+ <children/>
+ <children>
+ <emfPageIdentifier href="servicedescriptors.notation#_bZI7kIehEeGphc0tcQWDWg"/>
+ </children>
+ </children>
+ </windows>
+ </sashModel>
+</di:SashWindowsMngr>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.ecore b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.ecore
new file mode 100644
index 00000000000..631ae3c0a16
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.ecore
@@ -0,0 +1,141 @@
+<?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="servicedescriptors" nsURI="org.eclipse.papyrus..infra.core.servicedescriptors"
+ nsPrefix="org.eclipse.papyrus..infra.core.serviceregistry.servicedescriptors">
+ <eClassifiers xsi:type="ecore:EDataType" name="String" instanceClassName="java.lang.String"/>
+ <eClassifiers xsi:type="ecore:EDataType" name="boolean" instanceClassName="boolean"/>
+ <eClassifiers xsi:type="ecore:EClass" name="RegistryDesc">
+ <eOperations name="getServiceDesc" ordered="false" lowerBound="1" eType="#//AbstractServiceDesc">
+ <eParameters name="serviceId" ordered="false" lowerBound="1" eType="#//String"/>
+ </eOperations>
+ <eOperations name="getServiceSetDesc" ordered="false" lowerBound="1" eType="#//ServiceSetDesc">
+ <eParameters name="serviceSetsId" ordered="false" lowerBound="1" eType="#//String"/>
+ </eOperations>
+ <eOperations name="serviceSetsContains" ordered="false" lowerBound="1" eType="#//boolean">
+ <eParameters name="serviceSetsId" ordered="false" lowerBound="1" eType="#//String"/>
+ </eOperations>
+ <eOperations name="servicesContains" ordered="false" lowerBound="1" eType="#//boolean">
+ <eParameters name="serviceId" ordered="false" lowerBound="1" eType="#//String"/>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parents" ordered="false"
+ upperBound="-1" eType="#//RegistryDesc" eOpposite="#//RegistryDesc/children"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="children" ordered="false"
+ upperBound="-1" eType="#//RegistryDesc" eOpposite="#//RegistryDesc/parents"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="extends" ordered="false"
+ upperBound="-1" eType="#//RegistryDesc"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="serviceSets" ordered="false"
+ upperBound="-1" eType="#//ServiceSetDesc"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isUnique" ordered="false"
+ lowerBound="1" eType="#//boolean"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="services" ordered="false"
+ upperBound="-1" eType="#//AbstractServiceDesc"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ServiceSetDesc">
+ <eOperations name="getServiceDesc" ordered="false" lowerBound="1" eType="#//AbstractServiceDesc">
+ <eParameters name="serviceId" ordered="false" lowerBound="1" eType="#//String"/>
+ </eOperations>
+ <eOperations name="servicesContains" ordered="false" lowerBound="1" eType="#//boolean">
+ <eParameters name="serviceId" ordered="false" lowerBound="1" eType="#//String"/>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="services" ordered="false"
+ upperBound="-1" eType="#//AbstractServiceDesc"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="ownedServices" ordered="false"
+ upperBound="-1" eType="#//AbstractServiceDesc" containment="true" eOpposite="#//AbstractServiceDesc/parent"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="extends" ordered="false"
+ upperBound="-1" eType="#//ServiceSetDesc"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AbstractServiceDesc" abstract="true">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="dependsOn" ordered="false"
+ upperBound="-1" eType="#//AbstractServiceDesc"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="priority" ordered="false"
+ lowerBound="1" eType="#//int"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="bundleID" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parent" ordered="false"
+ lowerBound="1" eType="#//ServiceSetDesc" eOpposite="#//ServiceSetDesc/ownedServices"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="dependsOnIds" upperBound="-1"
+ eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EDataType" name="int" instanceClassName="int"/>
+ <eClassifiers xsi:type="ecore:EClass" name="ServiceDesc" eSuperTypes="#//AbstractServiceDesc">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="startKind" ordered="false"
+ lowerBound="1" eType="#//StartupKind" defaultValueLiteral="lazy"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="classname" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="injections" ordered="false"
+ upperBound="-1" eType="#//FeatureInjection" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EEnum" name="StartupKind">
+ <eLiterals name="lazy"/>
+ <eLiterals name="startup" value="1"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="FeatureInjection" abstract="true">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AliasDesc" eSuperTypes="#//AbstractServiceDesc">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="aliasedService" ordered="false"
+ lowerBound="1" eType="#//ServiceDesc"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="aliasedServiceId" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="Descriptors">
+ <eOperations name="getRegistryDesc" ordered="false" lowerBound="1" eType="#//RegistryDesc">
+ <eParameters name="name" ordered="false" lowerBound="1" eType="#//String"/>
+ </eOperations>
+ <eOperations name="getServiceSetDesc" ordered="false" lowerBound="1" eType="#//ServiceSetDesc">
+ <eParameters name="name" ordered="false" lowerBound="1" eType="#//String"/>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="registries" ordered="false"
+ upperBound="-1" eType="#//RegistryDesc" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="serviceSets" ordered="false"
+ upperBound="-1" eType="#//ServiceSetDesc" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="PropertyInjection" eSuperTypes="#//FeatureInjection">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="propertyName" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="values" ordered="false"
+ upperBound="-1" eType="#//InjectedValue" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InjectedValue" abstract="true">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="MethodInjection" eSuperTypes="#//AbstractMethodInjection">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="methodName" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AbstractMethodInjection" abstract="true"
+ eSuperTypes="#//FeatureInjection">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" ordered="false"
+ upperBound="-1" eType="#//ParameterInjection" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ParameterInjection">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="parameterName" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="values" ordered="false"
+ upperBound="-1" eType="#//InjectedValue" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InjectedService" eSuperTypes="#//InjectedValue">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="service" ordered="false"
+ lowerBound="1" eType="#//AbstractServiceDesc"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="OpaqueInjectedValue" eSuperTypes="#//InjectedValue">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ConstructorInjection" eSuperTypes="#//AbstractMethodInjection"/>
+ <eClassifiers xsi:type="ecore:EClass" name="ServiceFactoryDesc" eSuperTypes="#//ServiceDesc"/>
+</ecore:EPackage>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.genmodel b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.genmodel
new file mode 100644
index 00000000000..76f66992f5a
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.genmodel
@@ -0,0 +1,145 @@
+<?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"
+ modelDirectory="/org.eclipse.papyrus.infra.core.serviceregistry/src"
+ modelPluginID="org.eclipse.papyrus.infra.core.serviceregistry" modelName="Servicedescriptors"
+ importerID="org.eclipse.uml2.uml.ecore.importer" complianceLevel="5.0" copyrightFields="false">
+ <genAnnotations source="http://www.eclipse.org/emf/2002/GenModel/importer/org.eclipse.uml2.uml.ecore.importer">
+ <details key="ECORE_TAGGED_VALUES" value="PROCESS"/>
+ <details key="UNION_PROPERTIES" value="REPORT"/>
+ <details key="DUPLICATE_FEATURES" value="DISCARD"/>
+ <details key="SUBSETTING_PROPERTIES" value="REPORT"/>
+ <details key="COMMENTS" value="PROCESS"/>
+ <details key="DUPLICATE_FEATURE_INHERITANCE" value="DISCARD"/>
+ <details key="DUPLICATE_OPERATIONS" value="DISCARD"/>
+ <details key="INVARIANT_CONSTRAINTS" value="PROCESS"/>
+ <details key="REDEFINING_PROPERTIES" value="REPORT"/>
+ <details key="ANNOTATION_DETAILS" value="PROCESS"/>
+ <details key="DUPLICATE_OPERATION_INHERITANCE" value="DISCARD"/>
+ <details key="REDEFINING_OPERATIONS" value="REPORT"/>
+ <details key="DERIVED_FEATURES" value="PROCESS"/>
+ <details key="OPERATION_BODIES" value="IGNORE"/>
+ <details key="CAMEL_CASE_NAMES" value="IGNORE"/>
+ <details key="SUPER_CLASS_ORDER" value="PROCESS"/>
+ </genAnnotations>
+ <foreignModel>servicedescriptors.uml</foreignModel>
+ <genPackages xsi:type="genmodel:GenPackage" prefix="Servicedescriptors" basePackage="org.eclipse.papyrus.infra.core.serviceregistry"
+ disposableProviderFactory="true" ecorePackage="servicedescriptors.ecore#/">
+ <genEnums xsi:type="genmodel:GenEnum" typeSafeEnumCompatible="false" ecoreEnum="servicedescriptors.ecore#//StartupKind">
+ <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="servicedescriptors.ecore#//StartupKind/lazy"/>
+ <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="servicedescriptors.ecore#//StartupKind/startup"/>
+ </genEnums>
+ <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="servicedescriptors.ecore#//String"/>
+ <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="servicedescriptors.ecore#//boolean"/>
+ <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="servicedescriptors.ecore#//int"/>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptors.ecore#//RegistryDesc">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//RegistryDesc/name"/>
+ <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+ propertySortChoices="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//RegistryDesc/parents"/>
+ <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+ propertySortChoices="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//RegistryDesc/children"/>
+ <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+ propertySortChoices="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//RegistryDesc/extends"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//RegistryDesc/description"/>
+ <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+ propertySortChoices="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//RegistryDesc/serviceSets"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//RegistryDesc/isUnique"/>
+ <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+ propertySortChoices="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//RegistryDesc/services"/>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="servicedescriptors.ecore#//RegistryDesc/getServiceDesc">
+ <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="servicedescriptors.ecore#//RegistryDesc/getServiceDesc/serviceId"/>
+ </genOperations>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="servicedescriptors.ecore#//RegistryDesc/getServiceSetDesc">
+ <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="servicedescriptors.ecore#//RegistryDesc/getServiceSetDesc/serviceSetsId"/>
+ </genOperations>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="servicedescriptors.ecore#//RegistryDesc/serviceSetsContains">
+ <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="servicedescriptors.ecore#//RegistryDesc/serviceSetsContains/serviceSetsId"/>
+ </genOperations>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="servicedescriptors.ecore#//RegistryDesc/servicesContains">
+ <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="servicedescriptors.ecore#//RegistryDesc/servicesContains/serviceId"/>
+ </genOperations>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptors.ecore#//ServiceSetDesc">
+ <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+ propertySortChoices="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//ServiceSetDesc/services"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//ServiceSetDesc/ownedServices"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//ServiceSetDesc/name"/>
+ <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+ propertySortChoices="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//ServiceSetDesc/extends"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//ServiceSetDesc/description"/>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="servicedescriptors.ecore#//ServiceSetDesc/getServiceDesc">
+ <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="servicedescriptors.ecore#//ServiceSetDesc/getServiceDesc/serviceId"/>
+ </genOperations>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="servicedescriptors.ecore#//ServiceSetDesc/servicesContains">
+ <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="servicedescriptors.ecore#//ServiceSetDesc/servicesContains/serviceId"/>
+ </genOperations>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="servicedescriptors.ecore#//AbstractServiceDesc">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//AbstractServiceDesc/name"/>
+ <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+ propertySortChoices="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//AbstractServiceDesc/dependsOn"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//AbstractServiceDesc/description"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//AbstractServiceDesc/priority"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//AbstractServiceDesc/bundleID"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" notify="false" createChild="false"
+ ecoreFeature="ecore:EReference servicedescriptors.ecore#//AbstractServiceDesc/parent"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//AbstractServiceDesc/dependsOnIds"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptors.ecore#//ServiceDesc">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//ServiceDesc/startKind"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//ServiceDesc/classname"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//ServiceDesc/injections"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="servicedescriptors.ecore#//FeatureInjection">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//FeatureInjection/description"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptors.ecore#//AliasDesc">
+ <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+ propertySortChoices="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//AliasDesc/aliasedService"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//AliasDesc/aliasedServiceId"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptors.ecore#//Descriptors">
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//Descriptors/registries"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//Descriptors/serviceSets"/>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="servicedescriptors.ecore#//Descriptors/getRegistryDesc">
+ <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="servicedescriptors.ecore#//Descriptors/getRegistryDesc/name"/>
+ </genOperations>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="servicedescriptors.ecore#//Descriptors/getServiceSetDesc">
+ <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="servicedescriptors.ecore#//Descriptors/getServiceSetDesc/name"/>
+ </genOperations>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptors.ecore#//PropertyInjection">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//PropertyInjection/propertyName"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//PropertyInjection/values"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="servicedescriptors.ecore#//InjectedValue">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//InjectedValue/description"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptors.ecore#//MethodInjection">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//MethodInjection/methodName"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="servicedescriptors.ecore#//AbstractMethodInjection">
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//AbstractMethodInjection/parameters"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptors.ecore#//ParameterInjection">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//ParameterInjection/parameterName"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//ParameterInjection/values"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptors.ecore#//InjectedService">
+ <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+ propertySortChoices="true" ecoreFeature="ecore:EReference servicedescriptors.ecore#//InjectedService/service"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptors.ecore#//OpaqueInjectedValue">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptors.ecore#//OpaqueInjectedValue/value"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptors.ecore#//ConstructorInjection"/>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptors.ecore#//ServiceFactoryDesc"/>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.notation b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.notation
new file mode 100644
index 00000000000..b66a2629fc8
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.notation
@@ -0,0 +1,1480 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:uml="http://www.eclipse.org/uml2/4.0.0/UML">
+ <notation:Diagram xmi:id="_uOttEIV1EeGphc0tcQWDWg" type="PapyrusUMLClassDiagram" name="overview" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_BMrL4IV2EeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_BMsaAIV2EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_BMsaAYV2EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_BMsaAoV2EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_BMsaA4V2EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_BMsaBIV2EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_BMsaBYV2EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_BMtBEIV2EeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_BMtBEYV2EeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_MCPAMIV2EeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_MB5pAIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MCPAMYV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_qkhxIIWzEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_lDZq4IWzEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_qkhxIYWzEeGphc0tcQWDWg" x="112" y="25"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_vgDZ0KQZEeGh66WyiiFoSg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_vfk4sKQZEeGh66WyiiFoSg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_vgDZ0aQZEeGh66WyiiFoSg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_BMtBEoV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_BMtBE4V2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_BMtBFIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BMtBFYV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_BMtBFoV2EeGphc0tcQWDWg" type="7018">
+ <children xmi:type="notation:Shape" xmi:id="_gx6_8L-NEeGnLN6u0QNctQ" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_VayTIL-OEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_WWIhEL-OEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="4872"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="servicedescriptors.uml#_gxXmUL-NEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_gx6_8b-NEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_9fCrsL-NEeGnLN6u0QNctQ" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_W7kJYL-OEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_YWczAL-OEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="21256"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="servicedescriptors.uml#_07eIIL-NEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_9fCrsb-NEeGnLN6u0QNctQ" x="45" y="54"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_2tvygL-XEeGnLN6u0QNctQ" type="3013" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Operation" href="servicedescriptors.uml#_zjfzIL-OEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2tvygb-XEeGnLN6u0QNctQ" x="89" y="59"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_2uvRAL-XEeGnLN6u0QNctQ" type="3013" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Operation" href="servicedescriptors.uml#_zjfMEL-OEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2uvRAb-XEeGnLN6u0QNctQ" x="89" y="59"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_BMtBF4V2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_BMtBGIV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_BMtBGYV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BMtBGoV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_BMtBG4V2EeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_BMtoIIV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_BMtoIYV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_BMtoIoV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BMtoI4V2EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_BL_2cIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BMrL4YV2EeGphc0tcQWDWg" x="384" y="246" width="169" height="292"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_DwOtwIV2EeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DwPU0IV2EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_DwPU0YV2EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DwPU0oV2EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_DwPU04V2EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DwP74IV2EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_DwP74YV2EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_DwP74oV2EeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_DwP744V2EeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_QZeT8IV7EeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_QZGggIV7EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QZeT8YV7EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_lSyPsIV8EeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_lSt-QIV8EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lSyPsYV8EeGphc0tcQWDWg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_DwP75IV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DwP75YV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DwP75oV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DwP754V2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_DwP76IV2EeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_DwP76YV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DwP76oV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DwP764V2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DwP77IV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_DwQi8IV2EeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_DwQi8YV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DwQi8oV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DwQi84V2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DwQi9IV2EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_Dvz3AIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DwOtwYV2EeGphc0tcQWDWg" x="774" y="462" height="289"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Exsx0IV2EeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ExtY4IV2EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ExtY4YV2EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ExtY4oV2EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ExtY44V2EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Ext_8IV2EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Ext_8YV2EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Ext_8oV2EeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Ext_84V2EeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_rGrAsL-iEeGnLN6u0QNctQ" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_rGFK0L-iEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_rGrAsb-iEeGnLN6u0QNctQ"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Ext_9IV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Ext_9YV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Ext_9oV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ext_94V2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Ext_-IV2EeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Ext_-YV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Ext_-oV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Ext_-4V2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ext__IV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_ExunAIV2EeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_ExunAYV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ExunAoV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ExunA4V2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ExunBIV2EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_ExJYMIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Exsx0YV2EeGphc0tcQWDWg" x="1134" y="468"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_GDz58IV2EeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GD0hAIV2EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GD0hAYV2EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GD1IEIV2EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GD1IEYV2EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GD1IEoV2EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GD1IE4V2EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_GD1IFIV2EeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_GD1IFYV2EeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_UTkkQIV2EeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_QtlVAIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_UTkkQYV2EeGphc0tcQWDWg" x="91" y="8"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_jzvdAIW3EeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_ZILSMIW3EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_jzvdAYW3EeGphc0tcQWDWg" x="67" y="30"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_fayVMIW2EeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_faZToIW2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fayVMYW2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="__nK4EL7YEeGnLN6u0QNctQ" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#__nBHEL7YEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="__nK4Eb7YEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_i45uAL-iEeGnLN6u0QNctQ" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_i4YJkL-iEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_i45uAb-iEeGnLN6u0QNctQ"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_GD1IFoV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_GD1IF4V2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_GD1IGIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GD1IGYV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_GD1vIIV2EeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_GD1vIYV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_GD1vIoV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_GD1vI4V2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GD1vJIV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_GD1vJYV2EeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_GD1vJoV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_GD1vJ4V2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_GD1vKIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GD1vKYV2EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_GDPSMIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GDz58YV2EeGphc0tcQWDWg" x="786" y="48" width="421" height="192"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_hJBFUIV5EeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_hJBsYIV5EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_hJBsYYV5EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_hJCTcIV5EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_hJCTcYV5EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_hJCTcoV5EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_hJCTc4V5EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_hJCTdIV5EeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_hJCTdYV5EeGphc0tcQWDWg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_hJCTdoV5EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_hJCTd4V5EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_hJCTeIV5EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hJCTeYV5EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_hJCTeoV5EeGphc0tcQWDWg" type="7018">
+ <children xmi:type="notation:Shape" xmi:id="_bDMLgL7dEeGnLN6u0QNctQ" type="3013" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_jO0JIL7dEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_mWedoL7dEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="4872"/>
+ </eAnnotations>
+ <element xmi:type="uml:Operation" href="servicedescriptors.uml#_bChdIL7dEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_bDMLgb7dEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_5KIJ4L7dEeGnLN6u0QNctQ" type="3013" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Operation" href="servicedescriptors.uml#_y9mWML7dEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_5KIJ4b7dEeGnLN6u0QNctQ" x="82" y="112"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_hJCTe4V5EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_hJC6gIV5EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_hJC6gYV5EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hJC6goV5EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_hJC6g4V5EeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_hJC6hIV5EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_hJC6hYV5EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_hJC6hoV5EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hJC6h4V5EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_hIgH8IV5EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hJBFUYV5EeGphc0tcQWDWg" x="18" y="42" width="247" height="475"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_InygUIV7EeGphc0tcQWDWg" type="2006" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_InzHYIV7EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_InzucIV7EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_InzucYV7EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_InzucoV7EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Inzuc4V7EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_InzudIV7EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_InzudYV7EeGphc0tcQWDWg" type="5023"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_InzudoV7EeGphc0tcQWDWg" type="7015">
+ <children xmi:type="notation:Shape" xmi:id="_KCrxAIV7EeGphc0tcQWDWg" type="3017" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:EnumerationLiteral" href="servicedescriptors.uml#_KCKzoIV7EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KCrxAYV7EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_LOtfQIV7EeGphc0tcQWDWg" type="3017" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:EnumerationLiteral" href="servicedescriptors.uml#_LOWS4IV7EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_LOtfQYV7EeGphc0tcQWDWg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Inzud4V7EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_InzueIV7EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_InzueYV7EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_InzueoV7EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Enumeration" href="servicedescriptors.uml#_InHx8IV7EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_InygUYV7EeGphc0tcQWDWg" x="1368" y="456"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_vKZOAIV8EeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vKZ1EIV8EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vKZ1EYV8EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vKacIIV8EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vKacIYV8EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vKacIoV8EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vKacI4V8EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_vKacJIV8EeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_vKacJYV8EeGphc0tcQWDWg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_vKacJoV8EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_vKacJ4V8EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_vKacKIV8EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vKacKYV8EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_vKbDMIV8EeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_vKbDMYV8EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_vKbDMoV8EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_vKbDM4V8EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vKbDNIV8EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_vKbDNYV8EeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_vKbDNoV8EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_vKbDN4V8EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_vKbDOIV8EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vKbDOYV8EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_vKUVgIV8EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vKZOAYV8EeGphc0tcQWDWg" x="1134" y="606" width="211"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_19RKUKQYEeGh66WyiiFoSg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_19VbwKQYEeGh66WyiiFoSg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_19WC0KQYEeGh66WyiiFoSg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_19WC0aQYEeGh66WyiiFoSg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_19WC0qQYEeGh66WyiiFoSg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_19Wp4KQYEeGh66WyiiFoSg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_19Wp4aQYEeGh66WyiiFoSg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_19Wp4qQYEeGh66WyiiFoSg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_19Wp46QYEeGh66WyiiFoSg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_MT1HMKQaEeGh66WyiiFoSg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_JiK34KQaEeGh66WyiiFoSg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MT1HMaQaEeGh66WyiiFoSg" x="57" y="22"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_VP048L-REeGnLN6u0QNctQ" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_TIO6UL-REeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_VP048b-REeGnLN6u0QNctQ" x="52" y="30"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_19Wp5KQYEeGh66WyiiFoSg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_19Wp5aQYEeGh66WyiiFoSg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_19Wp5qQYEeGh66WyiiFoSg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_19Wp56QYEeGh66WyiiFoSg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_19Wp6KQYEeGh66WyiiFoSg" type="7018">
+ <children xmi:type="notation:Shape" xmi:id="_9joFML-XEeGnLN6u0QNctQ" type="3013" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Operation" href="servicedescriptors.uml#_53iN8L-XEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_9joFMb-XEeGnLN6u0QNctQ" x="123" y="11"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_9kwtoL-XEeGnLN6u0QNctQ" type="3013" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Operation" href="servicedescriptors.uml#_53i1AL-XEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_9kwtob-XEeGnLN6u0QNctQ" x="123" y="11"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_19Wp6aQYEeGh66WyiiFoSg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_19Wp6qQYEeGh66WyiiFoSg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_19Wp66QYEeGh66WyiiFoSg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_19Wp7KQYEeGh66WyiiFoSg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_19Wp7aQYEeGh66WyiiFoSg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_19Wp7qQYEeGh66WyiiFoSg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_19Wp76QYEeGh66WyiiFoSg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_19Wp8KQYEeGh66WyiiFoSg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_19Wp8aQYEeGh66WyiiFoSg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_18yCIKQYEeGh66WyiiFoSg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_19RKUaQYEeGh66WyiiFoSg" x="384" y="48" width="175" height="145"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_kVt5EL7YEeGnLN6u0QNctQ" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_kVxjcL7YEeGnLN6u0QNctQ" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kVyKgL7YEeGnLN6u0QNctQ" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_kVyKgb7YEeGnLN6u0QNctQ" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kVyKgr7YEeGnLN6u0QNctQ" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_kVyxkL7YEeGnLN6u0QNctQ" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kVyxkb7YEeGnLN6u0QNctQ" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kVyxkr7YEeGnLN6u0QNctQ" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_kVyxk77YEeGnLN6u0QNctQ" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_kVyxlL7YEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kVyxlb7YEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kVyxlr7YEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kVyxl77YEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_kVzYoL7YEeGnLN6u0QNctQ" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_kVzYob7YEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kVzYor7YEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kVzYo77YEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kVzYpL7YEeGnLN6u0QNctQ"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_kVzYpb7YEeGnLN6u0QNctQ" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_kVzYpr7YEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_kVzYp77YEeGnLN6u0QNctQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_kVzYqL7YEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kVzYqb7YEeGnLN6u0QNctQ"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_kT-MoL7YEeGnLN6u0QNctQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_kVt5Eb7YEeGnLN6u0QNctQ" x="582" y="654"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_uOttEYV1EeGphc0tcQWDWg"/>
+ <element xmi:type="uml:Model" href="servicedescriptors.uml#_uOdOYIV1EeGphc0tcQWDWg"/>
+ <edges xmi:type="notation:Connector" xmi:id="_I_SzoIV2EeGphc0tcQWDWg" type="4002" source="_DwOtwIV2EeGphc0tcQWDWg" target="_GDz58IV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_I_Uo0IV2EeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_I_Uo0YV2EeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_I_SzoYV2EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptors.uml#_I-2uwIV2EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_I_SzooV2EeGphc0tcQWDWg" points="[7, -9, -61, 69]$[66, -69, -2, 9]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_I_u4gIV2EeGphc0tcQWDWg" id="(0.71,0.09)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_I_u4gYV2EeGphc0tcQWDWg" id="(0.2826603325415677,0.9516129032258065)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_JmSiMIV2EeGphc0tcQWDWg" type="4002" source="_Exsx0IV2EeGphc0tcQWDWg" target="_GDz58IV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_JmeIYIV2EeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_JmeIYYV2EeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_JmSiMYV2EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptors.uml#_Jl784IV2EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_JmSiMoV2EeGphc0tcQWDWg" points="[-18, -18, 69, 70]$[-88, -80, -1, 8]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JnAT4IV2EeGphc0tcQWDWg" id="(0.12,0.01)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JnA68IV2EeGphc0tcQWDWg" id="(0.8693586698337292,0.9919354838709677)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_6gRd8IV4EeGphc0tcQWDWg" type="4001" source="_19RKUKQYEeGh66WyiiFoSg" target="_GDz58IV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_6gSsEIV4EeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6gSsEYV4EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6gSsEoV4EeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6gSsE4V4EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6gSsFIV4EeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_BdzQwIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_B_6fUIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6gSsFYV4EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6gSsFoV4EeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Bd1tAIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_B_8UgIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6gSsF4V4EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6gTTIIV4EeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_9LyB8IV4EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_9ZuXUIV4EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6gTTIYV4EeGphc0tcQWDWg" x="21" y="-25"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6gTTIoV4EeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_-wTIsIV4EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__d_8MIV4EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6gTTI4V4EeGphc0tcQWDWg" x="-28" y="-19"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_6gRd8YV4EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_6fzj4IV4EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_6gRd8oV4EeGphc0tcQWDWg" points="[9, 9, -229, 0]$[236, 9, -2, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6hAdwIV4EeGphc0tcQWDWg" id="(0.9485714285714286,0.6)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6hAdwYV4EeGphc0tcQWDWg" id="(0.004750593824228029,0.4838709677419355)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_kHvgQIV5EeGphc0tcQWDWg" type="4001" source="_hJBFUIV5EeGphc0tcQWDWg" target="_BMrL4IV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_kHwuYIV5EeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kHwuYYV5EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kHxVcIV5EeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kHxVcYV5EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kHxVcoV5EeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_r2DPwIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_sB56cIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kHxVc4V5EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kHxVdIV5EeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_t8GWQIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-cyhYIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kHxVdYV5EeGphc0tcQWDWg" x="-26" y="15"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kHxVdoV5EeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_r2CBoIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_8rQSUIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kHxVd4V5EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kHx8gIV5EeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_t8ILcIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_uNWeUIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kHx8gYV5EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_kHwHUIV5EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_kHQYEIV5EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_kHwHUYV5EeGphc0tcQWDWg" points="[6, 1, -165, -36]$[168, 36, -3, -1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kJBSoIV5EeGphc0tcQWDWg" id="(0.88,0.5705263157894737)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kJBSoYV5EeGphc0tcQWDWg" id="(0.21893491124260356,0.2403846153846154)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_lnNu8IV5EeGphc0tcQWDWg" type="4001" source="_19RKUKQYEeGh66WyiiFoSg" target="_GDz58IV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lnO9EIV5EeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lnO9EYV5EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lnO9EoV5EeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lnO9E4V5EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lnO9FIV5EeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_r2G6IIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_sCBPMIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lnPkIIV5EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lnPkIYV5EeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_t8QuUIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-czvgIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lnPkIoV5EeGphc0tcQWDWg" x="-44" y="-18"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lnPkI4V5EeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_r2GTEIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_8rMn8IV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lnPkJIV5EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lnPkJYV5EeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_t8NrAIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_uNdMAIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lnPkJoV5EeGphc0tcQWDWg" x="10" y="-32"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lnNu8YV5EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_lmNCUIV5EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lnNu8oV5EeGphc0tcQWDWg" points="[4, -1, -418, 0]$[231, -1, -191, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_loFRoIV5EeGphc0tcQWDWg" id="(0.9771428571428571,0.2)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_loFRoYV5EeGphc0tcQWDWg" id="(0.0,0.14285714285714285)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_LhfGwIV6EeGphc0tcQWDWg" type="4001" source="_BMrL4IV2EeGphc0tcQWDWg" target="_BMrL4IV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_LhgU4IV6EeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_LhgU4YV6EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_LhgU4oV6EeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_LhgU44V6EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Lhg78IV6EeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_NdbPAIV6EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_NskeQIV6EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Lhg78YV6EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Lhg78oV6EeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_PNAWQIV6EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_PbnaAIV6EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Lhg784V6EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Lhg79IV6EeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_PM-hEIV6EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Pblk0IV6EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Lhg79YV6EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Lhg79oV6EeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_NdYywIV6EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_NsjQIIV6EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Lhg794V6EeGphc0tcQWDWg" x="15" y="-32"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Lhft0IV6EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_Lg20oIV6EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Lhft0YV6EeGphc0tcQWDWg" points="[11, -7, 48, -19]$[73, -7, 110, -19]$[73, 119, 110, 107]$[-31, 119, 6, 107]$[-31, 57, 6, 45]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LiQi0IV6EeGphc0tcQWDWg" id="(0.9369369369369369,0.8076923076923077)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_LiQi0YV6EeGphc0tcQWDWg" id="(0.7207207207207207,0.8461538461538461)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_lqq2IIV6EeGphc0tcQWDWg" type="4001" source="_Exsx0IV2EeGphc0tcQWDWg" target="_DwOtwIV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_lqrdMIV6EeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lqrdMYV6EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lqsEQIV6EeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lqsEQYV6EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lqsEQoV6EeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_oCuSoIV6EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_oSi3UIV6EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lqsEQ4V6EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lqsERIV6EeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_oCsdcIV6EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_oSfM8IV6EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lqsERYV6EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lqsERoV6EeGphc0tcQWDWg" visible="false" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_myXeAIV6EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_nFspsIV6EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lqsrUIV6EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lqsrUYV6EeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_myVo0IV6EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_nFq0gIV6EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lqsrUoV6EeGphc0tcQWDWg" x="-25" y="-16"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_lqq2IYV6EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_lqDLEIV6EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_lqq2IoV6EeGphc0tcQWDWg" points="[-3, 1, 235, 0]$[-227, -3, 11, -4]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lrbEEIV6EeGphc0tcQWDWg" id="(0.03,0.41)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_lrbEEYV6EeGphc0tcQWDWg" id="(0.9777777777777777,0.19557195571955718)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_nOgK8IV7EeGphc0tcQWDWg" type="4001" source="_GDz58IV2EeGphc0tcQWDWg" target="_GDz58IV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_nOhZEIV7EeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nOhZEYV7EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_nOhZEoV7EeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nOhZE4V7EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_nOhZFIV7EeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_oxtDEIV7EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_o_-IkIV7EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nOiAIIV7EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_nOiAIYV7EeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_p_jWQIV7EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_qNMJoIV7EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nOiAIoV7EeGphc0tcQWDWg" x="10" y="10"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_nOiAI4V7EeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_p_kkYIV7EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_qNN-0IV7EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nOiAJIV7EeGphc0tcQWDWg" x="-31" y="22"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_nOiAJYV7EeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_oxrN4IV7EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_o_86cIV7EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_nOiAJoV7EeGphc0tcQWDWg" x="-51" y="27"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_nOgK8YV7EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_nOdusIV7EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_nOgK8oV7EeGphc0tcQWDWg" points="[5, 0, 23, -58]$[100, 0, 118, -58]$[100, 114, 118, 56]$[-18, 114, 0, 56]$[-18, 70, 0, 12]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nOsYMIV7EeGphc0tcQWDWg" id="(0.9881235154394299,0.5887096774193549)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_nOsYMYV7EeGphc0tcQWDWg" id="(0.9453681710213777,0.9326923076923077)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_xGfHQIV8EeGphc0tcQWDWg" type="4001" source="_DwOtwIV2EeGphc0tcQWDWg" target="_vKZOAIV8EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_xGgVYIV8EeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xGgVYYV8EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_xGgVYoV8EeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xGgVY4V8EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_xGgVZIV8EeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_2Q26YIV8EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2dTa8IV8EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xGgVZYV8EeGphc0tcQWDWg" x="6" y="-42"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_xGg8cIV8EeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_3yEOcYV8EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_3-p48IV8EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xGg8cYV8EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_xGg8coV8EeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_3yDnYIV8EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_3-oq0IV8EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xGg8c4V8EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_xGg8dIV8EeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_2Q4vkIV8EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2dUpEIV8EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xGg8dYV8EeGphc0tcQWDWg" x="-14" y="-43"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_xGfHQYV8EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_xGUIIIV8EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_xGfHQoV8EeGphc0tcQWDWg" points="[8, -3, -116, 42]$[118, -47, -6, -2]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_xGtwwIV8EeGphc0tcQWDWg" id="(0.9166666666666666,0.6457564575645757)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_xGtwwYV8EeGphc0tcQWDWg" id="(0.04739336492890995,0.32)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_MuwGIIWxEeGphc0tcQWDWg" type="4001" source="_BMrL4IV2EeGphc0tcQWDWg" target="_BMrL4IV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Mux7UIWxEeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mux7UYWxEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Mux7UoWxEeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Mux7U4WxEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_MuyiYIWxEeGphc0tcQWDWg" visible="false" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Rt_nUIWxEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_SDogIIWxEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MuyiYYWxEeGphc0tcQWDWg" x="-31" y="13"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_MuyiYoWxEeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Te154IWxEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Tw2P4IWxEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MuyiY4WxEeGphc0tcQWDWg" x="17" y="16"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_MuzJcIWxEeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Te3vEIWxEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Tw3eAIWxEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MuzJcYWxEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_MuzJcoWxEeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Rt9yIIWxEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_SDnSAIWxEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MuzJc4WxEeGphc0tcQWDWg" x="9" y="-14"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_MuwGIYWxEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_MuoxYIWxEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_MuwGIoWxEeGphc0tcQWDWg" points="[0, 26, 4, 79]$[0, 47, 4, 100]$[-69, 47, -65, 100]$[-69, -53, -65, 0]$[-15, -53, -11, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MvAk0IWxEeGphc0tcQWDWg" id="(0.08875739644970414,0.9134615384615384)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_MvBL4IWxEeGphc0tcQWDWg" id="(0.0650887573964497,0.7307692307692307)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_DwzLoKQZEeGh66WyiiFoSg" type="4001" source="_BMrL4IV2EeGphc0tcQWDWg" target="_19RKUKQYEeGh66WyiiFoSg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Dw1A0KQZEeGh66WyiiFoSg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Dw1A0aQZEeGh66WyiiFoSg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Dw1n4KQZEeGh66WyiiFoSg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Dw1n4aQZEeGh66WyiiFoSg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Dw1n4qQZEeGh66WyiiFoSg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_SzDC0KQZEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_TDlZMKQZEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Dw1n46QZEeGh66WyiiFoSg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Dw1n5KQZEeGh66WyiiFoSg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_UqK8gKQZEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_U3dKkKQZEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Dw1n5aQZEeGh66WyiiFoSg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Dw2O8KQZEeGh66WyiiFoSg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_RQ4FcKQZEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_R8dZEKQZEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Dw2O8aQZEeGh66WyiiFoSg" x="6" y="-66"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Dw2O8qQZEeGh66WyiiFoSg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_VtL4sKQZEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_V7eMUKQZEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Dw2O86QZEeGh66WyiiFoSg" x="-1" y="-58"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_DwzLoaQZEeGh66WyiiFoSg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_DwVRkKQZEeGh66WyiiFoSg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_DwzLoqQZEeGh66WyiiFoSg" points="[3, -3, 0, 43]$[1, -38, -2, 8]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DxLmIKQZEeGh66WyiiFoSg" id="(0.4556213017751479,0.010273972602739725)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_DxLmIaQZEeGh66WyiiFoSg" id="(0.45714285714285713,0.9304347826086956)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_fZdJsKQZEeGh66WyiiFoSg" type="4001" source="_hJBFUIV5EeGphc0tcQWDWg" target="_19RKUKQYEeGh66WyiiFoSg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_fZeX0KQZEeGh66WyiiFoSg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fZeX0aQZEeGh66WyiiFoSg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fZeX0qQZEeGh66WyiiFoSg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fZeX06QZEeGh66WyiiFoSg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fZe-4KQZEeGh66WyiiFoSg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ns6NoKQZEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_n9_WkKQZEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fZe-4aQZEeGh66WyiiFoSg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fZe-4qQZEeGh66WyiiFoSg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ka-i0KQZEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kwxMoKQZEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fZe-46QZEeGh66WyiiFoSg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fZe-5KQZEeGh66WyiiFoSg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_jDAqUKQZEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_jp2A0KQZEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fZe-5aQZEeGh66WyiiFoSg" x="23" y="19"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fZe-5qQZEeGh66WyiiFoSg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mzhukKQZEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_nFx8MKQZEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fZe-56QZEeGh66WyiiFoSg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_fZdJsaQZEeGh66WyiiFoSg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_fYwmIKQZEeGh66WyiiFoSg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fZdJsqQZEeGh66WyiiFoSg" points="[3, -1, -165, 0]$[165, -1, -3, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fd3IkKQZEeGh66WyiiFoSg" id="(0.9878542510121457,0.2)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fd3voKQZEeGh66WyiiFoSg" id="(0.017142857142857144,0.6)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_OlckgKQaEeGh66WyiiFoSg" type="4001" source="_19RKUKQYEeGh66WyiiFoSg" target="_19RKUKQYEeGh66WyiiFoSg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_OldyoKQaEeGh66WyiiFoSg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_OldyoaQaEeGh66WyiiFoSg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_OldyoqQaEeGh66WyiiFoSg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Oldyo6QaEeGh66WyiiFoSg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_OldypKQaEeGh66WyiiFoSg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_SJ_CQKQaEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_SZZXQKQaEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_OldypaQaEeGh66WyiiFoSg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_OldypqQaEeGh66WyiiFoSg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_aij2wKQaEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_athJkKQaEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Oldyp6QaEeGh66WyiiFoSg" y="8"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_OleZsKQaEeGh66WyiiFoSg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_YNHCUKQaEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_YnUSEKQaEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_OleZsaQaEeGh66WyiiFoSg" x="24" y="-8"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_OleZsqQaEeGh66WyiiFoSg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ZUdE4KQaEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Zh5D8KQaEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_OleZs6QaEeGh66WyiiFoSg" x="-48" y="14"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_OlckgaQaEeGh66WyiiFoSg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_Okx2IKQaEeGh66WyiiFoSg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_OlckgqQaEeGh66WyiiFoSg" points="[52, -6, 26, -4]$[117, -6, 91, -4]$[117, 42, 91, 44]$[26, 42, 0, 44]$[26, 7, 0, 9]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OmUuQKQaEeGh66WyiiFoSg" id="(0.7028571428571428,0.9391304347826087)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_OmVVUKQaEeGh66WyiiFoSg" id="(0.8514285714285714,0.9217391304347826)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_mzBB8L7YEeGnLN6u0QNctQ" type="4002" source="_kVt5EL7YEeGnLN6u0QNctQ" target="_DwOtwIV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_mzC3IL7YEeGnLN6u0QNctQ" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_mzC3Ib7YEeGnLN6u0QNctQ" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_mzBB8b7YEeGnLN6u0QNctQ" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptors.uml#_myPl4L7YEeGnLN6u0QNctQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_mzBB8r7YEeGnLN6u0QNctQ" points="[5, -7, -73, 0]$[70, -1, -8, 6]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_m0H1ML7YEeGnLN6u0QNctQ" id="(0.9606299212598425,0.3)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_m0H1Mb7YEeGnLN6u0QNctQ" id="(0.044444444444444446,0.7439446366782007)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_20SJUL7cEeGnLN6u0QNctQ" type="4001" source="_BMrL4IV2EeGphc0tcQWDWg" target="_GDz58IV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_20TXcL7cEeGnLN6u0QNctQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_20TXcb7cEeGnLN6u0QNctQ" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_20TXcr7cEeGnLN6u0QNctQ" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_20T-gL7cEeGnLN6u0QNctQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_20T-gb7cEeGnLN6u0QNctQ" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_G5y0UL7dEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HQZ9gL7dEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_20T-gr7cEeGnLN6u0QNctQ" x="-27" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_20T-g77cEeGnLN6u0QNctQ" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_H-ekcL7dEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ITCfML7dEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_20T-hL7cEeGnLN6u0QNctQ" x="33" y="-42"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_20T-hb7cEeGnLN6u0QNctQ" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_D_eYQL7dEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_FBJ3sL7dEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_20T-hr7cEeGnLN6u0QNctQ" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_20T-h77cEeGnLN6u0QNctQ" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_F1amML7dEeGnLN6u0QNctQ" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GIWJQL7dEeGnLN6u0QNctQ" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_20T-iL7cEeGnLN6u0QNctQ" x="27" y="12"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_20SJUb7cEeGnLN6u0QNctQ" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_2yuDEL7cEeGnLN6u0QNctQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_20SJUr7cEeGnLN6u0QNctQ" points="[1, 0, -298, 106]$[306, 0, 7, 106]$[306, -102, 7, 4]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_21LhML7cEeGnLN6u0QNctQ" id="(0.9940828402366864,0.3287671232876712)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_21LhMb7cEeGnLN6u0QNctQ" id="(0.1543942992874109,0.9761904761904762)"/>
+ </edges>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_xTlMQIV1EeGphc0tcQWDWg" type="PapyrusUMLClassDiagram" name="datatypes" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_zP_OkIV1EeGphc0tcQWDWg" type="2009" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zQBDwIV1EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zQBq0IV1EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zQBq0YV1EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zQBq0oV1EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zQCR4IV1EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zQCR4YV1EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_4j0fsIV1EeGphc0tcQWDWg" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_4j1GwIV1EeGphc0tcQWDWg" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_4j1GwYV1EeGphc0tcQWDWg" key="StereotypeList" value="Ecore::EDataType"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_4j1GwoV1EeGphc0tcQWDWg" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_4j1Gw4V1EeGphc0tcQWDWg" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_4j1GxIV1EeGphc0tcQWDWg" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_zQCR4oV1EeGphc0tcQWDWg" type="5032"/>
+ <element xmi:type="uml:PrimitiveType" href="servicedescriptors.uml#_zPW8cIV1EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zP_OkYV1EeGphc0tcQWDWg" x="144" y="84"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_76kZEIV1EeGphc0tcQWDWg" type="2009" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_76lAIIV1EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_76lAIYV1EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_76lnMIV1EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_76lnMYV1EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_76lnMoV1EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_76lnM4V1EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_-GNxQIV1EeGphc0tcQWDWg" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-GOYUIV1EeGphc0tcQWDWg" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-GOYUYV1EeGphc0tcQWDWg" key="StereotypeList" value="Ecore::EDataType"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-GOYUoV1EeGphc0tcQWDWg" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-GOYU4V1EeGphc0tcQWDWg" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-GOYVIV1EeGphc0tcQWDWg" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_76lnNIV1EeGphc0tcQWDWg" type="5032"/>
+ <element xmi:type="uml:PrimitiveType" href="servicedescriptors.uml#_76Q3EIV1EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_76kZEYV1EeGphc0tcQWDWg" x="144" y="192"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_llm4sIW2EeGphc0tcQWDWg" type="2009" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_llnfwIW2EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_llnfwYW2EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_lloG0IW2EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_lloG0YW2EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_lloG0oW2EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_lloG04W2EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ojSx0IW2EeGphc0tcQWDWg" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ojSx0YW2EeGphc0tcQWDWg" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ojTY4IW2EeGphc0tcQWDWg" key="StereotypeList" value="Ecore::EDataType"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ojTY4YW2EeGphc0tcQWDWg" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ojTY4oW2EeGphc0tcQWDWg" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ojTY44W2EeGphc0tcQWDWg" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lloG1IW2EeGphc0tcQWDWg" type="5032"/>
+ <element xmi:type="uml:PrimitiveType" href="servicedescriptors.uml#_llDfEIW2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_llm4sYW2EeGphc0tcQWDWg" x="312" y="84"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_xTlMQYV1EeGphc0tcQWDWg"/>
+ <element xmi:type="uml:Model" href="servicedescriptors.uml#_uOdOYIV1EeGphc0tcQWDWg"/>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_bZI7kIehEeGphc0tcQWDWg" type="PapyrusUMLClassDiagram" name="Injection" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_cf2sAIehEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_cf36IIehEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_cf36IYehEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_cf36IoehEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_cf36I4ehEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_cf4hMIehEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_cf4hMYehEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_cf4hMoehEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_cf4hM4ehEeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_htL2EIetEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_f3KvoIetEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_htL2EYetEeGphc0tcQWDWg" x="56" y="10"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_cf4hNIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_cf4hNYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_cf4hNoehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cf4hN4ehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_cf5IQIehEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_cf5IQYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_cf5IQoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_cf5IQ4ehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cf5IRIehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_cf5IRYehEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_cf5IRoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_cf5IR4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_cf5ISIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cf5ISYehEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_vKUVgIV8EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cf2sAYehEeGphc0tcQWDWg" x="312" y="96" width="187" height="103"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_dfeV8IehEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_dfe9AIehEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_dfe9AYehEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_dfe9AoehEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_dffkEIehEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_dffkEYehEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_dffkEoehEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_dffkE4ehEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_dffkFIehEeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_kYCwQIehEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_kXpHoIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kYCwQYehEeGphc0tcQWDWg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_dffkFYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_dffkFoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_dffkF4ehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dffkGIehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_dffkGYehEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_dffkGoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_dffkG4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_dffkHIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dffkHYehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_dffkHoehEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_dffkH4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_dffkIIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_dffkIYehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dffkIoehEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_dfBC8IehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dfeV8YehEeGphc0tcQWDWg" x="114" y="396" height="259"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_e8gUoIehEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_e8g7sIehEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_e8g7sYehEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_e8g7soehEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_e8g7s4ehEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_e8g7tIehEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_e8hiwIehEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_e8hiwYehEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_e8hiwoehEeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_ocYvcIehEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_ocGbkIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ocYvcYehEeGphc0tcQWDWg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_e8hiw4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_e8hixIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_e8hixYehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e8hixoehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_e8hix4ehEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_e8hiyIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_e8hiyYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_e8hiyoehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e8hiy4ehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_e8hizIehEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_e8hizYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_e8hizoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_e8hiz4ehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e8hi0IehEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_e787AIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e8gUoYehEeGphc0tcQWDWg" x="444" y="420"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_wt9kEIehEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wt-yMIehEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_wt_ZQIehEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wt_ZQYehEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_wuAAUIehEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wuAAUYehEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_wuAAUoehEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_wuAAU4ehEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_wuAAVIehEeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_pYYnMIetEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_oeOFAIetEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pYYnMYetEeGphc0tcQWDWg" x="48" y="15"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_wuAAVYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_wuAnYIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_wuAnYYehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wuAnYoehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_wuAnY4ehEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_wuAnZIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_wuAnZYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_wuAnZoehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wuAnZ4ehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_wuAnaIehEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_wuAnaYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_wuAnaoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_wuAna4ehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wuAnbIehEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_wt55sIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wt-LIIehEeGphc0tcQWDWg" x="660" y="558"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_yMRVIIehEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_yMR8MIehEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_yMR8MYehEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_yMR8MoehEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_yMSjQIehEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_yMSjQYehEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_yMSjQoehEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_yMSjQ4ehEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_yMSjRIehEeGphc0tcQWDWg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yMSjRYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_yMSjRoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_yMSjR4ehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yMSjSIehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_yMSjSYehEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yMSjSoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_yMSjS4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_yMSjTIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yMSjTYehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_yMSjToehEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yMSjT4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_yMSjUIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_yMTKUIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yMTKUYehEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_yMPf8IehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yMRVIYehEeGphc0tcQWDWg" x="630" y="708" width="121"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_z09KMIehEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_z0-YUIehEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_z0-YUYehEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_z0-YUoehEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_z0-YU4ehEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_z0-YVIehEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_z0-_YIehEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_z0-_YYehEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_z0-_YoehEeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_F13x8IeiEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_F118wIeiEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_F13x8YeiEeGphc0tcQWDWg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_z0-_Y4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_z0-_ZIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_z0-_ZYehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z0-_ZoehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_z0-_Z4ehEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_z0-_aIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_z0-_aYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_z0-_aoehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z0-_a4ehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_z0-_bIehEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_z0-_bYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_z0-_boehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_z0-_b4ehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z0-_cIehEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_z05f0IehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z09KMYehEeGphc0tcQWDWg" x="780" y="708" width="157"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_5ME_4IehEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5MFm8IehEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5MFm8YehEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5MGOAIehEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5MGOAYehEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_5MGOAoehEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_5MGOA4ehEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_5MGOBIehEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5MGOBYehEeGphc0tcQWDWg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5MGOBoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5MGOB4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5MGOCIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5MGOCYehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5MGOCoehEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5MG1EIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5MG1EYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5MG1EoehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5MG1E4ehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_5MG1FIehEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_5MG1FYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_5MG1FoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_5MG1F4ehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5MG1GIehEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_GDPSMIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_5ME_4YehEeGphc0tcQWDWg" x="366" y="708"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_HAl_AIeqEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HAnNIIeqEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HAnNIYeqEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HAn0MIeqEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HAn0MYeqEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HAn0MoeqEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HAn0M4eqEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HAn0NIeqEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HAobQIeqEeGphc0tcQWDWg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HAobQYeqEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HAobQoeqEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HAobQ4eqEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HAobRIeqEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HAobRYeqEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HAobRoeqEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HAobR4eqEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HAobSIeqEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HAobSYeqEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HAobSoeqEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HAobS4eqEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HAobTIeqEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HAobTYeqEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HAobToeqEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_HAeqQIeqEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HAl_AYeqEeGphc0tcQWDWg" x="750" y="420" width="193"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_fCs3sIerEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_fCtewIerEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_fCtewYerEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_fCtewoerEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_fCuF0IerEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_fCuF0YerEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_fCuF0oerEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fCuF04erEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_fCuF1IerEeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_kZPekIerEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptors.uml#_kZL0MIerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kZPekYerEeGphc0tcQWDWg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_fCuF1YerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_fCuF1oerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_fCuF14erEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fCuF2IerEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_fCuF2YerEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_fCuF2oerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_fCuF24erEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_fCuF3IerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fCuF3YerEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_fCuF3oerEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_fCuF34erEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_fCuF4IerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_fCuF4YerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fCuF4oerEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_fComQIerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fCs3sYerEeGphc0tcQWDWg" x="1026" y="276" width="193"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_6trxAIerEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_6tsYEIerEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6tsYEYerEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_6ts_IIerEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6ts_IYerEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_6ts_IoerEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6ts_I4erEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6ts_JIerEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_6ts_JYerEeGphc0tcQWDWg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_6ts_JoerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_6ts_J4erEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_6ts_KIerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6ts_KYerEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_6ts_KoerEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_6ts_K4erEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_6ts_LIerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_6ts_LYerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6ts_LoerEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_6ts_L4erEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_6ts_MIerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_6ts_MYerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_6ts_MoerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6ts_M4erEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptors.uml#_6thY8IerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6trxAYerEeGphc0tcQWDWg" x="564" y="276" width="199"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_bZI7kYehEeGphc0tcQWDWg"/>
+ <element xmi:type="uml:Model" href="servicedescriptors.uml#_uOdOYIV1EeGphc0tcQWDWg"/>
+ <edges xmi:type="notation:Connector" xmi:id="_tm7hsIehEeGphc0tcQWDWg" type="4002" source="_dfeV8IehEeGphc0tcQWDWg" target="_cf2sAIehEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_tm8IwIehEeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_tm8IwYehEeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_tm7hsYehEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptors.uml#_tm4eYIehEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_tm7hsoehEeGphc0tcQWDWg" points="[8, -8, -72, 70]$[85, -61, 5, 17]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tm_zIIehEeGphc0tcQWDWg" id="(0.5964912280701754,0.07692307692307693)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tm_zIYehEeGphc0tcQWDWg" id="(0.5561497326203209,0.8349514563106796)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_uHPZcIehEeGphc0tcQWDWg" type="4002" source="_6trxAIerEeGphc0tcQWDWg" target="_cf2sAIehEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_uHR1sIehEeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_uHR1sYehEeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_uHPZcYehEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptors.uml#_uHM9MIehEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_uHPZcoehEeGphc0tcQWDWg" points="[-22, -13, 96, 58]$[-117, -66, 1, 5]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uHWHIIehEeGphc0tcQWDWg" id="(0.5175879396984925,0.09)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uHWHIYehEeGphc0tcQWDWg" id="(0.5561497326203209,0.9514563106796117)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_2IYlYIehEeGphc0tcQWDWg" type="4002" source="_yMRVIIehEeGphc0tcQWDWg" target="_wt9kEIehEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_2IZzgIehEeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2IaakIehEeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_2IYlYYehEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptors.uml#_2IViEIehEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2IYlYoehEeGphc0tcQWDWg" points="[4, -6, -53, 63]$[52, -56, -5, 13]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2IhIQIehEeGphc0tcQWDWg" id="(0.51,0.06)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2IhvUIehEeGphc0tcQWDWg" id="(0.36,0.87)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_2z4ZcIehEeGphc0tcQWDWg" type="4002" source="_z09KMIehEeGphc0tcQWDWg" target="_wt9kEIehEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_2z5AgIehEeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2z5AgYehEeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_2z4ZcYehEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptors.uml#_2z2kQIehEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2z4ZcoehEeGphc0tcQWDWg" points="[-22, -17, 88, 71]$[-106, -79, 4, 9]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2z9R8IehEeGphc0tcQWDWg" id="(0.45454545454545453,0.17)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2z9R8YehEeGphc0tcQWDWg" id="(0.69,0.91)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_67GGcIehEeGphc0tcQWDWg" type="4001" source="_yMRVIIehEeGphc0tcQWDWg" target="_5ME_4IehEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_67HUkIehEeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_67HUkYehEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_67HUkoehEeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_67HUk4ehEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_67H7oIehEeGphc0tcQWDWg" visible="false" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_8tFogIehEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_87QnYIehEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_67H7oYehEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_67H7ooehEeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_8tDzUIehEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_87OyMIehEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_67H7o4ehEeGphc0tcQWDWg" x="-45" y="16"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_67H7pIehEeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_-rAGsYehEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-45_0IehEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_67H7pYehEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_67H7poehEeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_-q_foIehEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-44KoIehEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_67H7p4ehEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_67GGcYehEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_67CcEIehEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_67GGcoehEeGphc0tcQWDWg" points="[-1, 0, 199, -9]$[-134, 0, 66, -9]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_67UI4IehEeGphc0tcQWDWg" id="(0.01,0.41)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_YAcAwIepEeGphc0tcQWDWg" type="4001" source="_dfeV8IehEeGphc0tcQWDWg" target="_wt9kEIehEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_YAcn0IepEeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YAdO4IepEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_YAdO4YepEeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YAdO4oepEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_YAdO44epEeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XhH8oIerEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_X20f0IerEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YAdO5IepEeGphc0tcQWDWg" x="44" y="-27"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_YAdO5YepEeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XhJKwIerEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_X22VAIerEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YAdO5oepEeGphc0tcQWDWg" x="-33" y="21"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_YAdO54epEeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Zat7gIerEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Zu2_gIerEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YAdO6IepEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_YAd18IepEeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ZawXwIerEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Zu40sIerEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YAd18YepEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_YAcAwYepEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_YAXvUIepEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YAcAwoepEeGphc0tcQWDWg" points="[4, 2, -176, 0]$[175, 1, -5, -1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YAqqQIepEeGphc0tcQWDWg" id="(0.9766081871345029,0.7837837837837838)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YAqqQYepEeGphc0tcQWDWg" id="(0.05,0.43)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_-h5pgIerEeGphc0tcQWDWg" type="4002" source="_e8gUoIehEeGphc0tcQWDWg" target="_6trxAIerEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_-h63oIerEeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_-h7esIerEeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_-h5pgYerEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptors.uml#_-hyUwIerEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-h5pgoerEeGphc0tcQWDWg" points="[27, -12, -60, 26]$[83, -32, -4, 6]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-iF2wIerEeGphc0tcQWDWg" id="(0.5662650602409639,0.11538461538461539)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-iF2wYerEeGphc0tcQWDWg" id="(0.36683417085427134,0.94)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="__C0lQIerEeGphc0tcQWDWg" type="4002" source="_HAl_AIeqEeGphc0tcQWDWg" target="_6trxAIerEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="__C1zYIerEeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="__C1zYYerEeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="__C0lQYerEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptors.uml#__CwT0IerEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__C0lQoerEeGphc0tcQWDWg" points="[-25, -7, 110, 32]$[-132, -27, 3, 12]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="__C-WQIerEeGphc0tcQWDWg" id="(0.2538860103626943,0.07)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__C-WQYerEeGphc0tcQWDWg" id="(0.5628140703517588,0.88)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_FXH04IesEeGphc0tcQWDWg" type="4001" source="_6trxAIerEeGphc0tcQWDWg" target="_fCs3sIerEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_FXJDAIesEeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FXJDAYesEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_FXJqEIesEeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FXJqEYesEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_FXJqEoesEeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_JcwNgIesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Jwu5cIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FXJqE4esEeGphc0tcQWDWg" x="57" y="-18"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_FXJqFIesEeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_JcxboIesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_JwvggIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FXKRIIesEeGphc0tcQWDWg" x="-44" y="24"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_FXKRIYesEeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_LpbgcIesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_L9MxAIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FXKRIoesEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_FXKRI4esEeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_LpcukIesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_L9OmMIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FXKRJIesEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_FXH04YesEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_FXAgIIesEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_FXH04oesEeGphc0tcQWDWg" points="[4, 6, -263, 0]$[267, 6, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FXVQQIesEeGphc0tcQWDWg" id="(0.9798994974874372,0.4)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FXVQQYesEeGphc0tcQWDWg" id="(0.0,0.4423076923076923)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_GmtNcIesEeGphc0tcQWDWg" type="4001" source="_fCs3sIerEeGphc0tcQWDWg" target="_wt9kEIehEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Gmt0gIesEeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_GmubkIesEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_GmubkYesEeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_GmubkoesEeGphc0tcQWDWg" x="-81" y="-169"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Gmubk4esEeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_JczQ0IesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Jwx8wIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_GmublIesEeGphc0tcQWDWg" x="-53" y="-72"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_GmublYesEeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_JcyCsYesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_JwwuoIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_GmubloesEeGphc0tcQWDWg" x="28" y="14"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Gmubl4esEeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_LpejwIesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_L9QbYIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_GmubmIesEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_GmvCoIesEeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Lpfx4IesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_L9RpgIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_GmvCoYesEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_GmtNcYesEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptors.uml#_GmmfwIesEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GmtNcoesEeGphc0tcQWDWg" points="[0, 3, 336, -231]$[0, 234, 336, 0]$[-322, 234, 14, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Gm6BwIesEeGphc0tcQWDWg" id="(0.5414012738853503,0.9711538461538461)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Gm6o0IesEeGphc0tcQWDWg" id="(0.91,0.51)"/>
+ </edges>
+ </notation:Diagram>
+</xmi:XMI>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.uml b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.uml
new file mode 100644
index 00000000000..5741fb2f710
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptors.uml
@@ -0,0 +1,297 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="20110701" xmlns:xmi="http://www.omg.org/spec/XMI/20110701" 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/4.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="_uOdOYIV1EeGphc0tcQWDWg" name="servicedescriptors">
+ <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_zPW8cIV1EeGphc0tcQWDWg" name="String"/>
+ <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_76Q3EIV1EeGphc0tcQWDWg" name="boolean"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_BL_2cIV2EeGphc0tcQWDWg" name="RegistryDesc">
+ <ownedAttribute xmi:id="_MB5pAIV2EeGphc0tcQWDWg" name="name" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_Lg1mgIV6EeGphc0tcQWDWg" name="parents" type="_BL_2cIV2EeGphc0tcQWDWg" association="_Lg20oIV6EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Lg1mgYV6EeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Lg1mgoV6EeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_Lg20oYV6EeGphc0tcQWDWg" name="children" type="_BL_2cIV2EeGphc0tcQWDWg" association="_Lg20oIV6EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Lg20ooV6EeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Lg20o4V6EeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_MuoKUIWxEeGphc0tcQWDWg" name="extends" type="_BL_2cIV2EeGphc0tcQWDWg" association="_MuoxYIWxEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_MuoKUYWxEeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_MuoKUoWxEeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_lDZq4IWzEeGphc0tcQWDWg" name="description" type="_zPW8cIV1EeGphc0tcQWDWg">
+ <ownedComment xmi:id="_NyFjsIW3EeGphc0tcQWDWg">
+ <body>Description for Human.</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_DwRnMKQZEeGh66WyiiFoSg" name="serviceSets" type="_18yCIKQYEeGh66WyiiFoSg" association="_DwVRkKQZEeGh66WyiiFoSg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_DwRnMaQZEeGh66WyiiFoSg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_DwRnMqQZEeGh66WyiiFoSg" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_vfk4sKQZEeGh66WyiiFoSg" name="isUnique" type="_76Q3EIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_2ys08L7cEeGnLN6u0QNctQ" name="services" type="_GDPSMIV2EeGphc0tcQWDWg" association="_2yuDEL7cEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_2ys08b7cEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_2ys08r7cEeGnLN6u0QNctQ" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_gxXmUL-NEeGnLN6u0QNctQ" name="getServiceDesc">
+ <ownedParameter xmi:id="_p70jsL-NEeGnLN6u0QNctQ" name="serviceId" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedParameter xmi:id="_uRZc0L-NEeGnLN6u0QNctQ" name="result" type="_GDPSMIV2EeGphc0tcQWDWg" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_07eIIL-NEeGnLN6u0QNctQ" name="getServiceSetDesc">
+ <ownedParameter xmi:id="_07eIIb-NEeGnLN6u0QNctQ" name="serviceSetsId" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedParameter xmi:id="_07eIIr-NEeGnLN6u0QNctQ" name="result" type="_18yCIKQYEeGh66WyiiFoSg" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_zjfMEL-OEeGnLN6u0QNctQ" name="serviceSetsContains">
+ <ownedParameter xmi:id="_zjfMEb-OEeGnLN6u0QNctQ" name="serviceSetsId" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedParameter xmi:id="_zjfMEr-OEeGnLN6u0QNctQ" name="result" type="_76Q3EIV1EeGphc0tcQWDWg" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_zjfzIL-OEeGnLN6u0QNctQ" name="servicesContains">
+ <ownedParameter xmi:id="_zjfzIb-OEeGnLN6u0QNctQ" name="serviceId" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedParameter xmi:id="_zjfzIr-OEeGnLN6u0QNctQ" name="result" type="_76Q3EIV1EeGphc0tcQWDWg" direction="return"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_Dvz3AIV2EeGphc0tcQWDWg" name="ServiceDesc">
+ <generalization xmi:id="_I-2uwIV2EeGphc0tcQWDWg" general="_GDPSMIV2EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_QZGggIV7EeGphc0tcQWDWg" name="startKind" type="_InHx8IV7EeGphc0tcQWDWg">
+ <defaultValue xmi:type="uml:InstanceValue" xmi:id="_Z5mmYIV7EeGphc0tcQWDWg" name="lazy" type="_InHx8IV7EeGphc0tcQWDWg" instance="_KCKzoIV7EeGphc0tcQWDWg"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_lSt-QIV8EeGphc0tcQWDWg" name="classname" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_xGS6AIV8EeGphc0tcQWDWg" name="injections" type="_vKUVgIV8EeGphc0tcQWDWg" aggregation="composite" association="_xGUIIIV8EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_xGS6AYV8EeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_xGS6AoV8EeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_ExJYMIV2EeGphc0tcQWDWg" name="AliasDesc">
+ <generalization xmi:id="_Jl784IV2EeGphc0tcQWDWg" general="_GDPSMIV2EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_lqB88IV6EeGphc0tcQWDWg" name="aliasedService" type="_Dvz3AIV2EeGphc0tcQWDWg" association="_lqDLEIV6EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lqB88YV6EeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_lqB88oV6EeGphc0tcQWDWg" value="1"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_rGFK0L-iEeGnLN6u0QNctQ" name="aliasedServiceId" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_GDPSMIV2EeGphc0tcQWDWg" name="AbstractServiceDesc" isAbstract="true">
+ <ownedAttribute xmi:id="_QtlVAIV2EeGphc0tcQWDWg" name="name" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_nOcgkIV7EeGphc0tcQWDWg" name="dependsOn" type="_GDPSMIV2EeGphc0tcQWDWg" association="_nOdusIV7EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_nOcgkYV7EeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_nOcgkoV7EeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ZILSMIW3EeGphc0tcQWDWg" name="description" type="_zPW8cIV1EeGphc0tcQWDWg">
+ <ownedComment xmi:id="_ZILSMYW3EeGphc0tcQWDWg">
+ <body>Description for Human.</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_faZToIW2EeGphc0tcQWDWg" name="priority" type="_llDfEIW2EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="__nBHEL7YEeGnLN6u0QNctQ" name="bundleID" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_lmNCUYV5EeGphc0tcQWDWg" name="parent" type="_18yCIKQYEeGh66WyiiFoSg" association="_lmNCUIV5EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lmNCUoV5EeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_lmNCU4V5EeGphc0tcQWDWg" value="1"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_i4YJkL-iEeGnLN6u0QNctQ" name="dependsOnIds" type="_zPW8cIV1EeGphc0tcQWDWg" isOrdered="true">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_mOw2kL-iEeGnLN6u0QNctQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_mOyEsL-iEeGnLN6u0QNctQ" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_6fzj4IV4EeGphc0tcQWDWg" name="namespaceDesc_abstractServiceDesc_1" memberEnd="_6fzj4YV4EeGphc0tcQWDWg _6fyVwIV4EeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_6fzj4YV4EeGphc0tcQWDWg" name="namespace" type="_18yCIKQYEeGh66WyiiFoSg" association="_6fzj4IV4EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_6fzj4oV4EeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_6fzj44V4EeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_hIgH8IV5EeGphc0tcQWDWg" name="Descriptors">
+ <ownedAttribute xmi:id="_kHPxAIV5EeGphc0tcQWDWg" name="registries" type="_BL_2cIV2EeGphc0tcQWDWg" aggregation="composite" association="_kHQYEIV5EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_kHPxAYV5EeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_kHPxAoV5EeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_fYv_EKQZEeGh66WyiiFoSg" name="serviceSets" type="_18yCIKQYEeGh66WyiiFoSg" aggregation="composite" association="_fYwmIKQZEeGh66WyiiFoSg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_fYv_EaQZEeGh66WyiiFoSg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_fYv_EqQZEeGh66WyiiFoSg" value="*"/>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_bChdIL7dEeGnLN6u0QNctQ" name="getRegistryDesc">
+ <ownedParameter xmi:id="_fDbt0L7dEeGnLN6u0QNctQ" name="name" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedParameter xmi:id="_hAbmAL7dEeGnLN6u0QNctQ" name="return" type="_BL_2cIV2EeGphc0tcQWDWg" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_y9mWML7dEeGnLN6u0QNctQ" name="getServiceSetDesc">
+ <ownedParameter xmi:id="_y9mWMb7dEeGnLN6u0QNctQ" name="name" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedParameter xmi:id="_y9mWMr7dEeGnLN6u0QNctQ" name="return" type="_18yCIKQYEeGh66WyiiFoSg" direction="return"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_kHQYEIV5EeGphc0tcQWDWg" name="descriptors_registryDesc_1" memberEnd="_kHQYEYV5EeGphc0tcQWDWg _kHPxAIV5EeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_kHQYEYV5EeGphc0tcQWDWg" name="descriptors" type="_hIgH8IV5EeGphc0tcQWDWg" association="_kHQYEIV5EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_kHQYEoV5EeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_kHQYE4V5EeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_lmNCUIV5EeGphc0tcQWDWg" name="descriptors_abstractServiceDesc_1" memberEnd="_lmNCUYV5EeGphc0tcQWDWg _lmL0MIV5EeGphc0tcQWDWg"/>
+ <packagedElement xmi:type="uml:Association" xmi:id="_Lg20oIV6EeGphc0tcQWDWg" name="registryDesc_registryDesc_1" memberEnd="_Lg20oYV6EeGphc0tcQWDWg _Lg1mgIV6EeGphc0tcQWDWg"/>
+ <packagedElement xmi:type="uml:Association" xmi:id="_lqDLEIV6EeGphc0tcQWDWg" name="aliasDesc_serviceDesc_1" memberEnd="_lqDLEYV6EeGphc0tcQWDWg _lqB88IV6EeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_lqDLEYV6EeGphc0tcQWDWg" name="alias" type="_ExJYMIV2EeGphc0tcQWDWg" association="_lqDLEIV6EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lqDLEoV6EeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_lqDLE4V6EeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Enumeration" xmi:id="_InHx8IV7EeGphc0tcQWDWg" name="StartupKind">
+ <ownedLiteral xmi:id="_KCKzoIV7EeGphc0tcQWDWg" name="lazy"/>
+ <ownedLiteral xmi:id="_LOWS4IV7EeGphc0tcQWDWg" name="startup"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_nOdusIV7EeGphc0tcQWDWg" name="abstractServiceDesc_abstractServiceDesc_1" memberEnd="_nOdusYV7EeGphc0tcQWDWg _nOcgkIV7EeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_nOdusYV7EeGphc0tcQWDWg" name="dependantServices" type="_GDPSMIV2EeGphc0tcQWDWg" association="_nOdusIV7EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_nOdusoV7EeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_nOdus4V7EeGphc0tcQWDWg" value="*"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_vKUVgIV8EeGphc0tcQWDWg" name="FeatureInjection" isAbstract="true">
+ <ownedAttribute xmi:id="_f3KvoIetEeGphc0tcQWDWg" name="description" type="_zPW8cIV1EeGphc0tcQWDWg">
+ <ownedComment xmi:id="_f3KvoYetEeGphc0tcQWDWg">
+ <body>Description for Human.</body>
+ </ownedComment>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_xGUIIIV8EeGphc0tcQWDWg" name="abstractServiceDesc_injectedService_1" memberEnd="_xGUvMIV8EeGphc0tcQWDWg _xGS6AIV8EeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_xGUvMIV8EeGphc0tcQWDWg" name="owner" type="_Dvz3AIV2EeGphc0tcQWDWg" association="_xGUIIIV8EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_xGUvMYV8EeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_xGUvMoV8EeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_MuoxYIWxEeGphc0tcQWDWg" name="registryDesc_registryDesc_2" memberEnd="_MuoxYYWxEeGphc0tcQWDWg _MuoKUIWxEeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_MuoxYYWxEeGphc0tcQWDWg" name="registryDesc" type="_BL_2cIV2EeGphc0tcQWDWg" association="_MuoxYIWxEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_MupYcIWxEeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_MupYcYWxEeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_llDfEIW2EeGphc0tcQWDWg" name="int"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_dfBC8IehEeGphc0tcQWDWg" name="PropertyInjection">
+ <generalization xmi:id="_tm4eYIehEeGphc0tcQWDWg" general="_vKUVgIV8EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_kXpHoIehEeGphc0tcQWDWg" name="propertyName" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_YAXIQIepEeGphc0tcQWDWg" name="values" type="_wt55sIehEeGphc0tcQWDWg" aggregation="composite" association="_YAXvUIepEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_YAXIQYepEeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_YAXIQoepEeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_e787AIehEeGphc0tcQWDWg" name="MethodInjection">
+ <generalization xmi:id="_-hyUwIerEeGphc0tcQWDWg" general="_6thY8IerEeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_ocGbkIehEeGphc0tcQWDWg" name="methodName" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_wt55sIehEeGphc0tcQWDWg" name="InjectedValue" isAbstract="true">
+ <ownedAttribute xmi:id="_oeOFAIetEeGphc0tcQWDWg" name="description" type="_zPW8cIV1EeGphc0tcQWDWg">
+ <ownedComment xmi:id="_oeOFAYetEeGphc0tcQWDWg">
+ <body>Description for Human.</body>
+ </ownedComment>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_yMPf8IehEeGphc0tcQWDWg" name="InjectedService">
+ <generalization xmi:id="_2IViEIehEeGphc0tcQWDWg" general="_wt55sIehEeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_67B1AIehEeGphc0tcQWDWg" name="service" type="_GDPSMIV2EeGphc0tcQWDWg" association="_67CcEIehEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_67B1AYehEeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_67B1AoehEeGphc0tcQWDWg" value="1"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_z05f0IehEeGphc0tcQWDWg" name="OpaqueInjectedValue">
+ <generalization xmi:id="_2z2kQIehEeGphc0tcQWDWg" general="_wt55sIehEeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_F118wIeiEeGphc0tcQWDWg" name="value" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_67CcEIehEeGphc0tcQWDWg" name="injectedService_abstractServiceDesc_1" memberEnd="_67CcEYehEeGphc0tcQWDWg _67B1AIehEeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_67CcEYehEeGphc0tcQWDWg" name="injectedService" type="_yMPf8IehEeGphc0tcQWDWg" association="_67CcEIehEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_67CcEoehEeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_67CcE4ehEeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_YAXvUIepEeGphc0tcQWDWg" name="propertyInjection_injectedValue_1" memberEnd="_YAXvUYepEeGphc0tcQWDWg _YAXIQIepEeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_YAXvUYepEeGphc0tcQWDWg" name="propertyInjection" type="_dfBC8IehEeGphc0tcQWDWg" association="_YAXvUIepEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_YAXvUoepEeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_YAXvU4epEeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_HAeqQIeqEeGphc0tcQWDWg" name="ConstructorInjection">
+ <generalization xmi:id="__CwT0IerEeGphc0tcQWDWg" general="_6thY8IerEeGphc0tcQWDWg"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_fComQIerEeGphc0tcQWDWg" name="ParameterInjection">
+ <ownedAttribute xmi:id="_kZL0MIerEeGphc0tcQWDWg" name="parameterName" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_GmlRoIesEeGphc0tcQWDWg" name="values" type="_wt55sIehEeGphc0tcQWDWg" aggregation="composite" association="_GmmfwIesEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_GmlRoYesEeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_GmlRooesEeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_6thY8IerEeGphc0tcQWDWg" name="AbstractMethodInjection" isAbstract="true">
+ <generalization xmi:id="_uHM9MIehEeGphc0tcQWDWg" general="_vKUVgIV8EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_FW_SAIesEeGphc0tcQWDWg" name="parameters" type="_fComQIerEeGphc0tcQWDWg" aggregation="composite" association="_FXAgIIesEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_FW_SAYesEeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_FW_SAoesEeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_FXAgIIesEeGphc0tcQWDWg" name="abstractMethodInjection_parameterInjection_1" memberEnd="_FXAgIYesEeGphc0tcQWDWg _FW_SAIesEeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_FXAgIYesEeGphc0tcQWDWg" name="abstractMethodInjection" type="_6thY8IerEeGphc0tcQWDWg" association="_FXAgIIesEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_FXAgIoesEeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_FXAgI4esEeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_GmmfwIesEeGphc0tcQWDWg" name="parameterInjection_injectedValue_1" memberEnd="_GmmfwYesEeGphc0tcQWDWg _GmlRoIesEeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_GmmfwYesEeGphc0tcQWDWg" name="parameterInjection" type="_fComQIerEeGphc0tcQWDWg" association="_GmmfwIesEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_GmmfwoesEeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Gmmfw4esEeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_18yCIKQYEeGh66WyiiFoSg" name="ServiceSetDesc">
+ <ownedAttribute xmi:id="_6fyVwIV4EeGphc0tcQWDWg" name="services" type="_GDPSMIV2EeGphc0tcQWDWg" association="_6fzj4IV4EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_6fyVwYV4EeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_6fyVwoV4EeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_JiK34KQaEeGh66WyiiFoSg" name="name" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_OkwoAKQaEeGh66WyiiFoSg" name="extends" type="_18yCIKQYEeGh66WyiiFoSg" association="_Okx2IKQaEeGh66WyiiFoSg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_OkwoAaQaEeGh66WyiiFoSg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_OkwoAqQaEeGh66WyiiFoSg" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_lmL0MIV5EeGphc0tcQWDWg" name="ownedServices" type="_GDPSMIV2EeGphc0tcQWDWg" aggregation="composite" association="_lmNCUIV5EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lmL0MYV5EeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_lmL0MoV5EeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_TIO6UL-REeGnLN6u0QNctQ" name="description" type="_zPW8cIV1EeGphc0tcQWDWg">
+ <ownedComment xmi:id="_TIO6Ub-REeGnLN6u0QNctQ">
+ <body>Description for Human.</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_53iN8L-XEeGnLN6u0QNctQ" name="getServiceDesc">
+ <ownedParameter xmi:id="_53iN8b-XEeGnLN6u0QNctQ" name="serviceId" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedParameter xmi:id="_53iN8r-XEeGnLN6u0QNctQ" name="result" type="_GDPSMIV2EeGphc0tcQWDWg" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_53i1AL-XEeGnLN6u0QNctQ" name="servicesContains">
+ <ownedParameter xmi:id="_53i1Ab-XEeGnLN6u0QNctQ" name="serviceId" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedParameter xmi:id="_53i1Ar-XEeGnLN6u0QNctQ" name="result" type="_76Q3EIV1EeGphc0tcQWDWg" direction="return"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_DwVRkKQZEeGh66WyiiFoSg" name="registryDesc_serviceSet_1" memberEnd="_DwVRkaQZEeGh66WyiiFoSg _DwRnMKQZEeGh66WyiiFoSg">
+ <ownedEnd xmi:id="_DwVRkaQZEeGh66WyiiFoSg" name="registryDesc" type="_BL_2cIV2EeGphc0tcQWDWg" association="_DwVRkKQZEeGh66WyiiFoSg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_DwVRkqQZEeGh66WyiiFoSg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_DwVRk6QZEeGh66WyiiFoSg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_fYwmIKQZEeGh66WyiiFoSg" name="descriptors_serviceSet_1" memberEnd="_fYwmIaQZEeGh66WyiiFoSg _fYv_EKQZEeGh66WyiiFoSg">
+ <ownedEnd xmi:id="_fYwmIaQZEeGh66WyiiFoSg" name="descriptors" type="_hIgH8IV5EeGphc0tcQWDWg" association="_fYwmIKQZEeGh66WyiiFoSg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_fYwmIqQZEeGh66WyiiFoSg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_fYwmI6QZEeGh66WyiiFoSg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_Okx2IKQaEeGh66WyiiFoSg" name="serviceSet_serviceSet_1" memberEnd="_Okx2IaQaEeGh66WyiiFoSg _OkwoAKQaEeGh66WyiiFoSg">
+ <ownedEnd xmi:id="_Okx2IaQaEeGh66WyiiFoSg" name="serviceSet" type="_18yCIKQYEeGh66WyiiFoSg" association="_Okx2IKQaEeGh66WyiiFoSg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Okx2IqQaEeGh66WyiiFoSg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Okx2I6QaEeGh66WyiiFoSg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_kT-MoL7YEeGnLN6u0QNctQ" name="ServiceFactoryDesc">
+ <generalization xmi:id="_myPl4L7YEeGnLN6u0QNctQ" general="_Dvz3AIV2EeGphc0tcQWDWg"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_2yuDEL7cEeGnLN6u0QNctQ" name="registryDesc_abstractServiceDesc_1" memberEnd="_2yuDEb7cEeGnLN6u0QNctQ _2ys08L7cEeGnLN6u0QNctQ">
+ <ownedEnd xmi:id="_2yuDEb7cEeGnLN6u0QNctQ" name="registry" type="_BL_2cIV2EeGphc0tcQWDWg" association="_2yuDEL7cEeGnLN6u0QNctQ">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_2yuDEr7cEeGnLN6u0QNctQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_2yuDE77cEeGnLN6u0QNctQ" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <profileApplication xmi:id="_2e8d4IV1EeGphc0tcQWDWg">
+ <eAnnotations xmi:id="_2fiTwIV1EeGphc0tcQWDWg" 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:EDataType xmi:id="_4jRtIIV1EeGphc0tcQWDWg" instanceClassName="java.lang.String" base_PrimitiveType="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <Ecore:EDataType xmi:id="_-F5BIIV1EeGphc0tcQWDWg" instanceClassName="boolean" base_PrimitiveType="_76Q3EIV1EeGphc0tcQWDWg"/>
+ <Ecore:EDataType xmi:id="_oi1e0IW2EeGphc0tcQWDWg" instanceClassName="int" base_PrimitiveType="_llDfEIW2EeGphc0tcQWDWg"/>
+ <Ecore:EPackage xmi:id="_MhZS0L7ZEeGnLN6u0QNctQ" base_Package="_uOdOYIV1EeGphc0tcQWDWg" nsPrefix="" nsURI="org.eclipse.papyrus..infra.core.servicedescriptors" basePackage="org.eclipse.papyrus..infra.core.serviceregistry"/>
+</xmi:XMI>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.di b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.di
new file mode 100644
index 00000000000..e841db109bf
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.di
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ASCII"?>
+<di:SashWindowsMngr xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.eclipse.org/papyrus/0.7.0/sashdi">
+ <pageList>
+ <availablePage>
+ <emfPageIdentifier href="servicedescriptorswithid.notation#_uOttEIV1EeGphc0tcQWDWg"/>
+ </availablePage>
+ <availablePage>
+ <emfPageIdentifier href="servicedescriptorswithid.notation#_xTlMQIV1EeGphc0tcQWDWg"/>
+ </availablePage>
+ <availablePage>
+ <emfPageIdentifier href="servicedescriptorswithid.notation#_bZI7kIehEeGphc0tcQWDWg"/>
+ </availablePage>
+ </pageList>
+ <sashModel currentSelection="//@sashModel/@windows.0/@children.0">
+ <windows>
+ <children xsi:type="di:TabFolder">
+ <children>
+ <emfPageIdentifier href="servicedescriptorswithid.notation#_uOttEIV1EeGphc0tcQWDWg"/>
+ </children>
+ <children>
+ <emfPageIdentifier href="servicedescriptorswithid.notation#_xTlMQIV1EeGphc0tcQWDWg"/>
+ </children>
+ <children>
+ <emfPageIdentifier href="servicedescriptorswithid.notation#_bZI7kIehEeGphc0tcQWDWg"/>
+ </children>
+ </children>
+ </windows>
+ </sashModel>
+</di:SashWindowsMngr>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.ecore b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.ecore
new file mode 100644
index 00000000000..960a94aebcd
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.ecore
@@ -0,0 +1,119 @@
+<?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="servicedescriptorswithid" nsURI="org.eclipse.papyrus..infra.core.servicedescriptorswithid"
+ nsPrefix="servicedescriptorswithid">
+ <eClassifiers xsi:type="ecore:EDataType" name="String" instanceClassName="java.lang.String"/>
+ <eClassifiers xsi:type="ecore:EDataType" name="boolean" instanceClassName="boolean"/>
+ <eClassifiers xsi:type="ecore:EClass" name="RegistryIdDesc">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="isUnique" ordered="false"
+ lowerBound="1" eType="#//boolean"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="sets" upperBound="-1" eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="extends" upperBound="-1"
+ eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="parents" upperBound="-1"
+ eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ServiceIdDesc" eSuperTypes="#//AbstractServiceIdDesc">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="startKind" ordered="false"
+ lowerBound="1" eType="#//StartupKind" defaultValueLiteral="lazy"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="classname" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="injections" ordered="false"
+ upperBound="-1" eType="#//FeatureInjection" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AbstractServiceIdDesc" abstract="true">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="namespace" ordered="false"
+ lowerBound="1" eType="#//ServiceSetIdDesc" eOpposite="#//ServiceSetIdDesc/serviceDescriptors"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="dependsOn" upperBound="-1"
+ eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="priority" ordered="false"
+ lowerBound="1" eType="#//int"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="bundleID" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ServiceSetIdDesc">
+ <eOperations name="getService" ordered="false" lowerBound="1" eType="#//AbstractServiceIdDesc">
+ <eParameters name="serviceId" ordered="false" lowerBound="1" eType="#//Object"/>
+ </eOperations>
+ <eOperations name="containsService" ordered="false" lowerBound="1" eType="#//boolean">
+ <eParameters name="serviceId" ordered="false" lowerBound="1" eType="#//Object"/>
+ </eOperations>
+ <eOperations name="getService" ordered="false" lowerBound="1" eType="#//AbstractServiceIdDesc">
+ <eParameters name="serviceDesc" ordered="false" lowerBound="1" eType="#//AbstractServiceIdDesc"/>
+ </eOperations>
+ <eOperations name="containsService" ordered="false" lowerBound="1" eType="#//boolean">
+ <eParameters name="serviceDesc" ordered="false" lowerBound="1" eType="#//AbstractServiceIdDesc"/>
+ </eOperations>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" lowerBound="1"
+ eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="extends" upperBound="-1"
+ eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="serviceDescriptors" ordered="false"
+ upperBound="-1" eType="#//AbstractServiceIdDesc" containment="true" eOpposite="#//AbstractServiceIdDesc/namespace"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EDataType" name="Object" instanceClassName="java.lang.Object"/>
+ <eClassifiers xsi:type="ecore:EDataType" name="int" instanceClassName="int"/>
+ <eClassifiers xsi:type="ecore:EEnum" name="StartupKind">
+ <eLiterals name="lazy"/>
+ <eLiterals name="startup" value="1"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="FeatureInjection" abstract="true">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AliasIdDesc" eSuperTypes="#//AbstractServiceIdDesc">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="aliasedService" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="IdDescriptors">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="registries" ordered="false"
+ upperBound="-1" eType="#//RegistryIdDesc" containment="true"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="serviceSets" ordered="false"
+ upperBound="-1" eType="#//ServiceSetIdDesc" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="PropertyInjection" eSuperTypes="#//FeatureInjection">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="propertyName" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="values" ordered="false"
+ upperBound="-1" eType="#//InjectedValue" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InjectedValue" abstract="true">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="description" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="MethodInjection" eSuperTypes="#//AbstractMethodInjection">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="methodName" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="AbstractMethodInjection" abstract="true"
+ eSuperTypes="#//FeatureInjection">
+ <eStructuralFeatures xsi:type="ecore:EReference" name="parameters" ordered="false"
+ upperBound="-1" eType="#//ParameterInjection" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ParameterInjection">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="parameterName" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="values" ordered="false"
+ upperBound="-1" eType="#//InjectedValue" containment="true"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="InjectedService" eSuperTypes="#//InjectedValue">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="serviceName" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="OpaqueInjectedValue" eSuperTypes="#//InjectedValue">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" ordered="false"
+ lowerBound="1" eType="#//String"/>
+ </eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="ConstructorInjection" eSuperTypes="#//AbstractMethodInjection"/>
+ <eClassifiers xsi:type="ecore:EClass" name="ServiceFactoryIdDesc" eSuperTypes="#//ServiceIdDesc"/>
+</ecore:EPackage>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.genmodel b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.genmodel
new file mode 100644
index 00000000000..5564a8e30d9
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.genmodel
@@ -0,0 +1,119 @@
+<?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"
+ modelDirectory="/org.eclipse.papyrus.infra.core.serviceregistry/src"
+ modelPluginID="org.eclipse.papyrus.infra.core.serviceregistry" modelName="Servicedescriptorswithid"
+ importerID="org.eclipse.uml2.uml.ecore.importer" complianceLevel="5.0" copyrightFields="false">
+ <genAnnotations source="http://www.eclipse.org/emf/2002/GenModel/importer/org.eclipse.uml2.uml.ecore.importer">
+ <details key="ECORE_TAGGED_VALUES" value="PROCESS"/>
+ <details key="UNION_PROPERTIES" value="REPORT"/>
+ <details key="DUPLICATE_FEATURES" value="DISCARD"/>
+ <details key="SUBSETTING_PROPERTIES" value="REPORT"/>
+ <details key="COMMENTS" value="PROCESS"/>
+ <details key="DUPLICATE_FEATURE_INHERITANCE" value="DISCARD"/>
+ <details key="DUPLICATE_OPERATIONS" value="DISCARD"/>
+ <details key="INVARIANT_CONSTRAINTS" value="PROCESS"/>
+ <details key="REDEFINING_PROPERTIES" value="REPORT"/>
+ <details key="ANNOTATION_DETAILS" value="PROCESS"/>
+ <details key="DUPLICATE_OPERATION_INHERITANCE" value="DISCARD"/>
+ <details key="REDEFINING_OPERATIONS" value="REPORT"/>
+ <details key="DERIVED_FEATURES" value="PROCESS"/>
+ <details key="OPERATION_BODIES" value="IGNORE"/>
+ <details key="CAMEL_CASE_NAMES" value="IGNORE"/>
+ <details key="SUPER_CLASS_ORDER" value="PROCESS"/>
+ </genAnnotations>
+ <foreignModel>servicedescriptorswithid.uml</foreignModel>
+ <genPackages xsi:type="genmodel:GenPackage" prefix="Servicedescriptorswithid" basePackage="org.eclipse.papyrus.infra.core.serviceregistry"
+ disposableProviderFactory="true" ecorePackage="servicedescriptorswithid.ecore#/">
+ <genEnums xsi:type="genmodel:GenEnum" typeSafeEnumCompatible="false" ecoreEnum="servicedescriptorswithid.ecore#//StartupKind">
+ <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="servicedescriptorswithid.ecore#//StartupKind/lazy"/>
+ <genEnumLiterals xsi:type="genmodel:GenEnumLiteral" ecoreEnumLiteral="servicedescriptorswithid.ecore#//StartupKind/startup"/>
+ </genEnums>
+ <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="servicedescriptorswithid.ecore#//String"/>
+ <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="servicedescriptorswithid.ecore#//boolean"/>
+ <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="servicedescriptorswithid.ecore#//Object"/>
+ <genDataTypes xsi:type="genmodel:GenDataType" ecoreDataType="servicedescriptorswithid.ecore#//int"/>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptorswithid.ecore#//RegistryIdDesc">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//RegistryIdDesc/name"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//RegistryIdDesc/description"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//RegistryIdDesc/isUnique"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//RegistryIdDesc/sets"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//RegistryIdDesc/extends"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//RegistryIdDesc/parents"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptorswithid.ecore#//ServiceIdDesc">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//ServiceIdDesc/startKind"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//ServiceIdDesc/classname"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptorswithid.ecore#//ServiceIdDesc/injections"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="servicedescriptorswithid.ecore#//AbstractServiceIdDesc">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//AbstractServiceIdDesc/name"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" notify="false" createChild="false"
+ ecoreFeature="ecore:EReference servicedescriptorswithid.ecore#//AbstractServiceIdDesc/namespace"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//AbstractServiceIdDesc/description"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//AbstractServiceIdDesc/dependsOn"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//AbstractServiceIdDesc/priority"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//AbstractServiceIdDesc/bundleID"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptorswithid.ecore#//ServiceSetIdDesc">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//ServiceSetIdDesc/name"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//ServiceSetIdDesc/extends"/>
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//ServiceSetIdDesc/description"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptorswithid.ecore#//ServiceSetIdDesc/serviceDescriptors"/>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="servicedescriptorswithid.ecore#//ServiceSetIdDesc/getService">
+ <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="servicedescriptorswithid.ecore#//ServiceSetIdDesc/getService/serviceId"/>
+ </genOperations>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="servicedescriptorswithid.ecore#//ServiceSetIdDesc/containsService">
+ <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="servicedescriptorswithid.ecore#//ServiceSetIdDesc/containsService/serviceId"/>
+ </genOperations>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="servicedescriptorswithid.ecore#//ServiceSetIdDesc/getService.1">
+ <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="servicedescriptorswithid.ecore#//ServiceSetIdDesc/getService.1/serviceDesc"/>
+ </genOperations>
+ <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="servicedescriptorswithid.ecore#//ServiceSetIdDesc/containsService.1">
+ <genParameters xsi:type="genmodel:GenParameter" ecoreParameter="servicedescriptorswithid.ecore#//ServiceSetIdDesc/containsService.1/serviceDesc"/>
+ </genOperations>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="servicedescriptorswithid.ecore#//FeatureInjection">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//FeatureInjection/description"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptorswithid.ecore#//AliasIdDesc">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//AliasIdDesc/aliasedService"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptorswithid.ecore#//IdDescriptors">
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptorswithid.ecore#//IdDescriptors/registries"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptorswithid.ecore#//IdDescriptors/serviceSets"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptorswithid.ecore#//PropertyInjection">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//PropertyInjection/propertyName"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptorswithid.ecore#//PropertyInjection/values"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="servicedescriptorswithid.ecore#//InjectedValue">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//InjectedValue/description"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptorswithid.ecore#//MethodInjection">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//MethodInjection/methodName"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="servicedescriptorswithid.ecore#//AbstractMethodInjection">
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptorswithid.ecore#//AbstractMethodInjection/parameters"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptorswithid.ecore#//ParameterInjection">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//ParameterInjection/parameterName"/>
+ <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+ createChild="true" ecoreFeature="ecore:EReference servicedescriptorswithid.ecore#//ParameterInjection/values"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptorswithid.ecore#//InjectedService">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//InjectedService/serviceName"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptorswithid.ecore#//OpaqueInjectedValue">
+ <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute servicedescriptorswithid.ecore#//OpaqueInjectedValue/value"/>
+ </genClasses>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptorswithid.ecore#//ConstructorInjection"/>
+ <genClasses xsi:type="genmodel:GenClass" ecoreClass="servicedescriptorswithid.ecore#//ServiceFactoryIdDesc"/>
+ </genPackages>
+</genmodel:GenModel>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.notation b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.notation
new file mode 100644
index 00000000000..2fee277ebde
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.notation
@@ -0,0 +1,1127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:uml="http://www.eclipse.org/uml2/4.0.0/UML">
+ <notation:Diagram xmi:id="_uOttEIV1EeGphc0tcQWDWg" type="PapyrusUMLClassDiagram" name="overview" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_BMrL4IV2EeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_BMsaAIV2EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_BMsaAYV2EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_BMsaAoV2EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_BMsaA4V2EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_BMsaBIV2EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_BMsaBYV2EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_BMtBEIV2EeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_BMtBEYV2EeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_MCPAMIV2EeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_MB5pAIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MCPAMYV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_qkhxIIWzEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_lDZq4IWzEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_qkhxIYWzEeGphc0tcQWDWg" x="112" y="25"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_vgDZ0KQZEeGh66WyiiFoSg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_vfk4sKQZEeGh66WyiiFoSg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_vgDZ0aQZEeGh66WyiiFoSg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_w4YdQKvxEeG6N55KxIK5cQ" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_mUfAsKvxEeG6N55KxIK5cQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_w4ZEUKvxEeG6N55KxIK5cQ" x="99" y="86"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_xdLMYKvxEeG6N55KxIK5cQ" type="3012" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_fpk2ULShEeGGV-52zxuukw" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_g8GOILShEeGGV-52zxuukw" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_g8GOIbShEeGGV-52zxuukw" key="StereotypeList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_g8GOIrShEeGGV-52zxuukw" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_g8GOI7ShEeGGV-52zxuukw" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_g8GOJLShEeGGV-52zxuukw" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_k6JwsKvxEeG6N55KxIK5cQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xdLMYavxEeG6N55KxIK5cQ" x="29" y="118"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_y1j7oKvxEeG6N55KxIK5cQ" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_ldMMUKvxEeG6N55KxIK5cQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_y1kisKvxEeG6N55KxIK5cQ" x="86" y="149"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_BMtBEoV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_BMtBE4V2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_BMtBFIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BMtBFYV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_BMtBFoV2EeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_BMtBF4V2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_BMtBGIV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_BMtBGYV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BMtBGoV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_BMtBG4V2EeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_BMtoIIV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_BMtoIYV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_BMtoIoV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BMtoI4V2EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_BL_2cIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_BMrL4YV2EeGphc0tcQWDWg" x="306" y="246" width="169" height="292"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_DwOtwIV2EeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DwPU0IV2EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_DwPU0YV2EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DwPU0oV2EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_DwPU04V2EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DwP74IV2EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_DwP74YV2EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_DwP74oV2EeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_DwP744V2EeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_QZeT8IV7EeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_QZGggIV7EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_QZeT8YV7EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_lSyPsIV8EeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_lSt-QIV8EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_lSyPsYV8EeGphc0tcQWDWg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_DwP75IV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DwP75YV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DwP75oV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DwP754V2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_DwP76IV2EeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_DwP76YV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DwP76oV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DwP764V2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DwP77IV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_DwQi8IV2EeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_DwQi8YV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_DwQi8oV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_DwQi84V2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DwQi9IV2EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_Dvz3AIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_DwOtwYV2EeGphc0tcQWDWg" x="696" y="462" height="289"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Exsx0IV2EeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ExtY4IV2EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ExtY4YV2EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ExtY4oV2EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ExtY44V2EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Ext_8IV2EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Ext_8YV2EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Ext_8oV2EeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Ext_84V2EeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_ATDmEKvzEeG6N55KxIK5cQ" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_-4_b0KvyEeG6N55KxIK5cQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ATDmEavzEeG6N55KxIK5cQ" x="65" y="6"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Ext_9IV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Ext_9YV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Ext_9oV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ext_94V2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_Ext_-IV2EeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Ext_-YV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Ext_-oV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Ext_-4V2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Ext__IV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_ExunAIV2EeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_ExunAYV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_ExunAoV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_ExunA4V2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ExunBIV2EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_ExJYMIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Exsx0YV2EeGphc0tcQWDWg" x="1008" y="468"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_GDz58IV2EeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GD0hAIV2EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GD0hAYV2EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GD1IEIV2EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GD1IEYV2EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_GD1IEoV2EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_GD1IE4V2EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_GD1IFIV2EeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_GD1IFYV2EeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_UTkkQIV2EeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_QtlVAIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_UTkkQYV2EeGphc0tcQWDWg" x="91" y="8"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_jzvdAIW3EeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_ZILSMIW3EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_jzvdAYW3EeGphc0tcQWDWg" x="67" y="30"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_DlhR0KvyEeG6N55KxIK5cQ" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_BAX0gKvyEeG6N55KxIK5cQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Dlh44KvyEeG6N55KxIK5cQ" x="265" y="44"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_fayVMIW2EeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_faZToIW2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fayVMYW2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_B-xwALn0EeGTlckZ-osbtw" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#__IyaULnzEeGTlckZ-osbtw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_B-xwAbn0EeGTlckZ-osbtw" x="90" y="84"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_GD1IFoV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_GD1IF4V2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_GD1IGIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GD1IGYV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_GD1vIIV2EeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_GD1vIYV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_GD1vIoV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_GD1vI4V2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GD1vJIV2EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_GD1vJYV2EeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_GD1vJoV2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_GD1vJ4V2EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_GD1vKIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GD1vKYV2EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_GDPSMIV2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_GDz58YV2EeGphc0tcQWDWg" x="708" y="96" width="421" height="169"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_hJBFUIV5EeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_hJBsYIV5EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_hJBsYYV5EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_hJCTcIV5EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_hJCTcYV5EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_hJCTcoV5EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_hJCTc4V5EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_hJCTdIV5EeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_hJCTdYV5EeGphc0tcQWDWg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_hJCTdoV5EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_hJCTd4V5EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_hJCTeIV5EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hJCTeYV5EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_hJCTeoV5EeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_hJCTe4V5EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_hJC6gIV5EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_hJC6gYV5EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hJC6goV5EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_hJC6g4V5EeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_hJC6hIV5EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_hJC6hYV5EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_hJC6hoV5EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hJC6h4V5EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_hIgH8IV5EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_hJBFUYV5EeGphc0tcQWDWg" x="44" y="42" height="475"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_InygUIV7EeGphc0tcQWDWg" type="2006" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_InzHYIV7EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_InzucIV7EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_InzucYV7EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_InzucoV7EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Inzuc4V7EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_InzudIV7EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_InzudYV7EeGphc0tcQWDWg" type="5023"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_InzudoV7EeGphc0tcQWDWg" type="7015">
+ <children xmi:type="notation:Shape" xmi:id="_KCrxAIV7EeGphc0tcQWDWg" type="3017" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:EnumerationLiteral" href="servicedescriptorswithid.uml#_KCKzoIV7EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_KCrxAYV7EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_LOtfQIV7EeGphc0tcQWDWg" type="3017" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:EnumerationLiteral" href="servicedescriptorswithid.uml#_LOWS4IV7EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_LOtfQYV7EeGphc0tcQWDWg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_Inzud4V7EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_InzueIV7EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_InzueYV7EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_InzueoV7EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Enumeration" href="servicedescriptorswithid.uml#_InHx8IV7EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_InygUYV7EeGphc0tcQWDWg" x="1236" y="462"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_vKZOAIV8EeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vKZ1EIV8EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vKZ1EYV8EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vKacIIV8EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vKacIYV8EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_vKacIoV8EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_vKacI4V8EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_vKacJIV8EeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_vKacJYV8EeGphc0tcQWDWg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_vKacJoV8EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_vKacJ4V8EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_vKacKIV8EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vKacKYV8EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_vKbDMIV8EeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_vKbDMYV8EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_vKbDMoV8EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_vKbDM4V8EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vKbDNIV8EeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_vKbDNYV8EeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_vKbDNoV8EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_vKbDN4V8EeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_vKbDOIV8EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vKbDOYV8EeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_vKUVgIV8EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_vKZOAYV8EeGphc0tcQWDWg" x="1056" y="606" width="211"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_19RKUKQYEeGh66WyiiFoSg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_19VbwKQYEeGh66WyiiFoSg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_19WC0KQYEeGh66WyiiFoSg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_19WC0aQYEeGh66WyiiFoSg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_19WC0qQYEeGh66WyiiFoSg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_19Wp4KQYEeGh66WyiiFoSg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_19Wp4aQYEeGh66WyiiFoSg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_19Wp4qQYEeGh66WyiiFoSg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_19Wp46QYEeGh66WyiiFoSg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_MT1HMKQaEeGh66WyiiFoSg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_JiK34KQaEeGh66WyiiFoSg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_MT1HMaQaEeGh66WyiiFoSg" x="57" y="22"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_6vE1kKvxEeG6N55KxIK5cQ" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_4Q6KAKvxEeG6N55KxIK5cQ"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6vE1kavxEeG6N55KxIK5cQ" x="65" y="26"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_kTkk8L-REeGnLN6u0QNctQ" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_fjy_ALnyEeGTlckZ-osbtw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kTkk8b-REeGnLN6u0QNctQ" x="112" y="46"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_19Wp5KQYEeGh66WyiiFoSg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_19Wp5aQYEeGh66WyiiFoSg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_19Wp5qQYEeGh66WyiiFoSg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_19Wp56QYEeGh66WyiiFoSg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_19Wp6KQYEeGh66WyiiFoSg" type="7018">
+ <children xmi:type="notation:Shape" xmi:id="_VW_kQLooEeGTlckZ-osbtw" type="3013" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Operation" href="servicedescriptorswithid.uml#_VWi4ULooEeGTlckZ-osbtw"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_VW_kQbooEeGTlckZ-osbtw"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_n5qmIL7GEeGQuIZssNoKNA" type="3013" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Operation" href="servicedescriptorswithid.uml#_i7ajcL7GEeGQuIZssNoKNA"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_n5qmIb7GEeGQuIZssNoKNA" x="53" y="25"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_19Wp6aQYEeGh66WyiiFoSg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_19Wp6qQYEeGh66WyiiFoSg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_19Wp66QYEeGh66WyiiFoSg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_19Wp7KQYEeGh66WyiiFoSg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_19Wp7aQYEeGh66WyiiFoSg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_19Wp7qQYEeGh66WyiiFoSg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_19Wp76QYEeGh66WyiiFoSg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_19Wp8KQYEeGh66WyiiFoSg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_19Wp8aQYEeGh66WyiiFoSg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_18yCIKQYEeGh66WyiiFoSg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_19RKUaQYEeGh66WyiiFoSg" x="306" y="60" width="175" height="157"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_TSMDcLnyEeGTlckZ-osbtw" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_TSQU4LnyEeGTlckZ-osbtw" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_TSQU4bnyEeGTlckZ-osbtw" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_TSQ78LnyEeGTlckZ-osbtw" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_TSQ78bnyEeGTlckZ-osbtw" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_TSQ78rnyEeGTlckZ-osbtw" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_TSQ787nyEeGTlckZ-osbtw" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_TSQ79LnyEeGTlckZ-osbtw" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_TSRjALnyEeGTlckZ-osbtw" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_TSRjAbnyEeGTlckZ-osbtw"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_TSRjArnyEeGTlckZ-osbtw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_TSRjA7nyEeGTlckZ-osbtw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TSRjBLnyEeGTlckZ-osbtw"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_TSRjBbnyEeGTlckZ-osbtw" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_TSRjBrnyEeGTlckZ-osbtw"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_TSRjB7nyEeGTlckZ-osbtw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_TSRjCLnyEeGTlckZ-osbtw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TSRjCbnyEeGTlckZ-osbtw"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_TSRjCrnyEeGTlckZ-osbtw" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_TSRjC7nyEeGTlckZ-osbtw"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_TSRjDLnyEeGTlckZ-osbtw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_TSRjDbnyEeGTlckZ-osbtw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TSRjDrnyEeGTlckZ-osbtw"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_TQ2msLnyEeGTlckZ-osbtw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_TSMDcbnyEeGTlckZ-osbtw" x="504" y="462" height="289"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_uOttEYV1EeGphc0tcQWDWg"/>
+ <element xmi:type="uml:Model" href="servicedescriptorswithid.uml#_uOdOYIV1EeGphc0tcQWDWg"/>
+ <edges xmi:type="notation:Connector" xmi:id="_I_SzoIV2EeGphc0tcQWDWg" type="4002" source="_DwOtwIV2EeGphc0tcQWDWg" target="_GDz58IV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_I_Uo0IV2EeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_I_Uo0YV2EeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_I_SzoYV2EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptorswithid.uml#_I-2uwIV2EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_I_SzooV2EeGphc0tcQWDWg" points="[7, -9, -61, 69]$[66, -69, -2, 9]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_I_u4gIV2EeGphc0tcQWDWg" id="(0.71,0.09)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_I_u4gYV2EeGphc0tcQWDWg" id="(0.2826603325415677,0.9516129032258065)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_JmSiMIV2EeGphc0tcQWDWg" type="4002" source="_Exsx0IV2EeGphc0tcQWDWg" target="_GDz58IV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_JmeIYIV2EeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_JmeIYYV2EeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_JmSiMYV2EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptorswithid.uml#_Jl784IV2EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_JmSiMoV2EeGphc0tcQWDWg" points="[-18, -18, 69, 70]$[-88, -80, -1, 8]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JnAT4IV2EeGphc0tcQWDWg" id="(0.40476190476190477,0.04807692307692308)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_JnA68IV2EeGphc0tcQWDWg" id="(0.8693586698337292,0.9919354838709677)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_6gRd8IV4EeGphc0tcQWDWg" type="4001" source="_19RKUKQYEeGh66WyiiFoSg" target="_GDz58IV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_6gSsEIV4EeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6gSsEYV4EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6gSsEoV4EeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6gSsE4V4EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6gSsFIV4EeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_BdzQwIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_B_6fUIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6gSsFYV4EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6gSsFoV4EeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Bd1tAIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_B_8UgIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6gSsF4V4EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6gTTIIV4EeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_9LyB8IV4EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_9ZuXUIV4EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6gTTIYV4EeGphc0tcQWDWg" x="21" y="-25"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6gTTIoV4EeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_-wTIsIV4EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="__d_8MIV4EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_6gTTI4V4EeGphc0tcQWDWg" x="-28" y="-19"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_6gRd8YV4EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptorswithid.uml#_6fzj4IV4EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_6gRd8oV4EeGphc0tcQWDWg" points="[7, 5, -354, 0]$[353, 3, -8, -2]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6hAdwIV4EeGphc0tcQWDWg" id="(0.9485714285714286,0.6)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_6hAdwYV4EeGphc0tcQWDWg" id="(0.007125890736342043,0.3136094674556213)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_kHvgQIV5EeGphc0tcQWDWg" type="4001" source="_hJBFUIV5EeGphc0tcQWDWg" target="_BMrL4IV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_kHwuYIV5EeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kHwuYYV5EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kHxVcIV5EeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kHxVcYV5EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kHxVcoV5EeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_r2DPwIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_sB56cIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kHxVc4V5EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kHxVdIV5EeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_t8GWQIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-cyhYIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kHxVdYV5EeGphc0tcQWDWg" x="-26" y="15"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kHxVdoV5EeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_r2CBoIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_8rQSUIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kHxVd4V5EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_kHx8gIV5EeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_t8ILcIV5EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_uNWeUIV5EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kHx8gYV5EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_kHwHUIV5EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptorswithid.uml#_kHQYEIV5EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_kHwHUYV5EeGphc0tcQWDWg" points="[6, 1, -165, -36]$[168, 36, -3, -1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kJBSoIV5EeGphc0tcQWDWg" id="(0.88,0.5705263157894737)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_kJBSoYV5EeGphc0tcQWDWg" id="(0.21893491124260356,0.2403846153846154)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_xGfHQIV8EeGphc0tcQWDWg" type="4001" source="_DwOtwIV2EeGphc0tcQWDWg" target="_vKZOAIV8EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_xGgVYIV8EeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xGgVYYV8EeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_xGgVYoV8EeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xGgVY4V8EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_xGgVZIV8EeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_2Q26YIV8EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2dTa8IV8EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xGgVZYV8EeGphc0tcQWDWg" x="6" y="-42"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_xGg8cIV8EeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_3yEOcYV8EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_3-p48IV8EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xGg8cYV8EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_xGg8coV8EeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_3yDnYIV8EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_3-oq0IV8EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xGg8c4V8EeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_xGg8dIV8EeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_2Q4vkIV8EeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_2dUpEIV8EeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_xGg8dYV8EeGphc0tcQWDWg" x="-14" y="-31"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_xGfHQYV8EeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptorswithid.uml#_xGUIIIV8EeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_xGfHQoV8EeGphc0tcQWDWg" points="[8, -3, -116, 42]$[118, -47, -6, -2]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_xGtwwIV8EeGphc0tcQWDWg" id="(0.9166666666666666,0.6457564575645757)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_xGtwwYV8EeGphc0tcQWDWg" id="(0.04739336492890995,0.32)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_fZdJsKQZEeGh66WyiiFoSg" type="4001" source="_hJBFUIV5EeGphc0tcQWDWg" target="_19RKUKQYEeGh66WyiiFoSg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_fZeX0KQZEeGh66WyiiFoSg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fZeX0aQZEeGh66WyiiFoSg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fZeX0qQZEeGh66WyiiFoSg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fZeX06QZEeGh66WyiiFoSg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fZe-4KQZEeGh66WyiiFoSg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ns6NoKQZEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_n9_WkKQZEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fZe-4aQZEeGh66WyiiFoSg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fZe-4qQZEeGh66WyiiFoSg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ka-i0KQZEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_kwxMoKQZEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fZe-46QZEeGh66WyiiFoSg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fZe-5KQZEeGh66WyiiFoSg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_jDAqUKQZEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_jp2A0KQZEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fZe-5aQZEeGh66WyiiFoSg" x="23" y="19"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fZe-5qQZEeGh66WyiiFoSg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_mzhukKQZEeGh66WyiiFoSg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_nFx8MKQZEeGh66WyiiFoSg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_fZe-56QZEeGh66WyiiFoSg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_fZdJsaQZEeGh66WyiiFoSg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptorswithid.uml#_fYwmIKQZEeGh66WyiiFoSg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_fZdJsqQZEeGh66WyiiFoSg" points="[3, -1, -165, 0]$[165, -1, -3, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fd3IkKQZEeGh66WyiiFoSg" id="(0.97,0.2231578947368421)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_fd3voKQZEeGh66WyiiFoSg" id="(0.017142857142857144,0.6)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_X1nyYLnyEeGTlckZ-osbtw" type="4002" source="_TSMDcLnyEeGTlckZ-osbtw" target="_DwOtwIV2EeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_X1pnkLnyEeGTlckZ-osbtw" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_X1pnkbnyEeGTlckZ-osbtw" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_X1nyYbnyEeGTlckZ-osbtw" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptorswithid.uml#_X0WnELnyEeGTlckZ-osbtw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_X1nyYrnyEeGTlckZ-osbtw" points="[3, -1, -71, 0]$[68, -8, -6, -7]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_X2mCwLnyEeGTlckZ-osbtw" id="(0.9763779527559056,0.63)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_X2mCwbnyEeGTlckZ-osbtw" id="(0.046511627906976744,0.6228373702422145)"/>
+ </edges>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_xTlMQIV1EeGphc0tcQWDWg" type="PapyrusUMLClassDiagram" name="datatypes" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_zP_OkIV1EeGphc0tcQWDWg" type="2009" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zQBDwIV1EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zQBq0IV1EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zQBq0YV1EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zQBq0oV1EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_zQCR4IV1EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_zQCR4YV1EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_4j0fsIV1EeGphc0tcQWDWg" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_4j1GwIV1EeGphc0tcQWDWg" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_4j1GwYV1EeGphc0tcQWDWg" key="StereotypeList" value="Ecore::EDataType"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_4j1GwoV1EeGphc0tcQWDWg" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_4j1Gw4V1EeGphc0tcQWDWg" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_4j1GxIV1EeGphc0tcQWDWg" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_zQCR4oV1EeGphc0tcQWDWg" type="5032"/>
+ <element xmi:type="uml:PrimitiveType" href="servicedescriptorswithid.uml#_zPW8cIV1EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zP_OkYV1EeGphc0tcQWDWg" x="144" y="84"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_76kZEIV1EeGphc0tcQWDWg" type="2009" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_76lAIIV1EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_76lAIYV1EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_76lnMIV1EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_76lnMYV1EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_76lnMoV1EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_76lnM4V1EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_-GNxQIV1EeGphc0tcQWDWg" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-GOYUIV1EeGphc0tcQWDWg" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-GOYUYV1EeGphc0tcQWDWg" key="StereotypeList" value="Ecore::EDataType"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-GOYUoV1EeGphc0tcQWDWg" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-GOYU4V1EeGphc0tcQWDWg" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_-GOYVIV1EeGphc0tcQWDWg" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_76lnNIV1EeGphc0tcQWDWg" type="5032"/>
+ <element xmi:type="uml:PrimitiveType" href="servicedescriptorswithid.uml#_76Q3EIV1EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_76kZEYV1EeGphc0tcQWDWg" x="144" y="192"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_llm4sIW2EeGphc0tcQWDWg" type="2009" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_llnfwIW2EeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_llnfwYW2EeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_lloG0IW2EeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_lloG0YW2EeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_lloG0oW2EeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_lloG04W2EeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ojSx0IW2EeGphc0tcQWDWg" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ojSx0YW2EeGphc0tcQWDWg" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ojTY4IW2EeGphc0tcQWDWg" key="StereotypeList" value="Ecore::EDataType"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ojTY4YW2EeGphc0tcQWDWg" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ojTY4oW2EeGphc0tcQWDWg" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_ojTY44W2EeGphc0tcQWDWg" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_lloG1IW2EeGphc0tcQWDWg" type="5032"/>
+ <element xmi:type="uml:PrimitiveType" href="servicedescriptorswithid.uml#_llDfEIW2EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_llm4sYW2EeGphc0tcQWDWg" x="312" y="84"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_p6ig0LooEeGTlckZ-osbtw" type="2009" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_p6ig0rooEeGTlckZ-osbtw" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_p6ig07ooEeGTlckZ-osbtw" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_p6ig1LooEeGTlckZ-osbtw" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_p6ig1booEeGTlckZ-osbtw" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_p6ig1rooEeGTlckZ-osbtw" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_p6ig17ooEeGTlckZ-osbtw" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_sJivALooEeGTlckZ-osbtw" source="Stereotype_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_sJivAbooEeGTlckZ-osbtw" key="StereotypeWithQualifiedNameList" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_sJivArooEeGTlckZ-osbtw" key="StereotypeList" value="Ecore::EDataType"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_sJivA7ooEeGTlckZ-osbtw" key="Stereotype_Presentation_Kind" value="HorizontalStereo"/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_sJivBLooEeGTlckZ-osbtw" key="PropStereoDisplay" value=""/>
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_sJivBbooEeGTlckZ-osbtw" key="StereotypePropertyLocation" value="Compartment"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_p6ig2LooEeGTlckZ-osbtw" type="5032"/>
+ <element xmi:type="uml:PrimitiveType" href="servicedescriptorswithid.uml#_p6F04LooEeGTlckZ-osbtw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_p6ig0booEeGTlckZ-osbtw" x="364" y="196"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_xTlMQYV1EeGphc0tcQWDWg"/>
+ <element xmi:type="uml:Model" href="servicedescriptorswithid.uml#_uOdOYIV1EeGphc0tcQWDWg"/>
+ </notation:Diagram>
+ <notation:Diagram xmi:id="_bZI7kIehEeGphc0tcQWDWg" type="PapyrusUMLClassDiagram" name="Injection" measurementUnit="Pixel">
+ <children xmi:type="notation:Shape" xmi:id="_cf2sAIehEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_cf36IIehEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_cf36IYehEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_cf36IoehEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_cf36I4ehEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_cf4hMIehEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_cf4hMYehEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_cf4hMoehEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_cf4hM4ehEeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_htL2EIetEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_f3KvoIetEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_htL2EYetEeGphc0tcQWDWg" x="56" y="10"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_cf4hNIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_cf4hNYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_cf4hNoehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cf4hN4ehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_cf5IQIehEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_cf5IQYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_cf5IQoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_cf5IQ4ehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cf5IRIehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_cf5IRYehEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_cf5IRoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_cf5IR4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_cf5ISIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cf5ISYehEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_vKUVgIV8EeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_cf2sAYehEeGphc0tcQWDWg" x="312" y="96" width="187" height="103"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_dfeV8IehEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_dfe9AIehEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_dfe9AYehEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_dfe9AoehEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_dffkEIehEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_dffkEYehEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_dffkEoehEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_dffkE4ehEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_dffkFIehEeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_kYCwQIehEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_kXpHoIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kYCwQYehEeGphc0tcQWDWg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_dffkFYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_dffkFoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_dffkF4ehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dffkGIehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_dffkGYehEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_dffkGoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_dffkG4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_dffkHIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dffkHYehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_dffkHoehEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_dffkH4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_dffkIIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_dffkIYehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dffkIoehEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_dfBC8IehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_dfeV8YehEeGphc0tcQWDWg" x="114" y="396" height="259"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_e8gUoIehEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_e8g7sIehEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_e8g7sYehEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_e8g7soehEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_e8g7s4ehEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_e8g7tIehEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_e8hiwIehEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_e8hiwYehEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_e8hiwoehEeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_ocYvcIehEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_ocGbkIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_ocYvcYehEeGphc0tcQWDWg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_e8hiw4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_e8hixIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_e8hixYehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e8hixoehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_e8hix4ehEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_e8hiyIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_e8hiyYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_e8hiyoehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e8hiy4ehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_e8hizIehEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_e8hizYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_e8hizoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_e8hiz4ehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e8hi0IehEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_e787AIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_e8gUoYehEeGphc0tcQWDWg" x="444" y="420"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_wt9kEIehEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wt-yMIehEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_wt_ZQIehEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wt_ZQYehEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_wuAAUIehEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_wuAAUYehEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_wuAAUoehEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_wuAAU4ehEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_wuAAVIehEeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_pYYnMIetEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_oeOFAIetEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_pYYnMYetEeGphc0tcQWDWg" x="48" y="15"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_wuAAVYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_wuAnYIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_wuAnYYehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wuAnYoehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_wuAnY4ehEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_wuAnZIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_wuAnZYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_wuAnZoehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wuAnZ4ehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_wuAnaIehEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_wuAnaYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_wuAnaoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_wuAna4ehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wuAnbIehEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_wt55sIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wt-LIIehEeGphc0tcQWDWg" x="660" y="558"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_yMRVIIehEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_yMR8MIehEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_yMR8MYehEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_yMR8MoehEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_yMSjQIehEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_yMSjQYehEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_yMSjQoehEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_yMSjQ4ehEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_yMSjRIehEeGphc0tcQWDWg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yMSjRYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_yMSjRoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_yMSjR4ehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yMSjSIehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_yMSjSYehEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yMSjSoehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_yMSjS4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_yMSjTIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yMSjTYehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_yMSjToehEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_yMSjT4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_yMSjUIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_yMTKUIehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yMTKUYehEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_yMPf8IehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_yMRVIYehEeGphc0tcQWDWg" x="630" y="708" width="121"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_z09KMIehEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_z0-YUIehEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_z0-YUYehEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_z0-YUoehEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_z0-YU4ehEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_z0-YVIehEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_z0-_YIehEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_z0-_YYehEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_z0-_YoehEeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_F13x8IeiEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_F118wIeiEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_F13x8YeiEeGphc0tcQWDWg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_z0-_Y4ehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_z0-_ZIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_z0-_ZYehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z0-_ZoehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_z0-_Z4ehEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_z0-_aIehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_z0-_aYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_z0-_aoehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z0-_a4ehEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_z0-_bIehEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_z0-_bYehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_z0-_boehEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_z0-_b4ehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z0-_cIehEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_z05f0IehEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_z09KMYehEeGphc0tcQWDWg" x="780" y="708" width="157"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_HAl_AIeqEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HAnNIIeqEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HAnNIYeqEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HAn0MIeqEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HAn0MYeqEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_HAn0MoeqEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_HAn0M4eqEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_HAn0NIeqEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HAobQIeqEeGphc0tcQWDWg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HAobQYeqEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HAobQoeqEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HAobQ4eqEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HAobRIeqEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HAobRYeqEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HAobRoeqEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HAobR4eqEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HAobSIeqEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HAobSYeqEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_HAobSoeqEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_HAobS4eqEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_HAobTIeqEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_HAobTYeqEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HAobToeqEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_HAeqQIeqEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_HAl_AYeqEeGphc0tcQWDWg" x="750" y="420" width="193"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_fCs3sIerEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_fCtewIerEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_fCtewYerEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_fCtewoerEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_fCuF0IerEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_fCuF0YerEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_fCuF0oerEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_fCuF04erEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_fCuF1IerEeGphc0tcQWDWg" type="7017">
+ <children xmi:type="notation:Shape" xmi:id="_kZPekIerEeGphc0tcQWDWg" type="3012" fontName="Segoe UI" lineColor="0">
+ <element xmi:type="uml:Property" href="servicedescriptorswithid.uml#_kZL0MIerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_kZPekYerEeGphc0tcQWDWg"/>
+ </children>
+ <styles xmi:type="notation:TitleStyle" xmi:id="_fCuF1YerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_fCuF1oerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_fCuF14erEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fCuF2IerEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_fCuF2YerEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_fCuF2oerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_fCuF24erEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_fCuF3IerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fCuF3YerEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_fCuF3oerEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_fCuF34erEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_fCuF4IerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_fCuF4YerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fCuF4oerEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_fComQIerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_fCs3sYerEeGphc0tcQWDWg" x="1026" y="276" width="193"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_6trxAIerEeGphc0tcQWDWg" type="2008" fontName="Segoe UI" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_6tsYEIerEeGphc0tcQWDWg" source="ShadowFigure">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6tsYEYerEeGphc0tcQWDWg" key="ShadowFigure_Value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_6ts_IIerEeGphc0tcQWDWg" source="displayNameLabelIcon">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6ts_IYerEeGphc0tcQWDWg" key="displayNameLabelIcon_value" value="false"/>
+ </eAnnotations>
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_6ts_IoerEeGphc0tcQWDWg" source="QualifiedName">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_6ts_I4erEeGphc0tcQWDWg" key="QualifiedNameDepth" value="1000"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_6ts_JIerEeGphc0tcQWDWg" type="5029"/>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_6ts_JYerEeGphc0tcQWDWg" type="7017">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_6ts_JoerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_6ts_J4erEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_6ts_KIerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6ts_KYerEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_6ts_KoerEeGphc0tcQWDWg" type="7018">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_6ts_K4erEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_6ts_LIerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_6ts_LYerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6ts_LoerEeGphc0tcQWDWg"/>
+ </children>
+ <children xmi:type="notation:BasicCompartment" xmi:id="_6ts_L4erEeGphc0tcQWDWg" type="7019">
+ <styles xmi:type="notation:TitleStyle" xmi:id="_6ts_MIerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_6ts_MYerEeGphc0tcQWDWg"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_6ts_MoerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6ts_M4erEeGphc0tcQWDWg"/>
+ </children>
+ <element xmi:type="uml:Class" href="servicedescriptorswithid.uml#_6thY8IerEeGphc0tcQWDWg"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_6trxAYerEeGphc0tcQWDWg" x="564" y="276" width="199"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_bZI7kYehEeGphc0tcQWDWg"/>
+ <element xmi:type="uml:Model" href="servicedescriptorswithid.uml#_uOdOYIV1EeGphc0tcQWDWg"/>
+ <edges xmi:type="notation:Connector" xmi:id="_tm7hsIehEeGphc0tcQWDWg" type="4002" source="_dfeV8IehEeGphc0tcQWDWg" target="_cf2sAIehEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_tm8IwIehEeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_tm8IwYehEeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_tm7hsYehEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptorswithid.uml#_tm4eYIehEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_tm7hsoehEeGphc0tcQWDWg" points="[8, -8, -72, 70]$[85, -61, 5, 17]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tm_zIIehEeGphc0tcQWDWg" id="(0.5964912280701754,0.07692307692307693)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_tm_zIYehEeGphc0tcQWDWg" id="(0.5561497326203209,0.8349514563106796)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_uHPZcIehEeGphc0tcQWDWg" type="4002" source="_6trxAIerEeGphc0tcQWDWg" target="_cf2sAIehEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_uHR1sIehEeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_uHR1sYehEeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_uHPZcYehEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptorswithid.uml#_uHM9MIehEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_uHPZcoehEeGphc0tcQWDWg" points="[-22, -13, 96, 58]$[-117, -66, 1, 5]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uHWHIIehEeGphc0tcQWDWg" id="(0.5175879396984925,0.09)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_uHWHIYehEeGphc0tcQWDWg" id="(0.5561497326203209,0.9514563106796117)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_2IYlYIehEeGphc0tcQWDWg" type="4002" source="_yMRVIIehEeGphc0tcQWDWg" target="_wt9kEIehEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_2IZzgIehEeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2IaakIehEeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_2IYlYYehEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptorswithid.uml#_2IViEIehEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2IYlYoehEeGphc0tcQWDWg" points="[4, -6, -53, 63]$[52, -56, -5, 13]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2IhIQIehEeGphc0tcQWDWg" id="(0.51,0.06)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2IhvUIehEeGphc0tcQWDWg" id="(0.36,0.87)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_2z4ZcIehEeGphc0tcQWDWg" type="4002" source="_z09KMIehEeGphc0tcQWDWg" target="_wt9kEIehEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_2z5AgIehEeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_2z5AgYehEeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_2z4ZcYehEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptorswithid.uml#_2z2kQIehEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_2z4ZcoehEeGphc0tcQWDWg" points="[-22, -17, 88, 71]$[-106, -79, 4, 9]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2z9R8IehEeGphc0tcQWDWg" id="(0.45454545454545453,0.17)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_2z9R8YehEeGphc0tcQWDWg" id="(0.69,0.91)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_YAcAwIepEeGphc0tcQWDWg" type="4001" source="_dfeV8IehEeGphc0tcQWDWg" target="_wt9kEIehEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_YAcn0IepEeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YAdO4IepEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_YAdO4YepEeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YAdO4oepEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_YAdO44epEeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XhH8oIerEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_X20f0IerEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YAdO5IepEeGphc0tcQWDWg" x="44" y="-27"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_YAdO5YepEeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_XhJKwIerEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_X22VAIerEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YAdO5oepEeGphc0tcQWDWg" x="-33" y="21"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_YAdO54epEeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Zat7gIerEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Zu2_gIerEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YAdO6IepEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_YAd18IepEeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_ZawXwIerEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Zu40sIerEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_YAd18YepEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_YAcAwYepEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptorswithid.uml#_YAXvUIepEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_YAcAwoepEeGphc0tcQWDWg" points="[4, 2, -176, 0]$[175, 1, -5, -1]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YAqqQIepEeGphc0tcQWDWg" id="(0.9766081871345029,0.7837837837837838)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_YAqqQYepEeGphc0tcQWDWg" id="(0.05,0.43)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_-h5pgIerEeGphc0tcQWDWg" type="4002" source="_e8gUoIehEeGphc0tcQWDWg" target="_6trxAIerEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_-h63oIerEeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_-h7esIerEeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_-h5pgYerEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptorswithid.uml#_-hyUwIerEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_-h5pgoerEeGphc0tcQWDWg" points="[27, -12, -60, 26]$[83, -32, -4, 6]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-iF2wIerEeGphc0tcQWDWg" id="(0.5662650602409639,0.11538461538461539)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_-iF2wYerEeGphc0tcQWDWg" id="(0.36683417085427134,0.94)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="__C0lQIerEeGphc0tcQWDWg" type="4002" source="_HAl_AIeqEeGphc0tcQWDWg" target="_6trxAIerEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="__C1zYIerEeGphc0tcQWDWg" type="6007">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="__C1zYYerEeGphc0tcQWDWg" y="40"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="__C0lQYerEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Generalization" href="servicedescriptorswithid.uml#__CwT0IerEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="__C0lQoerEeGphc0tcQWDWg" points="[-25, -7, 110, 32]$[-132, -27, 3, 12]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="__C-WQIerEeGphc0tcQWDWg" id="(0.2538860103626943,0.07)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="__C-WQYerEeGphc0tcQWDWg" id="(0.5628140703517588,0.88)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_FXH04IesEeGphc0tcQWDWg" type="4001" source="_6trxAIerEeGphc0tcQWDWg" target="_fCs3sIerEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_FXJDAIesEeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FXJDAYesEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_FXJqEIesEeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FXJqEYesEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_FXJqEoesEeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_JcwNgIesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Jwu5cIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FXJqE4esEeGphc0tcQWDWg" x="57" y="-18"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_FXJqFIesEeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_JcxboIesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_JwvggIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FXKRIIesEeGphc0tcQWDWg" x="-44" y="24"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_FXKRIYesEeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_LpbgcIesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_L9MxAIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FXKRIoesEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_FXKRI4esEeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_LpcukIesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_L9OmMIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_FXKRJIesEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_FXH04YesEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptorswithid.uml#_FXAgIIesEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_FXH04oesEeGphc0tcQWDWg" points="[4, 6, -263, 0]$[267, 6, 0, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FXVQQIesEeGphc0tcQWDWg" id="(0.9798994974874372,0.4)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_FXVQQYesEeGphc0tcQWDWg" id="(0.0,0.4423076923076923)"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_GmtNcIesEeGphc0tcQWDWg" type="4001" source="_fCs3sIerEeGphc0tcQWDWg" target="_wt9kEIehEeGphc0tcQWDWg" lineColor="0">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Gmt0gIesEeGphc0tcQWDWg" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_GmubkIesEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_GmubkYesEeGphc0tcQWDWg" visible="false" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_GmubkoesEeGphc0tcQWDWg" x="-81" y="-169"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Gmubk4esEeGphc0tcQWDWg" type="6003">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_JczQ0IesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Jwx8wIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_GmublIesEeGphc0tcQWDWg" x="-53" y="-72"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_GmublYesEeGphc0tcQWDWg" type="6005">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_JcyCsYesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_JwwuoIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="8"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_GmubloesEeGphc0tcQWDWg" x="28" y="14"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Gmubl4esEeGphc0tcQWDWg" type="6033">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_LpejwIesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_L9QbYIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_GmubmIesEeGphc0tcQWDWg" y="20"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_GmvCoIesEeGphc0tcQWDWg" type="6034">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Lpfx4IesEeGphc0tcQWDWg" source="CustomAppearance_Annotation">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_L9RpgIesEeGphc0tcQWDWg" key="CustomAppearance_MaskValue" value="32"/>
+ </eAnnotations>
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_GmvCoYesEeGphc0tcQWDWg" y="-20"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_GmtNcYesEeGphc0tcQWDWg" fontName="Segoe UI"/>
+ <element xmi:type="uml:Association" href="servicedescriptorswithid.uml#_GmmfwIesEeGphc0tcQWDWg"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_GmtNcoesEeGphc0tcQWDWg" points="[0, 3, 336, -231]$[0, 234, 336, 0]$[-322, 234, 14, 0]"/>
+ <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Gm6BwIesEeGphc0tcQWDWg" id="(0.5414012738853503,0.9711538461538461)"/>
+ <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_Gm6o0IesEeGphc0tcQWDWg" id="(0.91,0.51)"/>
+ </edges>
+ </notation:Diagram>
+</xmi:XMI>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.uml b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.uml
new file mode 100644
index 00000000000..6d56b3cf920
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/models/servicedescriptorswithid.uml
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="20110701" xmlns:xmi="http://www.omg.org/spec/XMI/20110701" 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/4.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="_uOdOYIV1EeGphc0tcQWDWg" name="servicedescriptorswithid">
+ <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_zPW8cIV1EeGphc0tcQWDWg" name="String"/>
+ <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_76Q3EIV1EeGphc0tcQWDWg" name="boolean"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_BL_2cIV2EeGphc0tcQWDWg" name="RegistryIdDesc">
+ <ownedAttribute xmi:id="_MB5pAIV2EeGphc0tcQWDWg" name="name" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_lDZq4IWzEeGphc0tcQWDWg" name="description" type="_zPW8cIV1EeGphc0tcQWDWg">
+ <ownedComment xmi:id="_NyFjsIW3EeGphc0tcQWDWg">
+ <body>Description for Human.</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_vfk4sKQZEeGh66WyiiFoSg" name="isUnique" type="_76Q3EIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_k6JwsKvxEeG6N55KxIK5cQ" name="sets" type="_zPW8cIV1EeGphc0tcQWDWg" isOrdered="true">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ouRikKvxEeG6N55KxIK5cQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ouTXwKvxEeG6N55KxIK5cQ" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ldMMUKvxEeG6N55KxIK5cQ" name="extends" type="_zPW8cIV1EeGphc0tcQWDWg" isOrdered="true">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_q2GxwKvxEeG6N55KxIK5cQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_q2HY0KvxEeG6N55KxIK5cQ" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_mUfAsKvxEeG6N55KxIK5cQ" name="parents" type="_zPW8cIV1EeGphc0tcQWDWg" isOrdered="true">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_uyaPQKvxEeG6N55KxIK5cQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_uybdYKvxEeG6N55KxIK5cQ" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_Dvz3AIV2EeGphc0tcQWDWg" name="ServiceIdDesc">
+ <generalization xmi:id="_I-2uwIV2EeGphc0tcQWDWg" general="_GDPSMIV2EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_QZGggIV7EeGphc0tcQWDWg" name="startKind" type="_InHx8IV7EeGphc0tcQWDWg">
+ <defaultValue xmi:type="uml:InstanceValue" xmi:id="_Z5mmYIV7EeGphc0tcQWDWg" name="lazy" type="_InHx8IV7EeGphc0tcQWDWg" instance="_KCKzoIV7EeGphc0tcQWDWg"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_lSt-QIV8EeGphc0tcQWDWg" name="classname" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_xGS6AIV8EeGphc0tcQWDWg" name="injections" type="_vKUVgIV8EeGphc0tcQWDWg" aggregation="composite" association="_xGUIIIV8EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_xGS6AYV8EeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_xGS6AoV8EeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_ExJYMIV2EeGphc0tcQWDWg" name="AliasIdDesc">
+ <generalization xmi:id="_Jl784IV2EeGphc0tcQWDWg" general="_GDPSMIV2EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_-4_b0KvyEeG6N55KxIK5cQ" name="aliasedService" type="_zPW8cIV1EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_-4_b0avyEeG6N55KxIK5cQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_-4_b0qvyEeG6N55KxIK5cQ" value="1"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_GDPSMIV2EeGphc0tcQWDWg" name="AbstractServiceIdDesc" isAbstract="true">
+ <ownedAttribute xmi:id="_QtlVAIV2EeGphc0tcQWDWg" name="name" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_6fzj4YV4EeGphc0tcQWDWg" name="namespace" type="_18yCIKQYEeGh66WyiiFoSg" association="_6fzj4IV4EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_6fzj4oV4EeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_6fzj44V4EeGphc0tcQWDWg" value="1"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_ZILSMIW3EeGphc0tcQWDWg" name="description" type="_zPW8cIV1EeGphc0tcQWDWg">
+ <ownedComment xmi:id="_ZILSMYW3EeGphc0tcQWDWg">
+ <body>Description for Human.</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_BAX0gKvyEeG6N55KxIK5cQ" name="dependsOn" type="_zPW8cIV1EeGphc0tcQWDWg" isOrdered="true">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_BAX0gavyEeG6N55KxIK5cQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_BAX0gqvyEeG6N55KxIK5cQ" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_faZToIW2EeGphc0tcQWDWg" name="priority" type="_llDfEIW2EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="__IyaULnzEeGTlckZ-osbtw" name="bundleID" type="_zPW8cIV1EeGphc0tcQWDWg">
+ <ownedComment xmi:id="__IyaUbnzEeGTlckZ-osbtw">
+ <body>ID of the bundle (aka plugin) containing this declaration.&#xD;
+This value should not be set manually. It is set automatically during parsing of the &#xD;
+declaration.</body>
+ </ownedComment>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_6fzj4IV4EeGphc0tcQWDWg" name="namespaceDesc_abstractServiceDesc_1" memberEnd="_6fzj4YV4EeGphc0tcQWDWg _6fyVwIV4EeGphc0tcQWDWg"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_hIgH8IV5EeGphc0tcQWDWg" name="IdDescriptors">
+ <ownedAttribute xmi:id="_kHPxAIV5EeGphc0tcQWDWg" name="registries" type="_BL_2cIV2EeGphc0tcQWDWg" aggregation="composite" association="_kHQYEIV5EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_kHPxAYV5EeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_kHPxAoV5EeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_fYv_EKQZEeGh66WyiiFoSg" name="serviceSets" type="_18yCIKQYEeGh66WyiiFoSg" aggregation="composite" association="_fYwmIKQZEeGh66WyiiFoSg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_fYv_EaQZEeGh66WyiiFoSg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_fYv_EqQZEeGh66WyiiFoSg" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_kHQYEIV5EeGphc0tcQWDWg" name="descriptors_registryDesc_1" memberEnd="_kHQYEYV5EeGphc0tcQWDWg _kHPxAIV5EeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_kHQYEYV5EeGphc0tcQWDWg" name="descriptors" type="_hIgH8IV5EeGphc0tcQWDWg" association="_kHQYEIV5EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_kHQYEoV5EeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_kHQYE4V5EeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Enumeration" xmi:id="_InHx8IV7EeGphc0tcQWDWg" name="StartupKind">
+ <ownedLiteral xmi:id="_KCKzoIV7EeGphc0tcQWDWg" name="lazy"/>
+ <ownedLiteral xmi:id="_LOWS4IV7EeGphc0tcQWDWg" name="startup"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_vKUVgIV8EeGphc0tcQWDWg" name="FeatureInjection" isAbstract="true">
+ <ownedAttribute xmi:id="_f3KvoIetEeGphc0tcQWDWg" name="description" type="_zPW8cIV1EeGphc0tcQWDWg">
+ <ownedComment xmi:id="_f3KvoYetEeGphc0tcQWDWg">
+ <body>Description for Human.</body>
+ </ownedComment>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_xGUIIIV8EeGphc0tcQWDWg" name="abstractServiceDesc_injectedService_1" memberEnd="_xGUvMIV8EeGphc0tcQWDWg _xGS6AIV8EeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_xGUvMIV8EeGphc0tcQWDWg" name="owner" type="_Dvz3AIV2EeGphc0tcQWDWg" association="_xGUIIIV8EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_xGUvMYV8EeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_xGUvMoV8EeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_llDfEIW2EeGphc0tcQWDWg" name="int"/>
+ <packagedElement xmi:type="uml:Class" xmi:id="_dfBC8IehEeGphc0tcQWDWg" name="PropertyInjection">
+ <generalization xmi:id="_tm4eYIehEeGphc0tcQWDWg" general="_vKUVgIV8EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_kXpHoIehEeGphc0tcQWDWg" name="propertyName" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_YAXIQIepEeGphc0tcQWDWg" name="values" type="_wt55sIehEeGphc0tcQWDWg" aggregation="composite" association="_YAXvUIepEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_YAXIQYepEeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_YAXIQoepEeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_e787AIehEeGphc0tcQWDWg" name="MethodInjection">
+ <generalization xmi:id="_-hyUwIerEeGphc0tcQWDWg" general="_6thY8IerEeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_ocGbkIehEeGphc0tcQWDWg" name="methodName" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_wt55sIehEeGphc0tcQWDWg" name="InjectedValue" isAbstract="true">
+ <ownedAttribute xmi:id="_oeOFAIetEeGphc0tcQWDWg" name="description" type="_zPW8cIV1EeGphc0tcQWDWg">
+ <ownedComment xmi:id="_oeOFAYetEeGphc0tcQWDWg">
+ <body>Description for Human.</body>
+ </ownedComment>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_yMPf8IehEeGphc0tcQWDWg" name="InjectedService">
+ <generalization xmi:id="_2IViEIehEeGphc0tcQWDWg" general="_wt55sIehEeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_ZGcAIKvzEeG6N55KxIK5cQ" name="serviceName" type="_zPW8cIV1EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ZGcAIavzEeG6N55KxIK5cQ" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ZGcAIqvzEeG6N55KxIK5cQ" value="1"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_z05f0IehEeGphc0tcQWDWg" name="OpaqueInjectedValue">
+ <generalization xmi:id="_2z2kQIehEeGphc0tcQWDWg" general="_wt55sIehEeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_F118wIeiEeGphc0tcQWDWg" name="value" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_YAXvUIepEeGphc0tcQWDWg" name="propertyInjection_injectedValue_1" memberEnd="_YAXvUYepEeGphc0tcQWDWg _YAXIQIepEeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_YAXvUYepEeGphc0tcQWDWg" name="propertyInjection" type="_dfBC8IehEeGphc0tcQWDWg" association="_YAXvUIepEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_YAXvUoepEeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_YAXvU4epEeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_HAeqQIeqEeGphc0tcQWDWg" name="ConstructorInjection">
+ <generalization xmi:id="__CwT0IerEeGphc0tcQWDWg" general="_6thY8IerEeGphc0tcQWDWg"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_fComQIerEeGphc0tcQWDWg" name="ParameterInjection">
+ <ownedAttribute xmi:id="_kZL0MIerEeGphc0tcQWDWg" name="parameterName" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_GmlRoIesEeGphc0tcQWDWg" name="values" type="_wt55sIehEeGphc0tcQWDWg" aggregation="composite" association="_GmmfwIesEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_GmlRoYesEeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_GmlRooesEeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_6thY8IerEeGphc0tcQWDWg" name="AbstractMethodInjection" isAbstract="true">
+ <generalization xmi:id="_uHM9MIehEeGphc0tcQWDWg" general="_vKUVgIV8EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_FW_SAIesEeGphc0tcQWDWg" name="parameters" type="_fComQIerEeGphc0tcQWDWg" aggregation="composite" association="_FXAgIIesEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_FW_SAYesEeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_FW_SAoesEeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_FXAgIIesEeGphc0tcQWDWg" name="abstractMethodInjection_parameterInjection_1" memberEnd="_FXAgIYesEeGphc0tcQWDWg _FW_SAIesEeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_FXAgIYesEeGphc0tcQWDWg" name="abstractMethodInjection" type="_6thY8IerEeGphc0tcQWDWg" association="_FXAgIIesEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_FXAgIoesEeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_FXAgI4esEeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_GmmfwIesEeGphc0tcQWDWg" name="parameterInjection_injectedValue_1" memberEnd="_GmmfwYesEeGphc0tcQWDWg _GmlRoIesEeGphc0tcQWDWg">
+ <ownedEnd xmi:id="_GmmfwYesEeGphc0tcQWDWg" name="parameterInjection" type="_fComQIerEeGphc0tcQWDWg" association="_GmmfwIesEeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_GmmfwoesEeGphc0tcQWDWg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Gmmfw4esEeGphc0tcQWDWg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_18yCIKQYEeGh66WyiiFoSg" name="ServiceSetIdDesc">
+ <ownedAttribute xmi:id="_6fyVwIV4EeGphc0tcQWDWg" name="serviceDescriptors" type="_GDPSMIV2EeGphc0tcQWDWg" aggregation="composite" association="_6fzj4IV4EeGphc0tcQWDWg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_6fyVwYV4EeGphc0tcQWDWg"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_6fyVwoV4EeGphc0tcQWDWg" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_JiK34KQaEeGh66WyiiFoSg" name="name" type="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <ownedAttribute xmi:id="_4Q6KAKvxEeG6N55KxIK5cQ" name="extends" type="_zPW8cIV1EeGphc0tcQWDWg" isOrdered="true">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_4Q6KAavxEeG6N55KxIK5cQ"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_4Q6KAqvxEeG6N55KxIK5cQ" value="*"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:id="_fjy_ALnyEeGTlckZ-osbtw" name="description" type="_zPW8cIV1EeGphc0tcQWDWg">
+ <ownedComment xmi:id="_fjy_AbnyEeGTlckZ-osbtw">
+ <body>Description for Human.</body>
+ </ownedComment>
+ </ownedAttribute>
+ <ownedOperation xmi:id="_VWi4ULooEeGTlckZ-osbtw" name="getService">
+ <ownedParameter xmi:id="_gZRl8LooEeGTlckZ-osbtw" name="serviceId" type="_p6F04LooEeGTlckZ-osbtw"/>
+ <ownedParameter xmi:id="_mLSn4LooEeGTlckZ-osbtw" name="return" type="_GDPSMIV2EeGphc0tcQWDWg" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_i7ajcL7GEeGQuIZssNoKNA" name="containsService">
+ <ownedParameter xmi:id="_i7ajcb7GEeGQuIZssNoKNA" name="serviceId" type="_p6F04LooEeGTlckZ-osbtw"/>
+ <ownedParameter xmi:id="_i7ajcr7GEeGQuIZssNoKNA" name="return" type="_76Q3EIV1EeGphc0tcQWDWg" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_1iAEEL7GEeGQuIZssNoKNA" name="getService">
+ <ownedParameter xmi:id="_1iAEEb7GEeGQuIZssNoKNA" name="serviceDesc" type="_GDPSMIV2EeGphc0tcQWDWg"/>
+ <ownedParameter xmi:id="_1iAEEr7GEeGQuIZssNoKNA" name="return" type="_GDPSMIV2EeGphc0tcQWDWg" direction="return"/>
+ </ownedOperation>
+ <ownedOperation xmi:id="_1iArIL7GEeGQuIZssNoKNA" name="containsService">
+ <ownedParameter xmi:id="_1iArIb7GEeGQuIZssNoKNA" name="serviceDesc" type="_GDPSMIV2EeGphc0tcQWDWg"/>
+ <ownedParameter xmi:id="_1iArIr7GEeGQuIZssNoKNA" name="return" type="_76Q3EIV1EeGphc0tcQWDWg" direction="return"/>
+ </ownedOperation>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Association" xmi:id="_fYwmIKQZEeGh66WyiiFoSg" name="descriptors_serviceSet_1" memberEnd="_fYwmIaQZEeGh66WyiiFoSg _fYv_EKQZEeGh66WyiiFoSg">
+ <ownedEnd xmi:id="_fYwmIaQZEeGh66WyiiFoSg" name="descriptors" type="_hIgH8IV5EeGphc0tcQWDWg" association="_fYwmIKQZEeGh66WyiiFoSg">
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_fYwmIqQZEeGh66WyiiFoSg" value="1"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_fYwmI6QZEeGh66WyiiFoSg" value="1"/>
+ </ownedEnd>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Class" xmi:id="_TQ2msLnyEeGTlckZ-osbtw" name="ServiceFactoryIdDesc">
+ <generalization xmi:id="_X0WnELnyEeGTlckZ-osbtw" general="_Dvz3AIV2EeGphc0tcQWDWg"/>
+ </packagedElement>
+ <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_p6F04LooEeGTlckZ-osbtw" name="Object"/>
+ <profileApplication xmi:id="_2e8d4IV1EeGphc0tcQWDWg">
+ <eAnnotations xmi:id="_2fiTwIV1EeGphc0tcQWDWg" 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:EDataType xmi:id="_4jRtIIV1EeGphc0tcQWDWg" instanceClassName="java.lang.String" base_PrimitiveType="_zPW8cIV1EeGphc0tcQWDWg"/>
+ <Ecore:EDataType xmi:id="_-F5BIIV1EeGphc0tcQWDWg" instanceClassName="boolean" base_PrimitiveType="_76Q3EIV1EeGphc0tcQWDWg"/>
+ <Ecore:EDataType xmi:id="_oi1e0IW2EeGphc0tcQWDWg" instanceClassName="int" base_PrimitiveType="_llDfEIW2EeGphc0tcQWDWg"/>
+ <Ecore:EPackage xmi:id="_gju4IKvzEeG6N55KxIK5cQ" base_Package="_uOdOYIV1EeGphc0tcQWDWg" nsURI="org.eclipse.papyrus..infra.core.servicedescriptorswithid" basePackage="org.eclipse.papyrus..infra.core.serviceregistry"/>
+ <Ecore:EDataType xmi:id="_sIp-MLooEeGTlckZ-osbtw" instanceClassName="java.lang.Object" base_PrimitiveType="_p6F04LooEeGTlckZ-osbtw"/>
+</xmi:XMI>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/plugin.properties b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/plugin.properties
new file mode 100644
index 00000000000..376bf25e8b5
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/plugin.properties
@@ -0,0 +1,12 @@
+#################################################################################
+# Copyright (c) 2012 Cedric Dumoulin.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+##################################################################################
+pluginName=Papyrus Service Registry
+providerName=Eclipse Modeling Project
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/plugin.xml b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/plugin.xml
new file mode 100644
index 00000000000..b874321200c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/plugin.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension-point id="service" name="Service" schema="schema/service.exsd"/>
+ <extension
+ point="org.eclipse.papyrus.infra.core.serviceregistry.service">
+ <servicesSet
+ id="wizardServiceSet">
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.Service2"
+ id="modeSet"
+ priority="1"
+ serviceSetId="org.eclipse.papyrus.infra.core.serviceregistry.service2"
+ startKind="lazy">
+ </service>
+ </servicesSet>
+ <servicesSet
+ id="papyrusServiceSet">
+ <extendedServiceSet
+ serviceSetId="wizardServiceSet">
+ </extendedServiceSet>
+ <service
+ classname="org.eclipse.papyrus.infra.core.serviceregistry.Service3"
+ id="sashContainer"
+ priority="1"
+ serviceSetId="org.eclipse.papyrus.infra.core.serviceregistry.service3"
+ startKind="startup">
+ </service>
+ <serviceAlias
+ aliasedServiceId="modeSet"
+ id="myAlias">
+ </serviceAlias>
+ </servicesSet>
+ <registry
+ id="papyrusRegistry"
+ isUnique="false">
+ <serviceSets
+ serviceSetId="papyrusServiceSet">
+ </serviceSets>
+ </registry>
+ <registry
+ id="wizardRegistry"
+ isUnique="false">
+ <serviceSets
+ serviceSetId="wizardServiceSet">
+ </serviceSets>
+ <parentRegistry
+ registryId="papyrusRegistry">
+ </parentRegistry>
+ </registry>
+ </extension>
+</plugin>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/schema/service.exsd b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/schema/service.exsd
new file mode 100644
index 00000000000..37559fe3646
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/schema/service.exsd
@@ -0,0 +1,458 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.papyrus.infra.core.serviceregistry" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.papyrus.infra.core.serviceregistry" id="service" name="Service"/>
+ </appinfo>
+ <documentation>
+ Service V2.
+Define a Service used by Papyrus Editors.
+A service can be shared across editors. It can be used as a shared object between editors.
+Some services are used to load models, provide factories, ...
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="registry" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="servicesSet" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="service">
+ <annotation>
+ <documentation>
+ A service that should be registered to the ServicesRegistry.
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence minOccurs="0" maxOccurs="unbounded">
+ <element ref="dependsOn"/>
+ </sequence>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+ The key used to retrieve the service from the ServiceRegistry.
+If not set (default), the classname is used as key.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="classname" type="string" use="required">
+ <annotation>
+ <documentation>
+ Name of the class implementing the service.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.papyrus.infra.core.services.IService"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="priority" type="string" use="default" value="1">
+ <annotation>
+ <documentation>
+ Priority used when two services are registered under the same key. The service with the higher prority is used.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="startKind" use="default" value="lazy">
+ <annotation>
+ <documentation>
+ Specify how the service is started:
+lazy: when the service is requested.
+startup: started when the Registry is about to finish its initialization.
+ </documentation>
+ </annotation>
+ <simpleType>
+ <restriction base="string">
+ <enumeration value="lazy">
+ </enumeration>
+ <enumeration value="startup">
+ </enumeration>
+ </restriction>
+ </simpleType>
+ </attribute>
+ <attribute name="description" type="string">
+ <annotation>
+ <documentation>
+ A human readable description
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="serviceFactory">
+ <annotation>
+ <documentation>
+ A service factory that should be registered to the ServicesRegistry.
+The factory is used to create the service. The factory receive all the services event, and take in charge to forward them to the service.
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence minOccurs="0" maxOccurs="unbounded">
+ <element ref="dependsOn"/>
+ </sequence>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+ The key used to retrieve the service from the ServiceRegistry.
+If not set (default), the classname is used as key.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="classname" type="string" use="required">
+ <annotation>
+ <documentation>
+ Name of the class implementing the service.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.papyrus.infra.core.services.IServiceFactory"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="priority" type="string" use="default" value="1">
+ <annotation>
+ <documentation>
+ Priority used when two services are registered under the same key. The service with the higher prority is used.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="startKind" use="default" value="lazy">
+ <annotation>
+ <documentation>
+ Specify how the service is started:
+lazy: when the service is requested.
+startup: started when the Registry is about to finish its initialization.
+ </documentation>
+ </annotation>
+ <simpleType>
+ <restriction base="string">
+ <enumeration value="lazy">
+ </enumeration>
+ <enumeration value="startup">
+ </enumeration>
+ </restriction>
+ </simpleType>
+ </attribute>
+ <attribute name="description" type="string">
+ <annotation>
+ <documentation>
+ A human readable description
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="dependsOn">
+ <annotation>
+ <documentation>
+ Allows to express dependancies needed before starting the surrounding service.
+ </documentation>
+ </annotation>
+ <complexType>
+ <attribute name="serviceId" type="string" use="required">
+ <annotation>
+ <documentation>
+ Id of the service on which the surrounding service depends.
+The registry will ensure that the specified service is started before the dependant service.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="identifier" basedOn="org.eclipse.papyrus.infra.core.serviceregistry.service/service/@id"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="description" type="string">
+ <annotation>
+ <documentation>
+ A human readable description
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="alias">
+ <annotation>
+ <documentation>
+ An alias than can be used in place of the name of a service.
+The alias specifies the alias name, and the service that is accessible
+from this alias.
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence minOccurs="0" maxOccurs="unbounded">
+ <element ref="dependsOn"/>
+ </sequence>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+ The key used to retrieve the service from the ServiceRegistry.
+If not set (default), the classname is used as key.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="aliasedServiceId" type="string" use="required">
+ <annotation>
+ <documentation>
+ The registry to which this service belong.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="identifier" basedOn="org.eclipse.papyrus.infra.core.serviceregistry.service/servicesSet/service/@id"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="priority" type="string" use="default" value="1">
+ <annotation>
+ <documentation>
+ Priority used when two services are registered under the same key. The service with the higher prority is used.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="description" type="string">
+ <annotation>
+ <documentation>
+ A human readable description
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="registry">
+ <annotation>
+ <documentation>
+ Describe a Registry.
+Declaring a regitry allows to associate services to one registry.
+Also, it is possible, from within a program, to &quot;load&quot; a registry. This mean that all associated services will be loaded in the Registry.
+
+Registry declaration also allows to:
+ - extends another registry. All services associated to the extended registry are part of the declaration of this registry. A service can be &quot;overloaded&quot; by its name.
+ - specify some registry as parents. A parent is used as a fallback when a service is not found in the registry.
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="extendedRegistry" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="parentRegistry" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="serviceSets" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="id" type="string" use="required">
+ <annotation>
+ <documentation>
+ The key used to identified the registry.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="isUnique" type="boolean" use="default" value="false">
+ <annotation>
+ <documentation>
+ Indicate if the registry instance is unique.
+A registry flagged as unique can be shared among applications and registries.
+Not yet implemented !!!
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="extendedRegistry">
+ <annotation>
+ <documentation>
+ A registry that the surrounding Registry extends.
+ </documentation>
+ </annotation>
+ <complexType>
+ <attribute name="registryId" type="string" use="required">
+ <annotation>
+ <documentation>
+ The registry to which this service belong.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="identifier" basedOn="org.eclipse.papyrus.infra.core.serviceregistry.service/registry/@id"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="extendedServiceSet">
+ <annotation>
+ <documentation>
+ A registry that the surrounding Registry extends.
+ </documentation>
+ </annotation>
+ <complexType>
+ <attribute name="serviceSetId" type="string" use="required">
+ <annotation>
+ <documentation>
+ The id of the extended set.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="identifier" basedOn="org.eclipse.papyrus.infra.core.serviceregistry.service/servicesSet/@id"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="description" type="string">
+ <annotation>
+ <documentation>
+ A human readable description
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="serviceSets">
+ <annotation>
+ <documentation>
+ Sets used by the registry.
+Services attached to the set are added to the registry.
+ </documentation>
+ </annotation>
+ <complexType>
+ <attribute name="serviceSetId" type="string" use="required">
+ <annotation>
+ <documentation>
+ The id of the extended set.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="identifier" basedOn="org.eclipse.papyrus.infra.core.serviceregistry.service/servicesSet/@id"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ <attribute name="description" type="string">
+ <annotation>
+ <documentation>
+ A human readable description
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="parentRegistry">
+ <annotation>
+ <documentation>
+ A registry that is parent of this registry.
+This parent is used as a fallback when a service is not found in the surrounding registry.
+ </documentation>
+ </annotation>
+ <complexType>
+ <attribute name="registryId" type="string" use="required">
+ <annotation>
+ <documentation>
+ The registry to which this service belong.
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="identifier" basedOn="org.eclipse.papyrus.infra.core.serviceregistry.service/registry/@id"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="servicesSet">
+ <annotation>
+ <documentation>
+ A set of services.
+A set is used to group services.
+A set can extend another set of services. In this case, all services declared in the parent are available in this set.
+
+A set can be declared partially in different plugins. In this case, the final content of the set is the union of all declarations.
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="extendedServiceSet" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="service" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="alias" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="serviceFactory" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="id" type="string" use="required">
+ <annotation>
+ <documentation>
+ The unique id of the set.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="description" type="string">
+ <annotation>
+ <documentation>
+ A human readable description
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="examples"/>
+ </appinfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiinfo"/>
+ </appinfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/Activator.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/Activator.java
new file mode 100644
index 00000000000..d73b7391af8
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/Activator.java
@@ -0,0 +1,53 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+public class Activator implements BundleActivator {
+
+ /** Logging helper */
+ public static LogHelper log = new LogHelper();
+
+ /**
+ * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
+ *
+ * @param context
+ * @throws Exception
+ */
+ public void start(BundleContext context) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+ /**
+ * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
+ *
+ * @param context
+ * @throws Exception
+ */
+ public void stop(BundleContext context) throws Exception {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/AliasDescriptor.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/AliasDescriptor.java
new file mode 100644
index 00000000000..f1306fc3406
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/AliasDescriptor.java
@@ -0,0 +1,35 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.Arrays;
+
+
+/**
+ * Describe an alias to another service.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class AliasDescriptor extends ServiceDescriptor {
+
+ public AliasDescriptor(String aliasName, String serviceName, int priority) {
+ super(aliasName, ServiceStartKind.LAZY, priority, Arrays.asList(serviceName));
+ this.setServiceTypeKind(ServiceTypeKind.alias);
+ }
+
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/BadStateException.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/BadStateException.java
new file mode 100644
index 00000000000..a7651c864c8
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/BadStateException.java
@@ -0,0 +1,49 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+public class BadStateException extends ServiceException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Constructor.
+ *
+ */
+ public BadStateException(ServiceState expectedState, ServiceState state, ServiceDescriptor descriptor) {
+ super("Bad state for service '" + descriptor.getKey() + "'. Expected '" + expectedState + "' found '" + state + "'.");
+ }
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param text
+ * @param state
+ * @param serviceDescriptor
+ */
+ public BadStateException(String text, ServiceState state, ServiceDescriptor descriptor) {
+ super(text + " (Service= '" + (descriptor!=null?descriptor.getKey():"unknown") + ", state= " + state + ")");
+ }
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param text
+ * @param state
+ * @param serviceDescriptor
+ */
+ public BadStateException(String text, ServiceState state, ServiceDescriptor descriptor, Throwable cause) {
+ super(text + " (Service= '" + descriptor.getKey() + ", state= " + state + ")", cause);
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DeclarationException.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DeclarationException.java
new file mode 100644
index 00000000000..827d18ac722
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DeclarationException.java
@@ -0,0 +1,78 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+
+/**
+ * Root exception of exceptions thrown while reading descriptor declarations.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class DeclarationException extends Exception {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Constructor.
+ *
+ */
+ public DeclarationException() {
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ */
+ public DeclarationException(String message) {
+ super(message);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param cause
+ */
+ public DeclarationException(Throwable cause) {
+ super(cause);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ * @param cause
+ */
+ public DeclarationException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ * @param cause
+ * @param enableSuppression
+ * @param writableStackTrace
+ */
+ public DeclarationException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DeclarationMultiException.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DeclarationMultiException.java
new file mode 100644
index 00000000000..3d46bdec3f4
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DeclarationMultiException.java
@@ -0,0 +1,142 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * An exception used to gather multi exceptions encountered during declarations reading.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class DeclarationMultiException extends DeclarationException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private List<Throwable> errors;
+ /**
+ * Constructor.
+ *
+ */
+ public DeclarationMultiException() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ */
+ public DeclarationMultiException(String message) {
+ super(message);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param cause
+ */
+ public DeclarationMultiException(Throwable cause) {
+ super(cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ * @param cause
+ */
+ public DeclarationMultiException(String message, Throwable cause) {
+ super(message, cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ * @param cause
+ * @param enableSuppression
+ * @param writableStackTrace
+ */
+ public DeclarationMultiException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param string
+ * @param warnings The warnings used to initialize this object. No clone is per
+ */
+ public DeclarationMultiException(String string, List<Throwable> warnings) {
+ this.errors = warnings;
+ }
+
+ /**
+ * Add a throwable to this list.
+ *
+ * @param throwable
+ */
+ public void addThrowable( Throwable throwable ) {
+ if( errors == null) {
+ errors = new ArrayList<Throwable>();
+ }
+ errors.add(throwable);
+ }
+
+ /**
+ *
+ * @return
+ */
+ public boolean isEmpty() {
+ if(errors == null)
+ return true;
+
+ return errors.isEmpty();
+ }
+
+ /**
+ *
+ * @see java.lang.Throwable#toString()
+ *
+ * @return
+ */
+ @Override
+ public String toString() {
+ if( errors == null || errors.size()==0) {
+ return super.toString();
+ }
+
+ StringBuffer buff = new StringBuffer(super.toString());
+ for( Throwable error : errors) {
+ buff.append("\n").append( error.getMessage() );
+ }
+
+ return buff.toString();
+
+
+ }
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DeclarationNotFoundException.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DeclarationNotFoundException.java
new file mode 100644
index 00000000000..a016aa7684f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DeclarationNotFoundException.java
@@ -0,0 +1,77 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+public class DeclarationNotFoundException extends DeclarationException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Constructor.
+ *
+ */
+ public DeclarationNotFoundException() {
+ super();
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ * @param cause
+ * @param enableSuppression
+ * @param writableStackTrace
+ */
+ public DeclarationNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ * @param cause
+ */
+ public DeclarationNotFoundException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ */
+ public DeclarationNotFoundException(String message) {
+ super(message);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param cause
+ */
+ public DeclarationNotFoundException(Throwable cause) {
+ super(cause);
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DescriptorsCache.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DescriptorsCache.java
new file mode 100644
index 00000000000..230965f660d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/DescriptorsCache.java
@@ -0,0 +1,360 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.List;
+
+import javax.swing.event.AncestorEvent;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceFactoryDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.StartupKind;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceFactoryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+
+
+/**
+ * A cache used to query the {@link IServiceDescriptorsWithIdProvider}. The cache return resolved descriptors,
+ * in the form of instance of the ServiceDescriptors model.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class DescriptorsCache {
+
+ /**
+ * The cache of descriptors.
+ */
+ protected Descriptors descriptorsCache;
+
+ /**
+ * The provider used to query declarations.
+ */
+ protected ServiceDescriptorsWithIdProviderCollection declaredDescriptorProvider;
+
+
+
+ /**
+ *
+ * Constructor.
+ *
+ */
+ public DescriptorsCache() {
+ declaredDescriptorProvider = new ServiceDescriptorsWithIdProviderCollection();
+ descriptorsCache = ServicedescriptorsFactory.eINSTANCE.createDescriptors();
+ }
+
+ /**
+ * Add all the provided {@link IServiceDescriptorsWithIdProvider} to the list of providers to use.
+ * @param declaredDescriptorProviders
+ */
+ public void addAll(IServiceDescriptorsWithIdProvider ... declaredDescriptorProviders) {
+
+ declaredDescriptorProvider.addAll(declaredDescriptorProviders);
+ descriptorsCache = ServicedescriptorsFactory.eINSTANCE.createDescriptors();
+
+ }
+
+ /**
+ * Get the descriptor for the specified registry.
+ * The descriptor is built from the declarations found in {@link #declaredDescriptorProvider}.
+ * The descriptor is cached. This mean that subsequent calls for the same name will return the same
+ * result.
+ * <br/>
+ * If the registry is not found, throws an exception.
+ *
+ * @param registryName The name of the registry for which the descriptor is required.
+ *
+ * @return The registry descriptor
+ * @throws DeclarationException If an error occur while reading declarations.
+ *
+ */
+ public RegistryDesc getRegistryDesc(String registryName) throws DeclarationException {
+
+ // Try from cache
+ RegistryDesc desc = descriptorsCache.getRegistryDesc(registryName);
+
+ if( desc!=null) {
+ return desc;
+ }
+
+ // Load from providers
+ // this can throw exception
+ RegistryIdDesc idDesc = declaredDescriptorProvider.getRegistryIdDesc(registryName);
+
+ // Create a RegistryDesc from a RegistryIdDesc, and set minimal data
+ desc = ServicedescriptorsFactory.eINSTANCE.createRegistryDesc();
+ desc.setName(idDesc.getName());
+ desc.setIsUnique(idDesc.isUnique());
+ desc.setDescription(idDesc.getDescription());
+
+ // Add it to the cache, so it can be found by other requests
+ descriptorsCache.getRegistries().add(desc);
+
+ // Set the references
+ // serviceSet
+ for( String serviceSetId : idDesc.getSets()) {
+ desc.getServiceSets().add( getServiceSetDesc(serviceSetId) );
+ }
+
+ // extends
+ for( String extendsId : idDesc.getExtends()) {
+ desc.getExtends().add( getRegistryDesc(extendsId) );
+ }
+
+ // parents
+ for( String extendsId : idDesc.getParents()) {
+ desc.getParents().add( getRegistryDesc(extendsId) );
+ }
+
+
+ // Resolve inheritances
+ // need to compute services available for this registry
+ // Available services are those from all sets, and from extends.
+ computeRegistryServices( desc );
+
+
+ return desc;
+ }
+
+ /**
+ * Get the {@link ServiceSetDesc} for the specified name.
+ * The descriptor is built from the declarations found in {@link #declaredDescriptorProvider}.
+ * The descriptor is cached. This mean that subsequent calls for the same name will return the same
+ * result.
+ * <br/>
+ * If the descriptor is not found, throws an exception.
+ *
+ * @param serviceSetId
+ * @return
+ * @throws DeclarationException
+ */
+ public ServiceSetDesc getServiceSetDesc(String serviceSetId) throws DeclarationException {
+ // Try from cache
+ ServiceSetDesc desc = descriptorsCache.getServiceSetDesc(serviceSetId);
+
+ if( desc!=null) {
+ return desc;
+ }
+
+ // Load from providers
+ // this can throw exception
+ ServiceSetIdDesc idDesc = declaredDescriptorProvider.getServiceSet(serviceSetId);
+
+ // Create a RegistryDesc from a RegistryIdDesc, and set minimal data
+ desc = ServicedescriptorsFactory.eINSTANCE.createServiceSetDesc();
+ desc.setName(idDesc.getName());
+ desc.setDescription(idDesc.getDescription());
+
+ // Add it to the cache, so it can be found by other requests
+ descriptorsCache.getServiceSets().add(desc);
+
+ // Set the references
+ // serviceSet
+ for( AbstractServiceIdDesc serviceIdDesc : idDesc.getServiceDescriptors()) {
+ desc.getOwnedServices().add( transformAbstractServiceIdDescToRef(serviceIdDesc) );
+ }
+
+ // extends
+ for( String extendsId : idDesc.getExtends()) {
+ desc.getExtends().add( getServiceSetDesc(extendsId) );
+ }
+
+ // Resolve inheritances
+ // need to compute services available for this set
+ // Available services are those from all extends.
+ computeServiceSetServices( desc );
+
+ return desc;
+ }
+
+ /**
+ * Transform {@link AncestorEvent} {@link AbstractServiceIdDesc} to an {@link AbstractServiceDesc}.
+ *
+ * @param serviceIdDesc
+ * @return
+ */
+ private AbstractServiceDesc transformAbstractServiceIdDescToRef(AbstractServiceIdDesc serviceIdDesc) {
+ if( serviceIdDesc instanceof ServiceFactoryIdDesc) {
+ return transformServiceFactoryIdDescToRef((ServiceFactoryIdDesc)serviceIdDesc);
+ }
+ else if ( serviceIdDesc instanceof ServiceIdDesc) {
+ return transformServiceIdDescToRef((ServiceIdDesc)serviceIdDesc);
+ }
+ else if ( serviceIdDesc instanceof AliasIdDesc) {
+ return transformAliasIdDescToRef((AliasIdDesc)serviceIdDesc);
+ }
+ else {
+ // Should never happen
+ throw new UnsupportedOperationException("Don't no how to transform '" + serviceIdDesc +"' to AbstractServiceDesc.");
+ }
+ }
+
+ /**
+ *
+ * @param serviceIdDesc
+ * @return
+ */
+ private AbstractServiceDesc transformServiceIdDescToRef(ServiceIdDesc serviceIdDesc) {
+
+ ServiceDesc desc = ServicedescriptorsFactory.eINSTANCE.createServiceDesc();
+ desc.setBundleID(serviceIdDesc.getBundleID());
+ desc.setClassname(serviceIdDesc.getClassname());
+ desc.setDescription(serviceIdDesc.getDescription());
+ desc.setName(serviceIdDesc.getName());
+ desc.setPriority(serviceIdDesc.getPriority());
+ desc.setStartKind( transformStartKind(serviceIdDesc.getStartKind()));
+ // dependsOn
+ desc.getDependsOnIds().addAll(serviceIdDesc.getDependsOn());
+
+ return desc;
+ }
+
+ /**
+ *
+ * @param startKind
+ * @return
+ */
+ private StartupKind transformStartKind(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind startKind) {
+
+ switch( startKind) {
+ case STARTUP:
+ return StartupKind.STARTUP;
+ case LAZY:
+ return StartupKind.LAZY;
+ default:
+ return StartupKind.STARTUP;
+ }
+ }
+
+ /**
+ *
+ * @param serviceIdDesc
+ * @return
+ */
+ private AbstractServiceDesc transformAliasIdDescToRef(AliasIdDesc serviceIdDesc) {
+ AliasDesc desc = ServicedescriptorsFactory.eINSTANCE.createAliasDesc();
+ desc.setBundleID(serviceIdDesc.getBundleID());
+ desc.setDescription(serviceIdDesc.getDescription());
+ desc.setName(serviceIdDesc.getName());
+ desc.setPriority(serviceIdDesc.getPriority());
+ // dependsOn
+ desc.getDependsOnIds().addAll(serviceIdDesc.getDependsOn());
+
+ return desc;
+
+ }
+
+ /**
+ *
+ * @param serviceIdDesc
+ * @return
+ */
+ private AbstractServiceDesc transformServiceFactoryIdDescToRef(ServiceFactoryIdDesc serviceIdDesc) {
+ ServiceFactoryDesc desc = ServicedescriptorsFactory.eINSTANCE.createServiceFactoryDesc();
+ desc.setBundleID(serviceIdDesc.getBundleID());
+ desc.setClassname(serviceIdDesc.getClassname());
+ desc.setDescription(serviceIdDesc.getDescription());
+ desc.setName(serviceIdDesc.getName());
+ desc.setPriority(serviceIdDesc.getPriority());
+ desc.setStartKind( transformStartKind(serviceIdDesc.getStartKind()));
+ // dependsOn
+ desc.getDependsOnIds().addAll(serviceIdDesc.getDependsOn());
+
+ return desc;
+ }
+
+ /**
+ * Compute the services available from this registry. This implies
+ * resolving inheritances from extends.
+ * @param registryDesc The descriptor for which services should be computed.
+ *
+ *
+ */
+ private void computeRegistryServices(RegistryDesc registryDesc) {
+
+ // Reset the services
+ List<AbstractServiceDesc> services = registryDesc.getServices();
+ services.clear();
+
+ // do the union of all services from sets
+ // Do not check for double names (this is done in the Registry).
+ for( ServiceSetDesc setDesc : registryDesc.getServiceSets()) {
+
+ services.addAll(setDesc.getServices());
+ }
+
+ // Add services from extends
+ // Add a services from a parent only if there is not a service with the same name
+ // in the child
+ for( RegistryDesc extendsDesc : registryDesc.getExtends()) {
+
+ // Walk each service of the parent
+ for( AbstractServiceDesc serviceDesc : extendsDesc.getServices()) {
+
+ // Check if the service is already in the child
+ if( ! registryDesc.servicesContains(serviceDesc.getName())) {
+ services.add(serviceDesc);
+ }
+ }
+ }
+
+ }
+
+ /**
+ * Compute the services available from the specified {@link ServiceSetDesc}. This reset and compute
+ * the {@link ServiceSetDesc#getServices()} property.
+ *
+ * @param serviceSetDesc
+ */
+ private void computeServiceSetServices(ServiceSetDesc serviceSetDesc) {
+
+ // Reset the services
+ List<AbstractServiceDesc> services = serviceSetDesc.getServices();
+ services.clear();
+
+ // Add its own services
+ services.addAll(serviceSetDesc.getOwnedServices());
+
+ // Add services from extends
+ // Add a services from an extends only if there is not a service with the same name
+ // in the child
+ for( ServiceSetDesc extendsDesc : serviceSetDesc.getExtends()) {
+
+ // Walk each service of the parent
+ for( AbstractServiceDesc serviceDesc : extendsDesc.getServices()) {
+
+ // Check if the service is already in the child
+ if( ! serviceSetDesc.servicesContains(serviceDesc.getName())) {
+ services.add(serviceDesc);
+ }
+ }
+ }
+
+ }
+
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProvider.java
new file mode 100644
index 00000000000..f5a34543a5d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServiceDescriptorsWithIdProvider.java
@@ -0,0 +1,534 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.papyrus.infra.core.serviceregistry.internal.BadDeclarationException;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind;
+
+
+/**
+ * A declared service provider reading declaration from eclipse extensions (plugin.xml).
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class ExtensionServiceDescriptorsWithIdProvider implements IServiceDescriptorsWithIdProvider {
+
+ /** Namespace where to look for the extension points. */
+ public static String extensionPointNamespace = "org.eclipse.papyrus.infra.core.serviceregistry";
+
+ /** ID of the extension (schema filename) */
+ public static final String SERVICE_EXTENSION_ID = "service";
+
+ /** Extension point name inside the extension description **/
+ public final static String REGISTRY_ELEMENT_NAME = "registry";
+
+ /** Extension point name inside the extension description **/
+ public final static String REGISTRY_EXTENDS_ELEMENT = "extendedRegistry";
+
+ /** Extension point name inside the extension description **/
+ public final static String REGISTRY_PARENT_ELEMENT = "parentRegistry";
+
+ /** Extension point name inside the extension description **/
+ public final static String REGISTRY_SERVICE_SETS_ELEMENT = "serviceSets";
+
+ /** Extension point name inside the extension description **/
+ public final static String SERVICE_ELEMENT_NAME = "service";
+
+ /** servicesSet name **/
+ public final static String SERVICE_SET_ELEMENT_NAME = "servicesSet";
+
+ /** ServiceFactory Extension point **/
+ public final static String SERVICE_FACTORY_ELEMENT_NAME = "serviceFactory";
+
+ /** ServiceFactory Extension point **/
+ public final static String ALIAS_ELEMENT_NAME = "alias";
+
+ /** ServiceFactory Extension point **/
+ public final static String ALIASED_SERVICE_ID_ATTRIBUTE = "aliasedServiceId";
+
+ /** id attribute */
+ private static final String ID_ATTRIBUTE = "id";
+
+ /** constant for the attribute factoryClass **/
+ public final static String CONTEXTCLASS_ATTRIBUTE = "contextClass";
+
+ /** extension point propertyname */
+ private final static String STARTKIND_PROPERTY = "startKind";
+
+ /** name of the dependsOn element */
+ private static final String DEPENDSON_ELEMENT_NAME = "dependsOn";
+
+ /** */
+ private static final String SERVICE_ID_ATTRIBUTE_NAME = "serviceId";
+
+ /** */
+ private static final String SERVICE_SET_EXTENDS_ELEMENT = "extendedServiceSet";
+
+ /** */
+ private static final String DESCRIPTION_ATTRIBUTE = "description";
+
+ /** */
+ private static final String IS_UNIQUE_ATTRIBUTE = "isUnique";
+
+ /** */
+ private static final String REGISTRY_ID_ATTRIBUTE = "registryId";
+
+ /** */
+ private static final String SERVICE_SET_ID_ATTRIBUTE = "serviceSetId";
+
+ /**
+ * Get the descriptor for the specified registry.
+ * Return null if not found.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.IServiceDescriptorsWithIdProvider#getRegistryDescriptor(java.lang.String)
+ *
+ * @param registryName
+ * @return The specified descriptor, or null if not found
+ * @throws DeclarationException If there is more than one registry declared under the name.
+ *
+ */
+ public RegistryIdDesc getRegistryDescriptor(String registryName) throws DeclarationException {
+
+ // Reading data from plugins
+ IConfigurationElement[] configElements = getExtensionRegistry().getConfigurationElementsFor(extensionPointNamespace, SERVICE_EXTENSION_ID);
+
+ RegistryIdDesc registryIdDesc = null;
+ boolean isRegistryFound = false;
+ List<Throwable> warnings = new ArrayList<Throwable>();
+
+ for( IConfigurationElement ele : configElements) {
+
+ // SEarch for "registry"
+ if(REGISTRY_ELEMENT_NAME.equals(ele.getName()) && registryName.equals(ele.getAttribute(ID_ATTRIBUTE))) {
+ if(isRegistryFound) {
+ // Already found: exception
+ throw new DeclarationException("More than one registry declared under name '" + registryName + "'. "
+ + " Declaration from '" + ele.getContributor().getName() + "' is disguarded.");
+ }
+ isRegistryFound = true;
+ // read the set
+ registryIdDesc = parseRegistryDescriptor( ele, warnings);
+ }
+
+ }
+
+ if( warnings.size()>0) {
+ throw new DeclarationMultiException("Problems encountered during extensions processing.", warnings);
+ }
+ return registryIdDesc;
+ }
+
+ /**
+ * Parse the RegistryDescriptor from the provided {@link IConfigurationElement}.
+ *
+ * @param ele The {@link IConfigurationElement} representing a RegistryDescriptor.
+ * @param warnings A list used to record encountered warnings.
+ * @return A registry descriptor.
+ */
+ private RegistryIdDesc parseRegistryDescriptor(IConfigurationElement ele, List<Throwable> warnings) {
+ RegistryIdDesc registryIdDesc = ServicedescriptorswithidFactory.eINSTANCE.createRegistryIdDesc();
+
+ registryIdDesc.setName(ele.getAttribute(ID_ATTRIBUTE));
+ registryIdDesc.setDescription(ele.getAttribute(DESCRIPTION_ATTRIBUTE));
+ registryIdDesc.setIsUnique(Boolean.parseBoolean(ele.getAttribute(IS_UNIQUE_ATTRIBUTE)));
+ parseRegistryExtends(ele, registryIdDesc, warnings);
+ parseRegistryParent(ele, registryIdDesc, warnings);
+ parseRegistryServiceSetId(ele, registryIdDesc, warnings);
+
+ return registryIdDesc;
+ }
+
+ /**
+ * Parse the declared sets of a Registry.
+ *
+ * @param ele
+ * @param registryIdDesc
+ * @param warnings
+ */
+ private void parseRegistryServiceSetId(IConfigurationElement parentElement, RegistryIdDesc registryIdDesc, List<Throwable> warnings) {
+ // Get all extends declarations
+ IConfigurationElement[] extendDeclarations = parentElement.getChildren(REGISTRY_SERVICE_SETS_ELEMENT);
+
+ // Process extends
+ for(IConfigurationElement ele : extendDeclarations) {
+
+ String extendedRegistry = ele.getAttribute(SERVICE_SET_ID_ATTRIBUTE);
+ if(extendedRegistry == null || extendedRegistry.length() == 0) {
+ warnings.add( new BadDeclarationException( ele.getName() + "/" + SERVICE_SET_ID_ATTRIBUTE + " should be set.") );
+ }
+ else {
+ registryIdDesc.getSets().add(extendedRegistry);
+ }
+ }
+ }
+
+ /**
+ * Parse the parent declaration of a Registry.
+ * @param ele
+ * @param registryIdDesc
+ * @param warnings
+ */
+ private void parseRegistryParent(IConfigurationElement parentElement, RegistryIdDesc registryIdDesc, List<Throwable> warnings) {
+ // Get all extends declarations
+ IConfigurationElement[] extendDeclarations = parentElement.getChildren(REGISTRY_PARENT_ELEMENT);
+
+ // Process extends
+ for(IConfigurationElement ele : extendDeclarations) {
+
+ String extendedRegistry = ele.getAttribute(REGISTRY_ID_ATTRIBUTE);
+ if(extendedRegistry == null || extendedRegistry.length() == 0) {
+ warnings.add( new BadDeclarationException( ele.getName() + "/" + REGISTRY_ID_ATTRIBUTE + " should be set.") );
+ }
+ else {
+ registryIdDesc.getParents().add(extendedRegistry);
+ }
+ }
+ }
+
+ /**
+ * Parse the extends declaration of a Registry.
+ * @param parentElement The element to parse. This element must represent a Registry.
+ * @param registryIdDesc The registry into which the result is stored
+ * @param warnings A list used to record encountered warnings.
+ */
+ private void parseRegistryExtends(IConfigurationElement parentElement, RegistryIdDesc registryIdDesc, List<Throwable> warnings) {
+ // Get all extends declarations
+ IConfigurationElement[] extendDeclarations = parentElement.getChildren(REGISTRY_EXTENDS_ELEMENT);
+
+ // Process extends
+ for(IConfigurationElement ele : extendDeclarations) {
+
+ String extendedRegistry = ele.getAttribute(REGISTRY_ID_ATTRIBUTE);
+ if(extendedRegistry == null || extendedRegistry.length() == 0) {
+ warnings.add( new BadDeclarationException( ele.getName() + "/" + REGISTRY_ID_ATTRIBUTE + " should be set.") );
+ }
+ else {
+ registryIdDesc.getExtends().add(extendedRegistry);
+ }
+ }
+ }
+
+ /**
+ * Get all fragments contributing to the declaration of the specified ServiceSetIdDesc.
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.IServiceDescriptorsWithIdProvider#getServiceSetFragments(java.lang.String)
+ *
+ * @param serviceSetName
+ * @return
+ * @throws DeclarationMultiException
+ */
+ public List<ServiceSetIdDesc> getServiceSetFragments(String serviceSetName) throws DeclarationException {
+ // Reading data from plugins
+ IConfigurationElement[] configElements = getExtensionRegistry().getConfigurationElementsFor(extensionPointNamespace, SERVICE_EXTENSION_ID);
+
+ List<ServiceSetIdDesc> fragments = new ArrayList<ServiceSetIdDesc>();
+ List<Throwable> warnings = new ArrayList<Throwable>();
+
+ for( IConfigurationElement ele : configElements) {
+
+ // SEarch for "registry"
+ if(SERVICE_SET_ELEMENT_NAME.equals(ele.getName()) && serviceSetName.equals(ele.getAttribute(ID_ATTRIBUTE))) {
+ ServiceSetIdDesc serviceSet = parseServiceSetDescriptor( ele, warnings);
+ fragments.add(serviceSet);
+ }
+
+ }
+
+ if( warnings.size()>0) {
+ throw new DeclarationMultiException("Problems encountered during extensions processing.", warnings);
+ }
+ return fragments;
+ }
+
+ /**
+ * Get the requested ServiceSetIdDesc. If several fragmants are used to declare the ServiceSetIdDesc,
+ * this fragments are concatenated in one ServiceSetIdDesc.
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.IServiceDescriptorsWithIdProvider#getServiceSetFragments(java.lang.String)
+ *
+ * @param serviceSetName
+ * @return
+ * @throws DeclarationMultiException
+ */
+ public ServiceSetIdDesc getServiceSet(String serviceSetName) throws DeclarationException {
+ // Reading data from plugins
+ IConfigurationElement[] configElements = getExtensionRegistry().getConfigurationElementsFor(extensionPointNamespace, SERVICE_EXTENSION_ID);
+
+ ServiceSetIdDesc serviceSet = ServicedescriptorswithidFactory.eINSTANCE.createServiceSetIdDesc();
+ List<Throwable> warnings = new ArrayList<Throwable>();
+
+ for( IConfigurationElement ele : configElements) {
+
+ // SEarch for "registry"
+ if(SERVICE_SET_ELEMENT_NAME.equals(ele.getName()) && serviceSetName.equals(ele.getAttribute(ID_ATTRIBUTE))) {
+ parseServiceSetDescriptor( ele, serviceSet, warnings);
+ }
+
+ }
+
+ if( warnings.size()>0) {
+ throw new DeclarationMultiException("Problems encountered during extensions processing.", warnings);
+ }
+ return serviceSet;
+ }
+
+
+ /**
+ * Add the ServiceSetIdDesc declarations found in the provided {@link IConfigurationElement}, and add
+ * it to the provided {@link ServiceSetIdDesc}.
+ * @param ele
+ * @param warnings
+ */
+ private void parseServiceSetDescriptor(IConfigurationElement ele, ServiceSetIdDesc serviceSet, List<Throwable> warnings) {
+
+ serviceSet.setName(ele.getAttribute(ID_ATTRIBUTE));
+// serviceSet.setDescription(ele.getAttribute(DESCRIPTION_ATTRIBUTE));
+ parseServiceSetExtends(ele, serviceSet, warnings);
+ parseServiceSetServices(ele, serviceSet.getServiceDescriptors(), warnings);
+ }
+
+ /**
+ * Parse a {@link ServiceSetIdDesc}
+ * @param ele
+ * @param warnings
+ * @return A newly created ServiceSetIdDesc initialized with the declaration found in ele.
+ */
+ private ServiceSetIdDesc parseServiceSetDescriptor(IConfigurationElement ele, List<Throwable> warnings) {
+
+ ServiceSetIdDesc serviceSet = ServicedescriptorswithidFactory.eINSTANCE.createServiceSetIdDesc();
+
+ parseServiceSetDescriptor(ele, serviceSet, warnings);
+ return serviceSet;
+ }
+
+ /**
+ * Parse the extended attribute of a ServiceSetIdDesc declaration.
+ * @param parentElement
+ * @param serviceSet
+ * @param warnings
+ */
+ private void parseServiceSetExtends(IConfigurationElement parentElement, ServiceSetIdDesc serviceSet, List<Throwable> warnings) {
+ // Get all extends declarations
+ IConfigurationElement[] extendDeclarations = parentElement.getChildren(SERVICE_SET_EXTENDS_ELEMENT);
+
+ // Process extends
+ for(IConfigurationElement ele : extendDeclarations) {
+
+ String extendedServiceSet = ele.getAttribute(SERVICE_SET_ID_ATTRIBUTE);
+ if(extendedServiceSet == null || extendedServiceSet.length() == 0) {
+ warnings.add( new BadDeclarationException( ele.getName() + "/" + SERVICE_SET_ID_ATTRIBUTE + " should be set.") );
+ }
+ else {
+ serviceSet.getExtends().add(extendedServiceSet);
+ }
+ }
+ }
+
+ /**
+ * Read services descriptors from the specified element configuration.
+ * The element configuration should contains service elements declarations.
+ * IdDescriptors are added to the specified list
+ *
+ * @param descriptors The list into which descriptors are added
+ * @param parentElement The configuration element containing some service declarations.
+ * @param serviceSet
+ * @param exceptions List used to add encountered exceptions.
+ */
+ private void parseServiceSetServices( IConfigurationElement parentElement, List<AbstractServiceIdDesc> descriptors, List<Throwable> exceptions) {
+
+ // Get all children
+ IConfigurationElement[] configElements = parentElement.getChildren();
+
+ // Process services
+ for(IConfigurationElement ele : configElements) {
+ AbstractServiceIdDesc desc;
+ if(SERVICE_ELEMENT_NAME.equals(ele.getName())) {
+ // Read a Service
+ try {
+ desc = parseServiceDescriptor(ele);
+ // Add created desc
+ descriptors.add(desc);
+ } catch (DeclarationException e) {
+ // record exceptions
+ exceptions.add(e);
+ }
+ } else if(SERVICE_FACTORY_ELEMENT_NAME.equals(ele.getName())) {
+ // Read a Service Factory
+ try {
+ desc = parseServiceDescriptor(ele);
+ // Add created desc
+ descriptors.add(desc);
+ } catch (DeclarationException e) {
+ // record exceptions
+ exceptions.add(e);
+ }
+ } else if(ALIAS_ELEMENT_NAME.equals(ele.getName())) {
+ try {
+ desc = parseAliasDescriptor(ele);
+ // Add created desc
+ descriptors.add(desc);
+ } catch (DeclarationException e) {
+ // record exceptions
+ exceptions.add(e);
+ }
+
+ }
+
+ }
+
+ }
+
+ /**
+ * Read an alias descriptor.
+ * @param ele
+ * @return
+ */
+ private AliasIdDesc parseAliasDescriptor(IConfigurationElement ele) throws DeclarationException {
+
+ AliasIdDesc aliasIdDesc = ServicedescriptorswithidFactory.eINSTANCE.createAliasIdDesc();
+
+ // key
+ String key = ele.getAttribute(ID_ATTRIBUTE);
+ if(key == null || key.length() == 0) {
+ throw new BadDeclarationException( ele.getName() + "/" + ID_ATTRIBUTE + " should be set for an alias.");
+ }
+ aliasIdDesc.setName(key);
+
+ // key
+ String aliasedService = ele.getAttribute(ALIASED_SERVICE_ID_ATTRIBUTE);
+ if(key == null || key.length() == 0) {
+ throw new BadDeclarationException( ele.getName() + "/" + ALIASED_SERVICE_ID_ATTRIBUTE + " should be set for an alias.");
+ }
+ aliasIdDesc.setAliasedService(aliasedService);
+
+ aliasIdDesc.setPriority(parsePriorityAttribute(ele));
+
+ aliasIdDesc.setBundleID(ele.getContributor().getName());
+ aliasIdDesc.setDescription(ele.getAttribute(DESCRIPTION_ATTRIBUTE));
+ parseServiceDependsOn( ele, aliasIdDesc.getDependsOn());
+
+
+ return aliasIdDesc;
+ }
+
+ /**
+ * Read descriptor values from provided element.
+ *
+ * @param ele
+ * @return
+ * @throws ServiceException
+ */
+ private ServiceIdDesc parseServiceDescriptor(IConfigurationElement ele) throws DeclarationException {
+
+ ServiceIdDesc serviceIdDesc = ServicedescriptorswithidFactory.eINSTANCE.createServiceIdDesc();
+
+ // classname
+ String serviceClassname = ele.getAttribute("classname");
+ serviceIdDesc.setClassname(serviceClassname);
+
+ // key
+ String key = ele.getAttribute(ID_ATTRIBUTE);
+ if(key == null || key.length() == 0) {
+ key = serviceClassname;
+ }
+ serviceIdDesc.setName(key);
+
+ serviceIdDesc.setStartKind(parseStartKindAttribute(ele));
+ serviceIdDesc.setPriority(parsePriorityAttribute(ele));
+ serviceIdDesc.setBundleID(ele.getContributor().getName());
+ parseServiceDependsOn( ele, serviceIdDesc.getDependsOn());
+
+ return serviceIdDesc;
+ }
+
+ /**
+ * Parse the StartupKind attribute.
+ * @param ele
+ * @return
+ * @throws DeclarationException
+ */
+ private StartupKind parseStartKindAttribute(IConfigurationElement ele) throws DeclarationException {
+ // Service start kind
+ StartupKind serviceStartKind = StartupKind.LAZY;
+ String serviceStartKindStr = ele.getAttribute(STARTKIND_PROPERTY);
+ if(serviceStartKindStr != null && serviceStartKindStr.length() > 0) {
+ try {
+ serviceStartKind = StartupKind.valueOf(serviceStartKindStr.toUpperCase());
+ } catch (IllegalArgumentException e) {
+ // Can't convert property
+ throw new DeclarationException("Can't convert property " + STARTKIND_PROPERTY + "(plugin=" + ele.getContributor() + "declaringExtension=" + ele.getDeclaringExtension() + ")", e);
+ }
+ }
+ return serviceStartKind;
+ }
+
+ /**
+ * @param ele
+ * @return
+ */
+ private int parsePriorityAttribute(IConfigurationElement ele) {
+ // priority
+ int priority = 1;
+ String priorityStr = ele.getAttribute("priority");
+ if(priorityStr != null && priorityStr.length() > 0) {
+ try {
+ priority = Integer.parseInt(priorityStr);
+ } catch (NumberFormatException e) {
+ }
+ }
+ return priority;
+ }
+
+ /**
+ * Parse the dependsOn attribute of a service.
+ * @param parentElement The {@link IConfigurationElement} containing a dependsOn attribute.
+ * @param dependsOnServices Parsed value are added in this list.
+ */
+ private void parseServiceDependsOn(IConfigurationElement parentElement, List<String> dependsOnServices) {
+ // Get children
+ IConfigurationElement[] configElements = parentElement.getChildren(DEPENDSON_ELEMENT_NAME);
+
+ for(IConfigurationElement ele : configElements) {
+ String key = ele.getAttribute(SERVICE_ID_ATTRIBUTE_NAME);
+ if(key != null && key.length() > 0) {
+ dependsOnServices.add(key.trim());
+ }
+ }
+ }
+
+ /**
+ * Get the Eclipse extensionRegistry.
+ * This method can be overloaded by subclasses. This is useful for tests.
+ *
+ * @return
+ */
+ protected IExtensionRegistry getExtensionRegistry() {
+ return Platform.getExtensionRegistry();
+ }
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServicesRegistry.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServicesRegistry.java
new file mode 100644
index 00000000000..791b2f10406
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ExtensionServicesRegistry.java
@@ -0,0 +1,196 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceDescriptor.ServiceTypeKind;
+
+/**
+ * ServiceRegistry reading and registering services declared in Eclipse
+ * Extensions.
+ *
+ * @author dumoulin
+ *
+ */
+public class ExtensionServicesRegistry extends ServicesRegistry {
+
+ /** ID of the extension (schema filename) */
+ public static final String SERVICE_EXTENSION_ID = "service";
+
+ /** Namespace where to look for the extension points. */
+ protected String extensionPointNamespace;
+
+ /** Extension point name inside the extension description **/
+ public final static String SERVICE_EXTENSIONPOINT = "service";
+
+ /** ServiceFactory Extension point **/
+ public final static String SERVICE_FACTORY_ELEMENT_NAME = "serviceFactory";
+
+ /** constant for the attribute factoryClass **/
+ public final static String CONTEXTCLASS_ATTRIBUTE = "contextClass";
+
+ /** extension point propertyname */
+ private final static String STARTKIND_PROPERTY = "startKind";
+
+ /** name of the dependsOn element */
+ private static final String DEPENDSON_ELEMENT_NAME = "dependsOn";
+
+ /** name of the key attribute inside the DEPENDSON element */
+ private static final String DEPENDSON_KEY_ATTRIBUTE_NAME = "serviceKeyRef";
+
+ /**
+ * Constructor.
+ *
+ * @throws Exception
+ */
+ public ExtensionServicesRegistry(String extensionPointNamespace) throws ServiceException {
+ this.extensionPointNamespace = extensionPointNamespace;
+ registerDeclaredExtensions();
+ }
+
+ /**
+ * Register the services declared in Eclipse Extension.
+ *
+ * @throws Exception
+ */
+ private void registerDeclaredExtensions() throws ServiceException {
+
+ List<ServiceDescriptor> descriptors = new ArrayList<ServiceDescriptor>();
+ List<ServiceException> exceptions = null;
+
+ // Reading data from plugins
+ IConfigurationElement[] configElements = Platform.getExtensionRegistry().getConfigurationElementsFor(extensionPointNamespace, SERVICE_EXTENSION_ID);
+
+ for(IConfigurationElement ele : configElements) {
+ ServiceDescriptor desc;
+ if(SERVICE_EXTENSIONPOINT.equals(ele.getName())) {
+ // Read a Service
+ try {
+ desc = readServiceDescriptor(ele);
+ desc.setServiceTypeKind(ServiceTypeKind.service);
+ // Add created desc
+ descriptors.add(desc);
+ } catch (ServiceException e) {
+ // record exceptions
+ if(exceptions == null)
+ exceptions = new ArrayList<ServiceException>();
+ exceptions.add(e);
+ }
+ } else if(SERVICE_FACTORY_ELEMENT_NAME.equals(ele.getName())) {
+ // Read a Service Factory
+ try {
+ desc = readServiceDescriptor(ele);
+ desc.setServiceTypeKind(ServiceTypeKind.serviceFactory);
+ // Add created desc
+ descriptors.add(desc);
+ } catch (ServiceException e) {
+ // record exceptions
+ if(exceptions == null)
+ exceptions = new ArrayList<ServiceException>();
+ exceptions.add(e);
+ }
+ }
+ }
+
+ // Add found descriptors
+ for(ServiceDescriptor desc : descriptors) {
+ add(desc);
+ }
+
+ // Throw exceptions if pb encountered
+ if(exceptions != null) {
+ if(exceptions.size() == 1)
+ throw exceptions.get(0);
+ else
+ throw new ServiceException("Somme services are not started (first is shown)", exceptions.get(0));
+
+ }
+
+ }
+
+ /**
+ * Read descriptor values from provided element.
+ *
+ * @param ele
+ * @return
+ * @throws ServiceException
+ */
+ private ServiceDescriptor readServiceDescriptor(IConfigurationElement ele) throws ServiceException {
+
+ // classname
+ String serviceClassname = ele.getAttribute("classname");
+
+ // key
+ String key = ele.getAttribute("id");
+ if(key == null || key.length() == 0) {
+ key = serviceClassname;
+ }
+
+ // Service start kind
+ ServiceStartKind serviceStartKind = ServiceStartKind.LAZY;
+ String serviceStartKindStr = ele.getAttribute(STARTKIND_PROPERTY);
+ if(serviceStartKindStr != null && serviceStartKindStr.length() > 0) {
+ try {
+ serviceStartKind = ServiceStartKind.valueOf(serviceStartKindStr.toUpperCase());
+ } catch (IllegalArgumentException e) {
+ // Can't convert property
+ throw new ServiceException("Can't convert property " + STARTKIND_PROPERTY + "(plugin=" + ele.getContributor() + "declaringExtension=" + ele.getDeclaringExtension() + ")", e);
+ }
+ }
+
+ // priority
+ int priority = 1;
+ String priorityStr = ele.getAttribute("priority");
+ if(priorityStr != null && priorityStr.length() > 0) {
+ try {
+ priority = Integer.parseInt(priorityStr);
+ } catch (NumberFormatException e) {
+ }
+ }
+
+ // Read dependsOn keys
+ List<String> keys = getDependsOn(ele);
+
+ // Create descriptor
+ ServiceDescriptor desc = new ServiceDescriptor(key, serviceClassname, serviceStartKind, priority);
+ desc.setClassBundleID(ele.getContributor().getName());
+
+ if(keys.size() > 0)
+ desc.setRequiredServiceKeys(keys);
+
+ return desc;
+ }
+
+ /**
+ * Add dependsOn keys.
+ *
+ * @param parentElement
+ * @param model
+ */
+ private List<String> getDependsOn(IConfigurationElement parentElement) {
+
+ List<String> keys = new ArrayList<String>();
+
+ // Get children
+ IConfigurationElement[] configElements = parentElement.getChildren(DEPENDSON_ELEMENT_NAME);
+
+ for(IConfigurationElement ele : configElements) {
+ String key = ele.getAttribute(DEPENDSON_KEY_ATTRIBUTE_NAME);
+ if(key != null && key.length() > 0) {
+ keys.add(key.trim());
+ }
+ }
+
+ if(keys.size() == 0)
+ return Collections.emptyList();
+
+ return keys;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/IService.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/IService.java
new file mode 100644
index 00000000000..b9a37356be2
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/IService.java
@@ -0,0 +1,42 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+/**
+ * An Service that can be registered in the {@link ServicesRegistry}. A service
+ * is a singleton available throw the registry. A service can be shared across
+ * editors. <br>
+ * The life cycle is as follow:
+ * <ul>
+ * <li>service creation</li>
+ * <li>{@link #init(ServicesRegistry)} - Other service can be retrieved from the registry, but are not started yet.</li>
+ * <li>{@link #startService()} - service is started.</li>
+ * <li>Service can be used</li>
+ * <li>{@link #disposeService()} - service is disposed and should not be used anymore.</li>
+ * </ul>
+ *
+ * @author cedric dumoulin
+ *
+ */
+public interface IService {
+
+ /**
+ * Init the service and set its associated Registry. The registry can be
+ * used to retrieve other services.
+ *
+ * @param servicesRegistry
+ */
+ public void init(ServicesRegistry servicesRegistry) throws ServiceException;
+
+ /**
+ * Start the service. This method is called when the service is started.
+ */
+ public void startService() throws ServiceException;
+
+ /**
+ * Dispose the service.
+ */
+ public void disposeService() throws ServiceException;
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/IServiceDescriptorsWithIdProvider.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/IServiceDescriptorsWithIdProvider.java
new file mode 100644
index 00000000000..7bc87ab981c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/IServiceDescriptorsWithIdProvider.java
@@ -0,0 +1,59 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.List;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+
+
+/**
+ * A declared descriptor provider is used to read declared descriptor.
+ * Real implementation can read declared descriptor from various sources (Eclipse extension, model, ...).
+ *
+ * @author cedric dumoulin
+ *
+ */
+public interface IServiceDescriptorsWithIdProvider {
+
+ /**
+ * Get the requested descriptor.
+ * If the registry is found more than one, throw an exception.
+ * If the registry is not found, return null.
+ * @param registryName
+ * @return The {@link RegistryIdDesc} or null if not found.
+ *
+ */
+ public RegistryIdDesc getRegistryDescriptor( String registryName ) throws DeclarationException;
+
+ /**
+ * Get all the declared fragments for the specified serviceSet.
+ *
+ * @param serviceSetName The name of the set for which fragments are required.
+ *
+ * @return A list of fragment. The list can be empty if no fragment is found.
+ * @throws DeclarationException
+ */
+ public List<ServiceSetIdDesc> getServiceSetFragments(String serviceSetName ) throws DeclarationException;
+
+ /**
+ * Get a complete ServiceSet from its name.
+ * @param serviceSetName
+ * @return
+ * @throws DeclarationException
+ */
+ public ServiceSetIdDesc getServiceSet(String serviceSetName) throws DeclarationException;
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/IServiceFactory.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/IServiceFactory.java
new file mode 100644
index 00000000000..37e52896273
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/IServiceFactory.java
@@ -0,0 +1,28 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+/**
+ * A factory creating a Service that can be registered in the {@link ServicesRegistry}.
+ *
+ * A service is a singleton available throw the registry. A service can be
+ * shared across editors. The service lifecycle events (init, start and dispose)
+ * are sent to the factory. The factory is responsible to forward them to the
+ * real service.
+ *
+ * @author dumoulin
+ *
+ */
+public interface IServiceFactory extends IService {
+
+ /**
+ * Create the instance of the service that will be returned by {@link ServicesRegistry#getService(Class)}.
+ *
+ * @return The instance of the service.
+ * @throws ServiceException
+ * If an error occurs during the operation.
+ */
+ public Object createServiceInstance() throws ServiceException;
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptor.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptor.java
new file mode 100644
index 00000000000..b06fc580e56
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptor.java
@@ -0,0 +1,301 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Descriptor of a service. This descriptor describe a service.
+ *
+ * @author cedirc dumoulin
+ *
+ */
+public class ServiceDescriptor {
+
+ /**
+ * Possible kind for service types.
+ *
+ */
+ public enum ServiceTypeKind {
+ service, serviceFactory, pojo, alias
+ };
+
+ /** Classname of the service. USed to start the service */
+ private String serviceClassname;
+
+ /** Kind of start for this service */
+ private ServiceStartKind serviceStartKind;
+
+ /** Kind of service */
+ private ServiceTypeKind serviceTypeKind = ServiceTypeKind.service;
+
+ /**
+ * Service priority. If two service are registered under the same key, only
+ * the one with the higher priority is started.
+ */
+ private int priority;
+
+ /**
+ * Key used to register the service.
+ */
+ private String key;
+
+ /**
+ * Id of the bundle owning the .class that is referenced by
+ * serviceClassname. Requested when instanciating the class.
+ */
+ private String classBundleID;
+
+ /**
+ * If set to true, the service is anonymous : it is not registered and can't
+ * be retrieved with getService().
+ */
+ private boolean isAnonymous = false;
+
+ /**
+ * List of keys of Services required by this service.
+ */
+ private List<String> requiredServices = Collections.emptyList();
+
+ /**
+ * Empty list.
+ */
+ private static List<String> EMPTY_LIST_STRING = Collections.emptyList();
+
+ /**
+ * Constructor.
+ *
+ * @param key
+ * @param serviceClassname
+ * @param serviceStartKind
+ * @param priority
+ * @param requiredServices
+ */
+ public ServiceDescriptor(String key, String serviceClassname, ServiceStartKind serviceStartKind, int priority, List<String> requiredServices) {
+ this.key = key;
+ this.serviceClassname = serviceClassname;
+ this.serviceStartKind = serviceStartKind;
+ this.priority = priority;
+ this.requiredServices = requiredServices;
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param key
+ * A class used as key. The classname is used as key.
+ * @param serviceClassname
+ * @param serviceStartKind
+ * @param priority
+ * @param requiredServices
+ */
+ public ServiceDescriptor(Class<?> key, String serviceClassname, ServiceStartKind serviceStartKind, int priority, List<String> requiredServices) {
+ this(key.getName(), serviceClassname, serviceStartKind, priority, requiredServices);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param key
+ * A class used as key. The classname is used as key.
+ * @param serviceClassname
+ * @param serviceStartKind
+ * @param priority
+ * @param isAnonymous
+ * @param requiredServices
+ */
+ public ServiceDescriptor(String key, String serviceClassname, ServiceStartKind serviceStartKind, int priority, boolean isAnonymous, List<String> requiredServices) {
+ this.key = key;
+ this.serviceClassname = serviceClassname;
+ this.serviceStartKind = serviceStartKind;
+ this.priority = priority;
+ this.isAnonymous = isAnonymous;
+ this.requiredServices = requiredServices;
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param key
+ * A class used as key. The classname is used as key.
+ * @param serviceClassname
+ * @param serviceStartKind
+ * @param priority
+ * @param isAnonymous
+ * @param requiredServices
+ */
+ public ServiceDescriptor(Class<?> key, String serviceClassname, ServiceStartKind serviceStartKind, int priority, boolean isAnonymous, List<String> requiredServices) {
+ this(key.getName(), serviceClassname, serviceStartKind, priority, isAnonymous, requiredServices);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param key
+ * @param serviceClassname
+ * @param serviceStartKind
+ * @param priority
+ */
+ public ServiceDescriptor(String key, String serviceClassname, ServiceStartKind serviceStartKind, int priority) {
+ this(key, serviceClassname, serviceStartKind, priority, EMPTY_LIST_STRING);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param key
+ * A class used as key. The classname is used as key.
+ * @param serviceClassname
+ * @param serviceStartKind
+ * @param priority
+ */
+ public ServiceDescriptor(Class<?> key, String serviceClassname, ServiceStartKind serviceStartKind, int priority) {
+ this(key.getName(), serviceClassname, serviceStartKind, priority, EMPTY_LIST_STRING);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param serviceClassname
+ * @param serviceStartKind
+ * @param priority
+ * @param requiredServices
+ */
+ public ServiceDescriptor(String serviceClassname, ServiceStartKind serviceStartKind, int priority, List<String> requiredServices) {
+ this(serviceClassname, serviceClassname, serviceStartKind, priority, requiredServices);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param serviceClassname
+ * @param serviceStartKind
+ * @param priority
+ */
+ public ServiceDescriptor(String serviceClassname, ServiceStartKind serviceStartKind, int priority, boolean isAnonymous) {
+ this(serviceClassname, serviceClassname, serviceStartKind, priority, isAnonymous, EMPTY_LIST_STRING);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param serviceClassname
+ * @param serviceStartKind
+ * @param priority
+ */
+ public ServiceDescriptor(String serviceClassname, ServiceStartKind serviceStartKind, int priority) {
+ this(serviceClassname, serviceClassname, serviceStartKind, priority, EMPTY_LIST_STRING);
+ }
+
+ /**
+ * @return the serviceStartKind
+ */
+ public ServiceStartKind getServiceStartKind() {
+ return serviceStartKind;
+ }
+
+ /**
+ * Return true if StartKind is 'always'.
+ *
+ * @return
+ */
+ public boolean isStartAtStartup() {
+ return serviceStartKind == ServiceStartKind.STARTUP;
+ }
+
+ /**
+ * @return the priority
+ */
+ public int getPriority() {
+ return priority;
+ }
+
+ /**
+ * @return the key
+ */
+ public String getKey() {
+ return key;
+ }
+
+ /**
+ * @return the serviceClassname
+ */
+ public String getServiceClassname() {
+ return serviceClassname;
+ }
+
+ /**
+ * @return the classBundleID
+ */
+ public String getClassBundleID() {
+ return classBundleID;
+ }
+
+ /**
+ * @param classBundleId
+ * the classBundleID to set
+ */
+ public void setClassBundleID(String classBundleId) {
+ classBundleID = classBundleId;
+ }
+
+ /**
+ * Get the keys of all the required services
+ *
+ * @return the requiredServices
+ */
+ public List<String> getRequiredServiceKeys() {
+ return requiredServices;
+ }
+
+ /**
+ * @param requiredServices
+ * the requiredServices to set
+ */
+ public void setRequiredServiceKeys(List<String> requiredServices) {
+ this.requiredServices = requiredServices;
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ * @return
+ *
+ */
+ @Override
+ public String toString() {
+ return "ServiceDescriptor [key=" + key + ", serviceClassname=" + serviceClassname + ", serviceStartKind=" + serviceStartKind + ", priority=" + priority + "]";
+ }
+
+ /**
+ * @return the isAnonymous
+ */
+ public boolean isAnonymous() {
+ return isAnonymous;
+ }
+
+ /**
+ * @param isAnonymous
+ * the isAnonymous to set
+ */
+ public void setAnonymous(boolean isAnonymous) {
+ this.isAnonymous = isAnonymous;
+ }
+
+ /**
+ * @return the serviceTypeKind
+ */
+ public ServiceTypeKind getServiceTypeKind() {
+ return serviceTypeKind;
+ }
+
+ /**
+ * @param serviceTypeKind
+ * the serviceTypeKind to set
+ */
+ public void setServiceTypeKind(ServiceTypeKind serviceTypeKind) {
+ this.serviceTypeKind = serviceTypeKind;
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptorUtils.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptorUtils.java
new file mode 100644
index 00000000000..6985e0621aa
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptorUtils.java
@@ -0,0 +1,145 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind;
+
+
+/**
+ * Utilities used as bridge between {@link ServiceDescriptor} and {@link AbstractServiceIdDesc}.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class ServiceDescriptorUtils {
+
+ /**
+ * Create a {@link ServiceDescriptor} from a {@link AbstractServiceIdDesc}.
+ * @param idDesc
+ * @return
+ */
+ public static ServiceDescriptor toServiceDescriptor(AbstractServiceIdDesc idDesc) {
+
+
+ if( idDesc instanceof ServiceIdDesc ) {
+ return toServiceDescriptor((ServiceIdDesc)idDesc);
+ }
+ else if(idDesc instanceof AliasIdDesc ) {
+ return toServiceDescriptor((AliasIdDesc)idDesc);
+ }
+
+ // Should not happen
+ throw new UnsupportedOperationException("Don't know how to transform '" + idDesc.getClass().getName() + "'.");
+ }
+
+ /**
+ * Create a {@link ServiceDescriptor} from a {@link AbstractServiceIdDesc}.
+ * @param serviceDesc
+ * @return
+ */
+ public static ServiceDescriptor toServiceDescriptor(AbstractServiceDesc serviceDesc) {
+ if( serviceDesc instanceof ServiceDesc ) {
+ return toServiceDescriptor((ServiceDesc)serviceDesc);
+ }
+ else if(serviceDesc instanceof AliasDesc ) {
+ return toServiceDescriptor((AliasDesc)serviceDesc);
+ }
+
+ // Should not happen
+ throw new UnsupportedOperationException("Don't know how to transform '" + serviceDesc.getClass().getName() + "'.");
+ }
+
+ /**
+ * Create a {@link ServiceDescriptor} from a {@link AbstractServiceIdDesc}.
+ * @param serviceIdDesc
+ * @return
+ */
+ public static ServiceDescriptor toServiceDescriptor(ServiceIdDesc serviceIdDesc) {
+
+ ServiceStartKind serviceStartKind = transformToServiceStartKind(serviceIdDesc.getStartKind());
+ return new ServiceDescriptor(serviceIdDesc.getName(), serviceIdDesc.getClassname(), serviceStartKind, serviceIdDesc.getPriority(), serviceIdDesc.getDependsOn());
+ }
+
+ /**
+ *
+ * @param startKind
+ * @return
+ */
+ private static ServiceStartKind transformToServiceStartKind(StartupKind startKind) {
+ switch( startKind) {
+ case STARTUP:
+ return ServiceStartKind.STARTUP;
+ case LAZY:
+ return ServiceStartKind.LAZY;
+ default:
+ return ServiceStartKind.STARTUP;
+ }
+ }
+
+ /**
+ * Create a {@link ServiceDescriptor} from a {@link AbstractServiceIdDesc}.
+ * @param serviceDesc
+ * @return
+ */
+ public static ServiceDescriptor toServiceDescriptor(AliasIdDesc serviceDesc) {
+
+ return new AliasDescriptor(serviceDesc.getName(), serviceDesc.getAliasedService(), serviceDesc.getPriority());
+ }
+
+ /**
+ * Create a {@link ServiceDescriptor} from a {@link AbstractServiceIdDesc}.
+ * @param serviceIdDesc
+ * @return
+ */
+ public static ServiceDescriptor toServiceDescriptor(ServiceDesc serviceIdDesc) {
+
+ ServiceStartKind serviceStartKind = transformToServiceStartKind(serviceIdDesc.getStartKind());
+ return new ServiceDescriptor(serviceIdDesc.getName(), serviceIdDesc.getClassname(), serviceStartKind, serviceIdDesc.getPriority(), serviceIdDesc.getDependsOnIds());
+ }
+
+ /**
+ *
+ * @param startKind
+ * @return
+ */
+ private static ServiceStartKind transformToServiceStartKind(org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.StartupKind startKind) {
+ switch( startKind) {
+ case STARTUP:
+ return ServiceStartKind.STARTUP;
+ case LAZY:
+ return ServiceStartKind.LAZY;
+ default:
+ return ServiceStartKind.STARTUP;
+ }
+ }
+
+ /**
+ * Create a {@link ServiceDescriptor} from a {@link AbstractServiceIdDesc}.
+ * @param serviceDesc
+ * @return
+ */
+ public static ServiceDescriptor toServiceDescriptor(AliasDesc serviceDesc) {
+
+ return new AliasDescriptor(serviceDesc.getName(), serviceDesc.getAliasedServiceId(), serviceDesc.getPriority());
+ }
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptorsWithIdProviderCollection.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptorsWithIdProviderCollection.java
new file mode 100644
index 00000000000..dee8bbd9367
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceDescriptorsWithIdProviderCollection.java
@@ -0,0 +1,257 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+
+
+/**
+ * A collection of DescriptorsProviders.
+ * This provide nearly the same method as DescriptorsProviders, but the search is done over
+ * a collection of DescriptorsProviders.
+ *
+ * @author cedric dumoulin
+ *
+ * TODO : complete
+ */
+public class ServiceDescriptorsWithIdProviderCollection /*implements IServiceDescriptorsWithIdProvider*/ {
+
+ protected List<IServiceDescriptorsWithIdProvider> descriptorsProviders;
+
+
+
+ /**
+ *
+ * Constructor.
+ *
+ */
+ public ServiceDescriptorsWithIdProviderCollection() {
+ descriptorsProviders = new ArrayList<IServiceDescriptorsWithIdProvider>();
+ }
+
+ /**
+ * Add all the provided {@link IServiceDescriptorsWithIdProvider} to the list of providers to use.
+ * @param declaredDescriptorProviders
+ */
+ public void addAll(IServiceDescriptorsWithIdProvider ... declaredDescriptorProviders) {
+
+ for( IServiceDescriptorsWithIdProvider provider : declaredDescriptorProviders) {
+ descriptorsProviders.add(provider);
+ }
+
+ }
+
+ /**
+ * Get the descriptor for the specified registry.
+ * If the registry is found more than one, throw an exception.
+ * If the registry is not found, throws an exception.
+ *
+ * @param registryName The name of the registry for which the descriptor is required.
+ *
+ * @return The registry descriptor
+ * @throws DeclarationException If an error occur while reading declarations.
+ *
+ */
+ public RegistryIdDesc getRegistryIdDesc(String registryName) throws DeclarationException {
+
+ RegistryIdDesc found = null;
+ for( IServiceDescriptorsWithIdProvider provider : descriptorsProviders) {
+
+ RegistryIdDesc res = provider.getRegistryDescriptor(registryName);
+ if( found != null && res != null) {
+ throw new DeclarationException("Registry '" + registryName + "' is declared more than once in declarations.");
+ }
+ found = res;
+ }
+
+ if( found == null ) {
+ throw new DeclarationNotFoundException("Can't find registry named '" + registryName + "'.");
+ }
+
+ return found;
+ }
+
+ /**
+ * Get the descriptor for the specified registry, with all inheritance resolved. This mean that
+ * the returned descriptor has no inheritance, but the found inheritance are added in the inner properties
+ * (sets, parents).
+ *
+ * @param registryName
+ * @return
+ * @throws DeclarationException
+ */
+ public RegistryIdDesc getResolvedRegistryIdDesc(String registryName) throws DeclarationException {
+
+ // Get the original registry desc
+ RegistryIdDesc registryIdDesc = getRegistryIdDesc(registryName);
+
+ // Is there some inheritance ?
+ if( registryIdDesc.getExtends().size() == 0) {
+ // Remove doubles
+ removeDoubleName( registryIdDesc.getParents() );
+ removeDoubleName( registryIdDesc.getSets() );
+ return registryIdDesc;
+ }
+
+ // There is some inheritance
+ // Create a new desc, and set single values
+ RegistryIdDesc resolvedDesc = ServicedescriptorswithidFactory.eINSTANCE.createRegistryIdDesc();
+ resolvedDesc.setName(registryName);
+ resolvedDesc.setDescription(registryIdDesc.getDescription());
+ resolvedDesc.setIsUnique(registryIdDesc.isUnique());
+ resolvedDesc.getSets().addAll( registryIdDesc.getSets());
+ resolvedDesc.getParents().addAll( registryIdDesc.getParents());
+
+ // Remove doubles from the list of directly inherited registry
+ removeDoubleName( registryIdDesc.getExtends() );
+
+ // Concat sets and parents from inherited descs
+ for( String inheritedRegName : registryIdDesc.getExtends()) {
+ // Get the inherited desc
+ RegistryIdDesc inheritedReg = getResolvedRegistryIdDesc(inheritedRegName);
+ // Concat sets and parents
+ resolvedDesc.getSets().addAll( inheritedReg.getSets());
+ resolvedDesc.getParents().addAll( inheritedReg.getParents());
+
+ }
+
+ // Remove doubles
+ removeDoubleName( registryIdDesc.getParents() );
+ removeDoubleName( registryIdDesc.getSets() );
+
+ return resolvedDesc;
+ }
+
+ /**
+ * Get the descriptor for the specified ServiceSetIdDesc, with all inheritance resolved. This mean that
+ * the returned {@link ServiceSetIdDesc} has no inheritance. All services found from inherited sets are added in the set,
+ * according to the following rules:
+ * <ul>
+ * <li>Names found in children hides names in parent (overloading)</li>
+ * <li></li>
+ * <li></li>
+ * </ul>
+ * @param setName
+ * @return
+ * @throws DeclarationException
+ * @throws DeclarationNotFoundException If the set is not found
+ */
+ public ServiceSetIdDesc getResolvedServiceSetIdDesc(String setName) throws DeclarationException {
+
+
+ ServiceSetIdDesc serviceSetIdDesc = getServiceSet(setName);
+ // if no parent, return it directly
+ if( serviceSetIdDesc.getExtends().size() == 0) {
+ return serviceSetIdDesc;
+ }
+
+ // Create ServiceSetIdDesc
+ ServiceSetIdDesc res = ServicedescriptorswithidFactory.eINSTANCE.createServiceSetIdDesc();
+
+ res.setName(serviceSetIdDesc.getName());
+ res.setDescription(serviceSetIdDesc.getDescription());
+ res.getServiceDescriptors().addAll(serviceSetIdDesc.getServiceDescriptors());
+
+ // Collect all parent's services
+ for( String extendsName : serviceSetIdDesc.getExtends() ) {
+ collectMissingServices( res, getResolvedServiceSetIdDesc(extendsName) );
+ }
+
+ return res;
+ }
+
+ /**
+ * Collect the services that are set in the parent, but not found in the collect.
+ * @param res
+ * @param resolvedServiceSet
+ */
+ private void collectMissingServices(ServiceSetIdDesc collect, ServiceSetIdDesc parent) {
+
+ for( AbstractServiceIdDesc desc : parent.getServiceDescriptors()) {
+ if( ! collect.containsService(desc) ) {
+ collect.getServiceDescriptors().add(desc);
+ }
+ }
+
+ }
+
+ /**
+ * Get the {@link ServiceSetIdDesc} concatenating all fragments declaring a part of the ServiceSetIdDesc.
+ *
+ *
+ * @param setName
+ * @return
+ * @throws DeclarationNotFoundException
+ */
+ public ServiceSetIdDesc getServiceSet(String serviceSetName) throws DeclarationException {
+ ServiceSetIdDesc result = null;
+
+
+ for( IServiceDescriptorsWithIdProvider provider : descriptorsProviders) {
+
+ List<ServiceSetIdDesc> fragments = provider.getServiceSetFragments(serviceSetName);
+ for( ServiceSetIdDesc fragment : fragments) {
+ // Create the result ServiceSetIdDesc if needed
+ if( result == null) {
+ result = ServicedescriptorswithidFactory.eINSTANCE.createServiceSetIdDesc();
+ result.setName(serviceSetName);
+ }
+ result.getExtends().addAll(fragment.getExtends());
+ result.getServiceDescriptors().addAll(fragment.getServiceDescriptors());
+
+ }
+ }
+
+ if( result == null ) {
+ throw new DeclarationNotFoundException("Can't find ServiceSetIdDesc named '" + serviceSetName + "'.");
+ }
+ // Remove doubles
+ removeDoubleName(result.getExtends());
+
+ return result;
+ }
+
+ /**
+ * Remove double names from the provided list.
+ * @param list
+ */
+ private void removeDoubleName(List<String> list) {
+
+ for( int i=0; i<list.size(); i++) {
+ String ref = list.get(i);
+
+ for( int j = i+1; j<list.size(); ) {
+ // If we found the same name, remove the second one, and then check the same index
+ // If the string are different, check the next index.
+ if( ref.equals( list.get(j))) {
+ // Remove it
+ list.remove(j);
+ }
+ else {
+ j++;
+ }
+ } // end j
+ } // end i
+
+ }
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceException.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceException.java
new file mode 100644
index 00000000000..2b824444f9e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceException.java
@@ -0,0 +1,57 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+/**
+ * Root Exception of Services Exception.
+ *
+ * @author dumoulin
+ *
+ */
+public class ServiceException extends Exception {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Constructor.
+ */
+ public ServiceException() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ */
+ public ServiceException(String message) {
+ super(message);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param cause
+ */
+ public ServiceException(Throwable cause) {
+ super(cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ * @param cause
+ */
+ public ServiceException(String message, Throwable cause) {
+ super(message, cause);
+ // TODO Auto-generated constructor stub
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceMultiException.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceMultiException.java
new file mode 100644
index 00000000000..faec7d68c30
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceMultiException.java
@@ -0,0 +1,139 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * An exception encapsulating multiple exceptions. This exception is thrown when
+ * an operation performed on several Services fails on one or more of these
+ * Service. The exception contains all the exceptions encoutered while
+ * opertating on Services.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class ServiceMultiException extends ServiceException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * List of encountered exceptions.
+ */
+ List<Throwable> encounteredExceptions = new ArrayList<Throwable>();
+
+ /**
+ * List of identifiers corresponding to exceptions.
+ */
+ List<Object> serviceIdentifiers = new ArrayList<Object>();
+
+ /**
+ * @return the encounteredExceptions
+ */
+ public List<Throwable> getExceptions() {
+ return encounteredExceptions;
+ }
+
+ /**
+ * Constructor.
+ *
+ */
+ public ServiceMultiException() {
+ super("Multiple exceptions");
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ */
+ public ServiceMultiException(String message) {
+ super(message);
+ }
+
+ /**
+ * Return the first exception.
+ *
+ * @see java.lang.Throwable#getCause()
+ *
+ * @return
+ */
+ @Override
+ public Throwable getCause() {
+ return (encounteredExceptions.size() > 0 ? encounteredExceptions.get(0) : null);
+ }
+
+ /**
+ * Return the message if any, or the message of the first exception.
+ *
+ * @see java.lang.Throwable#getMessage()
+ *
+ * @return
+ */
+ @Override
+ public String getMessage() {
+
+ StringBuffer buffer = new StringBuffer();
+
+ String message = super.getMessage();
+ if(message != null)
+ buffer.append(message).append('\n');
+
+ buffer.append("----- exceptions : ----------\n");
+ for(int i = 0; i < encounteredExceptions.size(); i++) {
+ Throwable exception = encounteredExceptions.get(i);
+ Object identifierMsg = serviceIdentifiers.get(i);
+
+ if(identifierMsg != null)
+ buffer.append(identifierMsg.toString()).append(" : ");
+ String msg = exception.getMessage();
+ if(msg != null)
+ buffer.append(msg).append('\n');
+ }
+ buffer.append("----------------------------- \n");
+
+ return buffer.toString();
+ // // Check for first exception
+ // if( encounteredExceptions.size() > 1)
+ // return encounteredExceptions.get(0).getMessage();
+ //
+ // // default
+ // return null;
+ }
+
+ /**
+ * Add an exception to the list of exceptions.
+ *
+ * @param exception
+ */
+ public void addException(Throwable exception) {
+ addException("unknown", exception);
+ }
+
+ /**
+ * Add an exception to the list of exceptions. Also record the corresponding
+ * model identifier if any.
+ *
+ * @param exception
+ */
+ public void addException(Object identifier, Throwable exception) {
+ encounteredExceptions.add(exception);
+ serviceIdentifiers.add(identifier);
+ }
+
+ /**
+ * Merge both exceptions
+ *
+ * @param e
+ */
+ public void addAll(ServiceMultiException e) {
+ encounteredExceptions.addAll(e.encounteredExceptions);
+ serviceIdentifiers.addAll(serviceIdentifiers);
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceNotFoundException.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceNotFoundException.java
new file mode 100644
index 00000000000..b3dc07583b6
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceNotFoundException.java
@@ -0,0 +1,51 @@
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+/**
+ * Service is not found.
+ *
+ * @author dumoulin
+ *
+ */
+public class ServiceNotFoundException extends ServiceException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Constructor.
+ */
+ public ServiceNotFoundException() {
+ super();
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ * @param cause
+ */
+ public ServiceNotFoundException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ */
+ public ServiceNotFoundException(String message) {
+ super(message);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param cause
+ */
+ public ServiceNotFoundException(Throwable cause) {
+ super(cause);
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceRegistryFactory.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceRegistryFactory.java
new file mode 100644
index 00000000000..00c8cd1f545
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceRegistryFactory.java
@@ -0,0 +1,226 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+public class ServiceRegistryFactory {
+
+ /**
+ * Repository of single registries.
+ */
+ protected Map<String, ServicesRegistry> singleRegistries;
+
+ /**
+ * DescriptorProviders access point.
+ */
+ protected DescriptorsCache descriptorProviders;
+
+ /**
+ * Constructor.
+ *
+ */
+ public ServiceRegistryFactory(DescriptorsCache descriptorProviders) {
+ this.descriptorProviders = descriptorProviders;
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param declaredDescriptorProviders Array of providers to be used by the {@link ServiceDescriptorsWithIdProviderCollection}.
+ */
+ public ServiceRegistryFactory(IServiceDescriptorsWithIdProvider ... declaredDescriptorProviders ) {
+
+ descriptorProviders = new DescriptorsCache();
+ descriptorProviders.addAll(declaredDescriptorProviders);
+ }
+
+ /**
+ * Create a {@link ServicesRegistry} from the specified description.
+ * The description is searched in the associated {@link ServiceDescriptorsWithIdProviderCollection}.
+ *
+ * @param registryName The name of the description used to initialized the ServicesRegistry.
+ *
+ * @return The requested {@link ServicesRegistry}
+ * @throws DeclarationException
+ */
+ public ServicesRegistry getServicesRegistry( String registryName ) throws DeclarationException {
+
+ RegistryDesc registryIdDesc = descriptorProviders.getRegistryDesc( registryName);
+
+ return getServicesRegistry(registryIdDesc);
+ }
+
+ /**
+ * Get a {@link ServicesRegistry} corresponding to the specified descriptor. Also create recursively referenced
+ * registries and services.
+ *
+ * If the registry is "unique", lookup for an already existing instance, and return it if found.
+ * If the registry is not unique, create a new instance corresponding to the descriptor.
+ * Referenced descriptions are searched in the associated ConfigurationProvider.
+ *
+ * @param registryIdDesc The descriptor used to initialized the ServicesRegistry.
+ *
+ * @return The requested {@link ServicesRegistry}
+ * @throws DeclarationException
+ */
+ protected ServicesRegistry getServicesRegistry( RegistryDesc registryIdDesc ) throws DeclarationException {
+
+ ServicesRegistry registry;
+
+ if(registryIdDesc.isUnique() ) {
+ // lookup for an instance
+ registry = getSingleRegistry(registryIdDesc);
+ if( registry != null )
+ return registry;
+ // Not found: create it
+ }
+
+ // create a new Registry
+ List<DeclarationException> errors = new ArrayList<DeclarationException>();
+ registry = new ServicesRegistry();
+ // Initialize it
+ // add parents
+ for(RegistryDesc parentName: registryIdDesc.getParents()) {
+ try {
+ ServicesRegistry parent = getServicesRegistry(parentName);
+ registry.addParentRegistry(parent);
+ } catch (DeclarationException e) {
+ errors.add(e);
+ }
+ }
+
+ // Add services
+ for(AbstractServiceDesc serviceDesc: registryIdDesc.getServices()) {
+
+ registry.add(ServiceDescriptorUtils.toServiceDescriptor(serviceDesc) );
+ }
+
+ // Throw exceptions if pb encountered
+ if(errors.size() >0) {
+ if(errors.size() == 1) {
+ throw errors.get(0);
+ }
+ else {
+ // TODO: throw a multi exception
+ throw new DeclarationException("Somme services are not started (first is shown)", errors.get(0));
+ }
+ }
+
+ return registry;
+ }
+
+ /**
+ * Extends the specified registry with all services and parents declared in the specified descriptor.
+ * Only missing services and parents are added.
+ * <br>If both the original registry and the additional registry contain a service with the same name,
+ * the service from the original registry is conserved.
+ *
+ * @param registry The registry to extends.
+ * @param extendsWithRegistryName The name of the descriptor used to extends the registry.
+ * @return
+ * @throws DeclarationException
+ */
+ public ServicesRegistry extendsServicesRegistry( ServicesRegistry registry, String extendsWithRegistryName ) throws DeclarationException {
+
+ RegistryDesc registryDesc = descriptorProviders.getRegistryDesc( extendsWithRegistryName);
+
+ return extendsServicesRegistry(registry, registryDesc);
+ }
+
+ /**
+ * Extends the specified registry with all services and parents declared in the specified descriptor.
+ * Only missing services and parents are added.
+ * <br>If both the original registry and the additional registry contain a service with the same name,
+ * the service from the original registry is conserved.
+ *
+ * @param extendRegistryDesc The descriptor used to initialized the ServicesRegistry.
+ *
+ * @return The requested {@link ServicesRegistry}
+ * @throws DeclarationException
+ */
+ protected ServicesRegistry extendsServicesRegistry( ServicesRegistry registry, RegistryDesc extendRegistryDesc ) throws DeclarationException {
+
+ // create a new Registry
+ List<Throwable> errors = new ArrayList<Throwable>();
+
+ // add missing parents
+ //
+ if( extendRegistryDesc.getParents().size()>0) {
+ throw new UnsupportedOperationException("Registry extension with parents not yet implemented.");
+ }
+// for(RegistryDesc newExtend: extendRegistryDesc.getParents()) {
+// try {
+// if( !registry.containsParent(newExtend.getName()) ) {
+// ServicesRegistry parent = getServicesRegistry(newExtend.getName());
+// registry.addParentRegistry(parent);
+// }
+//
+// } catch (DeclarationException e) {
+// errors.add(e);
+// }
+// }
+
+
+ // Add missing services
+ for( AbstractServiceDesc idDesc : extendRegistryDesc.getServices() ) {
+ try {
+ if( ! registry.isStarted(idDesc.getName(), false)) {
+ registry.add(ServiceDescriptorUtils.toServiceDescriptor(idDesc) );
+ }
+ } catch (ServiceNotFoundException e) {
+ errors.add(e);
+ }
+ }
+
+ // Throw exceptions if pb encountered
+ if(errors.size() >0) {
+ if(errors.size() == 1) {
+ throw new DeclarationException(errors.get(0));
+ }
+ else {
+ // TODO: throw a multi exception
+ throw new DeclarationMultiException("Somme services are not started.", errors);
+ }
+ }
+
+ return registry;
+ }
+
+ /**
+ * Get the specified single registry by its name.
+ * Return null if not found or if the repository do not exist.
+ *
+ * @param registryIdDesc
+ * @return
+ */
+ private ServicesRegistry getSingleRegistry(RegistryDesc registryIdDesc) {
+ if( singleRegistries == null)
+ return null;
+ return singleRegistries.get( registryIdDesc.getName() );
+ }
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceStartKind.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceStartKind.java
new file mode 100644
index 00000000000..9071b2bdbde
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceStartKind.java
@@ -0,0 +1,18 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+/**
+ * Kind of possible start method for a service. LAZY - The service start when it
+ * is requested for the first time. STARTUP - The service start as soon as the
+ * registry is started, or when the service is added is the registry is already
+ * started.
+ *
+ * @author dumoulin
+ *
+ */
+public enum ServiceStartKind {
+
+ LAZY, STARTUP;
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceState.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceState.java
new file mode 100644
index 00000000000..409a9bcf683
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServiceState.java
@@ -0,0 +1,14 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+/**
+ * The different states that a service can have.
+ *
+ * @author dumoulin
+ *
+ */
+public enum ServiceState {
+ registered, created, initialized, starting, started, disposed, error
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistry.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistry.java
new file mode 100644
index 00000000000..c46bc43eb47
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistry.java
@@ -0,0 +1,1368 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceDescriptor.ServiceTypeKind;
+import org.eclipse.papyrus.infra.core.serviceregistry.internal.AliasServiceEntry;
+import org.eclipse.papyrus.infra.core.serviceregistry.internal.LazyStartupEntry;
+import org.eclipse.papyrus.infra.core.serviceregistry.internal.PojoServiceEntry;
+import org.eclipse.papyrus.infra.core.serviceregistry.internal.ServiceEntry;
+import org.eclipse.papyrus.infra.core.serviceregistry.internal.ServiceFactoryEntry;
+import org.eclipse.papyrus.infra.core.serviceregistry.internal.ServiceStartupEntry;
+import org.eclipse.papyrus.infra.core.serviceregistry.internal.ServiceTypeEntry;
+import org.eclipse.papyrus.infra.core.serviceregistry.internal.StartStartupEntry;
+
+/**
+ * A registry of services. This registry allows to get a service by its
+ * identifier. The identifier is generally the classname of the service.
+ * Services can be added using the Eclipse extension mechanism (if you use {@link ExtensionServicesRegistry}). <br>
+ * A Service is a class providing operations. The ServiceRegistry is used to
+ * share objects (i.e. services) between nested editors and also the core main
+ * editor.
+ *
+ * <br>
+ * In this implementation, services should be added to the registry before the
+ * call to createServices(). If a service is added after the call, it will not
+ * be started (except if it is a lazy service). <br>
+ * A typical usage is:
+ *
+ * <pre>
+ * <code>
+ * ServicesRegistry serviceRegistry = new ServiceRegistry();
+ * // Add your services
+ * serviceRegistry.add( ...);
+ * serviceRegistry.add( ...);
+ *
+ * // start the services
+ * serviceRegistry.startRegistry();
+ *
+ * // Retrieve a service
+ * myService = serviceRegistry.getService( serviceKey );
+ * </code>
+ * </pre>
+ *
+ * It is possible to register new services after the serviceRegistry has been
+ * started. In this case, you need to start them explicitly if they are of type
+ * ServiceStartKind.STARTUP.
+ *
+ * <pre>
+ * <code>
+ * // Add your new services
+ * serviceRegistry.add( key1, ...);
+ * serviceRegistry.add( key2, ...);
+ *
+ * // start the new services
+ * serviceRegistry.startRegistry(key1, key2);
+ * </code>
+ * </pre>
+ *
+ * <ul>
+ * <li></li>
+ * <li></li>
+ * </ul>
+ *
+ * @author cedric dumoulin
+ *
+ *
+ */
+public class ServicesRegistry {
+
+ /** Log object */
+ protected Logger log = Logger.getLogger(getClass().getName());
+
+ /**
+ * Map of existing services.
+ */
+ // private Map<Object, AbstractServiceEntry> services;
+
+ /**
+ * A Map of services added to the register (thow the addXxx() methods), but
+ * not yet registered. They will be registered after a call to startXxx().
+ */
+ private Map<String, ServiceStartupEntry> addedServices = new HashMap<String, ServiceStartupEntry>();
+
+ /**
+ * Map of services registered with a name.
+ */
+ private Map<String, ServiceStartupEntry> namedServices = new HashMap<String, ServiceStartupEntry>();
+
+ /**
+ * Map of services registered without a name (anonymous). Such services
+ * can't be retrieved.
+ */
+ private List<ServiceStartupEntry> anonymousServices = new ArrayList<ServiceStartupEntry>();
+
+ /**
+ * List of parents used as fallback if the service is not found in this registry.
+ */
+ private List<ServicesRegistry> parents = new ArrayList<ServicesRegistry>();
+
+ /**
+ * Constructor.
+ */
+ public ServicesRegistry() {
+ }
+
+ /**
+ * Add a service by its ServiceDescriptor.
+ *
+ * @param serviceDescriptor
+ * Descriptor describing the service.
+ * @throws ServiceException
+ * If an error occurs while initializing service.
+ */
+ public void add(ServiceDescriptor serviceDescriptor) {
+ // Check if the service already exist.
+ ServiceStartupEntry service = addedServices.get(serviceDescriptor.getKey());
+ if(service != null) {
+ if(service.getDescriptor().getPriority() > serviceDescriptor.getPriority())
+ return;
+ else if(service.getDescriptor().getPriority() == serviceDescriptor.getPriority()) {
+ log.warning("Two services with same priority (" + serviceDescriptor.getPriority() + ") are declared under key '" + service.getDescriptor().getKey() + "'. Keep the first encountered only. (bundles: " + service.getDescriptor().getClassBundleID() + ", " + serviceDescriptor.getClassBundleID() + ")");
+ }
+ }
+
+ // Compute the service type entry
+ ServiceTypeEntry serviceTypeEntry;
+ ServiceTypeKind typeKind = serviceDescriptor.getServiceTypeKind();
+ switch( typeKind) {
+ case service:
+ serviceTypeEntry = new ServiceEntry(serviceDescriptor);
+ break;
+ case serviceFactory:
+ serviceTypeEntry = new ServiceFactoryEntry(serviceDescriptor);
+ break;
+ case pojo:
+ serviceTypeEntry = new PojoServiceEntry(serviceDescriptor);
+ break;
+ case alias:
+ serviceTypeEntry = new AliasServiceEntry(serviceDescriptor);
+ break;
+ default:
+ // Add as pojo
+ // Should better throw an exception. (MalformedDescriptor ?)
+ serviceTypeEntry = new PojoServiceEntry(serviceDescriptor);
+ }
+
+ // Create the entry
+ ServiceStartupEntry serviceEntry;
+ switch(serviceDescriptor.getServiceStartKind()) {
+ case STARTUP:
+ serviceEntry = new StartStartupEntry(serviceTypeEntry);
+ break;
+ case LAZY:
+ serviceEntry = new LazyStartupEntry(serviceTypeEntry, this);
+ break;
+ default:
+ // Add as LAZY
+ // Should better throw an exception. (MalformedDescriptor ?)
+ serviceEntry = new LazyStartupEntry(serviceTypeEntry, this);
+ }
+
+ // Add the entry
+ addedServices.put(serviceDescriptor.getKey(), serviceEntry);
+ }
+
+ /**
+ * Add a service. The descriptor will be created.
+ *
+ * @param key
+ * Service key
+ * @param priority
+ * service priority
+ * @param serviceInstance
+ * The instance of the service
+ */
+ public void add(String key, int priority, IService serviceInstance) {
+ add(key, priority, serviceInstance, ServiceStartKind.STARTUP);
+ }
+
+ /**
+ * Add a service. The descriptor will be created.
+ *
+ * @param key
+ * Service key
+ * @param priority
+ * service priority
+ * @param serviceInstance
+ * The instance of the service
+ */
+ public void add(Class<?> key, int priority, IService serviceInstance) {
+ add(key.getName(), priority, serviceInstance, ServiceStartKind.STARTUP);
+ }
+
+ /**
+ * Add a service. The descriptor will be created.
+ *
+ * @param key
+ * Service key
+ * @param priority
+ * service priority
+ * @param serviceInstance
+ * The instance of the service
+ */
+ public void add(String key, int priority, IService serviceInstance, ServiceStartKind startKind) {
+ // Check if the service already exist.
+ ServiceStartupEntry service = addedServices.get(key);
+ if(service != null) {
+ if(service.getDescriptor().getPriority() > priority)
+ return;
+ else if(service.getDescriptor().getPriority() == priority)
+ log.warning("Two services with same priority (" + priority + ") are declared under key '" + service.getDescriptor().getKey() + "'. Keep the first encountered only.");
+ }
+
+ // Create descriptor and add service.
+ ServiceDescriptor descriptor = new ServiceDescriptor(key, serviceInstance.getClass().getName(), startKind, priority);
+
+ if(startKind == ServiceStartKind.STARTUP)
+ addedServices.put(key, new StartStartupEntry(new ServiceEntry(descriptor, serviceInstance)));
+ else
+ addedServices.put(key, new LazyStartupEntry(new ServiceEntry(descriptor, serviceInstance), this));
+ }
+
+ /**
+ * Add a service. The descriptor will be created.
+ *
+ * @param key
+ * Service key Class used as key. The classname is used as key.
+ * @param priority
+ * service priority
+ * @param serviceInstance
+ * The instance of the service
+ */
+ public void add(Class<?> key, int priority, IService serviceInstance, ServiceStartKind startKind) {
+
+ add(key.getName(), priority, serviceInstance, startKind);
+ }
+
+ /**
+ * Add an already instanciated pojo (Plain Old Java Object) as Service. The
+ * descriptor will be created. No life cycle methods are called on the
+ * service.
+ *
+ * @param key
+ * Service key
+ * @param priority
+ * service priority
+ * @param serviceInstance
+ * The instance of the service
+ */
+ public void add(Class<?> key, int priority, Object serviceInstance) {
+ add(key, priority, serviceInstance, ServiceStartKind.STARTUP);
+ }
+
+ /**
+ * Add an already instanciated pojo (Plain Old Java Object) as Service. The
+ * descriptor will be created. No life cycle methods are called on the
+ * service.
+ *
+ * @param key
+ * Service key
+ * @param priority
+ * service priority
+ * @param serviceInstance
+ * The instance of the service
+ * @param startKind
+ *
+ */
+ public void add(String key, int priority, Object serviceInstance, ServiceStartKind startKind) {
+ // Check if the service already exist.
+ ServiceStartupEntry service = addedServices.get(key);
+ if(service != null) {
+ if(service.getDescriptor().getPriority() > priority)
+ return;
+ else if(service.getDescriptor().getPriority() == priority)
+ log.warning("Two services with same priority (" + priority + ") are declared under key '" + service.getDescriptor().getKey() + "'. Keep the first encountered only.");
+ }
+
+ // Create descriptor and add service.
+ ServiceDescriptor descriptor = new ServiceDescriptor(key, serviceInstance.getClass().getName(), startKind, priority);
+
+ if(startKind == ServiceStartKind.STARTUP)
+ addedServices.put(key, new StartStartupEntry(new PojoServiceEntry(descriptor, serviceInstance)));
+ else
+ addedServices.put(key, new LazyStartupEntry(new PojoServiceEntry(descriptor, serviceInstance), this));
+
+ }
+
+ /**
+ * Add an already instanciated pojo (Plain Old Java Object) as Service. The
+ * descriptor will be created. No life cycle methods are called on the
+ * service.
+ *
+ * @param key
+ * Service key Class used as key. The classname is used as key.
+ * @param priority
+ * service priority
+ * @param serviceInstance
+ * The instance of the service
+ * @param startKind
+ *
+ */
+ public void add(Class<?> key, int priority, Object serviceInstance, ServiceStartKind startKind) {
+
+ add(key.getName(), priority, serviceInstance, startKind);
+ }
+
+ /**
+ * Remove the specified Registry as parent of this registry.
+ * .
+ * @param parentRegistry
+ */
+ public void addParentRegistry(ServicesRegistry parentRegistry) {
+
+ if( parentRegistry == null) {
+ return;
+ }
+ parents.add(parentRegistry);
+ }
+
+ /**
+ *
+ * @param parentRegistry
+ */
+ public void removeParentRegistry(ServicesRegistry parentRegistry) {
+
+ if( parentRegistry == null) {
+ return;
+ }
+ parents.remove(parentRegistry);
+ }
+
+
+ /**
+ * Remove the specified service from the registry.
+ *
+ * @param key
+ */
+ public void remove(ServiceDescriptor serviceDescriptor) throws ServiceException {
+ remove(serviceDescriptor.getKey());
+ }
+
+ /**
+ * Remove the specified service from the registry.
+ *
+ * @param key
+ */
+ public void remove(Object key) throws ServiceException {
+ ServiceStartupEntry service = namedServices.remove(key);
+ if(service == null) {
+ return;
+ }
+
+ // Stop the service
+ service.disposeService();
+ }
+
+ /**
+ * Get the requested service by its key. The key is usually the classname of
+ * the service.
+ *
+ * @param serviceClass
+ * @return
+ * @throws ServiceException
+ * If servive can't be started
+ */
+ public Object getService(Object key) throws ServiceException {
+ ServiceStartupEntry serviceEntry = namedServices.get(key);
+ if(serviceEntry == null) {
+ // Check if we can find it in parents
+ Object service = getServiceFromParents(key);
+ if(service != null) {
+ // Found in parent, return it
+ return service;
+ }
+
+ // Not found in parents. Throw an exception
+ // throw an appropriate exception (If added, say it).
+ serviceEntry = addedServices.get(key);
+ if(serviceEntry != null)
+ throw new BadStateException("Registry should be started before.", serviceEntry.getState(), serviceEntry.getDescriptor());
+ else
+ throw new ServiceNotFoundException("No service registered under '" + key + "'");
+ }
+
+ return serviceEntry.getServiceInstance();
+ }
+
+ /**
+ * Get the requested service by its class (the service has to be registered
+ * by its class object).
+ *
+ * @param key
+ * The service class.
+ * @return The service.
+ * @throws ServiceException
+ * If service can't be started
+ */
+ @SuppressWarnings("unchecked")
+ public <S> S getService(Class<S> key) throws ServiceException {
+
+ String realKey = key.getName();
+ ServiceStartupEntry serviceEntry = namedServices.get(realKey);
+
+ // Lookup in parents if not found
+ if( serviceEntry == null) {
+
+ // Check if we can find it in parents
+ S service = (S)getServiceFromParents(realKey);
+ if(service != null) {
+ // Found in parent, return it
+ return service;
+ }
+
+ // Not found in parents. Throw an exception
+ // throw an appropriate exception (If added, say it).
+ serviceEntry = addedServices.get(realKey);
+ if(serviceEntry != null)
+ throw new BadStateException("Registry should be started before.", serviceEntry.getState(), serviceEntry.getDescriptor());
+ else
+ throw new ServiceNotFoundException("No service registered under '" + key + "'");
+ }
+
+ // Service found, return it.
+ return (S)serviceEntry.getServiceInstance();
+ }
+
+ /**
+ * Get the requested service by its class (the service has to be registered
+ * by its class object).
+ *
+ * @param key
+ * The service class.
+ * @return The service.
+ * @throws ServiceException
+ * If service can't be started
+ */
+ private Object getServiceFromParents(Object key) throws ServiceException {
+
+ Object foundService;
+
+ for( ServicesRegistry parent : parents) {
+ foundService = parent.getServiceUnchecked(key);
+ // Check if we have found the service
+ if( foundService != null) {
+ // Found, return it
+ return foundService;
+ }
+ }
+ // Not found
+ return null;
+ }
+
+ /**
+ * Get the requested service by its key. The key is usually the classname of
+ * the service.
+ * Return the service, or null if not found.
+ * This is for internal use.
+ *
+ * @param serviceClass
+ * @return The service, or null if not found.
+ * @throws ServiceException
+ * If servive can't be started
+ */
+ protected Object getServiceUnchecked(Object key) throws ServiceException {
+ ServiceStartupEntry service = namedServices.get(key);
+ if(service == null) {
+ return null;
+ }
+
+ return service.getServiceInstance();
+ }
+
+ /**
+ * Try to get the {@link ServiceStartupEntry} of the specified service.
+ * Search in local namedServices.
+ * Also lookup in parents. Return null if not found.
+ * The returned entry should not be modified by caller.
+ *
+ * @param key
+ * @return The requested entry, or null if not found.
+ */
+ protected ServiceStartupEntry getServiceStartupEntry( Object key ) {
+
+ return getServiceStartupEntry(key, true);
+ }
+
+ /**
+ * Try to get the {@link ServiceStartupEntry} of the specified service.
+ * Search in local namedServices.
+ * Also lookup in parents. Return null if not found.
+ * The returned entry should not be modified by caller.
+ *
+ * @param key
+ * @param searchInParent True if we should search in parent, false if search take place in this registry only.
+ * @return The requested entry, or null if not found.
+ */
+ protected ServiceStartupEntry getServiceStartupEntry( Object key, boolean searchInParent ) {
+
+ ServiceStartupEntry service = namedServices.get(key);
+ if( service != null) {
+ return service;
+ }
+
+ // Check in new services
+ service = addedServices.get(key);
+ if( service != null) {
+ return service;
+ }
+
+ if( searchInParent ) {
+ // Lookup in parents
+ for(ServicesRegistry registry : parents) {
+ service = registry.getServiceStartupEntry(key);
+ if( service != null) {
+ return service;
+ }
+ }
+ }
+
+ // Not found
+ return null;
+ }
+
+ /**
+ * Return true if the service is instantiated. Return false otherwise.
+ *
+ * @return
+ */
+ public boolean isStarted(Object key) throws ServiceNotFoundException {
+ return isStarted(key, true);
+ }
+
+ /**
+ * Return true if the service is instantiated. Return false otherwise.
+ *
+ * @return
+ */
+ public boolean isStarted(Object key, boolean searchInParents) throws ServiceNotFoundException {
+ ServiceStartupEntry service = getServiceStartupEntry(key, searchInParents);
+ if(service == null) {
+ throw new ServiceNotFoundException("No service registered under '" + key + "'");
+ }
+
+ return service.isStarted();
+ }
+
+ /**
+ * Return true if the service is instantiated. Return false otherwise.
+ * The service type is converted to its name, then the method is performed.
+ * @see #isStarted(Class)
+ *
+ * @return
+ */
+ public boolean isStarted(Class<?> serviceType) throws ServiceNotFoundException {
+ return isStarted(serviceType.getName(), true);
+ }
+
+ /**
+ * Return true if the service is instantiated. Return false otherwise.
+ * The service type is converted to its name, then the method is performed.
+ * @see #isStarted(Class)
+ *
+ * @return
+ */
+ public boolean isStarted(Class<?> serviceType, boolean searchInParents) throws ServiceNotFoundException {
+ return isStarted(serviceType.getName(), searchInParents);
+ }
+
+ /**
+ * Return the state of the specified service.
+ *
+ * @return
+ */
+ public ServiceState serviceState(Object key) throws ServiceNotFoundException {
+ return serviceState(key, true);
+ }
+
+ /**
+ * Return the state of the specified service.
+ * @param key
+ * @param searchInParents
+ * @return
+ * @throws ServiceNotFoundException
+ */
+ public ServiceState serviceState(Object key, boolean searchInParents ) throws ServiceNotFoundException {
+ ServiceStartupEntry service = getServiceStartupEntry(key, searchInParents);
+ if(service == null) {
+ throw new ServiceNotFoundException("No service registered under '" + key + "'");
+ }
+
+ return service.getState();
+ }
+
+ /**
+ * Return the state of the specified service.
+ *
+ * @return
+ */
+ public ServiceState serviceState(Class<?> serviceType) throws ServiceNotFoundException {
+ return serviceState(serviceType.getName(), true);
+ }
+
+ /**
+ * Return the state of the specified service.
+ *
+ * @return
+ */
+ public ServiceState serviceState(Class<?> serviceType, boolean searchInParents) throws ServiceNotFoundException {
+ return serviceState(serviceType.getName(), searchInParents);
+ }
+
+ /**
+ * Start services newly added.
+ * Start all services marked as start = STARTUP.
+ * All services are first created, then initialized and finally
+ * started. If an error occur on a service during one of this step, the
+ * service is removed from the registry and and the error is logged.
+
+ * @throws ServiceMultiException
+ *
+ * @throws ServiceException
+ * If a service can't be started.
+ *
+ */
+ public void startNewServices() throws ServiceMultiException {
+ // Build the lookup maps
+ LookupMap localSpace = new LookupMap(addedServices, namedServices);
+ // search space including parents
+ LookupMap fullSpace = new LookupMap(addedServices, namedServices, parents);
+
+ // Check if all dependencies exist.
+ checkDependencies(addedServices.values(), fullSpace);
+
+ // Get all roots : LAZY and START
+ Collection<ServiceStartupEntry> roots = getServiceRoots(addedServices.values(), localSpace);
+ // showServices(" Roots:", roots);
+ // Detect cycles
+ checkCycle(roots, localSpace);
+
+ // Order services in the order we should start them.
+ // Lazy services are taken into account, as they can be in a chain of start.
+ List<ServiceStartupEntry> toStart = buildTopologicalListOfServicesToStart(roots, localSpace);
+
+ // Retain only services with startupkind == START
+ //
+ roots = retainsToStartServices(roots);
+
+ if(Activator.log.isDebugEnabled()) {
+ showServices(" Services to start:", toStart);
+ }
+
+ // Create an object to collect errors if any.
+ ServiceMultiException errors = new ServiceMultiException();
+
+ createServices(toStart, errors);
+ // Register all new services : lazy and start
+ registerServices(addedServices.values());
+ initServices(toStart, errors);
+ startServices(toStart, errors);
+
+ // Report errors if any
+ if(errors.getExceptions().size() > 0)
+ throw errors;
+
+
+ }
+
+ /**
+ * Start the registry. Start all services marked as start = STARTUP are
+ * started. All services are first created, then initialized and finally
+ * started. If an error occur on a service during one of this step, the
+ * service is removed from the registry and and the error is logged.
+ *
+ * @throws ServiceMultiException
+ *
+ * @throws ServiceException
+ * If a service can't be started.
+ *
+ * @deprecated Use {@link #startNewServices()}
+ */
+ protected void startRegistry() throws ServiceMultiException {
+
+ startNewServices();
+ }
+
+ /**
+ * Start the specified services, and their required services. The specifies
+ * services should be in the addServices or already registered. Start all
+ * services marked as start = STARTUP . All eligible services are first
+ * created, then initialized and finally started. If an error occur on a
+ * service during one of this step, the service is removed from the registry
+ * and and the error is logged.
+ *
+ * @param serviceKeys
+ * Keys of services to start.
+ * @throws ServiceMultiException
+ * @throws ServiceNotFoundException
+ * If a service can't be retrieved by its key.
+ *
+ * @throws ServiceException
+ * If a service can't be started.
+ */
+ public void startServices(List<String> serviceKeys) throws ServiceMultiException, ServiceNotFoundException {
+
+ // Build the lookup maps
+ LookupMap map = new LookupMap(addedServices, namedServices);
+
+ // Get the services
+ List<ServiceStartupEntry> services = keysToServices(serviceKeys, map);
+
+ // Start them
+ startServices(services, map);
+ }
+
+ /**
+ * Same as {@link #startServices(List)}, but with an array as input.
+ *
+ * @see #startServices(List)
+ *
+ * @param serviceKeys
+ * Keys of services to start.
+ * @throws ServiceMultiException
+ * @throws ServiceNotFoundException
+ * If a service can't be retrieved by its key.
+ *
+ * @throws ServiceException
+ * If a service can't be started.
+ */
+ public void startServices(String... serviceKeys) throws ServiceMultiException, ServiceNotFoundException {
+
+ List<String> serviceKeysList = Arrays.asList(serviceKeys);
+ startServices(serviceKeysList);
+ }
+
+ /**
+ * Start the specified services, and their required services. The specifies
+ * services should be in the addServices or already registered. Start all
+ * services marked as start = STARTUP . All eligible services are first
+ * created, then initialized and finally started. If an error occur on a
+ * service during one of this step, the service is removed from the registry
+ * and and the error is logged.
+ *
+ * @param serviceKeys
+ * Keys of services to start. Keys will be translated to the
+ * classname.
+ * @throws ServiceMultiException
+ * @throws ServiceNotFoundException
+ * If a service can't be retrieved by its key.
+ *
+ * @throws ServiceException
+ * If a service can't be started.
+ */
+ public void startServicesByClassKeys(List<Class<?>> serviceKeys) throws ServiceMultiException, ServiceNotFoundException {
+
+ // Build the lookup maps
+ LookupMap map = new LookupMap(addedServices, namedServices);
+
+ // Get the services
+ List<ServiceStartupEntry> services = classKeysToServices(serviceKeys, map);
+
+ // Start them
+ startServices(services, map);
+ }
+
+ /**
+ * Same as {@link #startServicesByClassKeys(List)}, but with an array as
+ * input.
+ *
+ * @see #startServices(List)
+ *
+ * @param serviceKeys
+ * Keys of services to start.
+ * @throws ServiceMultiException
+ * @throws ServiceNotFoundException
+ * If a service can't be retrieved by its key.
+ *
+ * @throws ServiceException
+ * If a service can't be started.
+ */
+ public void startServicesByClassKeys(Class<?>... serviceKeys) throws ServiceMultiException, ServiceNotFoundException {
+
+ List<Class<?>> serviceKeysList = Arrays.asList(serviceKeys);
+ startServicesByClassKeys(serviceKeysList);
+ }
+
+ /**
+ * Start the specified services, and their required services. The specifies
+ * services should be in the specified map. The map is also used to resolves
+ * dependencies. Start all services marked as start = STARTUP . All eligible
+ * services are first created, then initialized and finally started. If an
+ * error occur on a service during one of this step, the service is removed
+ * from the registry and and the error is logged.
+ *
+ * @param services
+ * Services to start
+ * @param map
+ * a table of (key, service) used to get a service by its key.
+ * @throws ServiceMultiException
+ * If a service can't be started.
+ */
+ private void startServices(List<ServiceStartupEntry> services, LookupMap map) throws ServiceMultiException {
+ // Check if all dependencies exist.
+ checkDependencies(services, map);
+
+ // Get all roots : LAZY and START
+ Collection<ServiceStartupEntry> roots = getServiceRoots(services, map);
+ if(Activator.log.isDebugEnabled()) {
+ showServices(" Roots:", roots);
+ }
+ // Detect cycles
+ checkCycle(roots, map);
+ // Retain only services with startupkind == START and state ==
+ // REGISTERED
+ roots = retainsToStartServices(roots);
+ //
+ List<ServiceStartupEntry> toStart = buildTopologicalListOfServicesToStart(roots, map);
+
+ // Remove already started services
+ toStart = retainsToStartServices(toStart);
+
+ // if( log.isLoggable(Level.FINE))
+ // {
+ showServices(" Services to start:", toStart);
+ // }
+
+ // Create an object to collect errors if any.
+ ServiceMultiException errors = new ServiceMultiException();
+
+ createServices(toStart, errors);
+ // Register all started services
+ registerServices(toStart);
+ initServices(toStart, errors);
+ startServices(toStart, errors);
+
+ // Report errors if any
+ if(errors.getExceptions().size() > 0)
+ throw errors;
+ }
+
+ /**
+ * Return a list of services from a list of services keys.
+ *
+ * @param serviceKeys
+ * @param map
+ * @return
+ * @throws ServiceNotFoundException
+ * If a service can't be retrieved by its key.
+ */
+ private List<ServiceStartupEntry> keysToServices(List<String> serviceKeys, LookupMap map) throws ServiceNotFoundException {
+
+ List<ServiceStartupEntry> result = new ArrayList<ServiceStartupEntry>(serviceKeys.size());
+
+ for(String key : serviceKeys) {
+ result.add(map.getChecked(key));
+ }
+ return result;
+ }
+
+ /**
+ * Return a list of services from a list of services keys.
+ *
+ * @param serviceKeys
+ * @param map
+ * @return
+ * @throws ServiceNotFoundException
+ * If a service can't be retrieved by its key.
+ */
+ private List<ServiceStartupEntry> classKeysToServices(List<Class<?>> serviceKeys, LookupMap map) throws ServiceNotFoundException {
+
+ List<ServiceStartupEntry> result = new ArrayList<ServiceStartupEntry>(serviceKeys.size());
+
+ for(Class<?> key : serviceKeys) {
+ result.add(map.getChecked(key.getName()));
+ }
+ return result;
+ }
+
+ /**
+ * Print the services. For debug purpose
+ *
+ * @param roots
+ */
+ private void showServices(String message, Collection<ServiceStartupEntry> roots) {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("--------------------------\n");
+ buffer.append(message);
+ buffer.append("\n");
+ for(ServiceStartupEntry service : roots) {
+ buffer.append(" ");
+ buffer.append(service.getDescriptor().toString());
+ buffer.append("\n");
+ }
+ buffer.append("--------- done -----------\n");
+ Activator.log.debug(buffer.toString());
+ }
+
+ /**
+ * Check if all dependencies exist. Throw an error if a declared dependency
+ * has no corresponding service.
+ *
+ * @param services
+ * Services to check
+ * @param map
+ * Map of services by keys.
+ * @throws ServiceMultiException
+ */
+ private void checkDependencies(Collection<ServiceStartupEntry> services, LookupMap map) throws ServiceMultiException {
+
+ ServiceMultiException errors = new ServiceMultiException();
+
+ // Walk each service and check if its required services exist.
+ for(ServiceStartupEntry service : services) {
+ ServiceDescriptor desc = service.getDescriptor();
+
+ // Check each required service
+ for(String key : desc.getRequiredServiceKeys()) {
+
+ // Check if service can be found
+ try {
+ map.getChecked(key);
+ } catch (ServiceNotFoundException e) {
+ errors.addException(desc.getKey(), e);
+ }
+ }
+ }
+
+ // Throw errors if any
+ if(errors.getExceptions().size() > 0)
+ throw errors;
+ }
+
+ /**
+ * Retains only the services that should be started. Retains only services
+ * with startupkind = START and state == REGISTERED
+ *
+ * @param services
+ * Collection to filter
+ * @return a new Collection containing the services to start.
+ */
+ private List<ServiceStartupEntry> retainsToStartServices(Collection<ServiceStartupEntry> services) {
+
+ List<ServiceStartupEntry> result = new ArrayList<ServiceStartupEntry>();
+ for(ServiceStartupEntry service : services) {
+ ServiceDescriptor desc = service.getDescriptor();
+ if(service.getState() == ServiceState.registered && desc.isStartAtStartup()) {
+ result.add(service);
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Check for cycles. Throws an exception if a cycle is discovered. Each root
+ * is checked to see if it contains a cycle.
+ *
+ * @param roots
+ * @param map
+ */
+ private void checkCycle(Collection<ServiceStartupEntry> roots, LookupMap map) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /**
+ * Build a list of services to start, in the topological order (right
+ * order). The required services are placed before the dependent services in
+ * the list. Services already started are disguarded.
+ *
+ * @param roots
+ * @param map
+ * Map used to resolve the entry by their key.
+ * @return
+ */
+ private List<ServiceStartupEntry> buildTopologicalListOfServicesToStart(Collection<ServiceStartupEntry> roots, LookupMap map) {
+
+ List<ServiceStartupEntry> result = new ArrayList<ServiceStartupEntry>();
+
+ // Each root represent a graph. Walk the root and its child in the list,
+ // in the right order.
+ for(ServiceStartupEntry root : roots) {
+ walkGraphDepthFirst(result, root, map);
+ }
+
+ return result;
+ }
+
+ /**
+ * Add recursively the provided node, and then its direct children.
+ *
+ * @param result
+ * The list where the node are added
+ * @param node
+ * The node to add
+ * @param map
+ */
+ private void walkGraphDepthFirst(List<ServiceStartupEntry> result, ServiceStartupEntry node, LookupMap map) {
+
+ // Do not add already added or started node.
+ if(result.contains(node) || node.isStarted())
+ return;
+
+ // add direct child
+ for(String serviceKey : node.getDescriptor().getRequiredServiceKeys()) {
+ try {
+ ServiceStartupEntry child = map.getChecked(serviceKey);
+ walkGraphDepthFirst(result, child, map);
+ } catch (ServiceNotFoundException e) {
+ // Do nothing, we have already reported the problems with
+ // checkServices;
+ }
+ }
+
+ // Now add the node
+ result.add(node);
+ }
+
+ /**
+ * Create a List of the root services. The roots are services that are not
+ * required by any service.
+ *
+ * @param addedServices
+ * A collection from which roots are required. The collection is
+ * unmodified.
+ * @param map
+ * @return
+ */
+ private Collection<ServiceStartupEntry> getServiceRoots(Collection<ServiceStartupEntry> addedServices, LookupMap keyServiceMap) {
+
+ // Create a copy of the list of services
+ Collection<ServiceStartupEntry> services = new ArrayList<ServiceStartupEntry>(addedServices);
+
+ List<ServiceStartupEntry> allRequired = new ArrayList<ServiceStartupEntry>();
+
+ // The roots are services that are not required by any service.
+ // Build a list of the services required by all other services.
+ for(ServiceStartupEntry service : services) {
+ // Add each child to the list of required
+ for(String serviceKey : service.getDescriptor().getRequiredServiceKeys()) {
+ try {
+
+ ServiceStartupEntry child = keyServiceMap.getChecked(serviceKey);
+ allRequired.add(child);
+ } catch (ServiceNotFoundException e) {
+ // Do nothing, we have already reported the problems with
+ // checkServices;
+ }
+ }
+
+ }
+
+ // Roots are those that are not required.
+ // So it is the original list minus the required.
+ services.removeAll(allRequired);
+
+ return services;
+ }
+
+ /**
+ * Dispose all services for this registry and its parents.
+ *
+ * @throws ServiceMultiException
+ */
+ public void disposeRegistry() throws ServiceMultiException {
+
+ disposeRegistry(true);
+ }
+
+ /**
+ * Dispose all services, and parent registries if any.
+ *
+ * @throws ServiceMultiException
+ */
+ public void disposeRegistry(boolean isRecursive) throws ServiceMultiException {
+
+ // List of keys of service in error.
+ ServiceMultiException errors = new ServiceMultiException();
+ disposeRegistry(errors, isRecursive);
+ // Report errors if any
+ if(errors.getExceptions().size() > 0)
+ throw errors;
+ }
+
+ /**
+ * Dispose all services, and parent registries if any.
+ *
+ * @throws ServiceMultiException
+ */
+ protected void disposeRegistry(ServiceMultiException errors, boolean isRecursive) throws ServiceMultiException {
+
+ // List of keys of service in error.
+ disposeServices(namedServices.values(), errors);
+ disposeServices(anonymousServices, errors);
+
+ // Clean up properties to help GC
+ addedServices.clear();
+ addedServices = null;
+ anonymousServices.clear();
+ anonymousServices = null;
+ namedServices.clear();
+ namedServices = null;
+
+ // Do parents
+ if( isRecursive ) {
+ for( ServicesRegistry parent : parents) {
+ parent.disposeRegistry( errors, true);
+ }
+ }
+ }
+
+ /**
+ * Create all services provided in the list
+ *
+ * @param toStart
+ * List of services to create.
+ * @param errors
+ * Exception to collect errors.
+ *
+ * @throws ServiceMultiException
+ * If an error occure during the creation
+ *
+ * @throws ServiceException
+ * If a service can't be started.
+ */
+ private void createServices(List<ServiceStartupEntry> toStart, ServiceMultiException errors) throws ServiceMultiException {
+
+ // Loop on all services
+ for(ServiceStartupEntry serviceEntry : toStart) {
+ try {
+
+ serviceEntry.createService();
+ } catch (ServiceException e) {
+ log.log(Level.SEVERE, "Can't create service '" + serviceEntry + "'", e);
+
+ errors.addException(serviceEntry.getDescriptor().getKey(), e);
+ }
+ }
+
+ }
+
+ /**
+ * Register all services provided in the list. After this operation,
+ * services are available thru {@link #getService(Class)}.
+ *
+ * @param toStart
+ * List of services to register.
+ *
+ * @throws ServiceException
+ * If a service can't be started.
+ */
+ private void registerServices(Collection<ServiceStartupEntry> toStart) {
+
+ // Loop on all services
+ for(ServiceStartupEntry serviceEntry : toStart) {
+ ServiceDescriptor desc = serviceEntry.getDescriptor();
+ if(desc.isAnonymous()) {
+ anonymousServices.add(serviceEntry);
+ } else {
+ namedServices.put(desc.getKey(), serviceEntry);
+ }
+ }
+ }
+
+ /**
+ * Init all services provided in the list
+ *
+ * @param toStart
+ * List of services to init.
+ * @param errors
+ *
+ * @throws ServiceMultiException
+ * If an error occure during the process
+ *
+ * @throws ServiceException
+ * If a service can't be started.
+ */
+ private void initServices(List<ServiceStartupEntry> toStart, ServiceMultiException errors) throws ServiceMultiException {
+
+ // Loop on all services
+ for(ServiceStartupEntry serviceEntry : toStart) {
+ try {
+
+ serviceEntry.initService(this);
+ } catch (ServiceException e) {
+ log.log(Level.SEVERE, "Can't initialize service '" + serviceEntry + "'", e);
+ errors.addException(serviceEntry.getDescriptor().getKey(), e);
+ }
+ }
+
+ }
+
+ /**
+ * Init all services provided in the list
+ *
+ * @param toStart
+ * List of services to init.
+ * @param errors
+ *
+ * @throws ServiceMultiException
+ * If an error occure during the process
+ *
+ * @throws ServiceException
+ * If a service can't be started.
+ */
+ private void startServices(List<ServiceStartupEntry> toStart, ServiceMultiException errors) throws ServiceMultiException {
+
+ // Loop on all services
+ for(ServiceStartupEntry serviceEntry : toStart) {
+ try {
+
+ serviceEntry.startService();
+ } catch (ServiceException e) {
+ log.log(Level.SEVERE, "Can't start service '" + serviceEntry + "'", e);
+
+ errors.addException(serviceEntry.getDescriptor().getKey(), e);
+ }
+ }
+
+ }
+
+ /**
+ * Dispose all started services.
+ * Services are disposed in creation reverse order
+ *
+ * @throws ServiceMultiException
+ *
+ * @throws ServiceException
+ * If a service can't be started.
+ */
+ private void disposeServices(Collection<ServiceStartupEntry> services, ServiceMultiException errors) {
+
+ // Dispose services
+ for(ServiceStartupEntry serviceEntry : services) {
+ try {
+ serviceEntry.disposeService();
+ } catch (ServiceException e) {
+ log.log(Level.SEVERE, "Can't dispose service '" + serviceEntry.getDescriptor().getKey() + "'", e);
+ errors.addException(serviceEntry.getDescriptor(), e);
+ }
+ }
+ }
+
+ /**
+ * This class represents a union of two maps of <String,
+ * ServiceStartupEntry>. It provide specific methods to retrieve a {@link ServiceStartupEntry} by its key.
+ * <br>
+ * This class is used to lookup {@link ServiceStartupEntry} in multiple namespaces (2 maps, and then registries).
+ *
+ *
+ * @author cedric dumoulin
+ *
+ */
+ private class LookupMap {
+
+ Map<String, ServiceStartupEntry> map1;
+
+ Map<String, ServiceStartupEntry> map2;
+
+ // additional service registries into which we should search
+ List<ServicesRegistry> registries;
+
+ /**
+ *
+ * Constructor. Build a union of two maps.
+ *
+ * @param map1
+ * @param map2
+ */
+ public LookupMap(Map<String, ServiceStartupEntry> map1, Map<String, ServiceStartupEntry> map2) {
+ this.map1 = map1;
+ this.map2 = map2;
+ }
+
+ public LookupMap(Map<String, ServiceStartupEntry> space1, Map<String, ServiceStartupEntry> space2, List<ServicesRegistry> registries) {
+ this( space1, space2);
+ this.registries = registries;
+ }
+
+ /**
+ *
+ * Constructor. Build a union of one map (sic).
+ *
+ * @param map
+ */
+ @SuppressWarnings("unused")
+ public LookupMap(Map<String, ServiceStartupEntry> map) {
+ this(map, null);
+ }
+
+ /**
+ * Get a service by its key.
+ *
+ * @param key
+ * @return the service or null if not found.
+ */
+ @SuppressWarnings("unused")
+ public ServiceStartupEntry get(String key) {
+
+ ServiceStartupEntry res = map1.get(key);
+ if(res != null)
+ return res;
+ if(map2 != null) {
+ res = map2.get(key);
+ }
+ if( res == null && registries != null) {
+ // lookup in registries
+ res = getFromRegistries(key);
+ }
+
+ return res;
+ }
+
+ /**
+ * Get a service by its key.
+ *
+ * @param key
+ * @return The requested service.
+ * @throws ServiceNotFoundException
+ * if the service can't be found.
+ */
+ public ServiceStartupEntry getChecked(String key) throws ServiceNotFoundException {
+
+ ServiceStartupEntry res = map1.get(key);
+ if(res != null)
+ return res;
+ if(map2 != null)
+ res = map2.get(key);
+ if( res == null && registries != null) {
+ // lookup in registries
+ res = getFromRegistries(key);
+ }
+ if(res != null)
+ return res;
+
+ throw new ServiceNotFoundException("No service found under key '" + key.toString() + "'");
+ }
+
+ /**
+ * Try to get the entry from the registries.
+ * @param key
+ * @return
+ */
+ private ServiceStartupEntry getFromRegistries(String key) {
+
+ ServiceStartupEntry service;
+ // Lookup in parents
+ for(ServicesRegistry registry : registries) {
+ service = registry.getServiceStartupEntry(key);
+ if( service != null) {
+ return service;
+ }
+ }
+
+ return null;
+ }
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistryFactoryFromExtensions.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistryFactoryFromExtensions.java
new file mode 100644
index 00000000000..28d2b9100ce
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/ServicesRegistryFactoryFromExtensions.java
@@ -0,0 +1,94 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry;
+
+
+/**
+ * Factory used to create and populate a {@link ServicesRegistry} from declarations in Eclipse extensions.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class ServicesRegistryFactoryFromExtensions {
+
+ /**
+ * Instance that can be used to create Registries.
+ */
+ public static ServicesRegistryFactoryFromExtensions instance = new ServicesRegistryFactoryFromExtensions();
+
+
+ /**
+ * Create a new {@link ServicesRegistry} and initialized it from the configuration found in the
+ * eclipse extension under the specified name.
+ *
+ * @param registryName The name of the configuration to use to initialize the registry.
+ * @return A new ServicesRegistry initialized according to the specified configuration.
+ */
+ public ServicesRegistry createServicesRegistry(String registryName) throws ServiceException {
+
+ // Create registry
+ ServicesRegistry registry = new ServicesRegistry();
+ // Load its configuration
+ loadServicesRegistryConfiguration(registry, registryName);
+ // Start the registry
+ registry.startNewServices();
+ return registry;
+ }
+
+ /**
+ * Update the specified {@link ServicesRegistry} with the specified configuration. The configuration is read from
+ * the eclipse extension "registry".
+ * <br>
+ * The services found into the specified configuration are added to the registry if they are not
+ * already present.
+ * <br>
+ * The services are started.
+ *
+ * @param registry The registry to update.
+ * @param registryName The name of the configuration to use to update the registry.
+
+ * @return
+ */
+ public ServicesRegistry updateServicesRegistry(ServicesRegistry registry, String registryName) throws ServiceException {
+ // Load its configuration
+ loadServicesRegistryConfiguration(registry, registryName);
+ // Start the registry
+ registry.startNewServices();
+ return registry;
+ }
+
+ /**
+ * Load the specified configuration into the {@link ServicesRegistry}. Do not start the services.
+ *
+ * @param registry The registry to update
+ * @param registryName The name of the configuration to load.
+ * @throws ServiceException
+ */
+ public void loadServicesRegistryConfiguration(ServicesRegistry registry, String registryName) throws ServiceException {
+
+ }
+
+ /**
+ * Add the services to the {@link ServicesRegistry}. Do not start them. Services descriptions are loaded from
+ * the specified servicesSetName in the eclipse extensions "servicesSet".
+ *
+ * @param registry The registry to populate
+ * @param servicesSetName The set to load
+ * @throws ServiceException If a error occurs.
+ */
+ public void addNewServices(ServicesRegistry registry, String serviceSetName ) throws ServiceException {
+
+ }
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/annotations/InjectService.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/annotations/InjectService.java
new file mode 100644
index 00000000000..d6c10f91494
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/annotations/InjectService.java
@@ -0,0 +1,34 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+//Annotation accessible at runtime
+@Retention(RetentionPolicy.RUNTIME)
+//Annotation associated to elements:
+@Target({ElementType.FIELD, ElementType.METHOD})
+public @interface InjectService {
+
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/annotations/Service.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/annotations/Service.java
new file mode 100644
index 00000000000..2b0206a3b25
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/annotations/Service.java
@@ -0,0 +1,58 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+// Annotation accessible at runtime
+@Retention(RetentionPolicy.RUNTIME)
+//Annotation associated to (Class, interface)
+@Target(ElementType.TYPE)
+public @interface Service {
+
+ /**
+ * Constant used to specify that the id is not set by the user.
+ */
+ static String ID_NOT_SET = "";
+ /**
+ * Possible type of startup.
+ */
+ public enum StartupKind {lazy, startup};
+
+ /*
+ * Service Id
+ */
+ String id() default ID_NOT_SET;
+
+ /**
+ * Kind of startup requested for the service.
+ * @return
+ */
+ StartupKind startupKind() default StartupKind.lazy;
+
+ /**
+ * Service priority level. Default is 0.
+ * @return
+ */
+ int priority() default 0;
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/annotations/ServiceFactory.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/annotations/ServiceFactory.java
new file mode 100644
index 00000000000..8439fac8897
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/annotations/ServiceFactory.java
@@ -0,0 +1,53 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.annotations.Service.StartupKind;
+
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+//Annotation accessible at runtime
+@Retention(RetentionPolicy.RUNTIME)
+//Annotation associated to (Class, interface)
+@Target(ElementType.TYPE)
+public @interface ServiceFactory {
+
+ /*
+ * Service Id
+ */
+ String id() default Service.ID_NOT_SET;
+
+ /**
+ * Kind of startup requested for the service.
+ * @return
+ */
+ StartupKind startupKind() default StartupKind.lazy;
+
+ /**
+ * Service priority level. Default is 0.
+ * @return
+ */
+ int priority() default 0;
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/AliasServiceEntry.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/AliasServiceEntry.java
new file mode 100644
index 00000000000..3c7fdae989e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/AliasServiceEntry.java
@@ -0,0 +1,101 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.internal;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceDescriptor;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceException;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceState;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry;
+
+/**
+ * An alias can be used to access a service using another name.
+ *
+ * @author cedric dumoulin
+ */
+public class AliasServiceEntry extends ServiceTypeEntry {
+
+ /** The real service entry. */
+// private ServiceTypeEntry referencedService;
+
+ /** The instance of the real service. */
+ private Object serviceInstance;
+
+ /**
+ * Constructor.
+ *
+ * @param serviceDescriptor
+ */
+ public AliasServiceEntry(ServiceDescriptor serviceDescriptor) {
+ super(serviceDescriptor);
+ setState(ServiceState.registered);
+ }
+
+ /**
+ * Get the service instance.
+ *
+ * @return
+ * @throws ServiceException
+ * If service can't be started.
+ */
+ public Object getServiceInstance() throws ServiceException {
+
+ checkState(ServiceState.started);
+
+ return serviceInstance;
+ }
+
+ /**
+ * Already created : do nothing.
+ *
+ * @throws ServiceException
+ */
+ public void createService() throws ServiceException {
+ checkState(ServiceState.registered);
+
+ setState(ServiceState.created);
+ }
+
+ /**
+ * Try to get the instance of the referenced service.
+ *
+ * @param servicesRegistry
+ * The servicesRegistry containing this service.
+ *
+ * @throws ServiceException
+ */
+ public void initService(ServicesRegistry servicesRegistry) throws ServiceException {
+ checkState(ServiceState.created);
+ try {
+ String referencedServiceKey = getDescriptor().getRequiredServiceKeys().get(0);
+ serviceInstance = servicesRegistry.getService(referencedServiceKey);
+ } catch (ServiceException e) {
+ setState(ServiceState.error);
+ throw e;
+ } catch (Exception e) {
+ setState(ServiceState.error);
+ throw new ServiceException(e);
+ }
+ setState(ServiceState.initialized);
+ }
+
+ /**
+ * Already started : do nothing.
+ *
+ * @throws ServiceException
+ */
+ public void startService() throws ServiceException {
+ setState(ServiceState.started);
+ }
+
+ /**
+ * Dispose the alias.
+ * The referenced service is not disposed
+ */
+ public void disposeService() throws ServiceException {
+
+ serviceInstance = null;
+ setState(ServiceState.disposed);
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/BadDeclarationException.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/BadDeclarationException.java
new file mode 100644
index 00000000000..1beaeda337a
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/BadDeclarationException.java
@@ -0,0 +1,70 @@
+/*****************************************************************************
+ * Copyright (c) 2012 Cedric Dumoulin.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.infra.core.serviceregistry.internal;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.DeclarationException;
+
+
+/**
+ * @author cedric dumoulin
+ *
+ */
+public class BadDeclarationException extends DeclarationException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Constructor.
+ *
+ */
+ public BadDeclarationException() {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ */
+ public BadDeclarationException(String message) {
+ super(message);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param cause
+ */
+ public BadDeclarationException(Throwable cause) {
+ super(cause);
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param message
+ * @param cause
+ */
+ public BadDeclarationException(String message, Throwable cause) {
+ super(message, cause);
+ // TODO Auto-generated constructor stub
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ErrorServiceTypeEntry.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ErrorServiceTypeEntry.java
new file mode 100644
index 00000000000..a3fa5cb5553
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ErrorServiceTypeEntry.java
@@ -0,0 +1,98 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.internal;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.BadStateException;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceDescriptor;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceException;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceState;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry;
+
+/**
+ * A service entry used for faulty services. In this implementation, methods do
+ * nothings or throw an error.
+ *
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class ErrorServiceTypeEntry extends ServiceTypeEntry {
+
+ /**
+ * The original service descriptor.
+ */
+ private ServiceDescriptor descriptor;
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param descriptor
+ */
+ public ErrorServiceTypeEntry(ServiceDescriptor descriptor) {
+ super(descriptor);
+ }
+
+ /**
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.internal.ServiceTypeEntry#getServiceInstance()
+ *
+ * @return
+ * @throws ServiceException
+ */
+ @Override
+ public Object getServiceInstance() throws ServiceException {
+ throw new BadStateException("Service has not started.", ServiceState.error, descriptor);
+ }
+
+ /**
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.internal.ServiceTypeEntry#createService()
+ *
+ * @throws ServiceException
+ */
+ @Override
+ public void createService() throws ServiceException {
+ // do nothing
+
+ }
+
+ /**
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.internal.ServiceTypeEntry#initService(ServicesRegistry)
+ *
+ * @param servicesRegistry
+ * @throws ServiceException
+ */
+ @Override
+ public void initService(ServicesRegistry servicesRegistry) throws ServiceException {
+ // do nothing
+
+ }
+
+ /**
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.internal.ServiceTypeEntry#startService()
+ *
+ * @throws ServiceException
+ */
+ @Override
+ public void startService() throws ServiceException {
+ // do nothing
+
+ }
+
+ /**
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.internal.ServiceTypeEntry#disposeService()
+ *
+ * @throws ServiceException
+ */
+ @Override
+ public void disposeService() throws ServiceException {
+ // do nothing
+
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/LazyStartupEntry.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/LazyStartupEntry.java
new file mode 100644
index 00000000000..442e1f7a07d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/LazyStartupEntry.java
@@ -0,0 +1,96 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.internal;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.IService;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceException;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceState;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry;
+
+/**
+ * An ServiceEntry managing {@link IService} registered as lazy start.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class LazyStartupEntry extends ServiceStartupEntry {
+
+ protected ServicesRegistry registry;
+
+ /**
+ * Constructor.
+ *
+ * @param serviceDescriptor
+ * @param registry
+ */
+ public LazyStartupEntry(ServiceTypeEntry serviceEntry, ServicesRegistry registry) {
+
+ super(serviceEntry);
+ this.registry = registry;
+ }
+
+ /**
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.internal.ServiceStartupEntry#getServiceInstance()
+ *
+ * @return
+ * @throws ServiceException
+ */
+ @Override
+ public Object getServiceInstance() throws ServiceException {
+ if(serviceEntry.getState() == ServiceState.registered) {
+ // Start the service
+ try {
+ serviceEntry.createService();
+ serviceEntry.initService(registry);
+ serviceEntry.startService();
+ } catch (Exception e) {
+ // There was an error. The service is in error
+ serviceEntry = new ErrorServiceTypeEntry(serviceEntry.getDescriptor());
+ }
+ }
+
+ // Return the instance
+ return serviceEntry.getServiceInstance();
+ }
+
+ /**
+ * Do nothing
+ *
+ * @throws ServiceException
+ */
+ @Override
+ public void createService() throws ServiceException {
+ }
+
+ /**
+ * Do nothing
+ *
+ * @param servicesRegistry
+ * @throws ServiceException
+ */
+ @Override
+ public void initService(ServicesRegistry servicesRegistry) throws ServiceException {
+ }
+
+ /**
+ * Do nothing.
+ *
+ * @throws ServiceException
+ */
+ @Override
+ public void startService() throws ServiceException {
+ }
+
+ /**
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.AbstractServiceEntry#disposeService()
+ *
+ * @throws ServiceException
+ */
+ @Override
+ public void disposeService() throws ServiceException {
+ serviceEntry.disposeService();
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/PojoServiceEntry.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/PojoServiceEntry.java
new file mode 100644
index 00000000000..e9ce661fcdd
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/PojoServiceEntry.java
@@ -0,0 +1,118 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.internal;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.BadStateException;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceDescriptor;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceException;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceState;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry;
+
+/**
+ * Entry for a service provided as POJO.
+ *
+ *
+ * @author cedric dumoulin
+ */
+public class PojoServiceEntry extends ServiceTypeEntry {
+
+ /** Instance of the service, if started. */
+ private Object serviceInstance;
+
+ /**
+ * Constructor.
+ *
+ * @param serviceDescriptor
+ */
+ public PojoServiceEntry(ServiceDescriptor serviceDescriptor) {
+ super(serviceDescriptor);
+ setState(ServiceState.registered);
+ }
+
+ /**
+ * Create an entry for an already created service. Constructor.
+ *
+ * @param descriptor
+ * Descriptor of the service. Key and priority should be set.
+ * @param serviceInstance
+ * The service Instance
+ */
+ public PojoServiceEntry(ServiceDescriptor descriptor, Object serviceInstance) {
+ super(descriptor);
+ this.serviceInstance = serviceInstance;
+ setState(ServiceState.registered);
+ }
+
+ /**
+ * Get the service instance.
+ *
+ * @return
+ * @throws ServiceException
+ * If service can't be started.
+ */
+ public Object getServiceInstance() throws ServiceException {
+
+ if(serviceInstance == null)
+ throw new BadStateException("Service is not created.", state, serviceDescriptor);
+
+ return serviceInstance;
+ }
+
+ /**
+ * Already created : do nothing.
+ *
+ * @throws ServiceException
+ */
+ public void createService() throws ServiceException {
+ checkState(ServiceState.registered);
+ // Exit if already created.
+ if(serviceInstance != null) {
+ setState(ServiceState.created);
+ return;
+ }
+
+ // Create it
+ try {
+ // Create the instance
+ serviceInstance = instanciateService();
+ } catch (Exception e) {
+ setState(ServiceState.error);
+ throw new ServiceException(e);
+ }
+ setState(ServiceState.created);
+ }
+
+ /**
+ * Pojo : can't initialize the service. Do nothing.
+ *
+ * @param servicesRegistry
+ * The servicesRegistry containing this service.
+ *
+ * @throws ServiceException
+ */
+ public void initService(ServicesRegistry servicesRegistry) throws ServiceException {
+ setState(ServiceState.initialized);
+ }
+
+ /**
+ * Already started : do nothing.
+ *
+ * @throws ServiceException
+ */
+ public void startService() throws ServiceException {
+ setState(ServiceState.started);
+ }
+
+ /**
+ * Do nothing.
+ */
+ public void disposeService() throws ServiceException {
+ if(serviceInstance == null)
+ return;
+
+ serviceInstance = null;
+ setState(ServiceState.disposed);
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceEntry.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceEntry.java
new file mode 100644
index 00000000000..6582c17d608
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceEntry.java
@@ -0,0 +1,160 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.internal;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.BadStateException;
+import org.eclipse.papyrus.infra.core.serviceregistry.IService;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceDescriptor;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceException;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceState;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry;
+
+/**
+ * Entry of a Service implementing {@link IService}. This class provide methods
+ * to manage the Service life cycle.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class ServiceEntry extends ServiceTypeEntry {
+
+ /** Instance of the service, if started. */
+ private IService serviceInstance;
+
+ /**
+ * Constructor.
+ *
+ * @param serviceDescriptor
+ * @param registry
+ */
+ public ServiceEntry(ServiceDescriptor serviceDescriptor) {
+ super(serviceDescriptor);
+ setState(ServiceState.registered);
+
+ }
+
+ /**
+ * Create an entry for an already created service. Constructor.
+ *
+ * @param descriptor
+ * Descriptor of the service. Key and priority should be set.
+ * @param serviceInstance
+ * The service Instance
+ */
+ public ServiceEntry(ServiceDescriptor descriptor, IService serviceInstance) {
+ super(descriptor);
+ this.serviceInstance = serviceInstance;
+ setState(ServiceState.registered);
+ }
+
+ /**
+ * Get the service instance, even if it is not started. The service should
+ * be created.
+ *
+ * @return
+ * @throws ServiceException
+ * If service can't be started.
+ */
+ public Object getServiceInstance() throws ServiceException {
+
+ if(serviceInstance == null)
+ throw new BadStateException("Service is not created.", state, serviceDescriptor);
+
+ return serviceInstance;
+
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ * @return
+ *
+ */
+ @Override
+ public String toString() {
+ return "ServiceEntry [serviceDescriptor=" + serviceDescriptor.toString() + ", serviceInstance=" + serviceInstance + "]";
+ }
+
+ /**
+ * Create the associated service if not a Lazy Service.
+ *
+ * @throws ServiceException
+ */
+ public void createService() throws ServiceException {
+ checkState(ServiceState.registered);
+ // Exit if already created.
+ if(serviceInstance != null) {
+ setState(ServiceState.created);
+ return;
+ }
+
+ // Create it
+ try {
+ // Create the instance
+ serviceInstance = (IService)instanciateService();
+ } catch (Exception e) {
+ setState(ServiceState.error);
+ throw new ServiceException(e);
+ }
+ setState(ServiceState.created);
+ }
+
+ /**
+ * Start the associated service if not a Lazy Service.
+ *
+ * @param servicesRegistry
+ * The servicesRegistry containing this service.
+ *
+ * @throws ServiceException
+ */
+ public void initService(ServicesRegistry servicesRegistry) throws ServiceException {
+ checkState(ServiceState.created);
+ try {
+ serviceInstance.init(servicesRegistry);
+ } catch (ServiceException e) {
+ setState(ServiceState.error);
+ throw e;
+ } catch (Exception e) {
+ setState(ServiceState.error);
+ throw new ServiceException(e);
+ }
+
+ setState(ServiceState.initialized);
+ }
+
+ /**
+ * Start the associated service if not a Lazy Service.
+ *
+ * @throws ServiceException
+ */
+ public void startService() throws ServiceException {
+
+ checkState(ServiceState.initialized);
+ setState(ServiceState.starting);
+
+ try {
+ serviceInstance.startService();
+ } catch (ServiceException e) {
+ setState(ServiceState.error);
+ throw e;
+ } catch (Exception e) {
+ setState(ServiceState.error);
+ throw new ServiceException(e);
+ }
+
+ setState(ServiceState.started);
+ }
+
+ /**
+ * Dispose the service.
+ */
+ public void disposeService() throws ServiceException {
+ if(serviceInstance == null)
+ return;
+
+ serviceInstance.disposeService();
+ serviceInstance = null;
+ setState(ServiceState.disposed);
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceFactoryEntry.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceFactoryEntry.java
new file mode 100644
index 00000000000..e7386924ac4
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceFactoryEntry.java
@@ -0,0 +1,175 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.internal;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.BadStateException;
+import org.eclipse.papyrus.infra.core.serviceregistry.IServiceFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceDescriptor;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceException;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceState;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry;
+
+/**
+ * Entry of a Service implementing {@link IServiceFactory}. This class provide
+ * methods to manage the Service life cycle.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class ServiceFactoryEntry extends ServiceTypeEntry {
+
+ /** Instance of the service, if started. */
+ private Object serviceInstance;
+
+ /** Instance of the factory, if created. */
+ private IServiceFactory factoryInstance;
+
+ /**
+ * Constructor.
+ *
+ * @param serviceDescriptor
+ * @param registry
+ */
+ public ServiceFactoryEntry(ServiceDescriptor serviceDescriptor) {
+ super(serviceDescriptor);
+ setState(ServiceState.registered);
+
+ }
+
+ /**
+ * Create an entry for an already created service. Constructor.
+ *
+ * @param descriptor
+ * Descriptor of the service. Key and priority should be set.
+ * @param serviceInstance
+ * The service Instance
+ */
+ public ServiceFactoryEntry(ServiceDescriptor descriptor, IServiceFactory factoryInstance) {
+ super(descriptor);
+ this.factoryInstance = factoryInstance;
+ setState(ServiceState.registered);
+ }
+
+ /**
+ * Get the service instance, even if it is not started. The service should
+ * be created.
+ *
+ * @return
+ * @throws ServiceException
+ * If service can't be started.
+ */
+ public Object getServiceInstance() throws ServiceException {
+
+ if(factoryInstance == null) {
+ throw new BadStateException("Service is not available (state="
+ + state.toString()
+ + "). ", state, serviceDescriptor);
+
+ }
+ // Get the service instance if needed.
+ if(serviceInstance == null) {
+ serviceInstance = factoryInstance.createServiceInstance();
+ if(serviceInstance == null) {
+ throw new ServiceException("Service Factory '" + getDescriptor().getKey() + " return a null service. It should return a valid service.");
+ }
+ }
+
+ return serviceInstance;
+
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ * @return
+ *
+ */
+ @Override
+ public String toString() {
+ return "ServiceEntry [serviceDescriptor=" + serviceDescriptor.toString() + ", serviceInstance=" + serviceInstance + "]";
+ }
+
+ /**
+ * Create the associated service if not a Lazy Service.
+ *
+ * @throws ServiceException
+ */
+ public void createService() throws ServiceException {
+ checkState(ServiceState.registered);
+ // Exit if already created.
+ if(factoryInstance != null) {
+ setState(ServiceState.created);
+ return;
+ }
+
+ // Create it
+ try {
+ // Create the instance
+ factoryInstance = (IServiceFactory)instanciateService();
+ } catch (Exception e) {
+ setState(ServiceState.error);
+ throw new ServiceException(e);
+ }
+ setState(ServiceState.created);
+ }
+
+ /**
+ * Start the associated service if not a Lazy Service.
+ *
+ * @param servicesRegistry
+ * The servicesRegistry containing this service.
+ *
+ * @throws ServiceException
+ */
+ public void initService(ServicesRegistry servicesRegistry) throws ServiceException {
+ checkState(ServiceState.created);
+ try {
+ factoryInstance.init(servicesRegistry);
+ } catch (ServiceException e) {
+ setState(ServiceState.error);
+ throw e;
+ } catch (Exception e) {
+ setState(ServiceState.error);
+ throw new ServiceException(e);
+ }
+
+ setState(ServiceState.initialized);
+ }
+
+ /**
+ * Start the associated service if not a Lazy Service.
+ *
+ * @throws ServiceException
+ */
+ public void startService() throws ServiceException {
+
+ checkState(ServiceState.initialized);
+ setState(ServiceState.starting);
+
+ try {
+ factoryInstance.startService();
+ } catch (ServiceException e) {
+ setState(ServiceState.error);
+ throw e;
+ } catch (Exception e) {
+ setState(ServiceState.error);
+ throw new ServiceException(e);
+ }
+
+ setState(ServiceState.started);
+ }
+
+ /**
+ * Dispose the service.
+ */
+ public void disposeService() throws ServiceException {
+ if(factoryInstance == null)
+ return;
+
+ factoryInstance.disposeService();
+ factoryInstance = null;
+ serviceInstance = null;
+ setState(ServiceState.disposed);
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceStartupEntry.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceStartupEntry.java
new file mode 100644
index 00000000000..1eb74a48f1a
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceStartupEntry.java
@@ -0,0 +1,127 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.internal;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceDescriptor;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceException;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceState;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry;
+
+/**
+ * Base class for the different types of service startups (lazy, synchronized).
+ *
+ * @author cedric dumoulin
+ *
+ */
+public abstract class ServiceStartupEntry {
+
+ /**
+ * The ServiceEntry, according to its type.
+ */
+ protected ServiceTypeEntry serviceEntry;
+
+ /**
+ * Entries of Services required by this service.
+ */
+ protected List<ServiceStartupEntry> requiredServices;
+
+ /**
+ *
+ * Constructor.
+ *
+ * @param serviceDescriptor
+ */
+ public ServiceStartupEntry(ServiceTypeEntry serviceEntry) {
+ this.serviceEntry = serviceEntry;
+ }
+
+ /**
+ * Create the associated service if not a Lazy Service.
+ *
+ * @throws ServiceException
+ */
+ abstract public void createService() throws ServiceException;
+
+ /**
+ * Init the associated service if not a Lazy Service.
+ *
+ * @param servicesRegistry
+ * The servicesRegistry containing this service.
+ *
+ * @throws ServiceException
+ */
+ abstract public void initService(ServicesRegistry servicesRegistry) throws ServiceException;
+
+ /**
+ * Start the associated service if not a Lazy Service.
+ *
+ * @throws ServiceException
+ */
+ abstract public void startService() throws ServiceException;
+
+ /**
+ * Get the service instance.
+ *
+ * @return
+ * @throws ServiceException
+ */
+ abstract public Object getServiceInstance() throws ServiceException;
+
+ /**
+ * Dispose associated service.
+ */
+ abstract public void disposeService() throws ServiceException;
+
+ /**
+ * Return the list of the {@link ServiceStartupEntry} required by this
+ * service.
+ *
+ * @return
+ */
+ public Collection<ServiceStartupEntry> getRequiredServices() {
+
+ throw new UnsupportedOperationException("Not yet implemented");
+ // return requiredServices;
+ }
+
+ /**
+ * Get {@link ServiceDescriptor} associated to this entry.
+ *
+ * @return
+ */
+ public ServiceDescriptor getDescriptor() {
+ return serviceEntry.getDescriptor();
+ }
+
+ /**
+ * @return the state of the service
+ */
+ public ServiceState getState() {
+ return serviceEntry.getState();
+ }
+
+ /**
+ * Return true if the service is started. Return false otherwise.
+ *
+ * @return
+ */
+ public boolean isStarted() {
+ return serviceEntry.isStarted();
+ }
+
+ /**
+ *
+ * @see java.lang.Object#toString()
+ *
+ * @return
+ */
+ @Override
+ public String toString() {
+ return super.toString() + ": key=" + getDescriptor().getKey();
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceTypeEntry.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceTypeEntry.java
new file mode 100644
index 00000000000..f84d6fda3f7
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/ServiceTypeEntry.java
@@ -0,0 +1,201 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.internal;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.papyrus.infra.core.serviceregistry.BadStateException;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceDescriptor;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceException;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceState;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry;
+import org.osgi.framework.Bundle;
+
+/**
+ * Base class for the different types of service entries (PoJo, Service,
+ * ServiceFactory, ...).
+ *
+ * @author cedric dumoulin
+ */
+public abstract class ServiceTypeEntry {
+
+ /**
+ * Current state of the service.
+ */
+ protected ServiceState state = ServiceState.registered;
+
+ /**
+ * Descriptor of the service associated to this entry.
+ */
+ protected ServiceDescriptor serviceDescriptor;
+
+ /**
+ *
+ * Constructor.
+ *
+ */
+ public ServiceTypeEntry(ServiceDescriptor serviceDescriptor) {
+ this.serviceDescriptor = serviceDescriptor;
+ }
+
+ /**
+ * Change the state of the service.
+ *
+ * @param newState
+ */
+ protected void setState(ServiceState newState) {
+ state = newState;
+ }
+
+ /**
+ * @return the state
+ */
+ public ServiceState getState() {
+ return state;
+ }
+
+ /**
+ * Check if the current state is the proposed state. Throws an exception if
+ * the state is different.
+ *
+ * @param expectedState
+ * @throws BadStateException
+ */
+ protected void checkState(ServiceState expectedState) throws BadStateException {
+ if(expectedState != state) {
+ throw new BadStateException(expectedState, state, serviceDescriptor);
+ }
+ }
+
+ /**
+ * Get the descriptor of the service associated to this entry.
+ *
+ * @return
+ */
+ public ServiceDescriptor getDescriptor() {
+ return serviceDescriptor;
+ }
+
+ /**
+ * Instanciate the service as specified in serviceClassname.
+ *
+ * @return the created service.
+ * @throws ServiceException
+ */
+ protected Object instanciateService() throws ServiceException {
+
+ // Load the Class of the service
+ String serviceClassname = serviceDescriptor.getServiceClassname();
+ Class<?> classname = loadClass();
+
+ // Try to get the one arg constructor.
+ // This require the ServiceRegistry. Old stuff, not more used.
+ // try {
+ // Constructor<?> constructor =
+ // classname.getConstructor(ServicesRegistry.class);
+ // return constructor.newInstance(registry);
+ // } catch (SecurityException e) {
+ // // Do nothing, try next constructor
+ // } catch (NoSuchMethodException e) {
+ // // Do nothing, try next constructor
+ // } catch (IllegalArgumentException e) {
+ // throw new ServiceException("Can't instanciate '" + serviceClassname +
+ // "' with args ServicesRegistry.", e);
+ // } catch (InstantiationException e) {
+ // throw new ServiceException("Can't instanciate '" + serviceClassname +
+ // "' with args ServicesRegistry.", e);
+ // } catch (IllegalAccessException e) {
+ // throw new ServiceException("Can't instanciate '" + serviceClassname +
+ // "' with args ServicesRegistry.", e);
+ // } catch (InvocationTargetException e) {
+ // throw new ServiceException("Can't instanciate '" + serviceClassname +
+ // "' with args ServicesRegistry.", e);
+ // }
+
+ // Try with zero arg constructor.
+ try {
+ return classname.newInstance();
+ } catch (SecurityException e) {
+ throw new ServiceException("Can't instanciate '" + serviceClassname + "' with zero args.", e);
+ } catch (IllegalArgumentException e) {
+ throw new ServiceException("Can't instanciate '" + serviceClassname + "' with zero args.", e);
+ } catch (InstantiationException e) {
+ throw new ServiceException("Can't instanciate '" + serviceClassname + "' with zero args.", e);
+ } catch (IllegalAccessException e) {
+ throw new ServiceException("Can't instanciate '" + serviceClassname + "' with zero args.", e);
+ }
+ }
+
+ /**
+ * Load the Class object. Try from current ClassLoader, then try using the
+ * plugin referenced in the serviceDescriptor.PluginId
+ *
+ * @return
+ * @throws ServiceException
+ */
+ private Class<?> loadClass() throws ServiceException {
+ String serviceClassname = serviceDescriptor.getServiceClassname();
+ Class<?> serviceClass;
+ try {
+ serviceClass = Class.forName(serviceClassname);
+ } catch (ClassNotFoundException e1) {
+ // Try using bundle
+ try {
+ String bundleID = serviceDescriptor.getClassBundleID();
+ Bundle bundle = Platform.getBundle(bundleID);
+ serviceClass = bundle.loadClass(serviceClassname);
+ } catch (ClassNotFoundException e2) {
+ throw new ServiceException("Can't find class for the name '" + serviceClassname + "'.", e2);
+ }
+ }
+
+ return serviceClass;
+ }
+
+ /**
+ * Return true if the service is started. Return false otherwise.
+ *
+ * @return
+ */
+ public boolean isStarted() {
+ return state == ServiceState.started;
+ }
+
+ /**
+ * Get the service instance.
+ *
+ * @return
+ * @throws ServiceException
+ */
+ abstract public Object getServiceInstance() throws ServiceException;
+
+ /**
+ * Create the associated service if not a Lazy Service.
+ *
+ * @throws ServiceException
+ */
+ abstract public void createService() throws ServiceException;
+
+ /**
+ * Start the associated service if not a Lazy Service.
+ *
+ * @param servicesRegistry
+ * The servicesRegistry containing this service.
+ *
+ * @throws ServiceException
+ */
+ abstract public void initService(ServicesRegistry servicesRegistry) throws ServiceException;
+
+ /**
+ * Start the associated service if not a Lazy Service.
+ *
+ * @throws ServiceException
+ */
+ abstract public void startService() throws ServiceException;
+
+ /**
+ * Dispose associated service.
+ */
+ abstract public void disposeService() throws ServiceException;
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/StartStartupEntry.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/StartStartupEntry.java
new file mode 100644
index 00000000000..931119a8449
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/internal/StartStartupEntry.java
@@ -0,0 +1,84 @@
+/**
+ *
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.internal;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.IService;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServiceException;
+import org.eclipse.papyrus.infra.core.serviceregistry.ServicesRegistry;
+
+/**
+ * An ServiceEntry managing {@link IService} that should be started when the
+ * registry is started.
+ *
+ * @author cedric dumoulin
+ *
+ */
+public class StartStartupEntry extends ServiceStartupEntry {
+
+ /**
+ * Constructor.
+ *
+ * @param serviceDescriptor
+ * @param registry
+ */
+ public StartStartupEntry(ServiceTypeEntry serviceEntry) {
+
+ super(serviceEntry);
+ }
+
+ /**
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.internal.ServiceStartupEntry#getServiceInstance()
+ *
+ * @return
+ * @throws ServiceException
+ */
+ @Override
+ public Object getServiceInstance() throws ServiceException {
+ // Return the instance
+ return serviceEntry.getServiceInstance();
+ }
+
+ /**
+ * Do nothing
+ *
+ * @throws ServiceException
+ */
+ @Override
+ public void createService() throws ServiceException {
+ serviceEntry.createService();
+ }
+
+ /**
+ * Do nothing
+ *
+ * @param servicesRegistry
+ * @throws ServiceException
+ */
+ @Override
+ public void initService(ServicesRegistry servicesRegistry) throws ServiceException {
+ serviceEntry.initService(servicesRegistry);
+ }
+
+ /**
+ * Do nothing.
+ *
+ * @throws ServiceException
+ */
+ @Override
+ public void startService() throws ServiceException {
+ serviceEntry.startService();
+ }
+
+ /**
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.AbstractServiceEntry#disposeService()
+ *
+ * @throws ServiceException
+ */
+ @Override
+ public void disposeService() throws ServiceException {
+ serviceEntry.disposeService();
+ }
+
+}
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/AbstractMethodInjection.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/AbstractMethodInjection.java
new file mode 100644
index 00000000000..b53b2c7ef7f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/AbstractMethodInjection.java
@@ -0,0 +1,40 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Abstract Method Injection</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractMethodInjection#getParameters <em>Parameters</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getAbstractMethodInjection()
+ * @model abstract="true"
+ * @generated
+ */
+public interface AbstractMethodInjection extends FeatureInjection {
+ /**
+ * Returns the value of the '<em><b>Parameters</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Parameters</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>Parameters</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getAbstractMethodInjection_Parameters()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<ParameterInjection> getParameters();
+
+} // AbstractMethodInjection
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/AbstractServiceDesc.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/AbstractServiceDesc.java
new file mode 100644
index 00000000000..6ca17126c5d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/AbstractServiceDesc.java
@@ -0,0 +1,196 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Abstract Service Desc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getDependsOn <em>Depends On</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getDescription <em>Description</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getPriority <em>Priority</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getBundleID <em>Bundle ID</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getParent <em>Parent</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getDependsOnIds <em>Depends On Ids</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getAbstractServiceDesc()
+ * @model abstract="true"
+ * @generated
+ */
+public interface AbstractServiceDesc 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.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getAbstractServiceDesc_Name()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#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>Depends On</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Depends On</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>Depends On</em>' reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getAbstractServiceDesc_DependsOn()
+ * @model ordered="false"
+ * @generated
+ */
+ EList<AbstractServiceDesc> getDependsOn();
+
+ /**
+ * Returns the value of the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Description</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Description</em>' attribute.
+ * @see #setDescription(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getAbstractServiceDesc_Description()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getDescription();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getDescription <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Description</em>' attribute.
+ * @see #getDescription()
+ * @generated
+ */
+ void setDescription(String value);
+
+ /**
+ * Returns the value of the '<em><b>Priority</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Priority</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Priority</em>' attribute.
+ * @see #setPriority(int)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getAbstractServiceDesc_Priority()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.int" required="true" ordered="false"
+ * @generated
+ */
+ int getPriority();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getPriority <em>Priority</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Priority</em>' attribute.
+ * @see #getPriority()
+ * @generated
+ */
+ void setPriority(int value);
+
+ /**
+ * Returns the value of the '<em><b>Bundle ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Bundle ID</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Bundle ID</em>' attribute.
+ * @see #setBundleID(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getAbstractServiceDesc_BundleID()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getBundleID();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getBundleID <em>Bundle ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Bundle ID</em>' attribute.
+ * @see #getBundleID()
+ * @generated
+ */
+ void setBundleID(String value);
+
+ /**
+ * Returns the value of the '<em><b>Parent</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getOwnedServices <em>Owned Services</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(ServiceSetDesc)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getAbstractServiceDesc_Parent()
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getOwnedServices
+ * @model opposite="ownedServices" required="true" transient="false" ordered="false"
+ * @generated
+ */
+ ServiceSetDesc getParent();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#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(ServiceSetDesc value);
+
+ /**
+ * Returns the value of the '<em><b>Depends On Ids</b></em>' attribute list.
+ * The list contents are of type {@link java.lang.String}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Depends On Ids</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>Depends On Ids</em>' attribute list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getAbstractServiceDesc_DependsOnIds()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String"
+ * @generated
+ */
+ EList<String> getDependsOnIds();
+
+} // AbstractServiceDesc
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/AliasDesc.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/AliasDesc.java
new file mode 100644
index 00000000000..1299140e88f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/AliasDesc.java
@@ -0,0 +1,76 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Alias Desc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc#getAliasedService <em>Aliased Service</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc#getAliasedServiceId <em>Aliased Service Id</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getAliasDesc()
+ * @model
+ * @generated
+ */
+public interface AliasDesc extends AbstractServiceDesc {
+ /**
+ * Returns the value of the '<em><b>Aliased Service</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Aliased Service</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Aliased Service</em>' reference.
+ * @see #setAliasedService(ServiceDesc)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getAliasDesc_AliasedService()
+ * @model required="true" ordered="false"
+ * @generated
+ */
+ ServiceDesc getAliasedService();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc#getAliasedService <em>Aliased Service</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Aliased Service</em>' reference.
+ * @see #getAliasedService()
+ * @generated
+ */
+ void setAliasedService(ServiceDesc value);
+
+ /**
+ * Returns the value of the '<em><b>Aliased Service Id</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Aliased Service Id</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Aliased Service Id</em>' attribute.
+ * @see #setAliasedServiceId(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getAliasDesc_AliasedServiceId()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getAliasedServiceId();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc#getAliasedServiceId <em>Aliased Service Id</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Aliased Service Id</em>' attribute.
+ * @see #getAliasedServiceId()
+ * @generated
+ */
+ void setAliasedServiceId(String value);
+
+} // AliasDesc
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ConstructorInjection.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ConstructorInjection.java
new file mode 100644
index 00000000000..bea8cd843e3
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ConstructorInjection.java
@@ -0,0 +1,17 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Constructor Injection</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getConstructorInjection()
+ * @model
+ * @generated
+ */
+public interface ConstructorInjection extends AbstractMethodInjection {
+} // ConstructorInjection
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/Descriptors.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/Descriptors.java
new file mode 100644
index 00000000000..64dc26139bc
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/Descriptors.java
@@ -0,0 +1,75 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Descriptors</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors#getRegistries <em>Registries</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors#getServiceSets <em>Service Sets</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getDescriptors()
+ * @model
+ * @generated
+ */
+public interface Descriptors extends EObject {
+ /**
+ * Returns the value of the '<em><b>Registries</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Registries</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>Registries</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getDescriptors_Registries()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<RegistryDesc> getRegistries();
+
+ /**
+ * Returns the value of the '<em><b>Service Sets</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Service Sets</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>Service Sets</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getDescriptors_ServiceSets()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<ServiceSetDesc> getServiceSets();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model required="true" ordered="false" nameDataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" nameRequired="true" nameOrdered="false"
+ * @generated
+ */
+ RegistryDesc getRegistryDesc(String name);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model required="true" ordered="false" nameDataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" nameRequired="true" nameOrdered="false"
+ * @generated
+ */
+ ServiceSetDesc getServiceSetDesc(String name);
+
+} // Descriptors
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/FeatureInjection.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/FeatureInjection.java
new file mode 100644
index 00000000000..d3c30d22efb
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/FeatureInjection.java
@@ -0,0 +1,50 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Feature Injection</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection#getDescription <em>Description</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getFeatureInjection()
+ * @model abstract="true"
+ * @generated
+ */
+public interface FeatureInjection extends EObject {
+ /**
+ * Returns the value of the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Description</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Description</em>' attribute.
+ * @see #setDescription(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getFeatureInjection_Description()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getDescription();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection#getDescription <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Description</em>' attribute.
+ * @see #getDescription()
+ * @generated
+ */
+ void setDescription(String value);
+
+} // FeatureInjection
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/InjectedService.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/InjectedService.java
new file mode 100644
index 00000000000..20e70c08f22
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/InjectedService.java
@@ -0,0 +1,49 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Injected Service</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService#getService <em>Service</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getInjectedService()
+ * @model
+ * @generated
+ */
+public interface InjectedService extends InjectedValue {
+ /**
+ * Returns the value of the '<em><b>Service</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Service</em>' reference isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Service</em>' reference.
+ * @see #setService(AbstractServiceDesc)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getInjectedService_Service()
+ * @model required="true" ordered="false"
+ * @generated
+ */
+ AbstractServiceDesc getService();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService#getService <em>Service</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Service</em>' reference.
+ * @see #getService()
+ * @generated
+ */
+ void setService(AbstractServiceDesc value);
+
+} // InjectedService
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/InjectedValue.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/InjectedValue.java
new file mode 100644
index 00000000000..227c1e4d1f7
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/InjectedValue.java
@@ -0,0 +1,50 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Injected Value</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue#getDescription <em>Description</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getInjectedValue()
+ * @model abstract="true"
+ * @generated
+ */
+public interface InjectedValue extends EObject {
+ /**
+ * Returns the value of the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Description</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Description</em>' attribute.
+ * @see #setDescription(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getInjectedValue_Description()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getDescription();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue#getDescription <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Description</em>' attribute.
+ * @see #getDescription()
+ * @generated
+ */
+ void setDescription(String value);
+
+} // InjectedValue
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/MethodInjection.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/MethodInjection.java
new file mode 100644
index 00000000000..293d8f4e759
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/MethodInjection.java
@@ -0,0 +1,49 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Method Injection</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection#getMethodName <em>Method Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getMethodInjection()
+ * @model
+ * @generated
+ */
+public interface MethodInjection extends AbstractMethodInjection {
+ /**
+ * Returns the value of the '<em><b>Method Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Method 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>Method Name</em>' attribute.
+ * @see #setMethodName(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getMethodInjection_MethodName()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getMethodName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection#getMethodName <em>Method Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Method Name</em>' attribute.
+ * @see #getMethodName()
+ * @generated
+ */
+ void setMethodName(String value);
+
+} // MethodInjection
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/OpaqueInjectedValue.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/OpaqueInjectedValue.java
new file mode 100644
index 00000000000..04a871266fe
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/OpaqueInjectedValue.java
@@ -0,0 +1,49 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Opaque Injected Value</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getOpaqueInjectedValue()
+ * @model
+ * @generated
+ */
+public interface OpaqueInjectedValue extends InjectedValue {
+ /**
+ * Returns the value of the '<em><b>Value</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Value</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Value</em>' attribute.
+ * @see #setValue(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getOpaqueInjectedValue_Value()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getValue();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue#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);
+
+} // OpaqueInjectedValue
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ParameterInjection.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ParameterInjection.java
new file mode 100644
index 00000000000..0222dddae80
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ParameterInjection.java
@@ -0,0 +1,69 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Parameter Injection</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection#getParameterName <em>Parameter Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection#getValues <em>Values</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getParameterInjection()
+ * @model
+ * @generated
+ */
+public interface ParameterInjection extends EObject {
+ /**
+ * Returns the value of the '<em><b>Parameter Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Parameter 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>Parameter Name</em>' attribute.
+ * @see #setParameterName(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getParameterInjection_ParameterName()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getParameterName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection#getParameterName <em>Parameter Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Parameter Name</em>' attribute.
+ * @see #getParameterName()
+ * @generated
+ */
+ void setParameterName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Values</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Values</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>Values</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getParameterInjection_Values()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<InjectedValue> getValues();
+
+} // ParameterInjection
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/PropertyInjection.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/PropertyInjection.java
new file mode 100644
index 00000000000..2d682703bb1
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/PropertyInjection.java
@@ -0,0 +1,67 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Property Injection</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection#getPropertyName <em>Property Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection#getValues <em>Values</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getPropertyInjection()
+ * @model
+ * @generated
+ */
+public interface PropertyInjection extends FeatureInjection {
+ /**
+ * Returns the value of the '<em><b>Property Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Property 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>Property Name</em>' attribute.
+ * @see #setPropertyName(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getPropertyInjection_PropertyName()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getPropertyName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection#getPropertyName <em>Property Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Property Name</em>' attribute.
+ * @see #getPropertyName()
+ * @generated
+ */
+ void setPropertyName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Values</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Values</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>Values</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getPropertyInjection_Values()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<InjectedValue> getValues();
+
+} // PropertyInjection
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/RegistryDesc.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/RegistryDesc.java
new file mode 100644
index 00000000000..36c2f50bca1
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/RegistryDesc.java
@@ -0,0 +1,227 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Registry Desc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getParents <em>Parents</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getChildren <em>Children</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getExtends <em>Extends</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getDescription <em>Description</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getServiceSets <em>Service Sets</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#isUnique <em>Is Unique</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getServices <em>Services</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getRegistryDesc()
+ * @model
+ * @generated
+ */
+public interface RegistryDesc 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.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getRegistryDesc_Name()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#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>Parents</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getChildren <em>Children</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Parents</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>Parents</em>' reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getRegistryDesc_Parents()
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getChildren
+ * @model opposite="children" ordered="false"
+ * @generated
+ */
+ EList<RegistryDesc> getParents();
+
+ /**
+ * Returns the value of the '<em><b>Children</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getParents <em>Parents</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Children</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>Children</em>' reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getRegistryDesc_Children()
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getParents
+ * @model opposite="parents" ordered="false"
+ * @generated
+ */
+ EList<RegistryDesc> getChildren();
+
+ /**
+ * Returns the value of the '<em><b>Extends</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Extends</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>Extends</em>' reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getRegistryDesc_Extends()
+ * @model ordered="false"
+ * @generated
+ */
+ EList<RegistryDesc> getExtends();
+
+ /**
+ * Returns the value of the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Description</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Description</em>' attribute.
+ * @see #setDescription(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getRegistryDesc_Description()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getDescription();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getDescription <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Description</em>' attribute.
+ * @see #getDescription()
+ * @generated
+ */
+ void setDescription(String value);
+
+ /**
+ * Returns the value of the '<em><b>Service Sets</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Service Sets</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>Service Sets</em>' reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getRegistryDesc_ServiceSets()
+ * @model ordered="false"
+ * @generated
+ */
+ EList<ServiceSetDesc> getServiceSets();
+
+ /**
+ * Returns the value of the '<em><b>Is Unique</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Is Unique</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Is Unique</em>' attribute.
+ * @see #setIsUnique(boolean)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getRegistryDesc_IsUnique()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.boolean" required="true" ordered="false"
+ * @generated
+ */
+ boolean isUnique();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#isUnique <em>Is Unique</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Is Unique</em>' attribute.
+ * @see #isUnique()
+ * @generated
+ */
+ void setIsUnique(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Services</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Services</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>Services</em>' reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getRegistryDesc_Services()
+ * @model ordered="false"
+ * @generated
+ */
+ EList<AbstractServiceDesc> getServices();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model required="true" ordered="false" serviceIdDataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" serviceIdRequired="true" serviceIdOrdered="false"
+ * @generated
+ */
+ AbstractServiceDesc getServiceDesc(String serviceId);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model required="true" ordered="false" serviceSetsIdDataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" serviceSetsIdRequired="true" serviceSetsIdOrdered="false"
+ * @generated
+ */
+ ServiceSetDesc getServiceSetDesc(String serviceSetsId);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.boolean" required="true" ordered="false" serviceIdDataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" serviceIdRequired="true" serviceIdOrdered="false"
+ * @generated
+ */
+ boolean servicesContains(String serviceId);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.boolean" required="true" ordered="false" serviceSetsIdDataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" serviceSetsIdRequired="true" serviceSetsIdOrdered="false"
+ * @generated
+ */
+ boolean serviceSetsContains(String serviceSetsId);
+
+} // RegistryDesc
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServiceDesc.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServiceDesc.java
new file mode 100644
index 00000000000..a6dcd1f8057
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServiceDesc.java
@@ -0,0 +1,98 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Service Desc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc#getStartKind <em>Start Kind</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc#getClassname <em>Classname</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc#getInjections <em>Injections</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getServiceDesc()
+ * @model
+ * @generated
+ */
+public interface ServiceDesc extends AbstractServiceDesc {
+ /**
+ * Returns the value of the '<em><b>Start Kind</b></em>' attribute.
+ * The default value is <code>"lazy"</code>.
+ * The literals are from the enumeration {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.StartupKind}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Start 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>Start Kind</em>' attribute.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.StartupKind
+ * @see #setStartKind(StartupKind)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getServiceDesc_StartKind()
+ * @model default="lazy" required="true" ordered="false"
+ * @generated
+ */
+ StartupKind getStartKind();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc#getStartKind <em>Start Kind</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Start Kind</em>' attribute.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.StartupKind
+ * @see #getStartKind()
+ * @generated
+ */
+ void setStartKind(StartupKind value);
+
+ /**
+ * Returns the value of the '<em><b>Classname</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Classname</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Classname</em>' attribute.
+ * @see #setClassname(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getServiceDesc_Classname()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getClassname();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc#getClassname <em>Classname</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Classname</em>' attribute.
+ * @see #getClassname()
+ * @generated
+ */
+ void setClassname(String value);
+
+ /**
+ * Returns the value of the '<em><b>Injections</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Injections</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>Injections</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getServiceDesc_Injections()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<FeatureInjection> getInjections();
+
+} // ServiceDesc
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServiceFactoryDesc.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServiceFactoryDesc.java
new file mode 100644
index 00000000000..140af1b1b50
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServiceFactoryDesc.java
@@ -0,0 +1,17 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Service Factory Desc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getServiceFactoryDesc()
+ * @model
+ * @generated
+ */
+public interface ServiceFactoryDesc extends ServiceDesc {
+} // ServiceFactoryDesc
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServiceSetDesc.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServiceSetDesc.java
new file mode 100644
index 00000000000..206e2e24386
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServiceSetDesc.java
@@ -0,0 +1,148 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Service Set Desc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getServices <em>Services</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getOwnedServices <em>Owned Services</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getExtends <em>Extends</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getDescription <em>Description</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getServiceSetDesc()
+ * @model
+ * @generated
+ */
+public interface ServiceSetDesc extends EObject {
+ /**
+ * Returns the value of the '<em><b>Services</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Services</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>Services</em>' reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getServiceSetDesc_Services()
+ * @model ordered="false"
+ * @generated
+ */
+ EList<AbstractServiceDesc> getServices();
+
+ /**
+ * Returns the value of the '<em><b>Owned Services</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getParent <em>Parent</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Owned Services</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>Owned Services</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getServiceSetDesc_OwnedServices()
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getParent
+ * @model opposite="parent" containment="true" ordered="false"
+ * @generated
+ */
+ EList<AbstractServiceDesc> getOwnedServices();
+
+ /**
+ * 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.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getServiceSetDesc_Name()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#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>Extends</b></em>' reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Extends</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>Extends</em>' reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getServiceSetDesc_Extends()
+ * @model ordered="false"
+ * @generated
+ */
+ EList<ServiceSetDesc> getExtends();
+
+ /**
+ * Returns the value of the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Description</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Description</em>' attribute.
+ * @see #setDescription(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getServiceSetDesc_Description()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" required="true" ordered="false"
+ * @generated
+ */
+ String getDescription();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getDescription <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Description</em>' attribute.
+ * @see #getDescription()
+ * @generated
+ */
+ void setDescription(String value);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model required="true" ordered="false" serviceIdDataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" serviceIdRequired="true" serviceIdOrdered="false"
+ * @generated
+ */
+ AbstractServiceDesc getServiceDesc(String serviceId);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.boolean" required="true" ordered="false" serviceIdDataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.String" serviceIdRequired="true" serviceIdOrdered="false"
+ * @generated
+ */
+ boolean servicesContains(String serviceId);
+
+} // ServiceSetDesc
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServicedescriptorsFactory.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServicedescriptorsFactory.java
new file mode 100644
index 00000000000..4b9c0fcf8cd
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServicedescriptorsFactory.java
@@ -0,0 +1,141 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage
+ * @generated
+ */
+public interface ServicedescriptorsFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ ServicedescriptorsFactory eINSTANCE = org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsFactoryImpl.init();
+
+ /**
+ * Returns a new object of class '<em>Registry Desc</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Registry Desc</em>'.
+ * @generated
+ */
+ RegistryDesc createRegistryDesc();
+
+ /**
+ * Returns a new object of class '<em>Service Set Desc</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Service Set Desc</em>'.
+ * @generated
+ */
+ ServiceSetDesc createServiceSetDesc();
+
+ /**
+ * Returns a new object of class '<em>Service Desc</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Service Desc</em>'.
+ * @generated
+ */
+ ServiceDesc createServiceDesc();
+
+ /**
+ * Returns a new object of class '<em>Alias Desc</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Alias Desc</em>'.
+ * @generated
+ */
+ AliasDesc createAliasDesc();
+
+ /**
+ * Returns a new object of class '<em>Descriptors</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Descriptors</em>'.
+ * @generated
+ */
+ Descriptors createDescriptors();
+
+ /**
+ * Returns a new object of class '<em>Property Injection</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Property Injection</em>'.
+ * @generated
+ */
+ PropertyInjection createPropertyInjection();
+
+ /**
+ * Returns a new object of class '<em>Method Injection</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Method Injection</em>'.
+ * @generated
+ */
+ MethodInjection createMethodInjection();
+
+ /**
+ * Returns a new object of class '<em>Parameter Injection</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Parameter Injection</em>'.
+ * @generated
+ */
+ ParameterInjection createParameterInjection();
+
+ /**
+ * Returns a new object of class '<em>Injected Service</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Injected Service</em>'.
+ * @generated
+ */
+ InjectedService createInjectedService();
+
+ /**
+ * Returns a new object of class '<em>Opaque Injected Value</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Opaque Injected Value</em>'.
+ * @generated
+ */
+ OpaqueInjectedValue createOpaqueInjectedValue();
+
+ /**
+ * Returns a new object of class '<em>Constructor Injection</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Constructor Injection</em>'.
+ * @generated
+ */
+ ConstructorInjection createConstructorInjection();
+
+ /**
+ * Returns a new object of class '<em>Service Factory Desc</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Service Factory Desc</em>'.
+ * @generated
+ */
+ ServiceFactoryDesc createServiceFactoryDesc();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
+ ServicedescriptorsPackage getServicedescriptorsPackage();
+
+} //ServicedescriptorsFactory
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServicedescriptorsPackage.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServicedescriptorsPackage.java
new file mode 100644
index 00000000000..4afe5af19ec
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/ServicedescriptorsPackage.java
@@ -0,0 +1,2150 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+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.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 enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ServicedescriptorsPackage extends EPackage {
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNAME = "servicedescriptors";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_URI = "org.eclipse.papyrus..infra.core.servicedescriptors";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_PREFIX = "org.eclipse.papyrus..infra.core.serviceregistry.servicedescriptors";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ ServicedescriptorsPackage eINSTANCE = org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.RegistryDescImpl <em>Registry Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.RegistryDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getRegistryDesc()
+ * @generated
+ */
+ int REGISTRY_DESC = 0;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_DESC__NAME = 0;
+
+ /**
+ * The feature id for the '<em><b>Parents</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_DESC__PARENTS = 1;
+
+ /**
+ * The feature id for the '<em><b>Children</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_DESC__CHILDREN = 2;
+
+ /**
+ * The feature id for the '<em><b>Extends</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_DESC__EXTENDS = 3;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_DESC__DESCRIPTION = 4;
+
+ /**
+ * The feature id for the '<em><b>Service Sets</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_DESC__SERVICE_SETS = 5;
+
+ /**
+ * The feature id for the '<em><b>Is Unique</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_DESC__IS_UNIQUE = 6;
+
+ /**
+ * The feature id for the '<em><b>Services</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_DESC__SERVICES = 7;
+
+ /**
+ * The number of structural features of the '<em>Registry Desc</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_DESC_FEATURE_COUNT = 8;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceSetDescImpl <em>Service Set Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceSetDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getServiceSetDesc()
+ * @generated
+ */
+ int SERVICE_SET_DESC = 1;
+
+ /**
+ * The feature id for the '<em><b>Services</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_SET_DESC__SERVICES = 0;
+
+ /**
+ * The feature id for the '<em><b>Owned Services</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_SET_DESC__OWNED_SERVICES = 1;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_SET_DESC__NAME = 2;
+
+ /**
+ * The feature id for the '<em><b>Extends</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_SET_DESC__EXTENDS = 3;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_SET_DESC__DESCRIPTION = 4;
+
+ /**
+ * The number of structural features of the '<em>Service Set Desc</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_SET_DESC_FEATURE_COUNT = 5;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractServiceDescImpl <em>Abstract Service Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractServiceDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getAbstractServiceDesc()
+ * @generated
+ */
+ int ABSTRACT_SERVICE_DESC = 2;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_DESC__NAME = 0;
+
+ /**
+ * The feature id for the '<em><b>Depends On</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_DESC__DEPENDS_ON = 1;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_DESC__DESCRIPTION = 2;
+
+ /**
+ * The feature id for the '<em><b>Priority</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_DESC__PRIORITY = 3;
+
+ /**
+ * The feature id for the '<em><b>Bundle ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_DESC__BUNDLE_ID = 4;
+
+ /**
+ * The feature id for the '<em><b>Parent</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_DESC__PARENT = 5;
+
+ /**
+ * The feature id for the '<em><b>Depends On Ids</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_DESC__DEPENDS_ON_IDS = 6;
+
+ /**
+ * The number of structural features of the '<em>Abstract Service Desc</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_DESC_FEATURE_COUNT = 7;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceDescImpl <em>Service Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getServiceDesc()
+ * @generated
+ */
+ int SERVICE_DESC = 3;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_DESC__NAME = ABSTRACT_SERVICE_DESC__NAME;
+
+ /**
+ * The feature id for the '<em><b>Depends On</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_DESC__DEPENDS_ON = ABSTRACT_SERVICE_DESC__DEPENDS_ON;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_DESC__DESCRIPTION = ABSTRACT_SERVICE_DESC__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Priority</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_DESC__PRIORITY = ABSTRACT_SERVICE_DESC__PRIORITY;
+
+ /**
+ * The feature id for the '<em><b>Bundle ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_DESC__BUNDLE_ID = ABSTRACT_SERVICE_DESC__BUNDLE_ID;
+
+ /**
+ * The feature id for the '<em><b>Parent</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_DESC__PARENT = ABSTRACT_SERVICE_DESC__PARENT;
+
+ /**
+ * The feature id for the '<em><b>Depends On Ids</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_DESC__DEPENDS_ON_IDS = ABSTRACT_SERVICE_DESC__DEPENDS_ON_IDS;
+
+ /**
+ * The feature id for the '<em><b>Start Kind</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_DESC__START_KIND = ABSTRACT_SERVICE_DESC_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Classname</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_DESC__CLASSNAME = ABSTRACT_SERVICE_DESC_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Injections</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_DESC__INJECTIONS = ABSTRACT_SERVICE_DESC_FEATURE_COUNT + 2;
+
+ /**
+ * The number of structural features of the '<em>Service Desc</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_DESC_FEATURE_COUNT = ABSTRACT_SERVICE_DESC_FEATURE_COUNT + 3;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.FeatureInjectionImpl <em>Feature Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.FeatureInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getFeatureInjection()
+ * @generated
+ */
+ int FEATURE_INJECTION = 4;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEATURE_INJECTION__DESCRIPTION = 0;
+
+ /**
+ * The number of structural features of the '<em>Feature Injection</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEATURE_INJECTION_FEATURE_COUNT = 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AliasDescImpl <em>Alias Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AliasDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getAliasDesc()
+ * @generated
+ */
+ int ALIAS_DESC = 5;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_DESC__NAME = ABSTRACT_SERVICE_DESC__NAME;
+
+ /**
+ * The feature id for the '<em><b>Depends On</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_DESC__DEPENDS_ON = ABSTRACT_SERVICE_DESC__DEPENDS_ON;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_DESC__DESCRIPTION = ABSTRACT_SERVICE_DESC__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Priority</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_DESC__PRIORITY = ABSTRACT_SERVICE_DESC__PRIORITY;
+
+ /**
+ * The feature id for the '<em><b>Bundle ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_DESC__BUNDLE_ID = ABSTRACT_SERVICE_DESC__BUNDLE_ID;
+
+ /**
+ * The feature id for the '<em><b>Parent</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_DESC__PARENT = ABSTRACT_SERVICE_DESC__PARENT;
+
+ /**
+ * The feature id for the '<em><b>Depends On Ids</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_DESC__DEPENDS_ON_IDS = ABSTRACT_SERVICE_DESC__DEPENDS_ON_IDS;
+
+ /**
+ * The feature id for the '<em><b>Aliased Service</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_DESC__ALIASED_SERVICE = ABSTRACT_SERVICE_DESC_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Aliased Service Id</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_DESC__ALIASED_SERVICE_ID = ABSTRACT_SERVICE_DESC_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the '<em>Alias Desc</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_DESC_FEATURE_COUNT = ABSTRACT_SERVICE_DESC_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.DescriptorsImpl <em>Descriptors</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.DescriptorsImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getDescriptors()
+ * @generated
+ */
+ int DESCRIPTORS = 6;
+
+ /**
+ * The feature id for the '<em><b>Registries</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DESCRIPTORS__REGISTRIES = 0;
+
+ /**
+ * The feature id for the '<em><b>Service Sets</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DESCRIPTORS__SERVICE_SETS = 1;
+
+ /**
+ * The number of structural features of the '<em>Descriptors</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DESCRIPTORS_FEATURE_COUNT = 2;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.PropertyInjectionImpl <em>Property Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.PropertyInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getPropertyInjection()
+ * @generated
+ */
+ int PROPERTY_INJECTION = 7;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_INJECTION__DESCRIPTION = FEATURE_INJECTION__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Property Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_INJECTION__PROPERTY_NAME = FEATURE_INJECTION_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Values</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_INJECTION__VALUES = FEATURE_INJECTION_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the '<em>Property Injection</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_INJECTION_FEATURE_COUNT = FEATURE_INJECTION_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.InjectedValueImpl <em>Injected Value</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.InjectedValueImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getInjectedValue()
+ * @generated
+ */
+ int INJECTED_VALUE = 8;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INJECTED_VALUE__DESCRIPTION = 0;
+
+ /**
+ * The number of structural features of the '<em>Injected Value</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INJECTED_VALUE_FEATURE_COUNT = 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractMethodInjectionImpl <em>Abstract Method Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractMethodInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getAbstractMethodInjection()
+ * @generated
+ */
+ int ABSTRACT_METHOD_INJECTION = 10;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_METHOD_INJECTION__DESCRIPTION = FEATURE_INJECTION__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_METHOD_INJECTION__PARAMETERS = FEATURE_INJECTION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>Abstract Method Injection</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_METHOD_INJECTION_FEATURE_COUNT = FEATURE_INJECTION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.MethodInjectionImpl <em>Method Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.MethodInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getMethodInjection()
+ * @generated
+ */
+ int METHOD_INJECTION = 9;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int METHOD_INJECTION__DESCRIPTION = ABSTRACT_METHOD_INJECTION__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int METHOD_INJECTION__PARAMETERS = ABSTRACT_METHOD_INJECTION__PARAMETERS;
+
+ /**
+ * The feature id for the '<em><b>Method Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int METHOD_INJECTION__METHOD_NAME = ABSTRACT_METHOD_INJECTION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>Method Injection</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int METHOD_INJECTION_FEATURE_COUNT = ABSTRACT_METHOD_INJECTION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ParameterInjectionImpl <em>Parameter Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ParameterInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getParameterInjection()
+ * @generated
+ */
+ int PARAMETER_INJECTION = 11;
+
+ /**
+ * The feature id for the '<em><b>Parameter Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PARAMETER_INJECTION__PARAMETER_NAME = 0;
+
+ /**
+ * The feature id for the '<em><b>Values</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PARAMETER_INJECTION__VALUES = 1;
+
+ /**
+ * The number of structural features of the '<em>Parameter Injection</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PARAMETER_INJECTION_FEATURE_COUNT = 2;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.InjectedServiceImpl <em>Injected Service</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.InjectedServiceImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getInjectedService()
+ * @generated
+ */
+ int INJECTED_SERVICE = 12;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INJECTED_SERVICE__DESCRIPTION = INJECTED_VALUE__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Service</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INJECTED_SERVICE__SERVICE = INJECTED_VALUE_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>Injected Service</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INJECTED_SERVICE_FEATURE_COUNT = INJECTED_VALUE_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.OpaqueInjectedValueImpl <em>Opaque Injected Value</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.OpaqueInjectedValueImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getOpaqueInjectedValue()
+ * @generated
+ */
+ int OPAQUE_INJECTED_VALUE = 13;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int OPAQUE_INJECTED_VALUE__DESCRIPTION = INJECTED_VALUE__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Value</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int OPAQUE_INJECTED_VALUE__VALUE = INJECTED_VALUE_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>Opaque Injected Value</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int OPAQUE_INJECTED_VALUE_FEATURE_COUNT = INJECTED_VALUE_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ConstructorInjectionImpl <em>Constructor Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ConstructorInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getConstructorInjection()
+ * @generated
+ */
+ int CONSTRUCTOR_INJECTION = 14;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CONSTRUCTOR_INJECTION__DESCRIPTION = ABSTRACT_METHOD_INJECTION__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CONSTRUCTOR_INJECTION__PARAMETERS = ABSTRACT_METHOD_INJECTION__PARAMETERS;
+
+ /**
+ * The number of structural features of the '<em>Constructor Injection</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CONSTRUCTOR_INJECTION_FEATURE_COUNT = ABSTRACT_METHOD_INJECTION_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceFactoryDescImpl <em>Service Factory Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceFactoryDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getServiceFactoryDesc()
+ * @generated
+ */
+ int SERVICE_FACTORY_DESC = 15;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_DESC__NAME = SERVICE_DESC__NAME;
+
+ /**
+ * The feature id for the '<em><b>Depends On</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_DESC__DEPENDS_ON = SERVICE_DESC__DEPENDS_ON;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_DESC__DESCRIPTION = SERVICE_DESC__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Priority</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_DESC__PRIORITY = SERVICE_DESC__PRIORITY;
+
+ /**
+ * The feature id for the '<em><b>Bundle ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_DESC__BUNDLE_ID = SERVICE_DESC__BUNDLE_ID;
+
+ /**
+ * The feature id for the '<em><b>Parent</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_DESC__PARENT = SERVICE_DESC__PARENT;
+
+ /**
+ * The feature id for the '<em><b>Depends On Ids</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_DESC__DEPENDS_ON_IDS = SERVICE_DESC__DEPENDS_ON_IDS;
+
+ /**
+ * The feature id for the '<em><b>Start Kind</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_DESC__START_KIND = SERVICE_DESC__START_KIND;
+
+ /**
+ * The feature id for the '<em><b>Classname</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_DESC__CLASSNAME = SERVICE_DESC__CLASSNAME;
+
+ /**
+ * The feature id for the '<em><b>Injections</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_DESC__INJECTIONS = SERVICE_DESC__INJECTIONS;
+
+ /**
+ * The number of structural features of the '<em>Service Factory Desc</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_DESC_FEATURE_COUNT = SERVICE_DESC_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.StartupKind <em>Startup Kind</em>}' enum.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.StartupKind
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getStartupKind()
+ * @generated
+ */
+ int STARTUP_KIND = 16;
+
+ /**
+ * The meta object id for the '<em>String</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see java.lang.String
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getString()
+ * @generated
+ */
+ int STRING = 17;
+
+ /**
+ * The meta object id for the '<em>boolean</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getboolean()
+ * @generated
+ */
+ int BOOLEAN = 18;
+
+ /**
+ * The meta object id for the '<em>int</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getint()
+ * @generated
+ */
+ int INT = 19;
+
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc <em>Registry Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Registry Desc</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc
+ * @generated
+ */
+ EClass getRegistryDesc();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getName()
+ * @see #getRegistryDesc()
+ * @generated
+ */
+ EAttribute getRegistryDesc_Name();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getParents <em>Parents</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Parents</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getParents()
+ * @see #getRegistryDesc()
+ * @generated
+ */
+ EReference getRegistryDesc_Parents();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getChildren <em>Children</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Children</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getChildren()
+ * @see #getRegistryDesc()
+ * @generated
+ */
+ EReference getRegistryDesc_Children();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getExtends <em>Extends</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Extends</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getExtends()
+ * @see #getRegistryDesc()
+ * @generated
+ */
+ EReference getRegistryDesc_Extends();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getDescription <em>Description</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Description</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getDescription()
+ * @see #getRegistryDesc()
+ * @generated
+ */
+ EAttribute getRegistryDesc_Description();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getServiceSets <em>Service Sets</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Service Sets</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getServiceSets()
+ * @see #getRegistryDesc()
+ * @generated
+ */
+ EReference getRegistryDesc_ServiceSets();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#isUnique <em>Is Unique</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Is Unique</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#isUnique()
+ * @see #getRegistryDesc()
+ * @generated
+ */
+ EAttribute getRegistryDesc_IsUnique();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getServices <em>Services</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Services</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc#getServices()
+ * @see #getRegistryDesc()
+ * @generated
+ */
+ EReference getRegistryDesc_Services();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc <em>Service Set Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Service Set Desc</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc
+ * @generated
+ */
+ EClass getServiceSetDesc();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getServices <em>Services</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Services</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getServices()
+ * @see #getServiceSetDesc()
+ * @generated
+ */
+ EReference getServiceSetDesc_Services();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getOwnedServices <em>Owned Services</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Owned Services</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getOwnedServices()
+ * @see #getServiceSetDesc()
+ * @generated
+ */
+ EReference getServiceSetDesc_OwnedServices();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getName()
+ * @see #getServiceSetDesc()
+ * @generated
+ */
+ EAttribute getServiceSetDesc_Name();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getExtends <em>Extends</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Extends</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getExtends()
+ * @see #getServiceSetDesc()
+ * @generated
+ */
+ EReference getServiceSetDesc_Extends();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getDescription <em>Description</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Description</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc#getDescription()
+ * @see #getServiceSetDesc()
+ * @generated
+ */
+ EAttribute getServiceSetDesc_Description();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc <em>Abstract Service Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Abstract Service Desc</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc
+ * @generated
+ */
+ EClass getAbstractServiceDesc();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getName()
+ * @see #getAbstractServiceDesc()
+ * @generated
+ */
+ EAttribute getAbstractServiceDesc_Name();
+
+ /**
+ * Returns the meta object for the reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getDependsOn <em>Depends On</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference list '<em>Depends On</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getDependsOn()
+ * @see #getAbstractServiceDesc()
+ * @generated
+ */
+ EReference getAbstractServiceDesc_DependsOn();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getDescription <em>Description</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Description</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getDescription()
+ * @see #getAbstractServiceDesc()
+ * @generated
+ */
+ EAttribute getAbstractServiceDesc_Description();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getPriority <em>Priority</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Priority</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getPriority()
+ * @see #getAbstractServiceDesc()
+ * @generated
+ */
+ EAttribute getAbstractServiceDesc_Priority();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getBundleID <em>Bundle ID</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Bundle ID</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getBundleID()
+ * @see #getAbstractServiceDesc()
+ * @generated
+ */
+ EAttribute getAbstractServiceDesc_BundleID();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#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.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getParent()
+ * @see #getAbstractServiceDesc()
+ * @generated
+ */
+ EReference getAbstractServiceDesc_Parent();
+
+ /**
+ * Returns the meta object for the attribute list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getDependsOnIds <em>Depends On Ids</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute list '<em>Depends On Ids</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc#getDependsOnIds()
+ * @see #getAbstractServiceDesc()
+ * @generated
+ */
+ EAttribute getAbstractServiceDesc_DependsOnIds();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc <em>Service Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Service Desc</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc
+ * @generated
+ */
+ EClass getServiceDesc();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc#getStartKind <em>Start Kind</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Start Kind</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc#getStartKind()
+ * @see #getServiceDesc()
+ * @generated
+ */
+ EAttribute getServiceDesc_StartKind();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc#getClassname <em>Classname</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Classname</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc#getClassname()
+ * @see #getServiceDesc()
+ * @generated
+ */
+ EAttribute getServiceDesc_Classname();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc#getInjections <em>Injections</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Injections</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc#getInjections()
+ * @see #getServiceDesc()
+ * @generated
+ */
+ EReference getServiceDesc_Injections();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection <em>Feature Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Feature Injection</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection
+ * @generated
+ */
+ EClass getFeatureInjection();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection#getDescription <em>Description</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Description</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection#getDescription()
+ * @see #getFeatureInjection()
+ * @generated
+ */
+ EAttribute getFeatureInjection_Description();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc <em>Alias Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Alias Desc</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc
+ * @generated
+ */
+ EClass getAliasDesc();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc#getAliasedService <em>Aliased Service</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Aliased Service</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc#getAliasedService()
+ * @see #getAliasDesc()
+ * @generated
+ */
+ EReference getAliasDesc_AliasedService();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc#getAliasedServiceId <em>Aliased Service Id</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Aliased Service Id</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc#getAliasedServiceId()
+ * @see #getAliasDesc()
+ * @generated
+ */
+ EAttribute getAliasDesc_AliasedServiceId();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors <em>Descriptors</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Descriptors</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors
+ * @generated
+ */
+ EClass getDescriptors();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors#getRegistries <em>Registries</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Registries</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors#getRegistries()
+ * @see #getDescriptors()
+ * @generated
+ */
+ EReference getDescriptors_Registries();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors#getServiceSets <em>Service Sets</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Service Sets</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors#getServiceSets()
+ * @see #getDescriptors()
+ * @generated
+ */
+ EReference getDescriptors_ServiceSets();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection <em>Property Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Property Injection</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection
+ * @generated
+ */
+ EClass getPropertyInjection();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection#getPropertyName <em>Property Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Property Name</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection#getPropertyName()
+ * @see #getPropertyInjection()
+ * @generated
+ */
+ EAttribute getPropertyInjection_PropertyName();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection#getValues <em>Values</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Values</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection#getValues()
+ * @see #getPropertyInjection()
+ * @generated
+ */
+ EReference getPropertyInjection_Values();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue <em>Injected Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Injected Value</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue
+ * @generated
+ */
+ EClass getInjectedValue();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue#getDescription <em>Description</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Description</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue#getDescription()
+ * @see #getInjectedValue()
+ * @generated
+ */
+ EAttribute getInjectedValue_Description();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection <em>Method Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Method Injection</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection
+ * @generated
+ */
+ EClass getMethodInjection();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection#getMethodName <em>Method Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Method Name</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection#getMethodName()
+ * @see #getMethodInjection()
+ * @generated
+ */
+ EAttribute getMethodInjection_MethodName();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractMethodInjection <em>Abstract Method Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Abstract Method Injection</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractMethodInjection
+ * @generated
+ */
+ EClass getAbstractMethodInjection();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractMethodInjection#getParameters <em>Parameters</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Parameters</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractMethodInjection#getParameters()
+ * @see #getAbstractMethodInjection()
+ * @generated
+ */
+ EReference getAbstractMethodInjection_Parameters();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection <em>Parameter Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Parameter Injection</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection
+ * @generated
+ */
+ EClass getParameterInjection();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection#getParameterName <em>Parameter Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Parameter Name</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection#getParameterName()
+ * @see #getParameterInjection()
+ * @generated
+ */
+ EAttribute getParameterInjection_ParameterName();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection#getValues <em>Values</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Values</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection#getValues()
+ * @see #getParameterInjection()
+ * @generated
+ */
+ EReference getParameterInjection_Values();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService <em>Injected Service</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Injected Service</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService
+ * @generated
+ */
+ EClass getInjectedService();
+
+ /**
+ * Returns the meta object for the reference '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService#getService <em>Service</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the reference '<em>Service</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService#getService()
+ * @see #getInjectedService()
+ * @generated
+ */
+ EReference getInjectedService_Service();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue <em>Opaque Injected Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Opaque Injected Value</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue
+ * @generated
+ */
+ EClass getOpaqueInjectedValue();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue#getValue <em>Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Value</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue#getValue()
+ * @see #getOpaqueInjectedValue()
+ * @generated
+ */
+ EAttribute getOpaqueInjectedValue_Value();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ConstructorInjection <em>Constructor Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Constructor Injection</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ConstructorInjection
+ * @generated
+ */
+ EClass getConstructorInjection();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceFactoryDesc <em>Service Factory Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Service Factory Desc</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceFactoryDesc
+ * @generated
+ */
+ EClass getServiceFactoryDesc();
+
+ /**
+ * Returns the meta object for enum '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.StartupKind <em>Startup Kind</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for enum '<em>Startup Kind</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.StartupKind
+ * @generated
+ */
+ EEnum getStartupKind();
+
+ /**
+ * Returns the meta object for data type '{@link java.lang.String <em>String</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for data type '<em>String</em>'.
+ * @see java.lang.String
+ * @model instanceClass="java.lang.String"
+ * @generated
+ */
+ EDataType getString();
+
+ /**
+ * Returns the meta object for data type '<em>boolean</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for data type '<em>boolean</em>'.
+ * @model instanceClass="boolean"
+ * @generated
+ */
+ EDataType getboolean();
+
+ /**
+ * Returns the meta object for data type '<em>int</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for data type '<em>int</em>'.
+ * @model instanceClass="int"
+ * @generated
+ */
+ EDataType getint();
+
+ /**
+ * 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
+ */
+ ServicedescriptorsFactory getServicedescriptorsFactory();
+
+ /**
+ * <!-- 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 enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.RegistryDescImpl <em>Registry Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.RegistryDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getRegistryDesc()
+ * @generated
+ */
+ EClass REGISTRY_DESC = eINSTANCE.getRegistryDesc();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute REGISTRY_DESC__NAME = eINSTANCE.getRegistryDesc_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Parents</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference REGISTRY_DESC__PARENTS = eINSTANCE.getRegistryDesc_Parents();
+
+ /**
+ * The meta object literal for the '<em><b>Children</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference REGISTRY_DESC__CHILDREN = eINSTANCE.getRegistryDesc_Children();
+
+ /**
+ * The meta object literal for the '<em><b>Extends</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference REGISTRY_DESC__EXTENDS = eINSTANCE.getRegistryDesc_Extends();
+
+ /**
+ * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute REGISTRY_DESC__DESCRIPTION = eINSTANCE.getRegistryDesc_Description();
+
+ /**
+ * The meta object literal for the '<em><b>Service Sets</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference REGISTRY_DESC__SERVICE_SETS = eINSTANCE.getRegistryDesc_ServiceSets();
+
+ /**
+ * The meta object literal for the '<em><b>Is Unique</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute REGISTRY_DESC__IS_UNIQUE = eINSTANCE.getRegistryDesc_IsUnique();
+
+ /**
+ * The meta object literal for the '<em><b>Services</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference REGISTRY_DESC__SERVICES = eINSTANCE.getRegistryDesc_Services();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceSetDescImpl <em>Service Set Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceSetDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getServiceSetDesc()
+ * @generated
+ */
+ EClass SERVICE_SET_DESC = eINSTANCE.getServiceSetDesc();
+
+ /**
+ * The meta object literal for the '<em><b>Services</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference SERVICE_SET_DESC__SERVICES = eINSTANCE.getServiceSetDesc_Services();
+
+ /**
+ * The meta object literal for the '<em><b>Owned Services</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference SERVICE_SET_DESC__OWNED_SERVICES = eINSTANCE.getServiceSetDesc_OwnedServices();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute SERVICE_SET_DESC__NAME = eINSTANCE.getServiceSetDesc_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Extends</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference SERVICE_SET_DESC__EXTENDS = eINSTANCE.getServiceSetDesc_Extends();
+
+ /**
+ * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute SERVICE_SET_DESC__DESCRIPTION = eINSTANCE.getServiceSetDesc_Description();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractServiceDescImpl <em>Abstract Service Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractServiceDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getAbstractServiceDesc()
+ * @generated
+ */
+ EClass ABSTRACT_SERVICE_DESC = eINSTANCE.getAbstractServiceDesc();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ABSTRACT_SERVICE_DESC__NAME = eINSTANCE.getAbstractServiceDesc_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Depends On</b></em>' reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ABSTRACT_SERVICE_DESC__DEPENDS_ON = eINSTANCE.getAbstractServiceDesc_DependsOn();
+
+ /**
+ * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ABSTRACT_SERVICE_DESC__DESCRIPTION = eINSTANCE.getAbstractServiceDesc_Description();
+
+ /**
+ * The meta object literal for the '<em><b>Priority</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ABSTRACT_SERVICE_DESC__PRIORITY = eINSTANCE.getAbstractServiceDesc_Priority();
+
+ /**
+ * The meta object literal for the '<em><b>Bundle ID</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ABSTRACT_SERVICE_DESC__BUNDLE_ID = eINSTANCE.getAbstractServiceDesc_BundleID();
+
+ /**
+ * The meta object literal for the '<em><b>Parent</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ABSTRACT_SERVICE_DESC__PARENT = eINSTANCE.getAbstractServiceDesc_Parent();
+
+ /**
+ * The meta object literal for the '<em><b>Depends On Ids</b></em>' attribute list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ABSTRACT_SERVICE_DESC__DEPENDS_ON_IDS = eINSTANCE.getAbstractServiceDesc_DependsOnIds();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceDescImpl <em>Service Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getServiceDesc()
+ * @generated
+ */
+ EClass SERVICE_DESC = eINSTANCE.getServiceDesc();
+
+ /**
+ * The meta object literal for the '<em><b>Start Kind</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute SERVICE_DESC__START_KIND = eINSTANCE.getServiceDesc_StartKind();
+
+ /**
+ * The meta object literal for the '<em><b>Classname</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute SERVICE_DESC__CLASSNAME = eINSTANCE.getServiceDesc_Classname();
+
+ /**
+ * The meta object literal for the '<em><b>Injections</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference SERVICE_DESC__INJECTIONS = eINSTANCE.getServiceDesc_Injections();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.FeatureInjectionImpl <em>Feature Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.FeatureInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getFeatureInjection()
+ * @generated
+ */
+ EClass FEATURE_INJECTION = eINSTANCE.getFeatureInjection();
+
+ /**
+ * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute FEATURE_INJECTION__DESCRIPTION = eINSTANCE.getFeatureInjection_Description();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AliasDescImpl <em>Alias Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AliasDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getAliasDesc()
+ * @generated
+ */
+ EClass ALIAS_DESC = eINSTANCE.getAliasDesc();
+
+ /**
+ * The meta object literal for the '<em><b>Aliased Service</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ALIAS_DESC__ALIASED_SERVICE = eINSTANCE.getAliasDesc_AliasedService();
+
+ /**
+ * The meta object literal for the '<em><b>Aliased Service Id</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ALIAS_DESC__ALIASED_SERVICE_ID = eINSTANCE.getAliasDesc_AliasedServiceId();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.DescriptorsImpl <em>Descriptors</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.DescriptorsImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getDescriptors()
+ * @generated
+ */
+ EClass DESCRIPTORS = eINSTANCE.getDescriptors();
+
+ /**
+ * The meta object literal for the '<em><b>Registries</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference DESCRIPTORS__REGISTRIES = eINSTANCE.getDescriptors_Registries();
+
+ /**
+ * The meta object literal for the '<em><b>Service Sets</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference DESCRIPTORS__SERVICE_SETS = eINSTANCE.getDescriptors_ServiceSets();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.PropertyInjectionImpl <em>Property Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.PropertyInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getPropertyInjection()
+ * @generated
+ */
+ EClass PROPERTY_INJECTION = eINSTANCE.getPropertyInjection();
+
+ /**
+ * The meta object literal for the '<em><b>Property Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute PROPERTY_INJECTION__PROPERTY_NAME = eINSTANCE.getPropertyInjection_PropertyName();
+
+ /**
+ * The meta object literal for the '<em><b>Values</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference PROPERTY_INJECTION__VALUES = eINSTANCE.getPropertyInjection_Values();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.InjectedValueImpl <em>Injected Value</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.InjectedValueImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getInjectedValue()
+ * @generated
+ */
+ EClass INJECTED_VALUE = eINSTANCE.getInjectedValue();
+
+ /**
+ * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute INJECTED_VALUE__DESCRIPTION = eINSTANCE.getInjectedValue_Description();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.MethodInjectionImpl <em>Method Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.MethodInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getMethodInjection()
+ * @generated
+ */
+ EClass METHOD_INJECTION = eINSTANCE.getMethodInjection();
+
+ /**
+ * The meta object literal for the '<em><b>Method Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute METHOD_INJECTION__METHOD_NAME = eINSTANCE.getMethodInjection_MethodName();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractMethodInjectionImpl <em>Abstract Method Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractMethodInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getAbstractMethodInjection()
+ * @generated
+ */
+ EClass ABSTRACT_METHOD_INJECTION = eINSTANCE.getAbstractMethodInjection();
+
+ /**
+ * The meta object literal for the '<em><b>Parameters</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ABSTRACT_METHOD_INJECTION__PARAMETERS = eINSTANCE.getAbstractMethodInjection_Parameters();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ParameterInjectionImpl <em>Parameter Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ParameterInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getParameterInjection()
+ * @generated
+ */
+ EClass PARAMETER_INJECTION = eINSTANCE.getParameterInjection();
+
+ /**
+ * The meta object literal for the '<em><b>Parameter Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute PARAMETER_INJECTION__PARAMETER_NAME = eINSTANCE.getParameterInjection_ParameterName();
+
+ /**
+ * The meta object literal for the '<em><b>Values</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference PARAMETER_INJECTION__VALUES = eINSTANCE.getParameterInjection_Values();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.InjectedServiceImpl <em>Injected Service</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.InjectedServiceImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getInjectedService()
+ * @generated
+ */
+ EClass INJECTED_SERVICE = eINSTANCE.getInjectedService();
+
+ /**
+ * The meta object literal for the '<em><b>Service</b></em>' reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference INJECTED_SERVICE__SERVICE = eINSTANCE.getInjectedService_Service();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.OpaqueInjectedValueImpl <em>Opaque Injected Value</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.OpaqueInjectedValueImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getOpaqueInjectedValue()
+ * @generated
+ */
+ EClass OPAQUE_INJECTED_VALUE = eINSTANCE.getOpaqueInjectedValue();
+
+ /**
+ * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute OPAQUE_INJECTED_VALUE__VALUE = eINSTANCE.getOpaqueInjectedValue_Value();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ConstructorInjectionImpl <em>Constructor Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ConstructorInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getConstructorInjection()
+ * @generated
+ */
+ EClass CONSTRUCTOR_INJECTION = eINSTANCE.getConstructorInjection();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceFactoryDescImpl <em>Service Factory Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceFactoryDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getServiceFactoryDesc()
+ * @generated
+ */
+ EClass SERVICE_FACTORY_DESC = eINSTANCE.getServiceFactoryDesc();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.StartupKind <em>Startup Kind</em>}' enum.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.StartupKind
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getStartupKind()
+ * @generated
+ */
+ EEnum STARTUP_KIND = eINSTANCE.getStartupKind();
+
+ /**
+ * The meta object literal for the '<em>String</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see java.lang.String
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getString()
+ * @generated
+ */
+ EDataType STRING = eINSTANCE.getString();
+
+ /**
+ * The meta object literal for the '<em>boolean</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getboolean()
+ * @generated
+ */
+ EDataType BOOLEAN = eINSTANCE.getboolean();
+
+ /**
+ * The meta object literal for the '<em>int</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServicedescriptorsPackageImpl#getint()
+ * @generated
+ */
+ EDataType INT = eINSTANCE.getint();
+
+ }
+
+} //ServicedescriptorsPackage
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/StartupKind.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/StartupKind.java
new file mode 100644
index 00000000000..140f7d2f59d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/StartupKind.java
@@ -0,0 +1,208 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors;
+
+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>Startup Kind</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#getStartupKind()
+ * @model
+ * @generated
+ */
+public enum StartupKind implements Enumerator {
+ /**
+ * The '<em><b>Lazy</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #LAZY_VALUE
+ * @generated
+ * @ordered
+ */
+ LAZY(0, "lazy", "lazy"),
+
+ /**
+ * The '<em><b>Startup</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #STARTUP_VALUE
+ * @generated
+ * @ordered
+ */
+ STARTUP(1, "startup", "startup");
+
+ /**
+ * The '<em><b>Lazy</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of '<em><b>Lazy</b></em>' literal object isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @see #LAZY
+ * @model name="lazy"
+ * @generated
+ * @ordered
+ */
+ public static final int LAZY_VALUE = 0;
+
+ /**
+ * The '<em><b>Startup</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of '<em><b>Startup</b></em>' literal object isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @see #STARTUP
+ * @model name="startup"
+ * @generated
+ * @ordered
+ */
+ public static final int STARTUP_VALUE = 1;
+
+ /**
+ * An array of all the '<em><b>Startup Kind</b></em>' enumerators.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static final StartupKind[] VALUES_ARRAY =
+ new StartupKind[] {
+ LAZY,
+ STARTUP,
+ };
+
+ /**
+ * A public read-only list of all the '<em><b>Startup Kind</b></em>' enumerators.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final List<StartupKind> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+ /**
+ * Returns the '<em><b>Startup Kind</b></em>' literal with the specified literal value.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static StartupKind get(String literal) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ StartupKind result = VALUES_ARRAY[i];
+ if (result.toString().equals(literal)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the '<em><b>Startup Kind</b></em>' literal with the specified name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static StartupKind getByName(String name) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ StartupKind result = VALUES_ARRAY[i];
+ if (result.getName().equals(name)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the '<em><b>Startup Kind</b></em>' literal with the specified integer value.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static StartupKind get(int value) {
+ switch (value) {
+ case LAZY_VALUE: return LAZY;
+ case STARTUP_VALUE: return STARTUP;
+ }
+ 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 StartupKind(int value, String name, String literal) {
+ this.value = value;
+ this.name = name;
+ this.literal = literal;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ 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;
+ }
+
+} //StartupKind
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/AbstractMethodInjectionImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/AbstractMethodInjectionImpl.java
new file mode 100644
index 00000000000..cdebc853f11
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/AbstractMethodInjectionImpl.java
@@ -0,0 +1,150 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractMethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Abstract Method Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractMethodInjectionImpl#getParameters <em>Parameters</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class AbstractMethodInjectionImpl extends FeatureInjectionImpl implements AbstractMethodInjection {
+ /**
+ * The cached value of the '{@link #getParameters() <em>Parameters</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getParameters()
+ * @generated
+ * @ordered
+ */
+ protected EList<ParameterInjection> parameters;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AbstractMethodInjectionImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.ABSTRACT_METHOD_INJECTION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<ParameterInjection> getParameters() {
+ if (parameters == null) {
+ parameters = new EObjectContainmentEList<ParameterInjection>(ParameterInjection.class, this, ServicedescriptorsPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS);
+ }
+ return parameters;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS:
+ return ((InternalEList<?>)getParameters()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS:
+ return getParameters();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS:
+ getParameters().clear();
+ getParameters().addAll((Collection<? extends ParameterInjection>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS:
+ getParameters().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS:
+ return parameters != null && !parameters.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //AbstractMethodInjectionImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/AbstractServiceDescImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/AbstractServiceDescImpl.java
new file mode 100644
index 00000000000..03ae9fc1da0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/AbstractServiceDescImpl.java
@@ -0,0 +1,503 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Abstract Service Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractServiceDescImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractServiceDescImpl#getDependsOn <em>Depends On</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractServiceDescImpl#getDescription <em>Description</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractServiceDescImpl#getPriority <em>Priority</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractServiceDescImpl#getBundleID <em>Bundle ID</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractServiceDescImpl#getParent <em>Parent</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AbstractServiceDescImpl#getDependsOnIds <em>Depends On Ids</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class AbstractServiceDescImpl extends EObjectImpl implements AbstractServiceDesc {
+ /**
+ * 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 cached value of the '{@link #getDependsOn() <em>Depends On</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDependsOn()
+ * @generated
+ * @ordered
+ */
+ protected EList<AbstractServiceDesc> dependsOn;
+
+ /**
+ * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getPriority() <em>Priority</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getPriority()
+ * @generated
+ * @ordered
+ */
+ protected static final int PRIORITY_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getPriority() <em>Priority</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getPriority()
+ * @generated
+ * @ordered
+ */
+ protected int priority = PRIORITY_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getBundleID() <em>Bundle ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getBundleID()
+ * @generated
+ * @ordered
+ */
+ protected static final String BUNDLE_ID_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getBundleID() <em>Bundle ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getBundleID()
+ * @generated
+ * @ordered
+ */
+ protected String bundleID = BUNDLE_ID_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getDependsOnIds() <em>Depends On Ids</em>}' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDependsOnIds()
+ * @generated
+ * @ordered
+ */
+ protected EList<String> dependsOnIds;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AbstractServiceDescImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.ABSTRACT_SERVICE_DESC;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setName(String newName) {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__NAME, oldName, name));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<AbstractServiceDesc> getDependsOn() {
+ if (dependsOn == null) {
+ dependsOn = new EObjectResolvingEList<AbstractServiceDesc>(AbstractServiceDesc.class, this, ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DEPENDS_ON);
+ }
+ return dependsOn;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDescription(String newDescription) {
+ String oldDescription = description;
+ description = newDescription;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DESCRIPTION, oldDescription, description));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public int getPriority() {
+ return priority;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setPriority(int newPriority) {
+ int oldPriority = priority;
+ priority = newPriority;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PRIORITY, oldPriority, priority));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getBundleID() {
+ return bundleID;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setBundleID(String newBundleID) {
+ String oldBundleID = bundleID;
+ bundleID = newBundleID;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__BUNDLE_ID, oldBundleID, bundleID));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceSetDesc getParent() {
+ if (eContainerFeatureID() != ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PARENT) return null;
+ return (ServiceSetDesc)eContainer();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetParent(ServiceSetDesc newParent, NotificationChain msgs) {
+ msgs = eBasicSetContainer((InternalEObject)newParent, ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PARENT, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setParent(ServiceSetDesc newParent) {
+ if (newParent != eInternalContainer() || (eContainerFeatureID() != ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PARENT && newParent != null)) {
+ if (EcoreUtil.isAncestor(this, newParent))
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ if (newParent != null)
+ msgs = ((InternalEObject)newParent).eInverseAdd(this, ServicedescriptorsPackage.SERVICE_SET_DESC__OWNED_SERVICES, ServiceSetDesc.class, msgs);
+ msgs = basicSetParent(newParent, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PARENT, newParent, newParent));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<String> getDependsOnIds() {
+ if (dependsOnIds == null) {
+ dependsOnIds = new EDataTypeUniqueEList<String>(String.class, this, ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DEPENDS_ON_IDS);
+ }
+ return dependsOnIds;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PARENT:
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ return basicSetParent((ServiceSetDesc)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PARENT:
+ return basicSetParent(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+ switch (eContainerFeatureID()) {
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PARENT:
+ return eInternalContainer().eInverseRemove(this, ServicedescriptorsPackage.SERVICE_SET_DESC__OWNED_SERVICES, ServiceSetDesc.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__NAME:
+ return getName();
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DEPENDS_ON:
+ return getDependsOn();
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DESCRIPTION:
+ return getDescription();
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PRIORITY:
+ return getPriority();
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__BUNDLE_ID:
+ return getBundleID();
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PARENT:
+ return getParent();
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DEPENDS_ON_IDS:
+ return getDependsOnIds();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__NAME:
+ setName((String)newValue);
+ return;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DEPENDS_ON:
+ getDependsOn().clear();
+ getDependsOn().addAll((Collection<? extends AbstractServiceDesc>)newValue);
+ return;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DESCRIPTION:
+ setDescription((String)newValue);
+ return;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PRIORITY:
+ setPriority((Integer)newValue);
+ return;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__BUNDLE_ID:
+ setBundleID((String)newValue);
+ return;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PARENT:
+ setParent((ServiceSetDesc)newValue);
+ return;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DEPENDS_ON_IDS:
+ getDependsOnIds().clear();
+ getDependsOnIds().addAll((Collection<? extends String>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DEPENDS_ON:
+ getDependsOn().clear();
+ return;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DESCRIPTION:
+ setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PRIORITY:
+ setPriority(PRIORITY_EDEFAULT);
+ return;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__BUNDLE_ID:
+ setBundleID(BUNDLE_ID_EDEFAULT);
+ return;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PARENT:
+ setParent((ServiceSetDesc)null);
+ return;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DEPENDS_ON_IDS:
+ getDependsOnIds().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DEPENDS_ON:
+ return dependsOn != null && !dependsOn.isEmpty();
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DESCRIPTION:
+ return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PRIORITY:
+ return priority != PRIORITY_EDEFAULT;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__BUNDLE_ID:
+ return BUNDLE_ID_EDEFAULT == null ? bundleID != null : !BUNDLE_ID_EDEFAULT.equals(bundleID);
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PARENT:
+ return getParent() != null;
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__DEPENDS_ON_IDS:
+ return dependsOnIds != null && !dependsOnIds.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (name: ");
+ result.append(name);
+ result.append(", description: ");
+ result.append(description);
+ result.append(", priority: ");
+ result.append(priority);
+ result.append(", bundleID: ");
+ result.append(bundleID);
+ result.append(", dependsOnIds: ");
+ result.append(dependsOnIds);
+ result.append(')');
+ return result.toString();
+ }
+
+} //AbstractServiceDescImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/AliasDescImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/AliasDescImpl.java
new file mode 100644
index 00000000000..f1d8b3a4aea
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/AliasDescImpl.java
@@ -0,0 +1,223 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Alias Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AliasDescImpl#getAliasedService <em>Aliased Service</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.AliasDescImpl#getAliasedServiceId <em>Aliased Service Id</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class AliasDescImpl extends AbstractServiceDescImpl implements AliasDesc {
+ /**
+ * The cached value of the '{@link #getAliasedService() <em>Aliased Service</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAliasedService()
+ * @generated
+ * @ordered
+ */
+ protected ServiceDesc aliasedService;
+
+ /**
+ * The default value of the '{@link #getAliasedServiceId() <em>Aliased Service Id</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAliasedServiceId()
+ * @generated
+ * @ordered
+ */
+ protected static final String ALIASED_SERVICE_ID_EDEFAULT = null;
+ /**
+ * The cached value of the '{@link #getAliasedServiceId() <em>Aliased Service Id</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAliasedServiceId()
+ * @generated
+ * @ordered
+ */
+ protected String aliasedServiceId = ALIASED_SERVICE_ID_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AliasDescImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.ALIAS_DESC;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceDesc getAliasedService() {
+ if (aliasedService != null && aliasedService.eIsProxy()) {
+ InternalEObject oldAliasedService = (InternalEObject)aliasedService;
+ aliasedService = (ServiceDesc)eResolveProxy(oldAliasedService);
+ if (aliasedService != oldAliasedService) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ServicedescriptorsPackage.ALIAS_DESC__ALIASED_SERVICE, oldAliasedService, aliasedService));
+ }
+ }
+ return aliasedService;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceDesc basicGetAliasedService() {
+ return aliasedService;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setAliasedService(ServiceDesc newAliasedService) {
+ ServiceDesc oldAliasedService = aliasedService;
+ aliasedService = newAliasedService;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.ALIAS_DESC__ALIASED_SERVICE, oldAliasedService, aliasedService));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getAliasedServiceId() {
+ return aliasedServiceId;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setAliasedServiceId(String newAliasedServiceId) {
+ String oldAliasedServiceId = aliasedServiceId;
+ aliasedServiceId = newAliasedServiceId;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.ALIAS_DESC__ALIASED_SERVICE_ID, oldAliasedServiceId, aliasedServiceId));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ALIAS_DESC__ALIASED_SERVICE:
+ if (resolve) return getAliasedService();
+ return basicGetAliasedService();
+ case ServicedescriptorsPackage.ALIAS_DESC__ALIASED_SERVICE_ID:
+ return getAliasedServiceId();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ALIAS_DESC__ALIASED_SERVICE:
+ setAliasedService((ServiceDesc)newValue);
+ return;
+ case ServicedescriptorsPackage.ALIAS_DESC__ALIASED_SERVICE_ID:
+ setAliasedServiceId((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ALIAS_DESC__ALIASED_SERVICE:
+ setAliasedService((ServiceDesc)null);
+ return;
+ case ServicedescriptorsPackage.ALIAS_DESC__ALIASED_SERVICE_ID:
+ setAliasedServiceId(ALIASED_SERVICE_ID_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.ALIAS_DESC__ALIASED_SERVICE:
+ return aliasedService != null;
+ case ServicedescriptorsPackage.ALIAS_DESC__ALIASED_SERVICE_ID:
+ return ALIASED_SERVICE_ID_EDEFAULT == null ? aliasedServiceId != null : !ALIASED_SERVICE_ID_EDEFAULT.equals(aliasedServiceId);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (aliasedServiceId: ");
+ result.append(aliasedServiceId);
+ result.append(')');
+ return result.toString();
+ }
+
+} //AliasDescImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ConstructorInjectionImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ConstructorInjectionImpl.java
new file mode 100644
index 00000000000..ed64714202a
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ConstructorInjectionImpl.java
@@ -0,0 +1,39 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ConstructorInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Constructor Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class ConstructorInjectionImpl extends AbstractMethodInjectionImpl implements ConstructorInjection {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ConstructorInjectionImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.CONSTRUCTOR_INJECTION;
+ }
+
+} //ConstructorInjectionImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/DescriptorsImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/DescriptorsImpl.java
new file mode 100644
index 00000000000..d09c53f1cb2
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/DescriptorsImpl.java
@@ -0,0 +1,224 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Descriptors</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.DescriptorsImpl#getRegistries <em>Registries</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.DescriptorsImpl#getServiceSets <em>Service Sets</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DescriptorsImpl extends EObjectImpl implements Descriptors {
+ /**
+ * The cached value of the '{@link #getRegistries() <em>Registries</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getRegistries()
+ * @generated
+ * @ordered
+ */
+ protected EList<RegistryDesc> registries;
+
+ /**
+ * The cached value of the '{@link #getServiceSets() <em>Service Sets</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getServiceSets()
+ * @generated
+ * @ordered
+ */
+ protected EList<ServiceSetDesc> serviceSets;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected DescriptorsImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.DESCRIPTORS;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<RegistryDesc> getRegistries() {
+ if (registries == null) {
+ registries = new EObjectContainmentEList<RegistryDesc>(RegistryDesc.class, this, ServicedescriptorsPackage.DESCRIPTORS__REGISTRIES);
+ }
+ return registries;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<ServiceSetDesc> getServiceSets() {
+ if (serviceSets == null) {
+ serviceSets = new EObjectContainmentEList<ServiceSetDesc>(ServiceSetDesc.class, this, ServicedescriptorsPackage.DESCRIPTORS__SERVICE_SETS);
+ }
+ return serviceSets;
+ }
+
+ /**
+ * Return the requested registry.
+ * return null if not found.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public RegistryDesc getRegistryDesc(String name) {
+
+ for( RegistryDesc desc : getRegistries() ) {
+ if( name.equals(desc.getName())) {
+ return desc;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Return the requested serviceSet.
+ * return null if not found.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public ServiceSetDesc getServiceSetDesc(String name) {
+ for( ServiceSetDesc desc : getServiceSets() ) {
+ if( name.equals(desc.getName())) {
+ return desc;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.DESCRIPTORS__REGISTRIES:
+ return ((InternalEList<?>)getRegistries()).basicRemove(otherEnd, msgs);
+ case ServicedescriptorsPackage.DESCRIPTORS__SERVICE_SETS:
+ return ((InternalEList<?>)getServiceSets()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.DESCRIPTORS__REGISTRIES:
+ return getRegistries();
+ case ServicedescriptorsPackage.DESCRIPTORS__SERVICE_SETS:
+ return getServiceSets();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.DESCRIPTORS__REGISTRIES:
+ getRegistries().clear();
+ getRegistries().addAll((Collection<? extends RegistryDesc>)newValue);
+ return;
+ case ServicedescriptorsPackage.DESCRIPTORS__SERVICE_SETS:
+ getServiceSets().clear();
+ getServiceSets().addAll((Collection<? extends ServiceSetDesc>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.DESCRIPTORS__REGISTRIES:
+ getRegistries().clear();
+ return;
+ case ServicedescriptorsPackage.DESCRIPTORS__SERVICE_SETS:
+ getServiceSets().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.DESCRIPTORS__REGISTRIES:
+ return registries != null && !registries.isEmpty();
+ case ServicedescriptorsPackage.DESCRIPTORS__SERVICE_SETS:
+ return serviceSets != null && !serviceSets.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //DescriptorsImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/FeatureInjectionImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/FeatureInjectionImpl.java
new file mode 100644
index 00000000000..7a6c0f0bd7f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/FeatureInjectionImpl.java
@@ -0,0 +1,163 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Feature Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.FeatureInjectionImpl#getDescription <em>Description</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class FeatureInjectionImpl extends EObjectImpl implements FeatureInjection {
+ /**
+ * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected FeatureInjectionImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.FEATURE_INJECTION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDescription(String newDescription) {
+ String oldDescription = description;
+ description = newDescription;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.FEATURE_INJECTION__DESCRIPTION, oldDescription, description));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.FEATURE_INJECTION__DESCRIPTION:
+ return getDescription();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.FEATURE_INJECTION__DESCRIPTION:
+ setDescription((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.FEATURE_INJECTION__DESCRIPTION:
+ setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.FEATURE_INJECTION__DESCRIPTION:
+ return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (description: ");
+ result.append(description);
+ result.append(')');
+ return result.toString();
+ }
+
+} //FeatureInjectionImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/InjectedServiceImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/InjectedServiceImpl.java
new file mode 100644
index 00000000000..0c78b619643
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/InjectedServiceImpl.java
@@ -0,0 +1,156 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Injected Service</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.InjectedServiceImpl#getService <em>Service</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class InjectedServiceImpl extends InjectedValueImpl implements InjectedService {
+ /**
+ * The cached value of the '{@link #getService() <em>Service</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getService()
+ * @generated
+ * @ordered
+ */
+ protected AbstractServiceDesc service;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InjectedServiceImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.INJECTED_SERVICE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AbstractServiceDesc getService() {
+ if (service != null && service.eIsProxy()) {
+ InternalEObject oldService = (InternalEObject)service;
+ service = (AbstractServiceDesc)eResolveProxy(oldService);
+ if (service != oldService) {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ServicedescriptorsPackage.INJECTED_SERVICE__SERVICE, oldService, service));
+ }
+ }
+ return service;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AbstractServiceDesc basicGetService() {
+ return service;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setService(AbstractServiceDesc newService) {
+ AbstractServiceDesc oldService = service;
+ service = newService;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.INJECTED_SERVICE__SERVICE, oldService, service));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.INJECTED_SERVICE__SERVICE:
+ if (resolve) return getService();
+ return basicGetService();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.INJECTED_SERVICE__SERVICE:
+ setService((AbstractServiceDesc)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.INJECTED_SERVICE__SERVICE:
+ setService((AbstractServiceDesc)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.INJECTED_SERVICE__SERVICE:
+ return service != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //InjectedServiceImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/InjectedValueImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/InjectedValueImpl.java
new file mode 100644
index 00000000000..502c6b19c1a
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/InjectedValueImpl.java
@@ -0,0 +1,163 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Injected Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.InjectedValueImpl#getDescription <em>Description</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class InjectedValueImpl extends EObjectImpl implements InjectedValue {
+ /**
+ * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InjectedValueImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.INJECTED_VALUE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDescription(String newDescription) {
+ String oldDescription = description;
+ description = newDescription;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.INJECTED_VALUE__DESCRIPTION, oldDescription, description));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.INJECTED_VALUE__DESCRIPTION:
+ return getDescription();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.INJECTED_VALUE__DESCRIPTION:
+ setDescription((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.INJECTED_VALUE__DESCRIPTION:
+ setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.INJECTED_VALUE__DESCRIPTION:
+ return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (description: ");
+ result.append(description);
+ result.append(')');
+ return result.toString();
+ }
+
+} //InjectedValueImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/MethodInjectionImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/MethodInjectionImpl.java
new file mode 100644
index 00000000000..0035694fe12
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/MethodInjectionImpl.java
@@ -0,0 +1,162 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Method Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.MethodInjectionImpl#getMethodName <em>Method Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class MethodInjectionImpl extends AbstractMethodInjectionImpl implements MethodInjection {
+ /**
+ * The default value of the '{@link #getMethodName() <em>Method Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getMethodName()
+ * @generated
+ * @ordered
+ */
+ protected static final String METHOD_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getMethodName() <em>Method Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getMethodName()
+ * @generated
+ * @ordered
+ */
+ protected String methodName = METHOD_NAME_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected MethodInjectionImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.METHOD_INJECTION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getMethodName() {
+ return methodName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setMethodName(String newMethodName) {
+ String oldMethodName = methodName;
+ methodName = newMethodName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.METHOD_INJECTION__METHOD_NAME, oldMethodName, methodName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.METHOD_INJECTION__METHOD_NAME:
+ return getMethodName();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.METHOD_INJECTION__METHOD_NAME:
+ setMethodName((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.METHOD_INJECTION__METHOD_NAME:
+ setMethodName(METHOD_NAME_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.METHOD_INJECTION__METHOD_NAME:
+ return METHOD_NAME_EDEFAULT == null ? methodName != null : !METHOD_NAME_EDEFAULT.equals(methodName);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (methodName: ");
+ result.append(methodName);
+ result.append(')');
+ return result.toString();
+ }
+
+} //MethodInjectionImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/OpaqueInjectedValueImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/OpaqueInjectedValueImpl.java
new file mode 100644
index 00000000000..356ec6c1977
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/OpaqueInjectedValueImpl.java
@@ -0,0 +1,162 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Opaque Injected Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.OpaqueInjectedValueImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class OpaqueInjectedValueImpl extends InjectedValueImpl implements OpaqueInjectedValue {
+ /**
+ * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected static final String VALUE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected String value = VALUE_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected OpaqueInjectedValueImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.OPAQUE_INJECTED_VALUE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getValue() {
+ return value;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setValue(String newValue) {
+ String oldValue = value;
+ value = newValue;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.OPAQUE_INJECTED_VALUE__VALUE, oldValue, value));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.OPAQUE_INJECTED_VALUE__VALUE:
+ return getValue();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.OPAQUE_INJECTED_VALUE__VALUE:
+ setValue((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.OPAQUE_INJECTED_VALUE__VALUE:
+ setValue(VALUE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.OPAQUE_INJECTED_VALUE__VALUE:
+ return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (value: ");
+ result.append(value);
+ result.append(')');
+ return result.toString();
+ }
+
+} //OpaqueInjectedValueImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ParameterInjectionImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ParameterInjectionImpl.java
new file mode 100644
index 00000000000..33e8691a16c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ParameterInjectionImpl.java
@@ -0,0 +1,222 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Parameter Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ParameterInjectionImpl#getParameterName <em>Parameter Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ParameterInjectionImpl#getValues <em>Values</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ParameterInjectionImpl extends EObjectImpl implements ParameterInjection {
+ /**
+ * The default value of the '{@link #getParameterName() <em>Parameter Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getParameterName()
+ * @generated
+ * @ordered
+ */
+ protected static final String PARAMETER_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getParameterName() <em>Parameter Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getParameterName()
+ * @generated
+ * @ordered
+ */
+ protected String parameterName = PARAMETER_NAME_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getValues() <em>Values</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValues()
+ * @generated
+ * @ordered
+ */
+ protected EList<InjectedValue> values;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ParameterInjectionImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.PARAMETER_INJECTION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getParameterName() {
+ return parameterName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setParameterName(String newParameterName) {
+ String oldParameterName = parameterName;
+ parameterName = newParameterName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.PARAMETER_INJECTION__PARAMETER_NAME, oldParameterName, parameterName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<InjectedValue> getValues() {
+ if (values == null) {
+ values = new EObjectContainmentEList<InjectedValue>(InjectedValue.class, this, ServicedescriptorsPackage.PARAMETER_INJECTION__VALUES);
+ }
+ return values;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.PARAMETER_INJECTION__VALUES:
+ return ((InternalEList<?>)getValues()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.PARAMETER_INJECTION__PARAMETER_NAME:
+ return getParameterName();
+ case ServicedescriptorsPackage.PARAMETER_INJECTION__VALUES:
+ return getValues();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.PARAMETER_INJECTION__PARAMETER_NAME:
+ setParameterName((String)newValue);
+ return;
+ case ServicedescriptorsPackage.PARAMETER_INJECTION__VALUES:
+ getValues().clear();
+ getValues().addAll((Collection<? extends InjectedValue>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.PARAMETER_INJECTION__PARAMETER_NAME:
+ setParameterName(PARAMETER_NAME_EDEFAULT);
+ return;
+ case ServicedescriptorsPackage.PARAMETER_INJECTION__VALUES:
+ getValues().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.PARAMETER_INJECTION__PARAMETER_NAME:
+ return PARAMETER_NAME_EDEFAULT == null ? parameterName != null : !PARAMETER_NAME_EDEFAULT.equals(parameterName);
+ case ServicedescriptorsPackage.PARAMETER_INJECTION__VALUES:
+ return values != null && !values.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (parameterName: ");
+ result.append(parameterName);
+ result.append(')');
+ return result.toString();
+ }
+
+} //ParameterInjectionImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/PropertyInjectionImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/PropertyInjectionImpl.java
new file mode 100644
index 00000000000..b70feb96af2
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/PropertyInjectionImpl.java
@@ -0,0 +1,221 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Property Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.PropertyInjectionImpl#getPropertyName <em>Property Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.PropertyInjectionImpl#getValues <em>Values</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PropertyInjectionImpl extends FeatureInjectionImpl implements PropertyInjection {
+ /**
+ * The default value of the '{@link #getPropertyName() <em>Property Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getPropertyName()
+ * @generated
+ * @ordered
+ */
+ protected static final String PROPERTY_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getPropertyName() <em>Property Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getPropertyName()
+ * @generated
+ * @ordered
+ */
+ protected String propertyName = PROPERTY_NAME_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getValues() <em>Values</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValues()
+ * @generated
+ * @ordered
+ */
+ protected EList<InjectedValue> values;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected PropertyInjectionImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.PROPERTY_INJECTION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getPropertyName() {
+ return propertyName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setPropertyName(String newPropertyName) {
+ String oldPropertyName = propertyName;
+ propertyName = newPropertyName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.PROPERTY_INJECTION__PROPERTY_NAME, oldPropertyName, propertyName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<InjectedValue> getValues() {
+ if (values == null) {
+ values = new EObjectContainmentEList<InjectedValue>(InjectedValue.class, this, ServicedescriptorsPackage.PROPERTY_INJECTION__VALUES);
+ }
+ return values;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.PROPERTY_INJECTION__VALUES:
+ return ((InternalEList<?>)getValues()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.PROPERTY_INJECTION__PROPERTY_NAME:
+ return getPropertyName();
+ case ServicedescriptorsPackage.PROPERTY_INJECTION__VALUES:
+ return getValues();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.PROPERTY_INJECTION__PROPERTY_NAME:
+ setPropertyName((String)newValue);
+ return;
+ case ServicedescriptorsPackage.PROPERTY_INJECTION__VALUES:
+ getValues().clear();
+ getValues().addAll((Collection<? extends InjectedValue>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.PROPERTY_INJECTION__PROPERTY_NAME:
+ setPropertyName(PROPERTY_NAME_EDEFAULT);
+ return;
+ case ServicedescriptorsPackage.PROPERTY_INJECTION__VALUES:
+ getValues().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.PROPERTY_INJECTION__PROPERTY_NAME:
+ return PROPERTY_NAME_EDEFAULT == null ? propertyName != null : !PROPERTY_NAME_EDEFAULT.equals(propertyName);
+ case ServicedescriptorsPackage.PROPERTY_INJECTION__VALUES:
+ return values != null && !values.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (propertyName: ");
+ result.append(propertyName);
+ result.append(')');
+ return result.toString();
+ }
+
+} //PropertyInjectionImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/RegistryDescImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/RegistryDescImpl.java
new file mode 100644
index 00000000000..201ff0f7c29
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/RegistryDescImpl.java
@@ -0,0 +1,538 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.EObjectWithInverseResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Registry Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.RegistryDescImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.RegistryDescImpl#getParents <em>Parents</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.RegistryDescImpl#getChildren <em>Children</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.RegistryDescImpl#getExtends <em>Extends</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.RegistryDescImpl#getDescription <em>Description</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.RegistryDescImpl#getServiceSets <em>Service Sets</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.RegistryDescImpl#isUnique <em>Is Unique</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.RegistryDescImpl#getServices <em>Services</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RegistryDescImpl extends EObjectImpl implements RegistryDesc {
+ /**
+ * 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 cached value of the '{@link #getParents() <em>Parents</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getParents()
+ * @generated
+ * @ordered
+ */
+ protected EList<RegistryDesc> parents;
+
+ /**
+ * The cached value of the '{@link #getChildren() <em>Children</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getChildren()
+ * @generated
+ * @ordered
+ */
+ protected EList<RegistryDesc> children;
+
+ /**
+ * The cached value of the '{@link #getExtends() <em>Extends</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getExtends()
+ * @generated
+ * @ordered
+ */
+ protected EList<RegistryDesc> extends_;
+
+ /**
+ * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getServiceSets() <em>Service Sets</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getServiceSets()
+ * @generated
+ * @ordered
+ */
+ protected EList<ServiceSetDesc> serviceSets;
+
+ /**
+ * The default value of the '{@link #isUnique() <em>Is Unique</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isUnique()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean IS_UNIQUE_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isUnique() <em>Is Unique</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isUnique()
+ * @generated
+ * @ordered
+ */
+ protected boolean isUnique = IS_UNIQUE_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getServices() <em>Services</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getServices()
+ * @generated
+ * @ordered
+ */
+ protected EList<AbstractServiceDesc> services;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected RegistryDescImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.REGISTRY_DESC;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setName(String newName) {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.REGISTRY_DESC__NAME, oldName, name));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<RegistryDesc> getParents() {
+ if (parents == null) {
+ parents = new EObjectWithInverseResolvingEList.ManyInverse<RegistryDesc>(RegistryDesc.class, this, ServicedescriptorsPackage.REGISTRY_DESC__PARENTS, ServicedescriptorsPackage.REGISTRY_DESC__CHILDREN);
+ }
+ return parents;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<RegistryDesc> getChildren() {
+ if (children == null) {
+ children = new EObjectWithInverseResolvingEList.ManyInverse<RegistryDesc>(RegistryDesc.class, this, ServicedescriptorsPackage.REGISTRY_DESC__CHILDREN, ServicedescriptorsPackage.REGISTRY_DESC__PARENTS);
+ }
+ return children;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<RegistryDesc> getExtends() {
+ if (extends_ == null) {
+ extends_ = new EObjectResolvingEList<RegistryDesc>(RegistryDesc.class, this, ServicedescriptorsPackage.REGISTRY_DESC__EXTENDS);
+ }
+ return extends_;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDescription(String newDescription) {
+ String oldDescription = description;
+ description = newDescription;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.REGISTRY_DESC__DESCRIPTION, oldDescription, description));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<ServiceSetDesc> getServiceSets() {
+ if (serviceSets == null) {
+ serviceSets = new EObjectResolvingEList<ServiceSetDesc>(ServiceSetDesc.class, this, ServicedescriptorsPackage.REGISTRY_DESC__SERVICE_SETS);
+ }
+ return serviceSets;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isUnique() {
+ return isUnique;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setIsUnique(boolean newIsUnique) {
+ boolean oldIsUnique = isUnique;
+ isUnique = newIsUnique;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.REGISTRY_DESC__IS_UNIQUE, oldIsUnique, isUnique));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<AbstractServiceDesc> getServices() {
+ if (services == null) {
+ services = new EObjectResolvingEList<AbstractServiceDesc>(AbstractServiceDesc.class, this, ServicedescriptorsPackage.REGISTRY_DESC__SERVICES);
+ }
+ return services;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public AbstractServiceDesc getServiceDesc(String serviceId) {
+ if(serviceId == null) {
+ return null;
+ }
+
+ for( AbstractServiceDesc desc : getServices()) {
+ if( serviceId.equals(desc.getName() ) ) {
+ return desc;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public ServiceSetDesc getServiceSetDesc(String serviceSetsId) {
+ if(serviceSetsId == null) {
+ return null;
+ }
+
+ for( ServiceSetDesc desc : getServiceSets()) {
+ if( serviceSetsId.equals(desc.getName() ) ) {
+ return desc;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public boolean servicesContains(String serviceId) {
+ return getServiceDesc(serviceId) != null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public boolean serviceSetsContains(String serviceSetsId) {
+ return getServiceSetDesc(serviceSetsId) != null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.REGISTRY_DESC__PARENTS:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getParents()).basicAdd(otherEnd, msgs);
+ case ServicedescriptorsPackage.REGISTRY_DESC__CHILDREN:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getChildren()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.REGISTRY_DESC__PARENTS:
+ return ((InternalEList<?>)getParents()).basicRemove(otherEnd, msgs);
+ case ServicedescriptorsPackage.REGISTRY_DESC__CHILDREN:
+ return ((InternalEList<?>)getChildren()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.REGISTRY_DESC__NAME:
+ return getName();
+ case ServicedescriptorsPackage.REGISTRY_DESC__PARENTS:
+ return getParents();
+ case ServicedescriptorsPackage.REGISTRY_DESC__CHILDREN:
+ return getChildren();
+ case ServicedescriptorsPackage.REGISTRY_DESC__EXTENDS:
+ return getExtends();
+ case ServicedescriptorsPackage.REGISTRY_DESC__DESCRIPTION:
+ return getDescription();
+ case ServicedescriptorsPackage.REGISTRY_DESC__SERVICE_SETS:
+ return getServiceSets();
+ case ServicedescriptorsPackage.REGISTRY_DESC__IS_UNIQUE:
+ return isUnique();
+ case ServicedescriptorsPackage.REGISTRY_DESC__SERVICES:
+ return getServices();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.REGISTRY_DESC__NAME:
+ setName((String)newValue);
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__PARENTS:
+ getParents().clear();
+ getParents().addAll((Collection<? extends RegistryDesc>)newValue);
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__CHILDREN:
+ getChildren().clear();
+ getChildren().addAll((Collection<? extends RegistryDesc>)newValue);
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__EXTENDS:
+ getExtends().clear();
+ getExtends().addAll((Collection<? extends RegistryDesc>)newValue);
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__DESCRIPTION:
+ setDescription((String)newValue);
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__SERVICE_SETS:
+ getServiceSets().clear();
+ getServiceSets().addAll((Collection<? extends ServiceSetDesc>)newValue);
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__IS_UNIQUE:
+ setIsUnique((Boolean)newValue);
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__SERVICES:
+ getServices().clear();
+ getServices().addAll((Collection<? extends AbstractServiceDesc>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.REGISTRY_DESC__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__PARENTS:
+ getParents().clear();
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__CHILDREN:
+ getChildren().clear();
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__EXTENDS:
+ getExtends().clear();
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__DESCRIPTION:
+ setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__SERVICE_SETS:
+ getServiceSets().clear();
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__IS_UNIQUE:
+ setIsUnique(IS_UNIQUE_EDEFAULT);
+ return;
+ case ServicedescriptorsPackage.REGISTRY_DESC__SERVICES:
+ getServices().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.REGISTRY_DESC__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ case ServicedescriptorsPackage.REGISTRY_DESC__PARENTS:
+ return parents != null && !parents.isEmpty();
+ case ServicedescriptorsPackage.REGISTRY_DESC__CHILDREN:
+ return children != null && !children.isEmpty();
+ case ServicedescriptorsPackage.REGISTRY_DESC__EXTENDS:
+ return extends_ != null && !extends_.isEmpty();
+ case ServicedescriptorsPackage.REGISTRY_DESC__DESCRIPTION:
+ return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+ case ServicedescriptorsPackage.REGISTRY_DESC__SERVICE_SETS:
+ return serviceSets != null && !serviceSets.isEmpty();
+ case ServicedescriptorsPackage.REGISTRY_DESC__IS_UNIQUE:
+ return isUnique != IS_UNIQUE_EDEFAULT;
+ case ServicedescriptorsPackage.REGISTRY_DESC__SERVICES:
+ return services != null && !services.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (name: ");
+ result.append(name);
+ result.append(", description: ");
+ result.append(description);
+ result.append(", isUnique: ");
+ result.append(isUnique);
+ result.append(')');
+ return result.toString();
+ }
+
+} //RegistryDescImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServiceDescImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServiceDescImpl.java
new file mode 100644
index 00000000000..9590ab207cd
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServiceDescImpl.java
@@ -0,0 +1,276 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.StartupKind;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Service Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceDescImpl#getStartKind <em>Start Kind</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceDescImpl#getClassname <em>Classname</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceDescImpl#getInjections <em>Injections</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ServiceDescImpl extends AbstractServiceDescImpl implements ServiceDesc {
+ /**
+ * The default value of the '{@link #getStartKind() <em>Start Kind</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getStartKind()
+ * @generated
+ * @ordered
+ */
+ protected static final StartupKind START_KIND_EDEFAULT = StartupKind.LAZY;
+
+ /**
+ * The cached value of the '{@link #getStartKind() <em>Start Kind</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getStartKind()
+ * @generated
+ * @ordered
+ */
+ protected StartupKind startKind = START_KIND_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getClassname() <em>Classname</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getClassname()
+ * @generated
+ * @ordered
+ */
+ protected static final String CLASSNAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getClassname() <em>Classname</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getClassname()
+ * @generated
+ * @ordered
+ */
+ protected String classname = CLASSNAME_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getInjections() <em>Injections</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getInjections()
+ * @generated
+ * @ordered
+ */
+ protected EList<FeatureInjection> injections;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceDescImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.SERVICE_DESC;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public StartupKind getStartKind() {
+ return startKind;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setStartKind(StartupKind newStartKind) {
+ StartupKind oldStartKind = startKind;
+ startKind = newStartKind == null ? START_KIND_EDEFAULT : newStartKind;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.SERVICE_DESC__START_KIND, oldStartKind, startKind));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getClassname() {
+ return classname;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setClassname(String newClassname) {
+ String oldClassname = classname;
+ classname = newClassname;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.SERVICE_DESC__CLASSNAME, oldClassname, classname));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<FeatureInjection> getInjections() {
+ if (injections == null) {
+ injections = new EObjectContainmentEList<FeatureInjection>(FeatureInjection.class, this, ServicedescriptorsPackage.SERVICE_DESC__INJECTIONS);
+ }
+ return injections;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.SERVICE_DESC__INJECTIONS:
+ return ((InternalEList<?>)getInjections()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.SERVICE_DESC__START_KIND:
+ return getStartKind();
+ case ServicedescriptorsPackage.SERVICE_DESC__CLASSNAME:
+ return getClassname();
+ case ServicedescriptorsPackage.SERVICE_DESC__INJECTIONS:
+ return getInjections();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.SERVICE_DESC__START_KIND:
+ setStartKind((StartupKind)newValue);
+ return;
+ case ServicedescriptorsPackage.SERVICE_DESC__CLASSNAME:
+ setClassname((String)newValue);
+ return;
+ case ServicedescriptorsPackage.SERVICE_DESC__INJECTIONS:
+ getInjections().clear();
+ getInjections().addAll((Collection<? extends FeatureInjection>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.SERVICE_DESC__START_KIND:
+ setStartKind(START_KIND_EDEFAULT);
+ return;
+ case ServicedescriptorsPackage.SERVICE_DESC__CLASSNAME:
+ setClassname(CLASSNAME_EDEFAULT);
+ return;
+ case ServicedescriptorsPackage.SERVICE_DESC__INJECTIONS:
+ getInjections().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.SERVICE_DESC__START_KIND:
+ return startKind != START_KIND_EDEFAULT;
+ case ServicedescriptorsPackage.SERVICE_DESC__CLASSNAME:
+ return CLASSNAME_EDEFAULT == null ? classname != null : !CLASSNAME_EDEFAULT.equals(classname);
+ case ServicedescriptorsPackage.SERVICE_DESC__INJECTIONS:
+ return injections != null && !injections.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (startKind: ");
+ result.append(startKind);
+ result.append(", classname: ");
+ result.append(classname);
+ result.append(')');
+ return result.toString();
+ }
+
+} //ServiceDescImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServiceFactoryDescImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServiceFactoryDescImpl.java
new file mode 100644
index 00000000000..a64604690a4
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServiceFactoryDescImpl.java
@@ -0,0 +1,39 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceFactoryDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Service Factory Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class ServiceFactoryDescImpl extends ServiceDescImpl implements ServiceFactoryDesc {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceFactoryDescImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.SERVICE_FACTORY_DESC;
+ }
+
+} //ServiceFactoryDescImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServiceSetDescImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServiceSetDescImpl.java
new file mode 100644
index 00000000000..8990765f33b
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServiceSetDescImpl.java
@@ -0,0 +1,383 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.EObjectResolvingEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Service Set Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceSetDescImpl#getServices <em>Services</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceSetDescImpl#getOwnedServices <em>Owned Services</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceSetDescImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceSetDescImpl#getExtends <em>Extends</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl.ServiceSetDescImpl#getDescription <em>Description</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ServiceSetDescImpl extends EObjectImpl implements ServiceSetDesc {
+ /**
+ * The cached value of the '{@link #getServices() <em>Services</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getServices()
+ * @generated
+ * @ordered
+ */
+ protected EList<AbstractServiceDesc> services;
+
+ /**
+ * The cached value of the '{@link #getOwnedServices() <em>Owned Services</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getOwnedServices()
+ * @generated
+ * @ordered
+ */
+ protected EList<AbstractServiceDesc> ownedServices;
+
+ /**
+ * 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 cached value of the '{@link #getExtends() <em>Extends</em>}' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getExtends()
+ * @generated
+ * @ordered
+ */
+ protected EList<ServiceSetDesc> extends_;
+
+ /**
+ * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceSetDescImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorsPackage.Literals.SERVICE_SET_DESC;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<AbstractServiceDesc> getServices() {
+ if (services == null) {
+ services = new EObjectResolvingEList<AbstractServiceDesc>(AbstractServiceDesc.class, this, ServicedescriptorsPackage.SERVICE_SET_DESC__SERVICES);
+ }
+ return services;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<AbstractServiceDesc> getOwnedServices() {
+ if (ownedServices == null) {
+ ownedServices = new EObjectContainmentWithInverseEList<AbstractServiceDesc>(AbstractServiceDesc.class, this, ServicedescriptorsPackage.SERVICE_SET_DESC__OWNED_SERVICES, ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC__PARENT);
+ }
+ return ownedServices;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setName(String newName) {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.SERVICE_SET_DESC__NAME, oldName, name));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<ServiceSetDesc> getExtends() {
+ if (extends_ == null) {
+ extends_ = new EObjectResolvingEList<ServiceSetDesc>(ServiceSetDesc.class, this, ServicedescriptorsPackage.SERVICE_SET_DESC__EXTENDS);
+ }
+ return extends_;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDescription(String newDescription) {
+ String oldDescription = description;
+ description = newDescription;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorsPackage.SERVICE_SET_DESC__DESCRIPTION, oldDescription, description));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public AbstractServiceDesc getServiceDesc(String serviceId) {
+ if(serviceId == null) {
+ return null;
+ }
+
+ for( AbstractServiceDesc desc : getServices()) {
+ if( serviceId.equals(desc.getName() ) ) {
+ return desc;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public boolean servicesContains(String serviceId) {
+ return getServiceDesc(serviceId) != null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__OWNED_SERVICES:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getOwnedServices()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__OWNED_SERVICES:
+ return ((InternalEList<?>)getOwnedServices()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__SERVICES:
+ return getServices();
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__OWNED_SERVICES:
+ return getOwnedServices();
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__NAME:
+ return getName();
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__EXTENDS:
+ return getExtends();
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__DESCRIPTION:
+ return getDescription();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__SERVICES:
+ getServices().clear();
+ getServices().addAll((Collection<? extends AbstractServiceDesc>)newValue);
+ return;
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__OWNED_SERVICES:
+ getOwnedServices().clear();
+ getOwnedServices().addAll((Collection<? extends AbstractServiceDesc>)newValue);
+ return;
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__NAME:
+ setName((String)newValue);
+ return;
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__EXTENDS:
+ getExtends().clear();
+ getExtends().addAll((Collection<? extends ServiceSetDesc>)newValue);
+ return;
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__DESCRIPTION:
+ setDescription((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__SERVICES:
+ getServices().clear();
+ return;
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__OWNED_SERVICES:
+ getOwnedServices().clear();
+ return;
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__EXTENDS:
+ getExtends().clear();
+ return;
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__DESCRIPTION:
+ setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__SERVICES:
+ return services != null && !services.isEmpty();
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__OWNED_SERVICES:
+ return ownedServices != null && !ownedServices.isEmpty();
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__EXTENDS:
+ return extends_ != null && !extends_.isEmpty();
+ case ServicedescriptorsPackage.SERVICE_SET_DESC__DESCRIPTION:
+ return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (name: ");
+ result.append(name);
+ result.append(", description: ");
+ result.append(description);
+ result.append(')');
+ return result.toString();
+ }
+
+} //ServiceSetDescImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServicedescriptorsFactoryImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServicedescriptorsFactoryImpl.java
new file mode 100644
index 00000000000..efb3122e27c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServicedescriptorsFactoryImpl.java
@@ -0,0 +1,333 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorsFactoryImpl extends EFactoryImpl implements ServicedescriptorsFactory {
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static ServicedescriptorsFactory init() {
+ try {
+ ServicedescriptorsFactory theServicedescriptorsFactory = (ServicedescriptorsFactory)EPackage.Registry.INSTANCE.getEFactory("org.eclipse.papyrus..infra.core.servicedescriptors");
+ if (theServicedescriptorsFactory != null) {
+ return theServicedescriptorsFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new ServicedescriptorsFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorsFactoryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case ServicedescriptorsPackage.REGISTRY_DESC: return createRegistryDesc();
+ case ServicedescriptorsPackage.SERVICE_SET_DESC: return createServiceSetDesc();
+ case ServicedescriptorsPackage.SERVICE_DESC: return createServiceDesc();
+ case ServicedescriptorsPackage.ALIAS_DESC: return createAliasDesc();
+ case ServicedescriptorsPackage.DESCRIPTORS: return createDescriptors();
+ case ServicedescriptorsPackage.PROPERTY_INJECTION: return createPropertyInjection();
+ case ServicedescriptorsPackage.METHOD_INJECTION: return createMethodInjection();
+ case ServicedescriptorsPackage.PARAMETER_INJECTION: return createParameterInjection();
+ case ServicedescriptorsPackage.INJECTED_SERVICE: return createInjectedService();
+ case ServicedescriptorsPackage.OPAQUE_INJECTED_VALUE: return createOpaqueInjectedValue();
+ case ServicedescriptorsPackage.CONSTRUCTOR_INJECTION: return createConstructorInjection();
+ case ServicedescriptorsPackage.SERVICE_FACTORY_DESC: return createServiceFactoryDesc();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object createFromString(EDataType eDataType, String initialValue) {
+ switch (eDataType.getClassifierID()) {
+ case ServicedescriptorsPackage.STARTUP_KIND:
+ return createStartupKindFromString(eDataType, initialValue);
+ case ServicedescriptorsPackage.STRING:
+ return createStringFromString(eDataType, initialValue);
+ case ServicedescriptorsPackage.BOOLEAN:
+ return createbooleanFromString(eDataType, initialValue);
+ case ServicedescriptorsPackage.INT:
+ return createintFromString(eDataType, initialValue);
+ default:
+ throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String convertToString(EDataType eDataType, Object instanceValue) {
+ switch (eDataType.getClassifierID()) {
+ case ServicedescriptorsPackage.STARTUP_KIND:
+ return convertStartupKindToString(eDataType, instanceValue);
+ case ServicedescriptorsPackage.STRING:
+ return convertStringToString(eDataType, instanceValue);
+ case ServicedescriptorsPackage.BOOLEAN:
+ return convertbooleanToString(eDataType, instanceValue);
+ case ServicedescriptorsPackage.INT:
+ return convertintToString(eDataType, instanceValue);
+ default:
+ throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public RegistryDesc createRegistryDesc() {
+ RegistryDescImpl registryDesc = new RegistryDescImpl();
+ return registryDesc;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceSetDesc createServiceSetDesc() {
+ ServiceSetDescImpl serviceSetDesc = new ServiceSetDescImpl();
+ return serviceSetDesc;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceDesc createServiceDesc() {
+ ServiceDescImpl serviceDesc = new ServiceDescImpl();
+ return serviceDesc;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AliasDesc createAliasDesc() {
+ AliasDescImpl aliasDesc = new AliasDescImpl();
+ return aliasDesc;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Descriptors createDescriptors() {
+ DescriptorsImpl descriptors = new DescriptorsImpl();
+ return descriptors;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PropertyInjection createPropertyInjection() {
+ PropertyInjectionImpl propertyInjection = new PropertyInjectionImpl();
+ return propertyInjection;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MethodInjection createMethodInjection() {
+ MethodInjectionImpl methodInjection = new MethodInjectionImpl();
+ return methodInjection;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ParameterInjection createParameterInjection() {
+ ParameterInjectionImpl parameterInjection = new ParameterInjectionImpl();
+ return parameterInjection;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InjectedService createInjectedService() {
+ InjectedServiceImpl injectedService = new InjectedServiceImpl();
+ return injectedService;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public OpaqueInjectedValue createOpaqueInjectedValue() {
+ OpaqueInjectedValueImpl opaqueInjectedValue = new OpaqueInjectedValueImpl();
+ return opaqueInjectedValue;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ConstructorInjection createConstructorInjection() {
+ ConstructorInjectionImpl constructorInjection = new ConstructorInjectionImpl();
+ return constructorInjection;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceFactoryDesc createServiceFactoryDesc() {
+ ServiceFactoryDescImpl serviceFactoryDesc = new ServiceFactoryDescImpl();
+ return serviceFactoryDesc;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public StartupKind createStartupKindFromString(EDataType eDataType, String initialValue) {
+ StartupKind result = StartupKind.get(initialValue);
+ if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+ return result;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String convertStartupKindToString(EDataType eDataType, Object instanceValue) {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String createStringFromString(EDataType eDataType, String initialValue) {
+ return (String)super.createFromString(eDataType, initialValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String convertStringToString(EDataType eDataType, Object instanceValue) {
+ return super.convertToString(eDataType, instanceValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Boolean createbooleanFromString(EDataType eDataType, String initialValue) {
+ return (Boolean)super.createFromString(eDataType, initialValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String convertbooleanToString(EDataType eDataType, Object instanceValue) {
+ return super.convertToString(eDataType, instanceValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Integer createintFromString(EDataType eDataType, String initialValue) {
+ return (Integer)super.createFromString(eDataType, initialValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String convertintToString(EDataType eDataType, Object instanceValue) {
+ return super.convertToString(eDataType, instanceValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorsPackage getServicedescriptorsPackage() {
+ return (ServicedescriptorsPackage)getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static ServicedescriptorsPackage getPackage() {
+ return ServicedescriptorsPackage.eINSTANCE;
+ }
+
+} //ServicedescriptorsFactoryImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServicedescriptorsPackageImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServicedescriptorsPackageImpl.java
new file mode 100644
index 00000000000..69a75f2e80d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/impl/ServicedescriptorsPackageImpl.java
@@ -0,0 +1,1008 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.impl;
+
+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;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractMethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ConstructorInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceFactoryDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.StartupKind;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorsPackageImpl extends EPackageImpl implements ServicedescriptorsPackage {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass registryDescEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass serviceSetDescEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass abstractServiceDescEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass serviceDescEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass featureInjectionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass aliasDescEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass descriptorsEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass propertyInjectionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass injectedValueEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass methodInjectionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass abstractMethodInjectionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass parameterInjectionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass injectedServiceEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass opaqueInjectedValueEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass constructorInjectionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass serviceFactoryDescEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EEnum startupKindEEnum = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EDataType stringEDataType = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EDataType booleanEDataType = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EDataType intEDataType = null;
+
+ /**
+ * Creates an instance of the model <b>Package</b>, registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * <p>Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private ServicedescriptorsPackageImpl() {
+ super(eNS_URI, ServicedescriptorsFactory.eINSTANCE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+ *
+ * <p>This method is used to initialize {@link ServicedescriptorsPackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static ServicedescriptorsPackage init() {
+ if (isInited) return (ServicedescriptorsPackage)EPackage.Registry.INSTANCE.getEPackage(ServicedescriptorsPackage.eNS_URI);
+
+ // Obtain or create and register package
+ ServicedescriptorsPackageImpl theServicedescriptorsPackage = (ServicedescriptorsPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ServicedescriptorsPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ServicedescriptorsPackageImpl());
+
+ isInited = true;
+
+ // Create package meta-data objects
+ theServicedescriptorsPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theServicedescriptorsPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theServicedescriptorsPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(ServicedescriptorsPackage.eNS_URI, theServicedescriptorsPackage);
+ return theServicedescriptorsPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getRegistryDesc() {
+ return registryDescEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getRegistryDesc_Name() {
+ return (EAttribute)registryDescEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getRegistryDesc_Parents() {
+ return (EReference)registryDescEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getRegistryDesc_Children() {
+ return (EReference)registryDescEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getRegistryDesc_Extends() {
+ return (EReference)registryDescEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getRegistryDesc_Description() {
+ return (EAttribute)registryDescEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getRegistryDesc_ServiceSets() {
+ return (EReference)registryDescEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getRegistryDesc_IsUnique() {
+ return (EAttribute)registryDescEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getRegistryDesc_Services() {
+ return (EReference)registryDescEClass.getEStructuralFeatures().get(7);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getServiceSetDesc() {
+ return serviceSetDescEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getServiceSetDesc_Services() {
+ return (EReference)serviceSetDescEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getServiceSetDesc_OwnedServices() {
+ return (EReference)serviceSetDescEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getServiceSetDesc_Name() {
+ return (EAttribute)serviceSetDescEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getServiceSetDesc_Extends() {
+ return (EReference)serviceSetDescEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getServiceSetDesc_Description() {
+ return (EAttribute)serviceSetDescEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getAbstractServiceDesc() {
+ return abstractServiceDescEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAbstractServiceDesc_Name() {
+ return (EAttribute)abstractServiceDescEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getAbstractServiceDesc_DependsOn() {
+ return (EReference)abstractServiceDescEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAbstractServiceDesc_Description() {
+ return (EAttribute)abstractServiceDescEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAbstractServiceDesc_Priority() {
+ return (EAttribute)abstractServiceDescEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAbstractServiceDesc_BundleID() {
+ return (EAttribute)abstractServiceDescEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getAbstractServiceDesc_Parent() {
+ return (EReference)abstractServiceDescEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAbstractServiceDesc_DependsOnIds() {
+ return (EAttribute)abstractServiceDescEClass.getEStructuralFeatures().get(6);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getServiceDesc() {
+ return serviceDescEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getServiceDesc_StartKind() {
+ return (EAttribute)serviceDescEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getServiceDesc_Classname() {
+ return (EAttribute)serviceDescEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getServiceDesc_Injections() {
+ return (EReference)serviceDescEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getFeatureInjection() {
+ return featureInjectionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getFeatureInjection_Description() {
+ return (EAttribute)featureInjectionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getAliasDesc() {
+ return aliasDescEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getAliasDesc_AliasedService() {
+ return (EReference)aliasDescEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAliasDesc_AliasedServiceId() {
+ return (EAttribute)aliasDescEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getDescriptors() {
+ return descriptorsEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getDescriptors_Registries() {
+ return (EReference)descriptorsEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getDescriptors_ServiceSets() {
+ return (EReference)descriptorsEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getPropertyInjection() {
+ return propertyInjectionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getPropertyInjection_PropertyName() {
+ return (EAttribute)propertyInjectionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getPropertyInjection_Values() {
+ return (EReference)propertyInjectionEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getInjectedValue() {
+ return injectedValueEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getInjectedValue_Description() {
+ return (EAttribute)injectedValueEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getMethodInjection() {
+ return methodInjectionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getMethodInjection_MethodName() {
+ return (EAttribute)methodInjectionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getAbstractMethodInjection() {
+ return abstractMethodInjectionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getAbstractMethodInjection_Parameters() {
+ return (EReference)abstractMethodInjectionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getParameterInjection() {
+ return parameterInjectionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getParameterInjection_ParameterName() {
+ return (EAttribute)parameterInjectionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getParameterInjection_Values() {
+ return (EReference)parameterInjectionEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getInjectedService() {
+ return injectedServiceEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getInjectedService_Service() {
+ return (EReference)injectedServiceEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getOpaqueInjectedValue() {
+ return opaqueInjectedValueEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getOpaqueInjectedValue_Value() {
+ return (EAttribute)opaqueInjectedValueEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getConstructorInjection() {
+ return constructorInjectionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getServiceFactoryDesc() {
+ return serviceFactoryDescEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EEnum getStartupKind() {
+ return startupKindEEnum;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EDataType getString() {
+ return stringEDataType;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EDataType getboolean() {
+ return booleanEDataType;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EDataType getint() {
+ return intEDataType;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorsFactory getServicedescriptorsFactory() {
+ return (ServicedescriptorsFactory)getEFactoryInstance();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ registryDescEClass = createEClass(REGISTRY_DESC);
+ createEAttribute(registryDescEClass, REGISTRY_DESC__NAME);
+ createEReference(registryDescEClass, REGISTRY_DESC__PARENTS);
+ createEReference(registryDescEClass, REGISTRY_DESC__CHILDREN);
+ createEReference(registryDescEClass, REGISTRY_DESC__EXTENDS);
+ createEAttribute(registryDescEClass, REGISTRY_DESC__DESCRIPTION);
+ createEReference(registryDescEClass, REGISTRY_DESC__SERVICE_SETS);
+ createEAttribute(registryDescEClass, REGISTRY_DESC__IS_UNIQUE);
+ createEReference(registryDescEClass, REGISTRY_DESC__SERVICES);
+
+ serviceSetDescEClass = createEClass(SERVICE_SET_DESC);
+ createEReference(serviceSetDescEClass, SERVICE_SET_DESC__SERVICES);
+ createEReference(serviceSetDescEClass, SERVICE_SET_DESC__OWNED_SERVICES);
+ createEAttribute(serviceSetDescEClass, SERVICE_SET_DESC__NAME);
+ createEReference(serviceSetDescEClass, SERVICE_SET_DESC__EXTENDS);
+ createEAttribute(serviceSetDescEClass, SERVICE_SET_DESC__DESCRIPTION);
+
+ abstractServiceDescEClass = createEClass(ABSTRACT_SERVICE_DESC);
+ createEAttribute(abstractServiceDescEClass, ABSTRACT_SERVICE_DESC__NAME);
+ createEReference(abstractServiceDescEClass, ABSTRACT_SERVICE_DESC__DEPENDS_ON);
+ createEAttribute(abstractServiceDescEClass, ABSTRACT_SERVICE_DESC__DESCRIPTION);
+ createEAttribute(abstractServiceDescEClass, ABSTRACT_SERVICE_DESC__PRIORITY);
+ createEAttribute(abstractServiceDescEClass, ABSTRACT_SERVICE_DESC__BUNDLE_ID);
+ createEReference(abstractServiceDescEClass, ABSTRACT_SERVICE_DESC__PARENT);
+ createEAttribute(abstractServiceDescEClass, ABSTRACT_SERVICE_DESC__DEPENDS_ON_IDS);
+
+ serviceDescEClass = createEClass(SERVICE_DESC);
+ createEAttribute(serviceDescEClass, SERVICE_DESC__START_KIND);
+ createEAttribute(serviceDescEClass, SERVICE_DESC__CLASSNAME);
+ createEReference(serviceDescEClass, SERVICE_DESC__INJECTIONS);
+
+ featureInjectionEClass = createEClass(FEATURE_INJECTION);
+ createEAttribute(featureInjectionEClass, FEATURE_INJECTION__DESCRIPTION);
+
+ aliasDescEClass = createEClass(ALIAS_DESC);
+ createEReference(aliasDescEClass, ALIAS_DESC__ALIASED_SERVICE);
+ createEAttribute(aliasDescEClass, ALIAS_DESC__ALIASED_SERVICE_ID);
+
+ descriptorsEClass = createEClass(DESCRIPTORS);
+ createEReference(descriptorsEClass, DESCRIPTORS__REGISTRIES);
+ createEReference(descriptorsEClass, DESCRIPTORS__SERVICE_SETS);
+
+ propertyInjectionEClass = createEClass(PROPERTY_INJECTION);
+ createEAttribute(propertyInjectionEClass, PROPERTY_INJECTION__PROPERTY_NAME);
+ createEReference(propertyInjectionEClass, PROPERTY_INJECTION__VALUES);
+
+ injectedValueEClass = createEClass(INJECTED_VALUE);
+ createEAttribute(injectedValueEClass, INJECTED_VALUE__DESCRIPTION);
+
+ methodInjectionEClass = createEClass(METHOD_INJECTION);
+ createEAttribute(methodInjectionEClass, METHOD_INJECTION__METHOD_NAME);
+
+ abstractMethodInjectionEClass = createEClass(ABSTRACT_METHOD_INJECTION);
+ createEReference(abstractMethodInjectionEClass, ABSTRACT_METHOD_INJECTION__PARAMETERS);
+
+ parameterInjectionEClass = createEClass(PARAMETER_INJECTION);
+ createEAttribute(parameterInjectionEClass, PARAMETER_INJECTION__PARAMETER_NAME);
+ createEReference(parameterInjectionEClass, PARAMETER_INJECTION__VALUES);
+
+ injectedServiceEClass = createEClass(INJECTED_SERVICE);
+ createEReference(injectedServiceEClass, INJECTED_SERVICE__SERVICE);
+
+ opaqueInjectedValueEClass = createEClass(OPAQUE_INJECTED_VALUE);
+ createEAttribute(opaqueInjectedValueEClass, OPAQUE_INJECTED_VALUE__VALUE);
+
+ constructorInjectionEClass = createEClass(CONSTRUCTOR_INJECTION);
+
+ serviceFactoryDescEClass = createEClass(SERVICE_FACTORY_DESC);
+
+ // Create enums
+ startupKindEEnum = createEEnum(STARTUP_KIND);
+
+ // Create data types
+ stringEDataType = createEDataType(STRING);
+ booleanEDataType = createEDataType(BOOLEAN);
+ intEDataType = createEDataType(INT);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+ serviceDescEClass.getESuperTypes().add(this.getAbstractServiceDesc());
+ aliasDescEClass.getESuperTypes().add(this.getAbstractServiceDesc());
+ propertyInjectionEClass.getESuperTypes().add(this.getFeatureInjection());
+ methodInjectionEClass.getESuperTypes().add(this.getAbstractMethodInjection());
+ abstractMethodInjectionEClass.getESuperTypes().add(this.getFeatureInjection());
+ injectedServiceEClass.getESuperTypes().add(this.getInjectedValue());
+ opaqueInjectedValueEClass.getESuperTypes().add(this.getInjectedValue());
+ constructorInjectionEClass.getESuperTypes().add(this.getAbstractMethodInjection());
+ serviceFactoryDescEClass.getESuperTypes().add(this.getServiceDesc());
+
+ // Initialize classes and features; add operations and parameters
+ initEClass(registryDescEClass, RegistryDesc.class, "RegistryDesc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getRegistryDesc_Name(), this.getString(), "name", null, 1, 1, RegistryDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getRegistryDesc_Parents(), this.getRegistryDesc(), this.getRegistryDesc_Children(), "parents", null, 0, -1, RegistryDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getRegistryDesc_Children(), this.getRegistryDesc(), this.getRegistryDesc_Parents(), "children", null, 0, -1, RegistryDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getRegistryDesc_Extends(), this.getRegistryDesc(), null, "extends", null, 0, -1, RegistryDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getRegistryDesc_Description(), this.getString(), "description", null, 1, 1, RegistryDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getRegistryDesc_ServiceSets(), this.getServiceSetDesc(), null, "serviceSets", null, 0, -1, RegistryDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getRegistryDesc_IsUnique(), this.getboolean(), "isUnique", null, 1, 1, RegistryDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getRegistryDesc_Services(), this.getAbstractServiceDesc(), null, "services", null, 0, -1, RegistryDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ EOperation op = addEOperation(registryDescEClass, this.getAbstractServiceDesc(), "getServiceDesc", 1, 1, IS_UNIQUE, !IS_ORDERED);
+ addEParameter(op, this.getString(), "serviceId", 1, 1, IS_UNIQUE, !IS_ORDERED);
+
+ op = addEOperation(registryDescEClass, this.getServiceSetDesc(), "getServiceSetDesc", 1, 1, IS_UNIQUE, !IS_ORDERED);
+ addEParameter(op, this.getString(), "serviceSetsId", 1, 1, IS_UNIQUE, !IS_ORDERED);
+
+ op = addEOperation(registryDescEClass, this.getboolean(), "serviceSetsContains", 1, 1, IS_UNIQUE, !IS_ORDERED);
+ addEParameter(op, this.getString(), "serviceSetsId", 1, 1, IS_UNIQUE, !IS_ORDERED);
+
+ op = addEOperation(registryDescEClass, this.getboolean(), "servicesContains", 1, 1, IS_UNIQUE, !IS_ORDERED);
+ addEParameter(op, this.getString(), "serviceId", 1, 1, IS_UNIQUE, !IS_ORDERED);
+
+ initEClass(serviceSetDescEClass, ServiceSetDesc.class, "ServiceSetDesc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getServiceSetDesc_Services(), this.getAbstractServiceDesc(), null, "services", null, 0, -1, ServiceSetDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getServiceSetDesc_OwnedServices(), this.getAbstractServiceDesc(), this.getAbstractServiceDesc_Parent(), "ownedServices", null, 0, -1, ServiceSetDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getServiceSetDesc_Name(), this.getString(), "name", null, 1, 1, ServiceSetDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getServiceSetDesc_Extends(), this.getServiceSetDesc(), null, "extends", null, 0, -1, ServiceSetDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getServiceSetDesc_Description(), this.getString(), "description", null, 1, 1, ServiceSetDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ op = addEOperation(serviceSetDescEClass, this.getAbstractServiceDesc(), "getServiceDesc", 1, 1, IS_UNIQUE, !IS_ORDERED);
+ addEParameter(op, this.getString(), "serviceId", 1, 1, IS_UNIQUE, !IS_ORDERED);
+
+ op = addEOperation(serviceSetDescEClass, this.getboolean(), "servicesContains", 1, 1, IS_UNIQUE, !IS_ORDERED);
+ addEParameter(op, this.getString(), "serviceId", 1, 1, IS_UNIQUE, !IS_ORDERED);
+
+ initEClass(abstractServiceDescEClass, AbstractServiceDesc.class, "AbstractServiceDesc", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getAbstractServiceDesc_Name(), this.getString(), "name", null, 1, 1, AbstractServiceDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getAbstractServiceDesc_DependsOn(), this.getAbstractServiceDesc(), null, "dependsOn", null, 0, -1, AbstractServiceDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getAbstractServiceDesc_Description(), this.getString(), "description", null, 1, 1, AbstractServiceDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getAbstractServiceDesc_Priority(), this.getint(), "priority", null, 1, 1, AbstractServiceDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getAbstractServiceDesc_BundleID(), this.getString(), "bundleID", null, 1, 1, AbstractServiceDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getAbstractServiceDesc_Parent(), this.getServiceSetDesc(), this.getServiceSetDesc_OwnedServices(), "parent", null, 1, 1, AbstractServiceDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getAbstractServiceDesc_DependsOnIds(), this.getString(), "dependsOnIds", null, 0, -1, AbstractServiceDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(serviceDescEClass, ServiceDesc.class, "ServiceDesc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getServiceDesc_StartKind(), this.getStartupKind(), "startKind", "lazy", 1, 1, ServiceDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getServiceDesc_Classname(), this.getString(), "classname", null, 1, 1, ServiceDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getServiceDesc_Injections(), this.getFeatureInjection(), null, "injections", null, 0, -1, ServiceDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(featureInjectionEClass, FeatureInjection.class, "FeatureInjection", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getFeatureInjection_Description(), this.getString(), "description", null, 1, 1, FeatureInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(aliasDescEClass, AliasDesc.class, "AliasDesc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getAliasDesc_AliasedService(), this.getServiceDesc(), null, "aliasedService", null, 1, 1, AliasDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getAliasDesc_AliasedServiceId(), this.getString(), "aliasedServiceId", null, 1, 1, AliasDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(descriptorsEClass, Descriptors.class, "Descriptors", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getDescriptors_Registries(), this.getRegistryDesc(), null, "registries", null, 0, -1, Descriptors.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getDescriptors_ServiceSets(), this.getServiceSetDesc(), null, "serviceSets", null, 0, -1, Descriptors.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ op = addEOperation(descriptorsEClass, this.getRegistryDesc(), "getRegistryDesc", 1, 1, IS_UNIQUE, !IS_ORDERED);
+ addEParameter(op, this.getString(), "name", 1, 1, IS_UNIQUE, !IS_ORDERED);
+
+ op = addEOperation(descriptorsEClass, this.getServiceSetDesc(), "getServiceSetDesc", 1, 1, IS_UNIQUE, !IS_ORDERED);
+ addEParameter(op, this.getString(), "name", 1, 1, IS_UNIQUE, !IS_ORDERED);
+
+ initEClass(propertyInjectionEClass, PropertyInjection.class, "PropertyInjection", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getPropertyInjection_PropertyName(), this.getString(), "propertyName", null, 1, 1, PropertyInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getPropertyInjection_Values(), this.getInjectedValue(), null, "values", null, 0, -1, PropertyInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(injectedValueEClass, InjectedValue.class, "InjectedValue", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getInjectedValue_Description(), this.getString(), "description", null, 1, 1, InjectedValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(methodInjectionEClass, MethodInjection.class, "MethodInjection", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getMethodInjection_MethodName(), this.getString(), "methodName", null, 1, 1, MethodInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(abstractMethodInjectionEClass, AbstractMethodInjection.class, "AbstractMethodInjection", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getAbstractMethodInjection_Parameters(), this.getParameterInjection(), null, "parameters", null, 0, -1, AbstractMethodInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(parameterInjectionEClass, ParameterInjection.class, "ParameterInjection", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getParameterInjection_ParameterName(), this.getString(), "parameterName", null, 1, 1, ParameterInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getParameterInjection_Values(), this.getInjectedValue(), null, "values", null, 0, -1, ParameterInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(injectedServiceEClass, InjectedService.class, "InjectedService", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getInjectedService_Service(), this.getAbstractServiceDesc(), null, "service", null, 1, 1, InjectedService.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(opaqueInjectedValueEClass, OpaqueInjectedValue.class, "OpaqueInjectedValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getOpaqueInjectedValue_Value(), this.getString(), "value", null, 1, 1, OpaqueInjectedValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(constructorInjectionEClass, ConstructorInjection.class, "ConstructorInjection", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(serviceFactoryDescEClass, ServiceFactoryDesc.class, "ServiceFactoryDesc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ // Initialize enums and add enum literals
+ initEEnum(startupKindEEnum, StartupKind.class, "StartupKind");
+ addEEnumLiteral(startupKindEEnum, StartupKind.LAZY);
+ addEEnumLiteral(startupKindEEnum, StartupKind.STARTUP);
+
+ // Initialize data types
+ initEDataType(stringEDataType, String.class, "String", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
+ initEDataType(booleanEDataType, boolean.class, "boolean", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
+ initEDataType(intEDataType, int.class, "int", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
+
+ // Create resource
+ createResource(eNS_URI);
+ }
+
+} //ServicedescriptorsPackageImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/util/ServicedescriptorsAdapterFactory.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/util/ServicedescriptorsAdapterFactory.java
new file mode 100644
index 00000000000..02c31181873
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/util/ServicedescriptorsAdapterFactory.java
@@ -0,0 +1,390 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage
+ * @generated
+ */
+public class ServicedescriptorsAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static ServicedescriptorsPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorsAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = ServicedescriptorsPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ * <!-- begin-user-doc -->
+ * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+ * <!-- end-user-doc -->
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the <code>createXXX</code> methods.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServicedescriptorsSwitch<Adapter> modelSwitch =
+ new ServicedescriptorsSwitch<Adapter>() {
+ @Override
+ public Adapter caseRegistryDesc(RegistryDesc object) {
+ return createRegistryDescAdapter();
+ }
+ @Override
+ public Adapter caseServiceSetDesc(ServiceSetDesc object) {
+ return createServiceSetDescAdapter();
+ }
+ @Override
+ public Adapter caseAbstractServiceDesc(AbstractServiceDesc object) {
+ return createAbstractServiceDescAdapter();
+ }
+ @Override
+ public Adapter caseServiceDesc(ServiceDesc object) {
+ return createServiceDescAdapter();
+ }
+ @Override
+ public Adapter caseFeatureInjection(FeatureInjection object) {
+ return createFeatureInjectionAdapter();
+ }
+ @Override
+ public Adapter caseAliasDesc(AliasDesc object) {
+ return createAliasDescAdapter();
+ }
+ @Override
+ public Adapter caseDescriptors(Descriptors object) {
+ return createDescriptorsAdapter();
+ }
+ @Override
+ public Adapter casePropertyInjection(PropertyInjection object) {
+ return createPropertyInjectionAdapter();
+ }
+ @Override
+ public Adapter caseInjectedValue(InjectedValue object) {
+ return createInjectedValueAdapter();
+ }
+ @Override
+ public Adapter caseMethodInjection(MethodInjection object) {
+ return createMethodInjectionAdapter();
+ }
+ @Override
+ public Adapter caseAbstractMethodInjection(AbstractMethodInjection object) {
+ return createAbstractMethodInjectionAdapter();
+ }
+ @Override
+ public Adapter caseParameterInjection(ParameterInjection object) {
+ return createParameterInjectionAdapter();
+ }
+ @Override
+ public Adapter caseInjectedService(InjectedService object) {
+ return createInjectedServiceAdapter();
+ }
+ @Override
+ public Adapter caseOpaqueInjectedValue(OpaqueInjectedValue object) {
+ return createOpaqueInjectedValueAdapter();
+ }
+ @Override
+ public Adapter caseConstructorInjection(ConstructorInjection object) {
+ return createConstructorInjectionAdapter();
+ }
+ @Override
+ public Adapter caseServiceFactoryDesc(ServiceFactoryDesc object) {
+ return createServiceFactoryDescAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the <code>target</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param target the object to adapt.
+ * @return the adapter for the <code>target</code>.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc <em>Registry Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.RegistryDesc
+ * @generated
+ */
+ public Adapter createRegistryDescAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc <em>Service Set Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceSetDesc
+ * @generated
+ */
+ public Adapter createServiceSetDescAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc <em>Abstract Service Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractServiceDesc
+ * @generated
+ */
+ public Adapter createAbstractServiceDescAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc <em>Service Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceDesc
+ * @generated
+ */
+ public Adapter createServiceDescAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection <em>Feature Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.FeatureInjection
+ * @generated
+ */
+ public Adapter createFeatureInjectionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc <em>Alias Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AliasDesc
+ * @generated
+ */
+ public Adapter createAliasDescAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors <em>Descriptors</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.Descriptors
+ * @generated
+ */
+ public Adapter createDescriptorsAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection <em>Property Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.PropertyInjection
+ * @generated
+ */
+ public Adapter createPropertyInjectionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue <em>Injected Value</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedValue
+ * @generated
+ */
+ public Adapter createInjectedValueAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection <em>Method Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.MethodInjection
+ * @generated
+ */
+ public Adapter createMethodInjectionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractMethodInjection <em>Abstract Method Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.AbstractMethodInjection
+ * @generated
+ */
+ public Adapter createAbstractMethodInjectionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection <em>Parameter Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ParameterInjection
+ * @generated
+ */
+ public Adapter createParameterInjectionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService <em>Injected Service</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.InjectedService
+ * @generated
+ */
+ public Adapter createInjectedServiceAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue <em>Opaque Injected Value</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.OpaqueInjectedValue
+ * @generated
+ */
+ public Adapter createOpaqueInjectedValueAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ConstructorInjection <em>Constructor Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ConstructorInjection
+ * @generated
+ */
+ public Adapter createConstructorInjectionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceFactoryDesc <em>Service Factory Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServiceFactoryDesc
+ * @generated
+ */
+ public Adapter createServiceFactoryDescAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //ServicedescriptorsAdapterFactory
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/util/ServicedescriptorsSwitch.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/util/ServicedescriptorsSwitch.java
new file mode 100644
index 00000000000..f8a0e475ad5
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptors/util/ServicedescriptorsSwitch.java
@@ -0,0 +1,437 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptors.ServicedescriptorsPackage
+ * @generated
+ */
+public class ServicedescriptorsSwitch<T> extends Switch<T> {
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static ServicedescriptorsPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorsSwitch() {
+ if (modelPackage == null) {
+ modelPackage = ServicedescriptorsPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @parameter ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case ServicedescriptorsPackage.REGISTRY_DESC: {
+ RegistryDesc registryDesc = (RegistryDesc)theEObject;
+ T result = caseRegistryDesc(registryDesc);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.SERVICE_SET_DESC: {
+ ServiceSetDesc serviceSetDesc = (ServiceSetDesc)theEObject;
+ T result = caseServiceSetDesc(serviceSetDesc);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.ABSTRACT_SERVICE_DESC: {
+ AbstractServiceDesc abstractServiceDesc = (AbstractServiceDesc)theEObject;
+ T result = caseAbstractServiceDesc(abstractServiceDesc);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.SERVICE_DESC: {
+ ServiceDesc serviceDesc = (ServiceDesc)theEObject;
+ T result = caseServiceDesc(serviceDesc);
+ if (result == null) result = caseAbstractServiceDesc(serviceDesc);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.FEATURE_INJECTION: {
+ FeatureInjection featureInjection = (FeatureInjection)theEObject;
+ T result = caseFeatureInjection(featureInjection);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.ALIAS_DESC: {
+ AliasDesc aliasDesc = (AliasDesc)theEObject;
+ T result = caseAliasDesc(aliasDesc);
+ if (result == null) result = caseAbstractServiceDesc(aliasDesc);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.DESCRIPTORS: {
+ Descriptors descriptors = (Descriptors)theEObject;
+ T result = caseDescriptors(descriptors);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.PROPERTY_INJECTION: {
+ PropertyInjection propertyInjection = (PropertyInjection)theEObject;
+ T result = casePropertyInjection(propertyInjection);
+ if (result == null) result = caseFeatureInjection(propertyInjection);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.INJECTED_VALUE: {
+ InjectedValue injectedValue = (InjectedValue)theEObject;
+ T result = caseInjectedValue(injectedValue);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.METHOD_INJECTION: {
+ MethodInjection methodInjection = (MethodInjection)theEObject;
+ T result = caseMethodInjection(methodInjection);
+ if (result == null) result = caseAbstractMethodInjection(methodInjection);
+ if (result == null) result = caseFeatureInjection(methodInjection);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.ABSTRACT_METHOD_INJECTION: {
+ AbstractMethodInjection abstractMethodInjection = (AbstractMethodInjection)theEObject;
+ T result = caseAbstractMethodInjection(abstractMethodInjection);
+ if (result == null) result = caseFeatureInjection(abstractMethodInjection);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.PARAMETER_INJECTION: {
+ ParameterInjection parameterInjection = (ParameterInjection)theEObject;
+ T result = caseParameterInjection(parameterInjection);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.INJECTED_SERVICE: {
+ InjectedService injectedService = (InjectedService)theEObject;
+ T result = caseInjectedService(injectedService);
+ if (result == null) result = caseInjectedValue(injectedService);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.OPAQUE_INJECTED_VALUE: {
+ OpaqueInjectedValue opaqueInjectedValue = (OpaqueInjectedValue)theEObject;
+ T result = caseOpaqueInjectedValue(opaqueInjectedValue);
+ if (result == null) result = caseInjectedValue(opaqueInjectedValue);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.CONSTRUCTOR_INJECTION: {
+ ConstructorInjection constructorInjection = (ConstructorInjection)theEObject;
+ T result = caseConstructorInjection(constructorInjection);
+ if (result == null) result = caseAbstractMethodInjection(constructorInjection);
+ if (result == null) result = caseFeatureInjection(constructorInjection);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorsPackage.SERVICE_FACTORY_DESC: {
+ ServiceFactoryDesc serviceFactoryDesc = (ServiceFactoryDesc)theEObject;
+ T result = caseServiceFactoryDesc(serviceFactoryDesc);
+ if (result == null) result = caseServiceDesc(serviceFactoryDesc);
+ if (result == null) result = caseAbstractServiceDesc(serviceFactoryDesc);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Registry Desc</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Registry Desc</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseRegistryDesc(RegistryDesc object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Service Set Desc</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Service Set Desc</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseServiceSetDesc(ServiceSetDesc object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Abstract Service Desc</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Abstract Service Desc</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseAbstractServiceDesc(AbstractServiceDesc object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Service Desc</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Service Desc</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseServiceDesc(ServiceDesc object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Feature Injection</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Feature Injection</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseFeatureInjection(FeatureInjection object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Alias Desc</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Alias Desc</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseAliasDesc(AliasDesc object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Descriptors</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Descriptors</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseDescriptors(Descriptors object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Property Injection</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Property Injection</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T casePropertyInjection(PropertyInjection object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Injected Value</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Injected Value</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseInjectedValue(InjectedValue object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Method Injection</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Method Injection</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseMethodInjection(MethodInjection object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Abstract Method Injection</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Abstract Method Injection</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseAbstractMethodInjection(AbstractMethodInjection object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Parameter Injection</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Parameter Injection</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseParameterInjection(ParameterInjection object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Injected Service</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Injected Service</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseInjectedService(InjectedService object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Opaque Injected Value</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Opaque Injected Value</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseOpaqueInjectedValue(OpaqueInjectedValue object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Constructor Injection</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Constructor Injection</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseConstructorInjection(ConstructorInjection object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Service Factory Desc</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Service Factory Desc</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseServiceFactoryDesc(ServiceFactoryDesc object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //ServicedescriptorsSwitch
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/AbstractMethodInjection.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/AbstractMethodInjection.java
new file mode 100644
index 00000000000..7f02e3fbc9c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/AbstractMethodInjection.java
@@ -0,0 +1,40 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Abstract Method Injection</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractMethodInjection#getParameters <em>Parameters</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getAbstractMethodInjection()
+ * @model abstract="true"
+ * @generated
+ */
+public interface AbstractMethodInjection extends FeatureInjection {
+ /**
+ * Returns the value of the '<em><b>Parameters</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Parameters</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>Parameters</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getAbstractMethodInjection_Parameters()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<ParameterInjection> getParameters();
+
+} // AbstractMethodInjection
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/AbstractServiceIdDesc.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/AbstractServiceIdDesc.java
new file mode 100644
index 00000000000..9abf1245d2f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/AbstractServiceIdDesc.java
@@ -0,0 +1,179 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Abstract Service Desc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getNamespace <em>Namespace</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getDescription <em>Description</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getDependsOn <em>Depends On</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getPriority <em>Priority</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getBundleID <em>Bundle ID</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getAbstractServiceIdDesc()
+ * @model abstract="true"
+ * @generated
+ */
+public interface AbstractServiceIdDesc 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.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getAbstractServiceIdDesc_Name()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#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>Namespace</b></em>' container reference.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getServiceDescriptors <em>Service Descriptors</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Namespace</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>Namespace</em>' container reference.
+ * @see #setNamespace(ServiceSetIdDesc)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getAbstractServiceIdDesc_Namespace()
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getServiceDescriptors
+ * @model opposite="serviceDescriptors" required="true" transient="false" ordered="false"
+ * @generated
+ */
+ ServiceSetIdDesc getNamespace();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getNamespace <em>Namespace</em>}' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Namespace</em>' container reference.
+ * @see #getNamespace()
+ * @generated
+ */
+ void setNamespace(ServiceSetIdDesc value);
+
+ /**
+ * Returns the value of the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Description</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Description</em>' attribute.
+ * @see #setDescription(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getAbstractServiceIdDesc_Description()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getDescription();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getDescription <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Description</em>' attribute.
+ * @see #getDescription()
+ * @generated
+ */
+ void setDescription(String value);
+
+ /**
+ * Returns the value of the '<em><b>Depends On</b></em>' attribute list.
+ * The list contents are of type {@link java.lang.String}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Depends On</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>Depends On</em>' attribute list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getAbstractServiceIdDesc_DependsOn()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String"
+ * @generated
+ */
+ EList<String> getDependsOn();
+
+ /**
+ * Returns the value of the '<em><b>Priority</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Priority</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Priority</em>' attribute.
+ * @see #setPriority(int)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getAbstractServiceIdDesc_Priority()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.int" required="true" ordered="false"
+ * @generated
+ */
+ int getPriority();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getPriority <em>Priority</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Priority</em>' attribute.
+ * @see #getPriority()
+ * @generated
+ */
+ void setPriority(int value);
+
+ /**
+ * Returns the value of the '<em><b>Bundle ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Bundle ID</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Bundle ID</em>' attribute.
+ * @see #setBundleID(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getAbstractServiceIdDesc_BundleID()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getBundleID();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getBundleID <em>Bundle ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Bundle ID</em>' attribute.
+ * @see #getBundleID()
+ * @generated
+ */
+ void setBundleID(String value);
+
+} // AbstractServiceIdDesc
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/AliasIdDesc.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/AliasIdDesc.java
new file mode 100644
index 00000000000..86cd83dbffd
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/AliasIdDesc.java
@@ -0,0 +1,49 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Alias Desc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc#getAliasedService <em>Aliased Service</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getAliasIdDesc()
+ * @model
+ * @generated
+ */
+public interface AliasIdDesc extends AbstractServiceIdDesc {
+ /**
+ * Returns the value of the '<em><b>Aliased Service</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Aliased Service</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Aliased Service</em>' attribute.
+ * @see #setAliasedService(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getAliasIdDesc_AliasedService()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getAliasedService();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc#getAliasedService <em>Aliased Service</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Aliased Service</em>' attribute.
+ * @see #getAliasedService()
+ * @generated
+ */
+ void setAliasedService(String value);
+
+} // AliasIdDesc
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ConstructorInjection.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ConstructorInjection.java
new file mode 100644
index 00000000000..a7563a65ed8
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ConstructorInjection.java
@@ -0,0 +1,17 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Constructor Injection</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getConstructorInjection()
+ * @model
+ * @generated
+ */
+public interface ConstructorInjection extends AbstractMethodInjection {
+} // ConstructorInjection
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/FeatureInjection.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/FeatureInjection.java
new file mode 100644
index 00000000000..f92e17d4127
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/FeatureInjection.java
@@ -0,0 +1,50 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Feature Injection</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection#getDescription <em>Description</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getFeatureInjection()
+ * @model abstract="true"
+ * @generated
+ */
+public interface FeatureInjection extends EObject {
+ /**
+ * Returns the value of the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Description</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Description</em>' attribute.
+ * @see #setDescription(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getFeatureInjection_Description()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getDescription();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection#getDescription <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Description</em>' attribute.
+ * @see #getDescription()
+ * @generated
+ */
+ void setDescription(String value);
+
+} // FeatureInjection
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/IdDescriptors.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/IdDescriptors.java
new file mode 100644
index 00000000000..f540b19270e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/IdDescriptors.java
@@ -0,0 +1,59 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>IdDescriptors</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors#getRegistries <em>Registries</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors#getServiceSets <em>Service Sets</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getIdDescriptors()
+ * @model
+ * @generated
+ */
+public interface IdDescriptors extends EObject {
+ /**
+ * Returns the value of the '<em><b>Registries</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Registries</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>Registries</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getIdDescriptors_Registries()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<RegistryIdDesc> getRegistries();
+
+ /**
+ * Returns the value of the '<em><b>Service Sets</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Service Sets</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>Service Sets</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getIdDescriptors_ServiceSets()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<ServiceSetIdDesc> getServiceSets();
+
+} // IdDescriptors
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/InjectedService.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/InjectedService.java
new file mode 100644
index 00000000000..cc5ba3826c0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/InjectedService.java
@@ -0,0 +1,49 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Injected Service</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService#getServiceName <em>Service Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getInjectedService()
+ * @model
+ * @generated
+ */
+public interface InjectedService extends InjectedValue {
+ /**
+ * Returns the value of the '<em><b>Service Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Service 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>Service Name</em>' attribute.
+ * @see #setServiceName(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getInjectedService_ServiceName()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getServiceName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService#getServiceName <em>Service Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Service Name</em>' attribute.
+ * @see #getServiceName()
+ * @generated
+ */
+ void setServiceName(String value);
+
+} // InjectedService
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/InjectedValue.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/InjectedValue.java
new file mode 100644
index 00000000000..5dff5e8420e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/InjectedValue.java
@@ -0,0 +1,50 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Injected Value</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue#getDescription <em>Description</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getInjectedValue()
+ * @model abstract="true"
+ * @generated
+ */
+public interface InjectedValue extends EObject {
+ /**
+ * Returns the value of the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Description</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Description</em>' attribute.
+ * @see #setDescription(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getInjectedValue_Description()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getDescription();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue#getDescription <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Description</em>' attribute.
+ * @see #getDescription()
+ * @generated
+ */
+ void setDescription(String value);
+
+} // InjectedValue
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/MethodInjection.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/MethodInjection.java
new file mode 100644
index 00000000000..081219952ee
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/MethodInjection.java
@@ -0,0 +1,49 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Method Injection</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection#getMethodName <em>Method Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getMethodInjection()
+ * @model
+ * @generated
+ */
+public interface MethodInjection extends AbstractMethodInjection {
+ /**
+ * Returns the value of the '<em><b>Method Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Method 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>Method Name</em>' attribute.
+ * @see #setMethodName(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getMethodInjection_MethodName()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getMethodName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection#getMethodName <em>Method Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Method Name</em>' attribute.
+ * @see #getMethodName()
+ * @generated
+ */
+ void setMethodName(String value);
+
+} // MethodInjection
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/OpaqueInjectedValue.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/OpaqueInjectedValue.java
new file mode 100644
index 00000000000..09243c08149
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/OpaqueInjectedValue.java
@@ -0,0 +1,49 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Opaque Injected Value</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getOpaqueInjectedValue()
+ * @model
+ * @generated
+ */
+public interface OpaqueInjectedValue extends InjectedValue {
+ /**
+ * Returns the value of the '<em><b>Value</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Value</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Value</em>' attribute.
+ * @see #setValue(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getOpaqueInjectedValue_Value()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getValue();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue#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);
+
+} // OpaqueInjectedValue
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ParameterInjection.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ParameterInjection.java
new file mode 100644
index 00000000000..02bdd9df57e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ParameterInjection.java
@@ -0,0 +1,69 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Parameter Injection</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection#getParameterName <em>Parameter Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection#getValues <em>Values</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getParameterInjection()
+ * @model
+ * @generated
+ */
+public interface ParameterInjection extends EObject {
+ /**
+ * Returns the value of the '<em><b>Parameter Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Parameter 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>Parameter Name</em>' attribute.
+ * @see #setParameterName(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getParameterInjection_ParameterName()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getParameterName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection#getParameterName <em>Parameter Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Parameter Name</em>' attribute.
+ * @see #getParameterName()
+ * @generated
+ */
+ void setParameterName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Values</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Values</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>Values</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getParameterInjection_Values()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<InjectedValue> getValues();
+
+} // ParameterInjection
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/PropertyInjection.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/PropertyInjection.java
new file mode 100644
index 00000000000..87a3e7dd500
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/PropertyInjection.java
@@ -0,0 +1,67 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Property Injection</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection#getPropertyName <em>Property Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection#getValues <em>Values</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getPropertyInjection()
+ * @model
+ * @generated
+ */
+public interface PropertyInjection extends FeatureInjection {
+ /**
+ * Returns the value of the '<em><b>Property Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Property 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>Property Name</em>' attribute.
+ * @see #setPropertyName(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getPropertyInjection_PropertyName()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getPropertyName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection#getPropertyName <em>Property Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Property Name</em>' attribute.
+ * @see #getPropertyName()
+ * @generated
+ */
+ void setPropertyName(String value);
+
+ /**
+ * Returns the value of the '<em><b>Values</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Values</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>Values</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getPropertyInjection_Values()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<InjectedValue> getValues();
+
+} // PropertyInjection
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/RegistryIdDesc.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/RegistryIdDesc.java
new file mode 100644
index 00000000000..d977e6764ba
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/RegistryIdDesc.java
@@ -0,0 +1,157 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Registry Desc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getDescription <em>Description</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#isUnique <em>Is Unique</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getSets <em>Sets</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getExtends <em>Extends</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getParents <em>Parents</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getRegistryIdDesc()
+ * @model
+ * @generated
+ */
+public interface RegistryIdDesc 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.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getRegistryIdDesc_Name()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#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>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Description</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Description</em>' attribute.
+ * @see #setDescription(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getRegistryIdDesc_Description()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getDescription();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getDescription <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Description</em>' attribute.
+ * @see #getDescription()
+ * @generated
+ */
+ void setDescription(String value);
+
+ /**
+ * Returns the value of the '<em><b>Is Unique</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Is Unique</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Is Unique</em>' attribute.
+ * @see #setIsUnique(boolean)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getRegistryIdDesc_IsUnique()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.boolean" required="true" ordered="false"
+ * @generated
+ */
+ boolean isUnique();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#isUnique <em>Is Unique</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Is Unique</em>' attribute.
+ * @see #isUnique()
+ * @generated
+ */
+ void setIsUnique(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Sets</b></em>' attribute list.
+ * The list contents are of type {@link java.lang.String}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Sets</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>Sets</em>' attribute list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getRegistryIdDesc_Sets()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String"
+ * @generated
+ */
+ EList<String> getSets();
+
+ /**
+ * Returns the value of the '<em><b>Extends</b></em>' attribute list.
+ * The list contents are of type {@link java.lang.String}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Extends</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>Extends</em>' attribute list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getRegistryIdDesc_Extends()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String"
+ * @generated
+ */
+ EList<String> getExtends();
+
+ /**
+ * Returns the value of the '<em><b>Parents</b></em>' attribute list.
+ * The list contents are of type {@link java.lang.String}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Parents</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>Parents</em>' attribute list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getRegistryIdDesc_Parents()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String"
+ * @generated
+ */
+ EList<String> getParents();
+
+} // RegistryIdDesc
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServiceFactoryIdDesc.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServiceFactoryIdDesc.java
new file mode 100644
index 00000000000..f8ee1ba3c9f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServiceFactoryIdDesc.java
@@ -0,0 +1,17 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Service Factory Desc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getServiceFactoryIdDesc()
+ * @model
+ * @generated
+ */
+public interface ServiceFactoryIdDesc extends ServiceIdDesc {
+} // ServiceFactoryIdDesc
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServiceIdDesc.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServiceIdDesc.java
new file mode 100644
index 00000000000..cd089cc8a07
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServiceIdDesc.java
@@ -0,0 +1,98 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Service Desc</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc#getStartKind <em>Start Kind</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc#getClassname <em>Classname</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc#getInjections <em>Injections</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getServiceIdDesc()
+ * @model
+ * @generated
+ */
+public interface ServiceIdDesc extends AbstractServiceIdDesc {
+ /**
+ * Returns the value of the '<em><b>Start Kind</b></em>' attribute.
+ * The default value is <code>"lazy"</code>.
+ * The literals are from the enumeration {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Start 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>Start Kind</em>' attribute.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind
+ * @see #setStartKind(StartupKind)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getServiceIdDesc_StartKind()
+ * @model default="lazy" required="true" ordered="false"
+ * @generated
+ */
+ StartupKind getStartKind();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc#getStartKind <em>Start Kind</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Start Kind</em>' attribute.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind
+ * @see #getStartKind()
+ * @generated
+ */
+ void setStartKind(StartupKind value);
+
+ /**
+ * Returns the value of the '<em><b>Classname</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Classname</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Classname</em>' attribute.
+ * @see #setClassname(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getServiceIdDesc_Classname()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getClassname();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc#getClassname <em>Classname</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Classname</em>' attribute.
+ * @see #getClassname()
+ * @generated
+ */
+ void setClassname(String value);
+
+ /**
+ * Returns the value of the '<em><b>Injections</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Injections</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>Injections</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getServiceIdDesc_Injections()
+ * @model containment="true" ordered="false"
+ * @generated
+ */
+ EList<FeatureInjection> getInjections();
+
+} // ServiceIdDesc
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServiceSetIdDesc.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServiceSetIdDesc.java
new file mode 100644
index 00000000000..3e93de88d01
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServiceSetIdDesc.java
@@ -0,0 +1,147 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Service Set</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getExtends <em>Extends</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getDescription <em>Description</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getServiceDescriptors <em>Service Descriptors</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getServiceSetIdDesc()
+ * @model
+ * @generated
+ */
+public interface ServiceSetIdDesc 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.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getServiceSetIdDesc_Name()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getName();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#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>Extends</b></em>' attribute list.
+ * The list contents are of type {@link java.lang.String}.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Extends</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>Extends</em>' attribute list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getServiceSetIdDesc_Extends()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String"
+ * @generated
+ */
+ EList<String> getExtends();
+
+ /**
+ * Returns the value of the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Description</em>' attribute isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @return the value of the '<em>Description</em>' attribute.
+ * @see #setDescription(String)
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getServiceSetIdDesc_Description()
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.String" required="true" ordered="false"
+ * @generated
+ */
+ String getDescription();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getDescription <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param value the new value of the '<em>Description</em>' attribute.
+ * @see #getDescription()
+ * @generated
+ */
+ void setDescription(String value);
+
+ /**
+ * Returns the value of the '<em><b>Service Descriptors</b></em>' containment reference list.
+ * The list contents are of type {@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc}.
+ * It is bidirectional and its opposite is '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getNamespace <em>Namespace</em>}'.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of the '<em>Service IdDescriptors</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>Service Descriptors</em>' containment reference list.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getServiceSetIdDesc_ServiceDescriptors()
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getNamespace
+ * @model opposite="namespace" containment="true" ordered="false"
+ * @generated
+ */
+ EList<AbstractServiceIdDesc> getServiceDescriptors();
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model required="true" ordered="false" serviceIdDataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.Object" serviceIdRequired="true" serviceIdOrdered="false"
+ * @generated
+ */
+ AbstractServiceIdDesc getService(Object serviceId);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.boolean" required="true" ordered="false" serviceIdDataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.Object" serviceIdRequired="true" serviceIdOrdered="false"
+ * @generated
+ */
+ boolean containsService(Object serviceId);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model required="true" ordered="false" serviceDescRequired="true" serviceDescOrdered="false"
+ * @generated
+ */
+ AbstractServiceIdDesc getService(AbstractServiceIdDesc serviceDesc);
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @model dataType="org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.boolean" required="true" ordered="false" serviceDescRequired="true" serviceDescOrdered="false"
+ * @generated
+ */
+ boolean containsService(AbstractServiceIdDesc serviceDesc);
+
+} // ServiceSetIdDesc
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServicedescriptorswithidFactory.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServicedescriptorswithidFactory.java
new file mode 100644
index 00000000000..49579aa395d
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServicedescriptorswithidFactory.java
@@ -0,0 +1,141 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage
+ * @generated
+ */
+public interface ServicedescriptorswithidFactory extends EFactory {
+ /**
+ * The singleton instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ ServicedescriptorswithidFactory eINSTANCE = org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidFactoryImpl.init();
+
+ /**
+ * Returns a new object of class '<em>Registry Id Desc</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Registry Id Desc</em>'.
+ * @generated
+ */
+ RegistryIdDesc createRegistryIdDesc();
+
+ /**
+ * Returns a new object of class '<em>Service Id Desc</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Service Id Desc</em>'.
+ * @generated
+ */
+ ServiceIdDesc createServiceIdDesc();
+
+ /**
+ * Returns a new object of class '<em>Service Set Id Desc</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Service Set Id Desc</em>'.
+ * @generated
+ */
+ ServiceSetIdDesc createServiceSetIdDesc();
+
+ /**
+ * Returns a new object of class '<em>Alias Id Desc</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Alias Id Desc</em>'.
+ * @generated
+ */
+ AliasIdDesc createAliasIdDesc();
+
+ /**
+ * Returns a new object of class '<em>Id Descriptors</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Id Descriptors</em>'.
+ * @generated
+ */
+ IdDescriptors createIdDescriptors();
+
+ /**
+ * Returns a new object of class '<em>Property Injection</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Property Injection</em>'.
+ * @generated
+ */
+ PropertyInjection createPropertyInjection();
+
+ /**
+ * Returns a new object of class '<em>Method Injection</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Method Injection</em>'.
+ * @generated
+ */
+ MethodInjection createMethodInjection();
+
+ /**
+ * Returns a new object of class '<em>Parameter Injection</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Parameter Injection</em>'.
+ * @generated
+ */
+ ParameterInjection createParameterInjection();
+
+ /**
+ * Returns a new object of class '<em>Injected Service</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Injected Service</em>'.
+ * @generated
+ */
+ InjectedService createInjectedService();
+
+ /**
+ * Returns a new object of class '<em>Opaque Injected Value</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Opaque Injected Value</em>'.
+ * @generated
+ */
+ OpaqueInjectedValue createOpaqueInjectedValue();
+
+ /**
+ * Returns a new object of class '<em>Constructor Injection</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Constructor Injection</em>'.
+ * @generated
+ */
+ ConstructorInjection createConstructorInjection();
+
+ /**
+ * Returns a new object of class '<em>Service Factory Id Desc</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Service Factory Id Desc</em>'.
+ * @generated
+ */
+ ServiceFactoryIdDesc createServiceFactoryIdDesc();
+
+ /**
+ * Returns the package supported by this factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the package supported by this factory.
+ * @generated
+ */
+ ServicedescriptorswithidPackage getServicedescriptorswithidPackage();
+
+} //ServicedescriptorswithidFactory
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServicedescriptorswithidPackage.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServicedescriptorswithidPackage.java
new file mode 100644
index 00000000000..5f31a23d44f
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/ServicedescriptorswithidPackage.java
@@ -0,0 +1,2014 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+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.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 enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface ServicedescriptorswithidPackage extends EPackage {
+ /**
+ * The package name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNAME = "servicedescriptorswithid";
+
+ /**
+ * The package namespace URI.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_URI = "org.eclipse.papyrus..infra.core.servicedescriptorswithid";
+
+ /**
+ * The package namespace name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ String eNS_PREFIX = "servicedescriptorswithid";
+
+ /**
+ * The singleton instance of the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ ServicedescriptorswithidPackage eINSTANCE = org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl.init();
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.RegistryIdDescImpl <em>Registry Id Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.RegistryIdDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getRegistryIdDesc()
+ * @generated
+ */
+ int REGISTRY_ID_DESC = 0;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_ID_DESC__NAME = 0;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_ID_DESC__DESCRIPTION = 1;
+
+ /**
+ * The feature id for the '<em><b>Is Unique</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_ID_DESC__IS_UNIQUE = 2;
+
+ /**
+ * The feature id for the '<em><b>Sets</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_ID_DESC__SETS = 3;
+
+ /**
+ * The feature id for the '<em><b>Extends</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_ID_DESC__EXTENDS = 4;
+
+ /**
+ * The feature id for the '<em><b>Parents</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_ID_DESC__PARENTS = 5;
+
+ /**
+ * The number of structural features of the '<em>Registry Id Desc</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int REGISTRY_ID_DESC_FEATURE_COUNT = 6;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractServiceIdDescImpl <em>Abstract Service Id Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractServiceIdDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getAbstractServiceIdDesc()
+ * @generated
+ */
+ int ABSTRACT_SERVICE_ID_DESC = 2;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_ID_DESC__NAME = 0;
+
+ /**
+ * The feature id for the '<em><b>Namespace</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_ID_DESC__NAMESPACE = 1;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_ID_DESC__DESCRIPTION = 2;
+
+ /**
+ * The feature id for the '<em><b>Depends On</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_ID_DESC__DEPENDS_ON = 3;
+
+ /**
+ * The feature id for the '<em><b>Priority</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_ID_DESC__PRIORITY = 4;
+
+ /**
+ * The feature id for the '<em><b>Bundle ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_ID_DESC__BUNDLE_ID = 5;
+
+ /**
+ * The number of structural features of the '<em>Abstract Service Id Desc</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_SERVICE_ID_DESC_FEATURE_COUNT = 6;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceIdDescImpl <em>Service Id Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceIdDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getServiceIdDesc()
+ * @generated
+ */
+ int SERVICE_ID_DESC = 1;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_ID_DESC__NAME = ABSTRACT_SERVICE_ID_DESC__NAME;
+
+ /**
+ * The feature id for the '<em><b>Namespace</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_ID_DESC__NAMESPACE = ABSTRACT_SERVICE_ID_DESC__NAMESPACE;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_ID_DESC__DESCRIPTION = ABSTRACT_SERVICE_ID_DESC__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Depends On</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_ID_DESC__DEPENDS_ON = ABSTRACT_SERVICE_ID_DESC__DEPENDS_ON;
+
+ /**
+ * The feature id for the '<em><b>Priority</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_ID_DESC__PRIORITY = ABSTRACT_SERVICE_ID_DESC__PRIORITY;
+
+ /**
+ * The feature id for the '<em><b>Bundle ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_ID_DESC__BUNDLE_ID = ABSTRACT_SERVICE_ID_DESC__BUNDLE_ID;
+
+ /**
+ * The feature id for the '<em><b>Start Kind</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_ID_DESC__START_KIND = ABSTRACT_SERVICE_ID_DESC_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Classname</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_ID_DESC__CLASSNAME = ABSTRACT_SERVICE_ID_DESC_FEATURE_COUNT + 1;
+
+ /**
+ * The feature id for the '<em><b>Injections</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_ID_DESC__INJECTIONS = ABSTRACT_SERVICE_ID_DESC_FEATURE_COUNT + 2;
+
+ /**
+ * The number of structural features of the '<em>Service Id Desc</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_ID_DESC_FEATURE_COUNT = ABSTRACT_SERVICE_ID_DESC_FEATURE_COUNT + 3;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceSetIdDescImpl <em>Service Set Id Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceSetIdDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getServiceSetIdDesc()
+ * @generated
+ */
+ int SERVICE_SET_ID_DESC = 3;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_SET_ID_DESC__NAME = 0;
+
+ /**
+ * The feature id for the '<em><b>Extends</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_SET_ID_DESC__EXTENDS = 1;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_SET_ID_DESC__DESCRIPTION = 2;
+
+ /**
+ * The feature id for the '<em><b>Service Descriptors</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS = 3;
+
+ /**
+ * The number of structural features of the '<em>Service Set Id Desc</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_SET_ID_DESC_FEATURE_COUNT = 4;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.FeatureInjectionImpl <em>Feature Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.FeatureInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getFeatureInjection()
+ * @generated
+ */
+ int FEATURE_INJECTION = 4;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEATURE_INJECTION__DESCRIPTION = 0;
+
+ /**
+ * The number of structural features of the '<em>Feature Injection</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int FEATURE_INJECTION_FEATURE_COUNT = 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AliasIdDescImpl <em>Alias Id Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AliasIdDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getAliasIdDesc()
+ * @generated
+ */
+ int ALIAS_ID_DESC = 5;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_ID_DESC__NAME = ABSTRACT_SERVICE_ID_DESC__NAME;
+
+ /**
+ * The feature id for the '<em><b>Namespace</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_ID_DESC__NAMESPACE = ABSTRACT_SERVICE_ID_DESC__NAMESPACE;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_ID_DESC__DESCRIPTION = ABSTRACT_SERVICE_ID_DESC__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Depends On</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_ID_DESC__DEPENDS_ON = ABSTRACT_SERVICE_ID_DESC__DEPENDS_ON;
+
+ /**
+ * The feature id for the '<em><b>Priority</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_ID_DESC__PRIORITY = ABSTRACT_SERVICE_ID_DESC__PRIORITY;
+
+ /**
+ * The feature id for the '<em><b>Bundle ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_ID_DESC__BUNDLE_ID = ABSTRACT_SERVICE_ID_DESC__BUNDLE_ID;
+
+ /**
+ * The feature id for the '<em><b>Aliased Service</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_ID_DESC__ALIASED_SERVICE = ABSTRACT_SERVICE_ID_DESC_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>Alias Id Desc</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ALIAS_ID_DESC_FEATURE_COUNT = ABSTRACT_SERVICE_ID_DESC_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.IdDescriptorsImpl <em>Id Descriptors</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.IdDescriptorsImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getIdDescriptors()
+ * @generated
+ */
+ int ID_DESCRIPTORS = 6;
+
+ /**
+ * The feature id for the '<em><b>Registries</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ID_DESCRIPTORS__REGISTRIES = 0;
+
+ /**
+ * The feature id for the '<em><b>Service Sets</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ID_DESCRIPTORS__SERVICE_SETS = 1;
+
+ /**
+ * The number of structural features of the '<em>Id Descriptors</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ID_DESCRIPTORS_FEATURE_COUNT = 2;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.PropertyInjectionImpl <em>Property Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.PropertyInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getPropertyInjection()
+ * @generated
+ */
+ int PROPERTY_INJECTION = 7;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_INJECTION__DESCRIPTION = FEATURE_INJECTION__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Property Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_INJECTION__PROPERTY_NAME = FEATURE_INJECTION_FEATURE_COUNT + 0;
+
+ /**
+ * The feature id for the '<em><b>Values</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_INJECTION__VALUES = FEATURE_INJECTION_FEATURE_COUNT + 1;
+
+ /**
+ * The number of structural features of the '<em>Property Injection</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PROPERTY_INJECTION_FEATURE_COUNT = FEATURE_INJECTION_FEATURE_COUNT + 2;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.InjectedValueImpl <em>Injected Value</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.InjectedValueImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getInjectedValue()
+ * @generated
+ */
+ int INJECTED_VALUE = 8;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INJECTED_VALUE__DESCRIPTION = 0;
+
+ /**
+ * The number of structural features of the '<em>Injected Value</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INJECTED_VALUE_FEATURE_COUNT = 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractMethodInjectionImpl <em>Abstract Method Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractMethodInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getAbstractMethodInjection()
+ * @generated
+ */
+ int ABSTRACT_METHOD_INJECTION = 10;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_METHOD_INJECTION__DESCRIPTION = FEATURE_INJECTION__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_METHOD_INJECTION__PARAMETERS = FEATURE_INJECTION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>Abstract Method Injection</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int ABSTRACT_METHOD_INJECTION_FEATURE_COUNT = FEATURE_INJECTION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.MethodInjectionImpl <em>Method Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.MethodInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getMethodInjection()
+ * @generated
+ */
+ int METHOD_INJECTION = 9;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int METHOD_INJECTION__DESCRIPTION = ABSTRACT_METHOD_INJECTION__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int METHOD_INJECTION__PARAMETERS = ABSTRACT_METHOD_INJECTION__PARAMETERS;
+
+ /**
+ * The feature id for the '<em><b>Method Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int METHOD_INJECTION__METHOD_NAME = ABSTRACT_METHOD_INJECTION_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>Method Injection</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int METHOD_INJECTION_FEATURE_COUNT = ABSTRACT_METHOD_INJECTION_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ParameterInjectionImpl <em>Parameter Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ParameterInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getParameterInjection()
+ * @generated
+ */
+ int PARAMETER_INJECTION = 11;
+
+ /**
+ * The feature id for the '<em><b>Parameter Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PARAMETER_INJECTION__PARAMETER_NAME = 0;
+
+ /**
+ * The feature id for the '<em><b>Values</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PARAMETER_INJECTION__VALUES = 1;
+
+ /**
+ * The number of structural features of the '<em>Parameter Injection</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int PARAMETER_INJECTION_FEATURE_COUNT = 2;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.InjectedServiceImpl <em>Injected Service</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.InjectedServiceImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getInjectedService()
+ * @generated
+ */
+ int INJECTED_SERVICE = 12;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INJECTED_SERVICE__DESCRIPTION = INJECTED_VALUE__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Service Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INJECTED_SERVICE__SERVICE_NAME = INJECTED_VALUE_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>Injected Service</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int INJECTED_SERVICE_FEATURE_COUNT = INJECTED_VALUE_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.OpaqueInjectedValueImpl <em>Opaque Injected Value</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.OpaqueInjectedValueImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getOpaqueInjectedValue()
+ * @generated
+ */
+ int OPAQUE_INJECTED_VALUE = 13;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int OPAQUE_INJECTED_VALUE__DESCRIPTION = INJECTED_VALUE__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Value</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int OPAQUE_INJECTED_VALUE__VALUE = INJECTED_VALUE_FEATURE_COUNT + 0;
+
+ /**
+ * The number of structural features of the '<em>Opaque Injected Value</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int OPAQUE_INJECTED_VALUE_FEATURE_COUNT = INJECTED_VALUE_FEATURE_COUNT + 1;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ConstructorInjectionImpl <em>Constructor Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ConstructorInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getConstructorInjection()
+ * @generated
+ */
+ int CONSTRUCTOR_INJECTION = 14;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CONSTRUCTOR_INJECTION__DESCRIPTION = ABSTRACT_METHOD_INJECTION__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Parameters</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CONSTRUCTOR_INJECTION__PARAMETERS = ABSTRACT_METHOD_INJECTION__PARAMETERS;
+
+ /**
+ * The number of structural features of the '<em>Constructor Injection</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int CONSTRUCTOR_INJECTION_FEATURE_COUNT = ABSTRACT_METHOD_INJECTION_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceFactoryIdDescImpl <em>Service Factory Id Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceFactoryIdDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getServiceFactoryIdDesc()
+ * @generated
+ */
+ int SERVICE_FACTORY_ID_DESC = 15;
+
+ /**
+ * The feature id for the '<em><b>Name</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_ID_DESC__NAME = SERVICE_ID_DESC__NAME;
+
+ /**
+ * The feature id for the '<em><b>Namespace</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_ID_DESC__NAMESPACE = SERVICE_ID_DESC__NAMESPACE;
+
+ /**
+ * The feature id for the '<em><b>Description</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_ID_DESC__DESCRIPTION = SERVICE_ID_DESC__DESCRIPTION;
+
+ /**
+ * The feature id for the '<em><b>Depends On</b></em>' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_ID_DESC__DEPENDS_ON = SERVICE_ID_DESC__DEPENDS_ON;
+
+ /**
+ * The feature id for the '<em><b>Priority</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_ID_DESC__PRIORITY = SERVICE_ID_DESC__PRIORITY;
+
+ /**
+ * The feature id for the '<em><b>Bundle ID</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_ID_DESC__BUNDLE_ID = SERVICE_ID_DESC__BUNDLE_ID;
+
+ /**
+ * The feature id for the '<em><b>Start Kind</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_ID_DESC__START_KIND = SERVICE_ID_DESC__START_KIND;
+
+ /**
+ * The feature id for the '<em><b>Classname</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_ID_DESC__CLASSNAME = SERVICE_ID_DESC__CLASSNAME;
+
+ /**
+ * The feature id for the '<em><b>Injections</b></em>' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_ID_DESC__INJECTIONS = SERVICE_ID_DESC__INJECTIONS;
+
+ /**
+ * The number of structural features of the '<em>Service Factory Id Desc</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int SERVICE_FACTORY_ID_DESC_FEATURE_COUNT = SERVICE_ID_DESC_FEATURE_COUNT + 0;
+
+ /**
+ * The meta object id for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind <em>Startup Kind</em>}' enum.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getStartupKind()
+ * @generated
+ */
+ int STARTUP_KIND = 16;
+
+ /**
+ * The meta object id for the '<em>String</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see java.lang.String
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getString()
+ * @generated
+ */
+ int STRING = 17;
+
+ /**
+ * The meta object id for the '<em>boolean</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getboolean()
+ * @generated
+ */
+ int BOOLEAN = 18;
+
+ /**
+ * The meta object id for the '<em>Object</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see java.lang.Object
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getObject()
+ * @generated
+ */
+ int OBJECT = 19;
+
+ /**
+ * The meta object id for the '<em>int</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getint()
+ * @generated
+ */
+ int INT = 20;
+
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc <em>Registry Id Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Registry Id Desc</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc
+ * @generated
+ */
+ EClass getRegistryIdDesc();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getName()
+ * @see #getRegistryIdDesc()
+ * @generated
+ */
+ EAttribute getRegistryIdDesc_Name();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getDescription <em>Description</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Description</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getDescription()
+ * @see #getRegistryIdDesc()
+ * @generated
+ */
+ EAttribute getRegistryIdDesc_Description();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#isUnique <em>Is Unique</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Is Unique</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#isUnique()
+ * @see #getRegistryIdDesc()
+ * @generated
+ */
+ EAttribute getRegistryIdDesc_IsUnique();
+
+ /**
+ * Returns the meta object for the attribute list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getSets <em>Sets</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute list '<em>Sets</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getSets()
+ * @see #getRegistryIdDesc()
+ * @generated
+ */
+ EAttribute getRegistryIdDesc_Sets();
+
+ /**
+ * Returns the meta object for the attribute list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getExtends <em>Extends</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute list '<em>Extends</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getExtends()
+ * @see #getRegistryIdDesc()
+ * @generated
+ */
+ EAttribute getRegistryIdDesc_Extends();
+
+ /**
+ * Returns the meta object for the attribute list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getParents <em>Parents</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute list '<em>Parents</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc#getParents()
+ * @see #getRegistryIdDesc()
+ * @generated
+ */
+ EAttribute getRegistryIdDesc_Parents();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc <em>Service Id Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Service Id Desc</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc
+ * @generated
+ */
+ EClass getServiceIdDesc();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc#getStartKind <em>Start Kind</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Start Kind</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc#getStartKind()
+ * @see #getServiceIdDesc()
+ * @generated
+ */
+ EAttribute getServiceIdDesc_StartKind();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc#getClassname <em>Classname</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Classname</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc#getClassname()
+ * @see #getServiceIdDesc()
+ * @generated
+ */
+ EAttribute getServiceIdDesc_Classname();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc#getInjections <em>Injections</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Injections</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc#getInjections()
+ * @see #getServiceIdDesc()
+ * @generated
+ */
+ EReference getServiceIdDesc_Injections();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc <em>Abstract Service Id Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Abstract Service Id Desc</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc
+ * @generated
+ */
+ EClass getAbstractServiceIdDesc();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getName()
+ * @see #getAbstractServiceIdDesc()
+ * @generated
+ */
+ EAttribute getAbstractServiceIdDesc_Name();
+
+ /**
+ * Returns the meta object for the container reference '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getNamespace <em>Namespace</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the container reference '<em>Namespace</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getNamespace()
+ * @see #getAbstractServiceIdDesc()
+ * @generated
+ */
+ EReference getAbstractServiceIdDesc_Namespace();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getDescription <em>Description</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Description</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getDescription()
+ * @see #getAbstractServiceIdDesc()
+ * @generated
+ */
+ EAttribute getAbstractServiceIdDesc_Description();
+
+ /**
+ * Returns the meta object for the attribute list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getDependsOn <em>Depends On</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute list '<em>Depends On</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getDependsOn()
+ * @see #getAbstractServiceIdDesc()
+ * @generated
+ */
+ EAttribute getAbstractServiceIdDesc_DependsOn();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getPriority <em>Priority</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Priority</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getPriority()
+ * @see #getAbstractServiceIdDesc()
+ * @generated
+ */
+ EAttribute getAbstractServiceIdDesc_Priority();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getBundleID <em>Bundle ID</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Bundle ID</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc#getBundleID()
+ * @see #getAbstractServiceIdDesc()
+ * @generated
+ */
+ EAttribute getAbstractServiceIdDesc_BundleID();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc <em>Service Set Id Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Service Set Id Desc</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc
+ * @generated
+ */
+ EClass getServiceSetIdDesc();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getName <em>Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Name</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getName()
+ * @see #getServiceSetIdDesc()
+ * @generated
+ */
+ EAttribute getServiceSetIdDesc_Name();
+
+ /**
+ * Returns the meta object for the attribute list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getExtends <em>Extends</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute list '<em>Extends</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getExtends()
+ * @see #getServiceSetIdDesc()
+ * @generated
+ */
+ EAttribute getServiceSetIdDesc_Extends();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getDescription <em>Description</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Description</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getDescription()
+ * @see #getServiceSetIdDesc()
+ * @generated
+ */
+ EAttribute getServiceSetIdDesc_Description();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getServiceDescriptors <em>Service Descriptors</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Service Descriptors</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc#getServiceDescriptors()
+ * @see #getServiceSetIdDesc()
+ * @generated
+ */
+ EReference getServiceSetIdDesc_ServiceDescriptors();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection <em>Feature Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Feature Injection</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection
+ * @generated
+ */
+ EClass getFeatureInjection();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection#getDescription <em>Description</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Description</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection#getDescription()
+ * @see #getFeatureInjection()
+ * @generated
+ */
+ EAttribute getFeatureInjection_Description();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc <em>Alias Id Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Alias Id Desc</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc
+ * @generated
+ */
+ EClass getAliasIdDesc();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc#getAliasedService <em>Aliased Service</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Aliased Service</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc#getAliasedService()
+ * @see #getAliasIdDesc()
+ * @generated
+ */
+ EAttribute getAliasIdDesc_AliasedService();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors <em>Id Descriptors</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Id Descriptors</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors
+ * @generated
+ */
+ EClass getIdDescriptors();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors#getRegistries <em>Registries</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Registries</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors#getRegistries()
+ * @see #getIdDescriptors()
+ * @generated
+ */
+ EReference getIdDescriptors_Registries();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors#getServiceSets <em>Service Sets</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Service Sets</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors#getServiceSets()
+ * @see #getIdDescriptors()
+ * @generated
+ */
+ EReference getIdDescriptors_ServiceSets();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection <em>Property Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Property Injection</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection
+ * @generated
+ */
+ EClass getPropertyInjection();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection#getPropertyName <em>Property Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Property Name</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection#getPropertyName()
+ * @see #getPropertyInjection()
+ * @generated
+ */
+ EAttribute getPropertyInjection_PropertyName();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection#getValues <em>Values</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Values</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection#getValues()
+ * @see #getPropertyInjection()
+ * @generated
+ */
+ EReference getPropertyInjection_Values();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue <em>Injected Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Injected Value</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue
+ * @generated
+ */
+ EClass getInjectedValue();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue#getDescription <em>Description</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Description</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue#getDescription()
+ * @see #getInjectedValue()
+ * @generated
+ */
+ EAttribute getInjectedValue_Description();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection <em>Method Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Method Injection</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection
+ * @generated
+ */
+ EClass getMethodInjection();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection#getMethodName <em>Method Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Method Name</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection#getMethodName()
+ * @see #getMethodInjection()
+ * @generated
+ */
+ EAttribute getMethodInjection_MethodName();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractMethodInjection <em>Abstract Method Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Abstract Method Injection</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractMethodInjection
+ * @generated
+ */
+ EClass getAbstractMethodInjection();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractMethodInjection#getParameters <em>Parameters</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Parameters</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractMethodInjection#getParameters()
+ * @see #getAbstractMethodInjection()
+ * @generated
+ */
+ EReference getAbstractMethodInjection_Parameters();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection <em>Parameter Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Parameter Injection</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection
+ * @generated
+ */
+ EClass getParameterInjection();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection#getParameterName <em>Parameter Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Parameter Name</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection#getParameterName()
+ * @see #getParameterInjection()
+ * @generated
+ */
+ EAttribute getParameterInjection_ParameterName();
+
+ /**
+ * Returns the meta object for the containment reference list '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection#getValues <em>Values</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the containment reference list '<em>Values</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection#getValues()
+ * @see #getParameterInjection()
+ * @generated
+ */
+ EReference getParameterInjection_Values();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService <em>Injected Service</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Injected Service</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService
+ * @generated
+ */
+ EClass getInjectedService();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService#getServiceName <em>Service Name</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Service Name</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService#getServiceName()
+ * @see #getInjectedService()
+ * @generated
+ */
+ EAttribute getInjectedService_ServiceName();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue <em>Opaque Injected Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Opaque Injected Value</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue
+ * @generated
+ */
+ EClass getOpaqueInjectedValue();
+
+ /**
+ * Returns the meta object for the attribute '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue#getValue <em>Value</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for the attribute '<em>Value</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue#getValue()
+ * @see #getOpaqueInjectedValue()
+ * @generated
+ */
+ EAttribute getOpaqueInjectedValue_Value();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ConstructorInjection <em>Constructor Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Constructor Injection</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ConstructorInjection
+ * @generated
+ */
+ EClass getConstructorInjection();
+
+ /**
+ * Returns the meta object for class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceFactoryIdDesc <em>Service Factory Id Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Service Factory Id Desc</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceFactoryIdDesc
+ * @generated
+ */
+ EClass getServiceFactoryIdDesc();
+
+ /**
+ * Returns the meta object for enum '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind <em>Startup Kind</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for enum '<em>Startup Kind</em>'.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind
+ * @generated
+ */
+ EEnum getStartupKind();
+
+ /**
+ * Returns the meta object for data type '{@link java.lang.String <em>String</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for data type '<em>String</em>'.
+ * @see java.lang.String
+ * @model instanceClass="java.lang.String"
+ * @generated
+ */
+ EDataType getString();
+
+ /**
+ * Returns the meta object for data type '<em>boolean</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for data type '<em>boolean</em>'.
+ * @model instanceClass="boolean"
+ * @generated
+ */
+ EDataType getboolean();
+
+ /**
+ * Returns the meta object for data type '{@link java.lang.Object <em>Object</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for data type '<em>Object</em>'.
+ * @see java.lang.Object
+ * @model instanceClass="java.lang.Object"
+ * @generated
+ */
+ EDataType getObject();
+
+ /**
+ * Returns the meta object for data type '<em>int</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for data type '<em>int</em>'.
+ * @model instanceClass="int"
+ * @generated
+ */
+ EDataType getint();
+
+ /**
+ * 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
+ */
+ ServicedescriptorswithidFactory getServicedescriptorswithidFactory();
+
+ /**
+ * <!-- 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 enum,</li>
+ * <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ interface Literals {
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.RegistryIdDescImpl <em>Registry Id Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.RegistryIdDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getRegistryIdDesc()
+ * @generated
+ */
+ EClass REGISTRY_ID_DESC = eINSTANCE.getRegistryIdDesc();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute REGISTRY_ID_DESC__NAME = eINSTANCE.getRegistryIdDesc_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute REGISTRY_ID_DESC__DESCRIPTION = eINSTANCE.getRegistryIdDesc_Description();
+
+ /**
+ * The meta object literal for the '<em><b>Is Unique</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute REGISTRY_ID_DESC__IS_UNIQUE = eINSTANCE.getRegistryIdDesc_IsUnique();
+
+ /**
+ * The meta object literal for the '<em><b>Sets</b></em>' attribute list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute REGISTRY_ID_DESC__SETS = eINSTANCE.getRegistryIdDesc_Sets();
+
+ /**
+ * The meta object literal for the '<em><b>Extends</b></em>' attribute list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute REGISTRY_ID_DESC__EXTENDS = eINSTANCE.getRegistryIdDesc_Extends();
+
+ /**
+ * The meta object literal for the '<em><b>Parents</b></em>' attribute list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute REGISTRY_ID_DESC__PARENTS = eINSTANCE.getRegistryIdDesc_Parents();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceIdDescImpl <em>Service Id Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceIdDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getServiceIdDesc()
+ * @generated
+ */
+ EClass SERVICE_ID_DESC = eINSTANCE.getServiceIdDesc();
+
+ /**
+ * The meta object literal for the '<em><b>Start Kind</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute SERVICE_ID_DESC__START_KIND = eINSTANCE.getServiceIdDesc_StartKind();
+
+ /**
+ * The meta object literal for the '<em><b>Classname</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute SERVICE_ID_DESC__CLASSNAME = eINSTANCE.getServiceIdDesc_Classname();
+
+ /**
+ * The meta object literal for the '<em><b>Injections</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference SERVICE_ID_DESC__INJECTIONS = eINSTANCE.getServiceIdDesc_Injections();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractServiceIdDescImpl <em>Abstract Service Id Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractServiceIdDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getAbstractServiceIdDesc()
+ * @generated
+ */
+ EClass ABSTRACT_SERVICE_ID_DESC = eINSTANCE.getAbstractServiceIdDesc();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ABSTRACT_SERVICE_ID_DESC__NAME = eINSTANCE.getAbstractServiceIdDesc_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Namespace</b></em>' container reference feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ABSTRACT_SERVICE_ID_DESC__NAMESPACE = eINSTANCE.getAbstractServiceIdDesc_Namespace();
+
+ /**
+ * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ABSTRACT_SERVICE_ID_DESC__DESCRIPTION = eINSTANCE.getAbstractServiceIdDesc_Description();
+
+ /**
+ * The meta object literal for the '<em><b>Depends On</b></em>' attribute list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ABSTRACT_SERVICE_ID_DESC__DEPENDS_ON = eINSTANCE.getAbstractServiceIdDesc_DependsOn();
+
+ /**
+ * The meta object literal for the '<em><b>Priority</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ABSTRACT_SERVICE_ID_DESC__PRIORITY = eINSTANCE.getAbstractServiceIdDesc_Priority();
+
+ /**
+ * The meta object literal for the '<em><b>Bundle ID</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ABSTRACT_SERVICE_ID_DESC__BUNDLE_ID = eINSTANCE.getAbstractServiceIdDesc_BundleID();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceSetIdDescImpl <em>Service Set Id Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceSetIdDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getServiceSetIdDesc()
+ * @generated
+ */
+ EClass SERVICE_SET_ID_DESC = eINSTANCE.getServiceSetIdDesc();
+
+ /**
+ * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute SERVICE_SET_ID_DESC__NAME = eINSTANCE.getServiceSetIdDesc_Name();
+
+ /**
+ * The meta object literal for the '<em><b>Extends</b></em>' attribute list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute SERVICE_SET_ID_DESC__EXTENDS = eINSTANCE.getServiceSetIdDesc_Extends();
+
+ /**
+ * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute SERVICE_SET_ID_DESC__DESCRIPTION = eINSTANCE.getServiceSetIdDesc_Description();
+
+ /**
+ * The meta object literal for the '<em><b>Service Descriptors</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS = eINSTANCE.getServiceSetIdDesc_ServiceDescriptors();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.FeatureInjectionImpl <em>Feature Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.FeatureInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getFeatureInjection()
+ * @generated
+ */
+ EClass FEATURE_INJECTION = eINSTANCE.getFeatureInjection();
+
+ /**
+ * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute FEATURE_INJECTION__DESCRIPTION = eINSTANCE.getFeatureInjection_Description();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AliasIdDescImpl <em>Alias Id Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AliasIdDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getAliasIdDesc()
+ * @generated
+ */
+ EClass ALIAS_ID_DESC = eINSTANCE.getAliasIdDesc();
+
+ /**
+ * The meta object literal for the '<em><b>Aliased Service</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute ALIAS_ID_DESC__ALIASED_SERVICE = eINSTANCE.getAliasIdDesc_AliasedService();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.IdDescriptorsImpl <em>Id Descriptors</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.IdDescriptorsImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getIdDescriptors()
+ * @generated
+ */
+ EClass ID_DESCRIPTORS = eINSTANCE.getIdDescriptors();
+
+ /**
+ * The meta object literal for the '<em><b>Registries</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ID_DESCRIPTORS__REGISTRIES = eINSTANCE.getIdDescriptors_Registries();
+
+ /**
+ * The meta object literal for the '<em><b>Service Sets</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ID_DESCRIPTORS__SERVICE_SETS = eINSTANCE.getIdDescriptors_ServiceSets();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.PropertyInjectionImpl <em>Property Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.PropertyInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getPropertyInjection()
+ * @generated
+ */
+ EClass PROPERTY_INJECTION = eINSTANCE.getPropertyInjection();
+
+ /**
+ * The meta object literal for the '<em><b>Property Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute PROPERTY_INJECTION__PROPERTY_NAME = eINSTANCE.getPropertyInjection_PropertyName();
+
+ /**
+ * The meta object literal for the '<em><b>Values</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference PROPERTY_INJECTION__VALUES = eINSTANCE.getPropertyInjection_Values();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.InjectedValueImpl <em>Injected Value</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.InjectedValueImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getInjectedValue()
+ * @generated
+ */
+ EClass INJECTED_VALUE = eINSTANCE.getInjectedValue();
+
+ /**
+ * The meta object literal for the '<em><b>Description</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute INJECTED_VALUE__DESCRIPTION = eINSTANCE.getInjectedValue_Description();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.MethodInjectionImpl <em>Method Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.MethodInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getMethodInjection()
+ * @generated
+ */
+ EClass METHOD_INJECTION = eINSTANCE.getMethodInjection();
+
+ /**
+ * The meta object literal for the '<em><b>Method Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute METHOD_INJECTION__METHOD_NAME = eINSTANCE.getMethodInjection_MethodName();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractMethodInjectionImpl <em>Abstract Method Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractMethodInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getAbstractMethodInjection()
+ * @generated
+ */
+ EClass ABSTRACT_METHOD_INJECTION = eINSTANCE.getAbstractMethodInjection();
+
+ /**
+ * The meta object literal for the '<em><b>Parameters</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference ABSTRACT_METHOD_INJECTION__PARAMETERS = eINSTANCE.getAbstractMethodInjection_Parameters();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ParameterInjectionImpl <em>Parameter Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ParameterInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getParameterInjection()
+ * @generated
+ */
+ EClass PARAMETER_INJECTION = eINSTANCE.getParameterInjection();
+
+ /**
+ * The meta object literal for the '<em><b>Parameter Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute PARAMETER_INJECTION__PARAMETER_NAME = eINSTANCE.getParameterInjection_ParameterName();
+
+ /**
+ * The meta object literal for the '<em><b>Values</b></em>' containment reference list feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EReference PARAMETER_INJECTION__VALUES = eINSTANCE.getParameterInjection_Values();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.InjectedServiceImpl <em>Injected Service</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.InjectedServiceImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getInjectedService()
+ * @generated
+ */
+ EClass INJECTED_SERVICE = eINSTANCE.getInjectedService();
+
+ /**
+ * The meta object literal for the '<em><b>Service Name</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute INJECTED_SERVICE__SERVICE_NAME = eINSTANCE.getInjectedService_ServiceName();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.OpaqueInjectedValueImpl <em>Opaque Injected Value</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.OpaqueInjectedValueImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getOpaqueInjectedValue()
+ * @generated
+ */
+ EClass OPAQUE_INJECTED_VALUE = eINSTANCE.getOpaqueInjectedValue();
+
+ /**
+ * The meta object literal for the '<em><b>Value</b></em>' attribute feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ EAttribute OPAQUE_INJECTED_VALUE__VALUE = eINSTANCE.getOpaqueInjectedValue_Value();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ConstructorInjectionImpl <em>Constructor Injection</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ConstructorInjectionImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getConstructorInjection()
+ * @generated
+ */
+ EClass CONSTRUCTOR_INJECTION = eINSTANCE.getConstructorInjection();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceFactoryIdDescImpl <em>Service Factory Id Desc</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceFactoryIdDescImpl
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getServiceFactoryIdDesc()
+ * @generated
+ */
+ EClass SERVICE_FACTORY_ID_DESC = eINSTANCE.getServiceFactoryIdDesc();
+
+ /**
+ * The meta object literal for the '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind <em>Startup Kind</em>}' enum.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getStartupKind()
+ * @generated
+ */
+ EEnum STARTUP_KIND = eINSTANCE.getStartupKind();
+
+ /**
+ * The meta object literal for the '<em>String</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see java.lang.String
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getString()
+ * @generated
+ */
+ EDataType STRING = eINSTANCE.getString();
+
+ /**
+ * The meta object literal for the '<em>boolean</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getboolean()
+ * @generated
+ */
+ EDataType BOOLEAN = eINSTANCE.getboolean();
+
+ /**
+ * The meta object literal for the '<em>Object</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see java.lang.Object
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getObject()
+ * @generated
+ */
+ EDataType OBJECT = eINSTANCE.getObject();
+
+ /**
+ * The meta object literal for the '<em>int</em>' data type.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServicedescriptorswithidPackageImpl#getint()
+ * @generated
+ */
+ EDataType INT = eINSTANCE.getint();
+
+ }
+
+} //ServicedescriptorswithidPackage
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/StartupKind.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/StartupKind.java
new file mode 100644
index 00000000000..d6989304bd5
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/StartupKind.java
@@ -0,0 +1,208 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid;
+
+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>Startup Kind</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#getStartupKind()
+ * @model
+ * @generated
+ */
+public enum StartupKind implements Enumerator {
+ /**
+ * The '<em><b>Lazy</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #LAZY_VALUE
+ * @generated
+ * @ordered
+ */
+ LAZY(0, "lazy", "lazy"),
+
+ /**
+ * The '<em><b>Startup</b></em>' literal object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #STARTUP_VALUE
+ * @generated
+ * @ordered
+ */
+ STARTUP(1, "startup", "startup");
+
+ /**
+ * The '<em><b>Lazy</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of '<em><b>Lazy</b></em>' literal object isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @see #LAZY
+ * @model name="lazy"
+ * @generated
+ * @ordered
+ */
+ public static final int LAZY_VALUE = 0;
+
+ /**
+ * The '<em><b>Startup</b></em>' literal value.
+ * <!-- begin-user-doc -->
+ * <p>
+ * If the meaning of '<em><b>Startup</b></em>' literal object isn't clear,
+ * there really should be more of a description here...
+ * </p>
+ * <!-- end-user-doc -->
+ * @see #STARTUP
+ * @model name="startup"
+ * @generated
+ * @ordered
+ */
+ public static final int STARTUP_VALUE = 1;
+
+ /**
+ * An array of all the '<em><b>Startup Kind</b></em>' enumerators.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static final StartupKind[] VALUES_ARRAY =
+ new StartupKind[] {
+ LAZY,
+ STARTUP,
+ };
+
+ /**
+ * A public read-only list of all the '<em><b>Startup Kind</b></em>' enumerators.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static final List<StartupKind> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+ /**
+ * Returns the '<em><b>Startup Kind</b></em>' literal with the specified literal value.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static StartupKind get(String literal) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ StartupKind result = VALUES_ARRAY[i];
+ if (result.toString().equals(literal)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the '<em><b>Startup Kind</b></em>' literal with the specified name.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static StartupKind getByName(String name) {
+ for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+ StartupKind result = VALUES_ARRAY[i];
+ if (result.getName().equals(name)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the '<em><b>Startup Kind</b></em>' literal with the specified integer value.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static StartupKind get(int value) {
+ switch (value) {
+ case LAZY_VALUE: return LAZY;
+ case STARTUP_VALUE: return STARTUP;
+ }
+ 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 StartupKind(int value, String name, String literal) {
+ this.value = value;
+ this.name = name;
+ this.literal = literal;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public int getValue() {
+ return value;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ 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;
+ }
+
+} //StartupKind
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/AbstractMethodInjectionImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/AbstractMethodInjectionImpl.java
new file mode 100644
index 00000000000..64ec4e92c52
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/AbstractMethodInjectionImpl.java
@@ -0,0 +1,150 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractMethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Abstract Method Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractMethodInjectionImpl#getParameters <em>Parameters</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class AbstractMethodInjectionImpl extends FeatureInjectionImpl implements AbstractMethodInjection {
+ /**
+ * The cached value of the '{@link #getParameters() <em>Parameters</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getParameters()
+ * @generated
+ * @ordered
+ */
+ protected EList<ParameterInjection> parameters;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AbstractMethodInjectionImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.ABSTRACT_METHOD_INJECTION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<ParameterInjection> getParameters() {
+ if (parameters == null) {
+ parameters = new EObjectContainmentEList<ParameterInjection>(ParameterInjection.class, this, ServicedescriptorswithidPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS);
+ }
+ return parameters;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS:
+ return ((InternalEList<?>)getParameters()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS:
+ return getParameters();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS:
+ getParameters().clear();
+ getParameters().addAll((Collection<? extends ParameterInjection>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS:
+ getParameters().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ABSTRACT_METHOD_INJECTION__PARAMETERS:
+ return parameters != null && !parameters.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //AbstractMethodInjectionImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/AbstractServiceIdDescImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/AbstractServiceIdDescImpl.java
new file mode 100644
index 00000000000..16d91bb7a1c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/AbstractServiceIdDescImpl.java
@@ -0,0 +1,468 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Abstract Service Id Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractServiceIdDescImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractServiceIdDescImpl#getNamespace <em>Namespace</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractServiceIdDescImpl#getDescription <em>Description</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractServiceIdDescImpl#getDependsOn <em>Depends On</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractServiceIdDescImpl#getPriority <em>Priority</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AbstractServiceIdDescImpl#getBundleID <em>Bundle ID</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class AbstractServiceIdDescImpl extends EObjectImpl implements AbstractServiceIdDesc {
+ /**
+ * 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 #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getDependsOn() <em>Depends On</em>}' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDependsOn()
+ * @generated
+ * @ordered
+ */
+ protected EList<String> dependsOn;
+
+ /**
+ * The default value of the '{@link #getPriority() <em>Priority</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getPriority()
+ * @generated
+ * @ordered
+ */
+ protected static final int PRIORITY_EDEFAULT = 0;
+
+ /**
+ * The cached value of the '{@link #getPriority() <em>Priority</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getPriority()
+ * @generated
+ * @ordered
+ */
+ protected int priority = PRIORITY_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getBundleID() <em>Bundle ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getBundleID()
+ * @generated
+ * @ordered
+ */
+ protected static final String BUNDLE_ID_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getBundleID() <em>Bundle ID</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getBundleID()
+ * @generated
+ * @ordered
+ */
+ protected String bundleID = BUNDLE_ID_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AbstractServiceIdDescImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.ABSTRACT_SERVICE_ID_DESC;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setName(String newName) {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAME, oldName, name));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceSetIdDesc getNamespace() {
+ if (eContainerFeatureID() != ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAMESPACE) return null;
+ return (ServiceSetIdDesc)eContainer();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public NotificationChain basicSetNamespace(ServiceSetIdDesc newNamespace, NotificationChain msgs) {
+ msgs = eBasicSetContainer((InternalEObject)newNamespace, ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAMESPACE, msgs);
+ return msgs;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setNamespace(ServiceSetIdDesc newNamespace) {
+ if (newNamespace != eInternalContainer() || (eContainerFeatureID() != ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAMESPACE && newNamespace != null)) {
+ if (EcoreUtil.isAncestor(this, newNamespace))
+ throw new IllegalArgumentException("Recursive containment not allowed for " + toString());
+ NotificationChain msgs = null;
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ if (newNamespace != null)
+ msgs = ((InternalEObject)newNamespace).eInverseAdd(this, ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS, ServiceSetIdDesc.class, msgs);
+ msgs = basicSetNamespace(newNamespace, msgs);
+ if (msgs != null) msgs.dispatch();
+ }
+ else if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAMESPACE, newNamespace, newNamespace));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDescription(String newDescription) {
+ String oldDescription = description;
+ description = newDescription;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__DESCRIPTION, oldDescription, description));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<String> getDependsOn() {
+ if (dependsOn == null) {
+ dependsOn = new EDataTypeUniqueEList<String>(String.class, this, ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__DEPENDS_ON);
+ }
+ return dependsOn;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public int getPriority() {
+ return priority;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setPriority(int newPriority) {
+ int oldPriority = priority;
+ priority = newPriority;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__PRIORITY, oldPriority, priority));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getBundleID() {
+ return bundleID;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setBundleID(String newBundleID) {
+ String oldBundleID = bundleID;
+ bundleID = newBundleID;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__BUNDLE_ID, oldBundleID, bundleID));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAMESPACE:
+ if (eInternalContainer() != null)
+ msgs = eBasicRemoveFromContainer(msgs);
+ return basicSetNamespace((ServiceSetIdDesc)otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAMESPACE:
+ return basicSetNamespace(null, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) {
+ switch (eContainerFeatureID()) {
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAMESPACE:
+ return eInternalContainer().eInverseRemove(this, ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS, ServiceSetIdDesc.class, msgs);
+ }
+ return super.eBasicRemoveFromContainerFeature(msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAME:
+ return getName();
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAMESPACE:
+ return getNamespace();
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__DESCRIPTION:
+ return getDescription();
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__DEPENDS_ON:
+ return getDependsOn();
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__PRIORITY:
+ return getPriority();
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__BUNDLE_ID:
+ return getBundleID();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAME:
+ setName((String)newValue);
+ return;
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAMESPACE:
+ setNamespace((ServiceSetIdDesc)newValue);
+ return;
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__DESCRIPTION:
+ setDescription((String)newValue);
+ return;
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__DEPENDS_ON:
+ getDependsOn().clear();
+ getDependsOn().addAll((Collection<? extends String>)newValue);
+ return;
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__PRIORITY:
+ setPriority((Integer)newValue);
+ return;
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__BUNDLE_ID:
+ setBundleID((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAMESPACE:
+ setNamespace((ServiceSetIdDesc)null);
+ return;
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__DESCRIPTION:
+ setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__DEPENDS_ON:
+ getDependsOn().clear();
+ return;
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__PRIORITY:
+ setPriority(PRIORITY_EDEFAULT);
+ return;
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__BUNDLE_ID:
+ setBundleID(BUNDLE_ID_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAMESPACE:
+ return getNamespace() != null;
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__DESCRIPTION:
+ return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__DEPENDS_ON:
+ return dependsOn != null && !dependsOn.isEmpty();
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__PRIORITY:
+ return priority != PRIORITY_EDEFAULT;
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__BUNDLE_ID:
+ return BUNDLE_ID_EDEFAULT == null ? bundleID != null : !BUNDLE_ID_EDEFAULT.equals(bundleID);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (name: ");
+ result.append(name);
+ result.append(", description: ");
+ result.append(description);
+ result.append(", dependsOn: ");
+ result.append(dependsOn);
+ result.append(", priority: ");
+ result.append(priority);
+ result.append(", bundleID: ");
+ result.append(bundleID);
+ result.append(')');
+ return result.toString();
+ }
+
+} //AbstractServiceIdDescImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/AliasIdDescImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/AliasIdDescImpl.java
new file mode 100644
index 00000000000..444341d6ae6
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/AliasIdDescImpl.java
@@ -0,0 +1,162 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Alias Id Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.AliasIdDescImpl#getAliasedService <em>Aliased Service</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class AliasIdDescImpl extends AbstractServiceIdDescImpl implements AliasIdDesc {
+ /**
+ * The default value of the '{@link #getAliasedService() <em>Aliased Service</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAliasedService()
+ * @generated
+ * @ordered
+ */
+ protected static final String ALIASED_SERVICE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getAliasedService() <em>Aliased Service</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getAliasedService()
+ * @generated
+ * @ordered
+ */
+ protected String aliasedService = ALIASED_SERVICE_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected AliasIdDescImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.ALIAS_ID_DESC;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getAliasedService() {
+ return aliasedService;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setAliasedService(String newAliasedService) {
+ String oldAliasedService = aliasedService;
+ aliasedService = newAliasedService;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.ALIAS_ID_DESC__ALIASED_SERVICE, oldAliasedService, aliasedService));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ALIAS_ID_DESC__ALIASED_SERVICE:
+ return getAliasedService();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ALIAS_ID_DESC__ALIASED_SERVICE:
+ setAliasedService((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ALIAS_ID_DESC__ALIASED_SERVICE:
+ setAliasedService(ALIASED_SERVICE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ALIAS_ID_DESC__ALIASED_SERVICE:
+ return ALIASED_SERVICE_EDEFAULT == null ? aliasedService != null : !ALIASED_SERVICE_EDEFAULT.equals(aliasedService);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (aliasedService: ");
+ result.append(aliasedService);
+ result.append(')');
+ return result.toString();
+ }
+
+} //AliasIdDescImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ConstructorInjectionImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ConstructorInjectionImpl.java
new file mode 100644
index 00000000000..335430cd1ed
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ConstructorInjectionImpl.java
@@ -0,0 +1,39 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ConstructorInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Constructor Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class ConstructorInjectionImpl extends AbstractMethodInjectionImpl implements ConstructorInjection {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ConstructorInjectionImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.CONSTRUCTOR_INJECTION;
+ }
+
+} //ConstructorInjectionImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/FeatureInjectionImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/FeatureInjectionImpl.java
new file mode 100644
index 00000000000..f1b5c46f22e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/FeatureInjectionImpl.java
@@ -0,0 +1,163 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Feature Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.FeatureInjectionImpl#getDescription <em>Description</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class FeatureInjectionImpl extends EObjectImpl implements FeatureInjection {
+ /**
+ * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected FeatureInjectionImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.FEATURE_INJECTION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDescription(String newDescription) {
+ String oldDescription = description;
+ description = newDescription;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.FEATURE_INJECTION__DESCRIPTION, oldDescription, description));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.FEATURE_INJECTION__DESCRIPTION:
+ return getDescription();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.FEATURE_INJECTION__DESCRIPTION:
+ setDescription((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.FEATURE_INJECTION__DESCRIPTION:
+ setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.FEATURE_INJECTION__DESCRIPTION:
+ return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (description: ");
+ result.append(description);
+ result.append(')');
+ return result.toString();
+ }
+
+} //FeatureInjectionImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/IdDescriptorsImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/IdDescriptorsImpl.java
new file mode 100644
index 00000000000..c7dcd5fb9b0
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/IdDescriptorsImpl.java
@@ -0,0 +1,189 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Id Descriptors</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.IdDescriptorsImpl#getRegistries <em>Registries</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.IdDescriptorsImpl#getServiceSets <em>Service Sets</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class IdDescriptorsImpl extends EObjectImpl implements IdDescriptors {
+ /**
+ * The cached value of the '{@link #getRegistries() <em>Registries</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getRegistries()
+ * @generated
+ * @ordered
+ */
+ protected EList<RegistryIdDesc> registries;
+
+ /**
+ * The cached value of the '{@link #getServiceSets() <em>Service Sets</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getServiceSets()
+ * @generated
+ * @ordered
+ */
+ protected EList<ServiceSetIdDesc> serviceSets;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected IdDescriptorsImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.ID_DESCRIPTORS;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<RegistryIdDesc> getRegistries() {
+ if (registries == null) {
+ registries = new EObjectContainmentEList<RegistryIdDesc>(RegistryIdDesc.class, this, ServicedescriptorswithidPackage.ID_DESCRIPTORS__REGISTRIES);
+ }
+ return registries;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<ServiceSetIdDesc> getServiceSets() {
+ if (serviceSets == null) {
+ serviceSets = new EObjectContainmentEList<ServiceSetIdDesc>(ServiceSetIdDesc.class, this, ServicedescriptorswithidPackage.ID_DESCRIPTORS__SERVICE_SETS);
+ }
+ return serviceSets;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS__REGISTRIES:
+ return ((InternalEList<?>)getRegistries()).basicRemove(otherEnd, msgs);
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS__SERVICE_SETS:
+ return ((InternalEList<?>)getServiceSets()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS__REGISTRIES:
+ return getRegistries();
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS__SERVICE_SETS:
+ return getServiceSets();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS__REGISTRIES:
+ getRegistries().clear();
+ getRegistries().addAll((Collection<? extends RegistryIdDesc>)newValue);
+ return;
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS__SERVICE_SETS:
+ getServiceSets().clear();
+ getServiceSets().addAll((Collection<? extends ServiceSetIdDesc>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS__REGISTRIES:
+ getRegistries().clear();
+ return;
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS__SERVICE_SETS:
+ getServiceSets().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS__REGISTRIES:
+ return registries != null && !registries.isEmpty();
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS__SERVICE_SETS:
+ return serviceSets != null && !serviceSets.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+} //IdDescriptorsImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/InjectedServiceImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/InjectedServiceImpl.java
new file mode 100644
index 00000000000..d8cffe0528b
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/InjectedServiceImpl.java
@@ -0,0 +1,162 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Injected Service</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.InjectedServiceImpl#getServiceName <em>Service Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class InjectedServiceImpl extends InjectedValueImpl implements InjectedService {
+ /**
+ * The default value of the '{@link #getServiceName() <em>Service Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getServiceName()
+ * @generated
+ * @ordered
+ */
+ protected static final String SERVICE_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getServiceName() <em>Service Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getServiceName()
+ * @generated
+ * @ordered
+ */
+ protected String serviceName = SERVICE_NAME_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InjectedServiceImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.INJECTED_SERVICE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getServiceName() {
+ return serviceName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setServiceName(String newServiceName) {
+ String oldServiceName = serviceName;
+ serviceName = newServiceName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.INJECTED_SERVICE__SERVICE_NAME, oldServiceName, serviceName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.INJECTED_SERVICE__SERVICE_NAME:
+ return getServiceName();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.INJECTED_SERVICE__SERVICE_NAME:
+ setServiceName((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.INJECTED_SERVICE__SERVICE_NAME:
+ setServiceName(SERVICE_NAME_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.INJECTED_SERVICE__SERVICE_NAME:
+ return SERVICE_NAME_EDEFAULT == null ? serviceName != null : !SERVICE_NAME_EDEFAULT.equals(serviceName);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (serviceName: ");
+ result.append(serviceName);
+ result.append(')');
+ return result.toString();
+ }
+
+} //InjectedServiceImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/InjectedValueImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/InjectedValueImpl.java
new file mode 100644
index 00000000000..8bf6d37a16e
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/InjectedValueImpl.java
@@ -0,0 +1,163 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Injected Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.InjectedValueImpl#getDescription <em>Description</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public abstract class InjectedValueImpl extends EObjectImpl implements InjectedValue {
+ /**
+ * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected InjectedValueImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.INJECTED_VALUE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDescription(String newDescription) {
+ String oldDescription = description;
+ description = newDescription;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.INJECTED_VALUE__DESCRIPTION, oldDescription, description));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.INJECTED_VALUE__DESCRIPTION:
+ return getDescription();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.INJECTED_VALUE__DESCRIPTION:
+ setDescription((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.INJECTED_VALUE__DESCRIPTION:
+ setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.INJECTED_VALUE__DESCRIPTION:
+ return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (description: ");
+ result.append(description);
+ result.append(')');
+ return result.toString();
+ }
+
+} //InjectedValueImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/MethodInjectionImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/MethodInjectionImpl.java
new file mode 100644
index 00000000000..66f94e02a3a
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/MethodInjectionImpl.java
@@ -0,0 +1,162 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Method Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.MethodInjectionImpl#getMethodName <em>Method Name</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class MethodInjectionImpl extends AbstractMethodInjectionImpl implements MethodInjection {
+ /**
+ * The default value of the '{@link #getMethodName() <em>Method Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getMethodName()
+ * @generated
+ * @ordered
+ */
+ protected static final String METHOD_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getMethodName() <em>Method Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getMethodName()
+ * @generated
+ * @ordered
+ */
+ protected String methodName = METHOD_NAME_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected MethodInjectionImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.METHOD_INJECTION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getMethodName() {
+ return methodName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setMethodName(String newMethodName) {
+ String oldMethodName = methodName;
+ methodName = newMethodName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.METHOD_INJECTION__METHOD_NAME, oldMethodName, methodName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.METHOD_INJECTION__METHOD_NAME:
+ return getMethodName();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.METHOD_INJECTION__METHOD_NAME:
+ setMethodName((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.METHOD_INJECTION__METHOD_NAME:
+ setMethodName(METHOD_NAME_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.METHOD_INJECTION__METHOD_NAME:
+ return METHOD_NAME_EDEFAULT == null ? methodName != null : !METHOD_NAME_EDEFAULT.equals(methodName);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (methodName: ");
+ result.append(methodName);
+ result.append(')');
+ return result.toString();
+ }
+
+} //MethodInjectionImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/OpaqueInjectedValueImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/OpaqueInjectedValueImpl.java
new file mode 100644
index 00000000000..b1f85ad3793
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/OpaqueInjectedValueImpl.java
@@ -0,0 +1,162 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Opaque Injected Value</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.OpaqueInjectedValueImpl#getValue <em>Value</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class OpaqueInjectedValueImpl extends InjectedValueImpl implements OpaqueInjectedValue {
+ /**
+ * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected static final String VALUE_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValue()
+ * @generated
+ * @ordered
+ */
+ protected String value = VALUE_EDEFAULT;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected OpaqueInjectedValueImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.OPAQUE_INJECTED_VALUE;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getValue() {
+ return value;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setValue(String newValue) {
+ String oldValue = value;
+ value = newValue;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.OPAQUE_INJECTED_VALUE__VALUE, oldValue, value));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.OPAQUE_INJECTED_VALUE__VALUE:
+ return getValue();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.OPAQUE_INJECTED_VALUE__VALUE:
+ setValue((String)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.OPAQUE_INJECTED_VALUE__VALUE:
+ setValue(VALUE_EDEFAULT);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.OPAQUE_INJECTED_VALUE__VALUE:
+ return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (value: ");
+ result.append(value);
+ result.append(')');
+ return result.toString();
+ }
+
+} //OpaqueInjectedValueImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ParameterInjectionImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ParameterInjectionImpl.java
new file mode 100644
index 00000000000..bc0aa9aafb8
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ParameterInjectionImpl.java
@@ -0,0 +1,222 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Parameter Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ParameterInjectionImpl#getParameterName <em>Parameter Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ParameterInjectionImpl#getValues <em>Values</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ParameterInjectionImpl extends EObjectImpl implements ParameterInjection {
+ /**
+ * The default value of the '{@link #getParameterName() <em>Parameter Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getParameterName()
+ * @generated
+ * @ordered
+ */
+ protected static final String PARAMETER_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getParameterName() <em>Parameter Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getParameterName()
+ * @generated
+ * @ordered
+ */
+ protected String parameterName = PARAMETER_NAME_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getValues() <em>Values</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValues()
+ * @generated
+ * @ordered
+ */
+ protected EList<InjectedValue> values;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ParameterInjectionImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.PARAMETER_INJECTION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getParameterName() {
+ return parameterName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setParameterName(String newParameterName) {
+ String oldParameterName = parameterName;
+ parameterName = newParameterName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.PARAMETER_INJECTION__PARAMETER_NAME, oldParameterName, parameterName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<InjectedValue> getValues() {
+ if (values == null) {
+ values = new EObjectContainmentEList<InjectedValue>(InjectedValue.class, this, ServicedescriptorswithidPackage.PARAMETER_INJECTION__VALUES);
+ }
+ return values;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.PARAMETER_INJECTION__VALUES:
+ return ((InternalEList<?>)getValues()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.PARAMETER_INJECTION__PARAMETER_NAME:
+ return getParameterName();
+ case ServicedescriptorswithidPackage.PARAMETER_INJECTION__VALUES:
+ return getValues();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.PARAMETER_INJECTION__PARAMETER_NAME:
+ setParameterName((String)newValue);
+ return;
+ case ServicedescriptorswithidPackage.PARAMETER_INJECTION__VALUES:
+ getValues().clear();
+ getValues().addAll((Collection<? extends InjectedValue>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.PARAMETER_INJECTION__PARAMETER_NAME:
+ setParameterName(PARAMETER_NAME_EDEFAULT);
+ return;
+ case ServicedescriptorswithidPackage.PARAMETER_INJECTION__VALUES:
+ getValues().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.PARAMETER_INJECTION__PARAMETER_NAME:
+ return PARAMETER_NAME_EDEFAULT == null ? parameterName != null : !PARAMETER_NAME_EDEFAULT.equals(parameterName);
+ case ServicedescriptorswithidPackage.PARAMETER_INJECTION__VALUES:
+ return values != null && !values.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (parameterName: ");
+ result.append(parameterName);
+ result.append(')');
+ return result.toString();
+ }
+
+} //ParameterInjectionImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/PropertyInjectionImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/PropertyInjectionImpl.java
new file mode 100644
index 00000000000..50aa9ef56eb
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/PropertyInjectionImpl.java
@@ -0,0 +1,221 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Property Injection</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.PropertyInjectionImpl#getPropertyName <em>Property Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.PropertyInjectionImpl#getValues <em>Values</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class PropertyInjectionImpl extends FeatureInjectionImpl implements PropertyInjection {
+ /**
+ * The default value of the '{@link #getPropertyName() <em>Property Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getPropertyName()
+ * @generated
+ * @ordered
+ */
+ protected static final String PROPERTY_NAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getPropertyName() <em>Property Name</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getPropertyName()
+ * @generated
+ * @ordered
+ */
+ protected String propertyName = PROPERTY_NAME_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getValues() <em>Values</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getValues()
+ * @generated
+ * @ordered
+ */
+ protected EList<InjectedValue> values;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected PropertyInjectionImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.PROPERTY_INJECTION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getPropertyName() {
+ return propertyName;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setPropertyName(String newPropertyName) {
+ String oldPropertyName = propertyName;
+ propertyName = newPropertyName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.PROPERTY_INJECTION__PROPERTY_NAME, oldPropertyName, propertyName));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<InjectedValue> getValues() {
+ if (values == null) {
+ values = new EObjectContainmentEList<InjectedValue>(InjectedValue.class, this, ServicedescriptorswithidPackage.PROPERTY_INJECTION__VALUES);
+ }
+ return values;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.PROPERTY_INJECTION__VALUES:
+ return ((InternalEList<?>)getValues()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.PROPERTY_INJECTION__PROPERTY_NAME:
+ return getPropertyName();
+ case ServicedescriptorswithidPackage.PROPERTY_INJECTION__VALUES:
+ return getValues();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.PROPERTY_INJECTION__PROPERTY_NAME:
+ setPropertyName((String)newValue);
+ return;
+ case ServicedescriptorswithidPackage.PROPERTY_INJECTION__VALUES:
+ getValues().clear();
+ getValues().addAll((Collection<? extends InjectedValue>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.PROPERTY_INJECTION__PROPERTY_NAME:
+ setPropertyName(PROPERTY_NAME_EDEFAULT);
+ return;
+ case ServicedescriptorswithidPackage.PROPERTY_INJECTION__VALUES:
+ getValues().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.PROPERTY_INJECTION__PROPERTY_NAME:
+ return PROPERTY_NAME_EDEFAULT == null ? propertyName != null : !PROPERTY_NAME_EDEFAULT.equals(propertyName);
+ case ServicedescriptorswithidPackage.PROPERTY_INJECTION__VALUES:
+ return values != null && !values.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (propertyName: ");
+ result.append(propertyName);
+ result.append(')');
+ return result.toString();
+ }
+
+} //PropertyInjectionImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/RegistryIdDescImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/RegistryIdDescImpl.java
new file mode 100644
index 00000000000..5a6dd32f8cb
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/RegistryIdDescImpl.java
@@ -0,0 +1,386 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Registry Id Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.RegistryIdDescImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.RegistryIdDescImpl#getDescription <em>Description</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.RegistryIdDescImpl#isUnique <em>Is Unique</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.RegistryIdDescImpl#getSets <em>Sets</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.RegistryIdDescImpl#getExtends <em>Extends</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.RegistryIdDescImpl#getParents <em>Parents</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RegistryIdDescImpl extends EObjectImpl implements RegistryIdDesc {
+ /**
+ * 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 #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #isUnique() <em>Is Unique</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isUnique()
+ * @generated
+ * @ordered
+ */
+ protected static final boolean IS_UNIQUE_EDEFAULT = false;
+
+ /**
+ * The cached value of the '{@link #isUnique() <em>Is Unique</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #isUnique()
+ * @generated
+ * @ordered
+ */
+ protected boolean isUnique = IS_UNIQUE_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getSets() <em>Sets</em>}' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getSets()
+ * @generated
+ * @ordered
+ */
+ protected EList<String> sets;
+
+ /**
+ * The cached value of the '{@link #getExtends() <em>Extends</em>}' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getExtends()
+ * @generated
+ * @ordered
+ */
+ protected EList<String> extends_;
+
+ /**
+ * The cached value of the '{@link #getParents() <em>Parents</em>}' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getParents()
+ * @generated
+ * @ordered
+ */
+ protected EList<String> parents;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected RegistryIdDescImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.REGISTRY_ID_DESC;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setName(String newName) {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.REGISTRY_ID_DESC__NAME, oldName, name));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDescription(String newDescription) {
+ String oldDescription = description;
+ description = newDescription;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.REGISTRY_ID_DESC__DESCRIPTION, oldDescription, description));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public boolean isUnique() {
+ return isUnique;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setIsUnique(boolean newIsUnique) {
+ boolean oldIsUnique = isUnique;
+ isUnique = newIsUnique;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.REGISTRY_ID_DESC__IS_UNIQUE, oldIsUnique, isUnique));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<String> getSets() {
+ if (sets == null) {
+ sets = new EDataTypeUniqueEList<String>(String.class, this, ServicedescriptorswithidPackage.REGISTRY_ID_DESC__SETS);
+ }
+ return sets;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<String> getExtends() {
+ if (extends_ == null) {
+ extends_ = new EDataTypeUniqueEList<String>(String.class, this, ServicedescriptorswithidPackage.REGISTRY_ID_DESC__EXTENDS);
+ }
+ return extends_;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<String> getParents() {
+ if (parents == null) {
+ parents = new EDataTypeUniqueEList<String>(String.class, this, ServicedescriptorswithidPackage.REGISTRY_ID_DESC__PARENTS);
+ }
+ return parents;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__NAME:
+ return getName();
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__DESCRIPTION:
+ return getDescription();
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__IS_UNIQUE:
+ return isUnique();
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__SETS:
+ return getSets();
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__EXTENDS:
+ return getExtends();
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__PARENTS:
+ return getParents();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__NAME:
+ setName((String)newValue);
+ return;
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__DESCRIPTION:
+ setDescription((String)newValue);
+ return;
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__IS_UNIQUE:
+ setIsUnique((Boolean)newValue);
+ return;
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__SETS:
+ getSets().clear();
+ getSets().addAll((Collection<? extends String>)newValue);
+ return;
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__EXTENDS:
+ getExtends().clear();
+ getExtends().addAll((Collection<? extends String>)newValue);
+ return;
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__PARENTS:
+ getParents().clear();
+ getParents().addAll((Collection<? extends String>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__DESCRIPTION:
+ setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__IS_UNIQUE:
+ setIsUnique(IS_UNIQUE_EDEFAULT);
+ return;
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__SETS:
+ getSets().clear();
+ return;
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__EXTENDS:
+ getExtends().clear();
+ return;
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__PARENTS:
+ getParents().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__DESCRIPTION:
+ return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__IS_UNIQUE:
+ return isUnique != IS_UNIQUE_EDEFAULT;
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__SETS:
+ return sets != null && !sets.isEmpty();
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__EXTENDS:
+ return extends_ != null && !extends_.isEmpty();
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC__PARENTS:
+ return parents != null && !parents.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (name: ");
+ result.append(name);
+ result.append(", description: ");
+ result.append(description);
+ result.append(", isUnique: ");
+ result.append(isUnique);
+ result.append(", sets: ");
+ result.append(sets);
+ result.append(", extends: ");
+ result.append(extends_);
+ result.append(", parents: ");
+ result.append(parents);
+ result.append(')');
+ return result.toString();
+ }
+
+} //RegistryIdDescImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServiceFactoryIdDescImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServiceFactoryIdDescImpl.java
new file mode 100644
index 00000000000..a483ef3d562
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServiceFactoryIdDescImpl.java
@@ -0,0 +1,39 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceFactoryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Service Factory Id Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class ServiceFactoryIdDescImpl extends ServiceIdDescImpl implements ServiceFactoryIdDesc {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceFactoryIdDescImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.SERVICE_FACTORY_ID_DESC;
+ }
+
+} //ServiceFactoryIdDescImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServiceIdDescImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServiceIdDescImpl.java
new file mode 100644
index 00000000000..2c1c8814241
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServiceIdDescImpl.java
@@ -0,0 +1,276 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Service Id Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceIdDescImpl#getStartKind <em>Start Kind</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceIdDescImpl#getClassname <em>Classname</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceIdDescImpl#getInjections <em>Injections</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ServiceIdDescImpl extends AbstractServiceIdDescImpl implements ServiceIdDesc {
+ /**
+ * The default value of the '{@link #getStartKind() <em>Start Kind</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getStartKind()
+ * @generated
+ * @ordered
+ */
+ protected static final StartupKind START_KIND_EDEFAULT = StartupKind.LAZY;
+
+ /**
+ * The cached value of the '{@link #getStartKind() <em>Start Kind</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getStartKind()
+ * @generated
+ * @ordered
+ */
+ protected StartupKind startKind = START_KIND_EDEFAULT;
+
+ /**
+ * The default value of the '{@link #getClassname() <em>Classname</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getClassname()
+ * @generated
+ * @ordered
+ */
+ protected static final String CLASSNAME_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getClassname() <em>Classname</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getClassname()
+ * @generated
+ * @ordered
+ */
+ protected String classname = CLASSNAME_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getInjections() <em>Injections</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getInjections()
+ * @generated
+ * @ordered
+ */
+ protected EList<FeatureInjection> injections;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceIdDescImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.SERVICE_ID_DESC;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public StartupKind getStartKind() {
+ return startKind;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setStartKind(StartupKind newStartKind) {
+ StartupKind oldStartKind = startKind;
+ startKind = newStartKind == null ? START_KIND_EDEFAULT : newStartKind;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.SERVICE_ID_DESC__START_KIND, oldStartKind, startKind));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getClassname() {
+ return classname;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setClassname(String newClassname) {
+ String oldClassname = classname;
+ classname = newClassname;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.SERVICE_ID_DESC__CLASSNAME, oldClassname, classname));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<FeatureInjection> getInjections() {
+ if (injections == null) {
+ injections = new EObjectContainmentEList<FeatureInjection>(FeatureInjection.class, this, ServicedescriptorswithidPackage.SERVICE_ID_DESC__INJECTIONS);
+ }
+ return injections;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__INJECTIONS:
+ return ((InternalEList<?>)getInjections()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__START_KIND:
+ return getStartKind();
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__CLASSNAME:
+ return getClassname();
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__INJECTIONS:
+ return getInjections();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__START_KIND:
+ setStartKind((StartupKind)newValue);
+ return;
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__CLASSNAME:
+ setClassname((String)newValue);
+ return;
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__INJECTIONS:
+ getInjections().clear();
+ getInjections().addAll((Collection<? extends FeatureInjection>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__START_KIND:
+ setStartKind(START_KIND_EDEFAULT);
+ return;
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__CLASSNAME:
+ setClassname(CLASSNAME_EDEFAULT);
+ return;
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__INJECTIONS:
+ getInjections().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__START_KIND:
+ return startKind != START_KIND_EDEFAULT;
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__CLASSNAME:
+ return CLASSNAME_EDEFAULT == null ? classname != null : !CLASSNAME_EDEFAULT.equals(classname);
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC__INJECTIONS:
+ return injections != null && !injections.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (startKind: ");
+ result.append(startKind);
+ result.append(", classname: ");
+ result.append(classname);
+ result.append(')');
+ return result.toString();
+ }
+
+} //ServiceIdDescImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServiceSetIdDescImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServiceSetIdDescImpl.java
new file mode 100644
index 00000000000..87902faa8c4
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServiceSetIdDescImpl.java
@@ -0,0 +1,375 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Service Set Id Desc</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceSetIdDescImpl#getName <em>Name</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceSetIdDescImpl#getExtends <em>Extends</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceSetIdDescImpl#getDescription <em>Description</em>}</li>
+ * <li>{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl.ServiceSetIdDescImpl#getServiceDescriptors <em>Service Descriptors</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ServiceSetIdDescImpl extends EObjectImpl implements ServiceSetIdDesc {
+ /**
+ * 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 cached value of the '{@link #getExtends() <em>Extends</em>}' attribute list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getExtends()
+ * @generated
+ * @ordered
+ */
+ protected EList<String> extends_;
+
+ /**
+ * The default value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected static final String DESCRIPTION_EDEFAULT = null;
+
+ /**
+ * The cached value of the '{@link #getDescription() <em>Description</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDescription()
+ * @generated
+ * @ordered
+ */
+ protected String description = DESCRIPTION_EDEFAULT;
+
+ /**
+ * The cached value of the '{@link #getServiceDescriptors() <em>Service Descriptors</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getServiceDescriptors()
+ * @generated
+ * @ordered
+ */
+ protected EList<AbstractServiceIdDesc> serviceDescriptors;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServiceSetIdDescImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ServicedescriptorswithidPackage.Literals.SERVICE_SET_ID_DESC;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setName(String newName) {
+ String oldName = name;
+ name = newName;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__NAME, oldName, name));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<String> getExtends() {
+ if (extends_ == null) {
+ extends_ = new EDataTypeUniqueEList<String>(String.class, this, ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__EXTENDS);
+ }
+ return extends_;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDescription(String newDescription) {
+ String oldDescription = description;
+ description = newDescription;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__DESCRIPTION, oldDescription, description));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<AbstractServiceIdDesc> getServiceDescriptors() {
+ if (serviceDescriptors == null) {
+ serviceDescriptors = new EObjectContainmentWithInverseEList<AbstractServiceIdDesc>(AbstractServiceIdDesc.class, this, ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS, ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC__NAMESPACE);
+ }
+ return serviceDescriptors;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public AbstractServiceIdDesc getService(Object serviceId) {
+ // Ensure that you remove @generated or mark it @generated NOT
+ if(serviceId == null) {
+ return null;
+ }
+
+ for( AbstractServiceIdDesc desc : getServiceDescriptors()) {
+ if( serviceId.equals(desc.getName() ) ) {
+ return desc;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public boolean containsService(Object serviceId) {
+ return getService(serviceId) != null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public AbstractServiceIdDesc getService(AbstractServiceIdDesc serviceDesc) {
+ return getService( serviceDesc.getName() );
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public boolean containsService(AbstractServiceIdDesc serviceDesc) {
+ return getService( serviceDesc.getName() ) != null;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getServiceDescriptors()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS:
+ return ((InternalEList<?>)getServiceDescriptors()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__NAME:
+ return getName();
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__EXTENDS:
+ return getExtends();
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__DESCRIPTION:
+ return getDescription();
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS:
+ return getServiceDescriptors();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__NAME:
+ setName((String)newValue);
+ return;
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__EXTENDS:
+ getExtends().clear();
+ getExtends().addAll((Collection<? extends String>)newValue);
+ return;
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__DESCRIPTION:
+ setDescription((String)newValue);
+ return;
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS:
+ getServiceDescriptors().clear();
+ getServiceDescriptors().addAll((Collection<? extends AbstractServiceIdDesc>)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__NAME:
+ setName(NAME_EDEFAULT);
+ return;
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__EXTENDS:
+ getExtends().clear();
+ return;
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__DESCRIPTION:
+ setDescription(DESCRIPTION_EDEFAULT);
+ return;
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS:
+ getServiceDescriptors().clear();
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID) {
+ switch (featureID) {
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__NAME:
+ return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__EXTENDS:
+ return extends_ != null && !extends_.isEmpty();
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__DESCRIPTION:
+ return DESCRIPTION_EDEFAULT == null ? description != null : !DESCRIPTION_EDEFAULT.equals(description);
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS:
+ return serviceDescriptors != null && !serviceDescriptors.isEmpty();
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String toString() {
+ if (eIsProxy()) return super.toString();
+
+ StringBuffer result = new StringBuffer(super.toString());
+ result.append(" (name: ");
+ result.append(name);
+ result.append(", extends: ");
+ result.append(extends_);
+ result.append(", description: ");
+ result.append(description);
+ result.append(')');
+ return result.toString();
+ }
+
+} //ServiceSetIdDescImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServicedescriptorswithidFactoryImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServicedescriptorswithidFactoryImpl.java
new file mode 100644
index 00000000000..e2993e50624
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServicedescriptorswithidFactoryImpl.java
@@ -0,0 +1,355 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorswithidFactoryImpl extends EFactoryImpl implements ServicedescriptorswithidFactory {
+ /**
+ * Creates the default factory implementation.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public static ServicedescriptorswithidFactory init() {
+ try {
+ ServicedescriptorswithidFactory theServicedescriptorswithidFactory = (ServicedescriptorswithidFactory)EPackage.Registry.INSTANCE.getEFactory("org.eclipse.papyrus..infra.core.servicedescriptorswithid");
+ if (theServicedescriptorswithidFactory != null) {
+ return theServicedescriptorswithidFactory;
+ }
+ }
+ catch (Exception exception) {
+ EcorePlugin.INSTANCE.log(exception);
+ }
+ return new ServicedescriptorswithidFactoryImpl();
+ }
+
+ /**
+ * Creates an instance of the factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorswithidFactoryImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public EObject create(EClass eClass) {
+ switch (eClass.getClassifierID()) {
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC: return createRegistryIdDesc();
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC: return createServiceIdDesc();
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC: return createServiceSetIdDesc();
+ case ServicedescriptorswithidPackage.ALIAS_ID_DESC: return createAliasIdDesc();
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS: return createIdDescriptors();
+ case ServicedescriptorswithidPackage.PROPERTY_INJECTION: return createPropertyInjection();
+ case ServicedescriptorswithidPackage.METHOD_INJECTION: return createMethodInjection();
+ case ServicedescriptorswithidPackage.PARAMETER_INJECTION: return createParameterInjection();
+ case ServicedescriptorswithidPackage.INJECTED_SERVICE: return createInjectedService();
+ case ServicedescriptorswithidPackage.OPAQUE_INJECTED_VALUE: return createOpaqueInjectedValue();
+ case ServicedescriptorswithidPackage.CONSTRUCTOR_INJECTION: return createConstructorInjection();
+ case ServicedescriptorswithidPackage.SERVICE_FACTORY_ID_DESC: return createServiceFactoryIdDesc();
+ default:
+ throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object createFromString(EDataType eDataType, String initialValue) {
+ switch (eDataType.getClassifierID()) {
+ case ServicedescriptorswithidPackage.STARTUP_KIND:
+ return createStartupKindFromString(eDataType, initialValue);
+ case ServicedescriptorswithidPackage.STRING:
+ return createStringFromString(eDataType, initialValue);
+ case ServicedescriptorswithidPackage.BOOLEAN:
+ return createbooleanFromString(eDataType, initialValue);
+ case ServicedescriptorswithidPackage.OBJECT:
+ return createObjectFromString(eDataType, initialValue);
+ case ServicedescriptorswithidPackage.INT:
+ return createintFromString(eDataType, initialValue);
+ default:
+ throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String convertToString(EDataType eDataType, Object instanceValue) {
+ switch (eDataType.getClassifierID()) {
+ case ServicedescriptorswithidPackage.STARTUP_KIND:
+ return convertStartupKindToString(eDataType, instanceValue);
+ case ServicedescriptorswithidPackage.STRING:
+ return convertStringToString(eDataType, instanceValue);
+ case ServicedescriptorswithidPackage.BOOLEAN:
+ return convertbooleanToString(eDataType, instanceValue);
+ case ServicedescriptorswithidPackage.OBJECT:
+ return convertObjectToString(eDataType, instanceValue);
+ case ServicedescriptorswithidPackage.INT:
+ return convertintToString(eDataType, instanceValue);
+ default:
+ throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public RegistryIdDesc createRegistryIdDesc() {
+ RegistryIdDescImpl registryIdDesc = new RegistryIdDescImpl();
+ return registryIdDesc;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceIdDesc createServiceIdDesc() {
+ ServiceIdDescImpl serviceIdDesc = new ServiceIdDescImpl();
+ return serviceIdDesc;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceSetIdDesc createServiceSetIdDesc() {
+ ServiceSetIdDescImpl serviceSetIdDesc = new ServiceSetIdDescImpl();
+ return serviceSetIdDesc;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public AliasIdDesc createAliasIdDesc() {
+ AliasIdDescImpl aliasIdDesc = new AliasIdDescImpl();
+ return aliasIdDesc;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public IdDescriptors createIdDescriptors() {
+ IdDescriptorsImpl idDescriptors = new IdDescriptorsImpl();
+ return idDescriptors;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PropertyInjection createPropertyInjection() {
+ PropertyInjectionImpl propertyInjection = new PropertyInjectionImpl();
+ return propertyInjection;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public MethodInjection createMethodInjection() {
+ MethodInjectionImpl methodInjection = new MethodInjectionImpl();
+ return methodInjection;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ParameterInjection createParameterInjection() {
+ ParameterInjectionImpl parameterInjection = new ParameterInjectionImpl();
+ return parameterInjection;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public InjectedService createInjectedService() {
+ InjectedServiceImpl injectedService = new InjectedServiceImpl();
+ return injectedService;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public OpaqueInjectedValue createOpaqueInjectedValue() {
+ OpaqueInjectedValueImpl opaqueInjectedValue = new OpaqueInjectedValueImpl();
+ return opaqueInjectedValue;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ConstructorInjection createConstructorInjection() {
+ ConstructorInjectionImpl constructorInjection = new ConstructorInjectionImpl();
+ return constructorInjection;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServiceFactoryIdDesc createServiceFactoryIdDesc() {
+ ServiceFactoryIdDescImpl serviceFactoryIdDesc = new ServiceFactoryIdDescImpl();
+ return serviceFactoryIdDesc;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public StartupKind createStartupKindFromString(EDataType eDataType, String initialValue) {
+ StartupKind result = StartupKind.get(initialValue);
+ if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+ return result;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String convertStartupKindToString(EDataType eDataType, Object instanceValue) {
+ return instanceValue == null ? null : instanceValue.toString();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String createStringFromString(EDataType eDataType, String initialValue) {
+ return (String)super.createFromString(eDataType, initialValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String convertStringToString(EDataType eDataType, Object instanceValue) {
+ return super.convertToString(eDataType, instanceValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Boolean createbooleanFromString(EDataType eDataType, String initialValue) {
+ return (Boolean)super.createFromString(eDataType, initialValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String convertbooleanToString(EDataType eDataType, Object instanceValue) {
+ return super.convertToString(eDataType, instanceValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Object createObjectFromString(EDataType eDataType, String initialValue) {
+ return super.createFromString(eDataType, initialValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String convertObjectToString(EDataType eDataType, Object instanceValue) {
+ return super.convertToString(eDataType, instanceValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public Integer createintFromString(EDataType eDataType, String initialValue) {
+ return (Integer)super.createFromString(eDataType, initialValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public String convertintToString(EDataType eDataType, Object instanceValue) {
+ return super.convertToString(eDataType, instanceValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorswithidPackage getServicedescriptorswithidPackage() {
+ return (ServicedescriptorswithidPackage)getEPackage();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @deprecated
+ * @generated
+ */
+ @Deprecated
+ public static ServicedescriptorswithidPackage getPackage() {
+ return ServicedescriptorswithidPackage.eINSTANCE;
+ }
+
+} //ServicedescriptorswithidFactoryImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServicedescriptorswithidPackageImpl.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServicedescriptorswithidPackageImpl.java
new file mode 100644
index 00000000000..f6876f63264
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/impl/ServicedescriptorswithidPackageImpl.java
@@ -0,0 +1,959 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.impl;
+
+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;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractMethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ConstructorInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceFactoryIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidFactory;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage;
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.StartupKind;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ServicedescriptorswithidPackageImpl extends EPackageImpl implements ServicedescriptorswithidPackage {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass registryIdDescEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass serviceIdDescEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass abstractServiceIdDescEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass serviceSetIdDescEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass featureInjectionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass aliasIdDescEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass idDescriptorsEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass propertyInjectionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass injectedValueEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass methodInjectionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass abstractMethodInjectionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass parameterInjectionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass injectedServiceEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass opaqueInjectedValueEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass constructorInjectionEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass serviceFactoryIdDescEClass = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EEnum startupKindEEnum = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EDataType stringEDataType = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EDataType booleanEDataType = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EDataType objectEDataType = null;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EDataType intEDataType = null;
+
+ /**
+ * Creates an instance of the model <b>Package</b>, registered with
+ * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+ * package URI value.
+ * <p>Note: the correct way to create the package is via the static
+ * factory method {@link #init init()}, which also performs
+ * initialization of the package, or returns the registered package,
+ * if one already exists.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.ecore.EPackage.Registry
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage#eNS_URI
+ * @see #init()
+ * @generated
+ */
+ private ServicedescriptorswithidPackageImpl() {
+ super(eNS_URI, ServicedescriptorswithidFactory.eINSTANCE);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private static boolean isInited = false;
+
+ /**
+ * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+ *
+ * <p>This method is used to initialize {@link ServicedescriptorswithidPackage#eINSTANCE} when that field is accessed.
+ * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #eNS_URI
+ * @see #createPackageContents()
+ * @see #initializePackageContents()
+ * @generated
+ */
+ public static ServicedescriptorswithidPackage init() {
+ if (isInited) return (ServicedescriptorswithidPackage)EPackage.Registry.INSTANCE.getEPackage(ServicedescriptorswithidPackage.eNS_URI);
+
+ // Obtain or create and register package
+ ServicedescriptorswithidPackageImpl theServicedescriptorswithidPackage = (ServicedescriptorswithidPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof ServicedescriptorswithidPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new ServicedescriptorswithidPackageImpl());
+
+ isInited = true;
+
+ // Create package meta-data objects
+ theServicedescriptorswithidPackage.createPackageContents();
+
+ // Initialize created meta-data
+ theServicedescriptorswithidPackage.initializePackageContents();
+
+ // Mark meta-data to indicate it can't be changed
+ theServicedescriptorswithidPackage.freeze();
+
+
+ // Update the registry and return the package
+ EPackage.Registry.INSTANCE.put(ServicedescriptorswithidPackage.eNS_URI, theServicedescriptorswithidPackage);
+ return theServicedescriptorswithidPackage;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getRegistryIdDesc() {
+ return registryIdDescEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getRegistryIdDesc_Name() {
+ return (EAttribute)registryIdDescEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getRegistryIdDesc_Description() {
+ return (EAttribute)registryIdDescEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getRegistryIdDesc_IsUnique() {
+ return (EAttribute)registryIdDescEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getRegistryIdDesc_Sets() {
+ return (EAttribute)registryIdDescEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getRegistryIdDesc_Extends() {
+ return (EAttribute)registryIdDescEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getRegistryIdDesc_Parents() {
+ return (EAttribute)registryIdDescEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getServiceIdDesc() {
+ return serviceIdDescEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getServiceIdDesc_StartKind() {
+ return (EAttribute)serviceIdDescEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getServiceIdDesc_Classname() {
+ return (EAttribute)serviceIdDescEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getServiceIdDesc_Injections() {
+ return (EReference)serviceIdDescEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getAbstractServiceIdDesc() {
+ return abstractServiceIdDescEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAbstractServiceIdDesc_Name() {
+ return (EAttribute)abstractServiceIdDescEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getAbstractServiceIdDesc_Namespace() {
+ return (EReference)abstractServiceIdDescEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAbstractServiceIdDesc_Description() {
+ return (EAttribute)abstractServiceIdDescEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAbstractServiceIdDesc_DependsOn() {
+ return (EAttribute)abstractServiceIdDescEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAbstractServiceIdDesc_Priority() {
+ return (EAttribute)abstractServiceIdDescEClass.getEStructuralFeatures().get(4);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAbstractServiceIdDesc_BundleID() {
+ return (EAttribute)abstractServiceIdDescEClass.getEStructuralFeatures().get(5);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getServiceSetIdDesc() {
+ return serviceSetIdDescEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getServiceSetIdDesc_Name() {
+ return (EAttribute)serviceSetIdDescEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getServiceSetIdDesc_Extends() {
+ return (EAttribute)serviceSetIdDescEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getServiceSetIdDesc_Description() {
+ return (EAttribute)serviceSetIdDescEClass.getEStructuralFeatures().get(2);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getServiceSetIdDesc_ServiceDescriptors() {
+ return (EReference)serviceSetIdDescEClass.getEStructuralFeatures().get(3);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getFeatureInjection() {
+ return featureInjectionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getFeatureInjection_Description() {
+ return (EAttribute)featureInjectionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getAliasIdDesc() {
+ return aliasIdDescEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getAliasIdDesc_AliasedService() {
+ return (EAttribute)aliasIdDescEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getIdDescriptors() {
+ return idDescriptorsEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getIdDescriptors_Registries() {
+ return (EReference)idDescriptorsEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getIdDescriptors_ServiceSets() {
+ return (EReference)idDescriptorsEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getPropertyInjection() {
+ return propertyInjectionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getPropertyInjection_PropertyName() {
+ return (EAttribute)propertyInjectionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getPropertyInjection_Values() {
+ return (EReference)propertyInjectionEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getInjectedValue() {
+ return injectedValueEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getInjectedValue_Description() {
+ return (EAttribute)injectedValueEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getMethodInjection() {
+ return methodInjectionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getMethodInjection_MethodName() {
+ return (EAttribute)methodInjectionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getAbstractMethodInjection() {
+ return abstractMethodInjectionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getAbstractMethodInjection_Parameters() {
+ return (EReference)abstractMethodInjectionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getParameterInjection() {
+ return parameterInjectionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getParameterInjection_ParameterName() {
+ return (EAttribute)parameterInjectionEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EReference getParameterInjection_Values() {
+ return (EReference)parameterInjectionEClass.getEStructuralFeatures().get(1);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getInjectedService() {
+ return injectedServiceEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getInjectedService_ServiceName() {
+ return (EAttribute)injectedServiceEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getOpaqueInjectedValue() {
+ return opaqueInjectedValueEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EAttribute getOpaqueInjectedValue_Value() {
+ return (EAttribute)opaqueInjectedValueEClass.getEStructuralFeatures().get(0);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getConstructorInjection() {
+ return constructorInjectionEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EClass getServiceFactoryIdDesc() {
+ return serviceFactoryIdDescEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EEnum getStartupKind() {
+ return startupKindEEnum;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EDataType getString() {
+ return stringEDataType;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EDataType getboolean() {
+ return booleanEDataType;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EDataType getObject() {
+ return objectEDataType;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EDataType getint() {
+ return intEDataType;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorswithidFactory getServicedescriptorswithidFactory() {
+ return (ServicedescriptorswithidFactory)getEFactoryInstance();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isCreated = false;
+
+ /**
+ * Creates the meta-model objects for the package. This method is
+ * guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void createPackageContents() {
+ if (isCreated) return;
+ isCreated = true;
+
+ // Create classes and their features
+ registryIdDescEClass = createEClass(REGISTRY_ID_DESC);
+ createEAttribute(registryIdDescEClass, REGISTRY_ID_DESC__NAME);
+ createEAttribute(registryIdDescEClass, REGISTRY_ID_DESC__DESCRIPTION);
+ createEAttribute(registryIdDescEClass, REGISTRY_ID_DESC__IS_UNIQUE);
+ createEAttribute(registryIdDescEClass, REGISTRY_ID_DESC__SETS);
+ createEAttribute(registryIdDescEClass, REGISTRY_ID_DESC__EXTENDS);
+ createEAttribute(registryIdDescEClass, REGISTRY_ID_DESC__PARENTS);
+
+ serviceIdDescEClass = createEClass(SERVICE_ID_DESC);
+ createEAttribute(serviceIdDescEClass, SERVICE_ID_DESC__START_KIND);
+ createEAttribute(serviceIdDescEClass, SERVICE_ID_DESC__CLASSNAME);
+ createEReference(serviceIdDescEClass, SERVICE_ID_DESC__INJECTIONS);
+
+ abstractServiceIdDescEClass = createEClass(ABSTRACT_SERVICE_ID_DESC);
+ createEAttribute(abstractServiceIdDescEClass, ABSTRACT_SERVICE_ID_DESC__NAME);
+ createEReference(abstractServiceIdDescEClass, ABSTRACT_SERVICE_ID_DESC__NAMESPACE);
+ createEAttribute(abstractServiceIdDescEClass, ABSTRACT_SERVICE_ID_DESC__DESCRIPTION);
+ createEAttribute(abstractServiceIdDescEClass, ABSTRACT_SERVICE_ID_DESC__DEPENDS_ON);
+ createEAttribute(abstractServiceIdDescEClass, ABSTRACT_SERVICE_ID_DESC__PRIORITY);
+ createEAttribute(abstractServiceIdDescEClass, ABSTRACT_SERVICE_ID_DESC__BUNDLE_ID);
+
+ serviceSetIdDescEClass = createEClass(SERVICE_SET_ID_DESC);
+ createEAttribute(serviceSetIdDescEClass, SERVICE_SET_ID_DESC__NAME);
+ createEAttribute(serviceSetIdDescEClass, SERVICE_SET_ID_DESC__EXTENDS);
+ createEAttribute(serviceSetIdDescEClass, SERVICE_SET_ID_DESC__DESCRIPTION);
+ createEReference(serviceSetIdDescEClass, SERVICE_SET_ID_DESC__SERVICE_DESCRIPTORS);
+
+ featureInjectionEClass = createEClass(FEATURE_INJECTION);
+ createEAttribute(featureInjectionEClass, FEATURE_INJECTION__DESCRIPTION);
+
+ aliasIdDescEClass = createEClass(ALIAS_ID_DESC);
+ createEAttribute(aliasIdDescEClass, ALIAS_ID_DESC__ALIASED_SERVICE);
+
+ idDescriptorsEClass = createEClass(ID_DESCRIPTORS);
+ createEReference(idDescriptorsEClass, ID_DESCRIPTORS__REGISTRIES);
+ createEReference(idDescriptorsEClass, ID_DESCRIPTORS__SERVICE_SETS);
+
+ propertyInjectionEClass = createEClass(PROPERTY_INJECTION);
+ createEAttribute(propertyInjectionEClass, PROPERTY_INJECTION__PROPERTY_NAME);
+ createEReference(propertyInjectionEClass, PROPERTY_INJECTION__VALUES);
+
+ injectedValueEClass = createEClass(INJECTED_VALUE);
+ createEAttribute(injectedValueEClass, INJECTED_VALUE__DESCRIPTION);
+
+ methodInjectionEClass = createEClass(METHOD_INJECTION);
+ createEAttribute(methodInjectionEClass, METHOD_INJECTION__METHOD_NAME);
+
+ abstractMethodInjectionEClass = createEClass(ABSTRACT_METHOD_INJECTION);
+ createEReference(abstractMethodInjectionEClass, ABSTRACT_METHOD_INJECTION__PARAMETERS);
+
+ parameterInjectionEClass = createEClass(PARAMETER_INJECTION);
+ createEAttribute(parameterInjectionEClass, PARAMETER_INJECTION__PARAMETER_NAME);
+ createEReference(parameterInjectionEClass, PARAMETER_INJECTION__VALUES);
+
+ injectedServiceEClass = createEClass(INJECTED_SERVICE);
+ createEAttribute(injectedServiceEClass, INJECTED_SERVICE__SERVICE_NAME);
+
+ opaqueInjectedValueEClass = createEClass(OPAQUE_INJECTED_VALUE);
+ createEAttribute(opaqueInjectedValueEClass, OPAQUE_INJECTED_VALUE__VALUE);
+
+ constructorInjectionEClass = createEClass(CONSTRUCTOR_INJECTION);
+
+ serviceFactoryIdDescEClass = createEClass(SERVICE_FACTORY_ID_DESC);
+
+ // Create enums
+ startupKindEEnum = createEEnum(STARTUP_KIND);
+
+ // Create data types
+ stringEDataType = createEDataType(STRING);
+ booleanEDataType = createEDataType(BOOLEAN);
+ objectEDataType = createEDataType(OBJECT);
+ intEDataType = createEDataType(INT);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private boolean isInitialized = false;
+
+ /**
+ * Complete the initialization of the package and its meta-model. This
+ * method is guarded to have no affect on any invocation but its first.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void initializePackageContents() {
+ if (isInitialized) return;
+ isInitialized = true;
+
+ // Initialize package
+ setName(eNAME);
+ setNsPrefix(eNS_PREFIX);
+ setNsURI(eNS_URI);
+
+ // Create type parameters
+
+ // Set bounds for type parameters
+
+ // Add supertypes to classes
+ serviceIdDescEClass.getESuperTypes().add(this.getAbstractServiceIdDesc());
+ aliasIdDescEClass.getESuperTypes().add(this.getAbstractServiceIdDesc());
+ propertyInjectionEClass.getESuperTypes().add(this.getFeatureInjection());
+ methodInjectionEClass.getESuperTypes().add(this.getAbstractMethodInjection());
+ abstractMethodInjectionEClass.getESuperTypes().add(this.getFeatureInjection());
+ injectedServiceEClass.getESuperTypes().add(this.getInjectedValue());
+ opaqueInjectedValueEClass.getESuperTypes().add(this.getInjectedValue());
+ constructorInjectionEClass.getESuperTypes().add(this.getAbstractMethodInjection());
+ serviceFactoryIdDescEClass.getESuperTypes().add(this.getServiceIdDesc());
+
+ // Initialize classes and features; add operations and parameters
+ initEClass(registryIdDescEClass, RegistryIdDesc.class, "RegistryIdDesc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getRegistryIdDesc_Name(), this.getString(), "name", null, 1, 1, RegistryIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getRegistryIdDesc_Description(), this.getString(), "description", null, 1, 1, RegistryIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getRegistryIdDesc_IsUnique(), this.getboolean(), "isUnique", null, 1, 1, RegistryIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getRegistryIdDesc_Sets(), this.getString(), "sets", null, 0, -1, RegistryIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getRegistryIdDesc_Extends(), this.getString(), "extends", null, 0, -1, RegistryIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getRegistryIdDesc_Parents(), this.getString(), "parents", null, 0, -1, RegistryIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+ initEClass(serviceIdDescEClass, ServiceIdDesc.class, "ServiceIdDesc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getServiceIdDesc_StartKind(), this.getStartupKind(), "startKind", "lazy", 1, 1, ServiceIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getServiceIdDesc_Classname(), this.getString(), "classname", null, 1, 1, ServiceIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getServiceIdDesc_Injections(), this.getFeatureInjection(), null, "injections", null, 0, -1, ServiceIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(abstractServiceIdDescEClass, AbstractServiceIdDesc.class, "AbstractServiceIdDesc", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getAbstractServiceIdDesc_Name(), this.getString(), "name", null, 1, 1, AbstractServiceIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getAbstractServiceIdDesc_Namespace(), this.getServiceSetIdDesc(), this.getServiceSetIdDesc_ServiceDescriptors(), "namespace", null, 1, 1, AbstractServiceIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getAbstractServiceIdDesc_Description(), this.getString(), "description", null, 1, 1, AbstractServiceIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getAbstractServiceIdDesc_DependsOn(), this.getString(), "dependsOn", null, 0, -1, AbstractServiceIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getAbstractServiceIdDesc_Priority(), this.getint(), "priority", null, 1, 1, AbstractServiceIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getAbstractServiceIdDesc_BundleID(), this.getString(), "bundleID", null, 1, 1, AbstractServiceIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(serviceSetIdDescEClass, ServiceSetIdDesc.class, "ServiceSetIdDesc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getServiceSetIdDesc_Name(), this.getString(), "name", null, 1, 1, ServiceSetIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEAttribute(getServiceSetIdDesc_Extends(), this.getString(), "extends", null, 0, -1, ServiceSetIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEAttribute(getServiceSetIdDesc_Description(), this.getString(), "description", null, 1, 1, ServiceSetIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getServiceSetIdDesc_ServiceDescriptors(), this.getAbstractServiceIdDesc(), this.getAbstractServiceIdDesc_Namespace(), "serviceDescriptors", null, 0, -1, ServiceSetIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ EOperation op = addEOperation(serviceSetIdDescEClass, this.getAbstractServiceIdDesc(), "getService", 1, 1, IS_UNIQUE, !IS_ORDERED);
+ addEParameter(op, this.getObject(), "serviceId", 1, 1, IS_UNIQUE, !IS_ORDERED);
+
+ op = addEOperation(serviceSetIdDescEClass, this.getboolean(), "containsService", 1, 1, IS_UNIQUE, !IS_ORDERED);
+ addEParameter(op, this.getObject(), "serviceId", 1, 1, IS_UNIQUE, !IS_ORDERED);
+
+ op = addEOperation(serviceSetIdDescEClass, this.getAbstractServiceIdDesc(), "getService", 1, 1, IS_UNIQUE, !IS_ORDERED);
+ addEParameter(op, this.getAbstractServiceIdDesc(), "serviceDesc", 1, 1, IS_UNIQUE, !IS_ORDERED);
+
+ op = addEOperation(serviceSetIdDescEClass, this.getboolean(), "containsService", 1, 1, IS_UNIQUE, !IS_ORDERED);
+ addEParameter(op, this.getAbstractServiceIdDesc(), "serviceDesc", 1, 1, IS_UNIQUE, !IS_ORDERED);
+
+ initEClass(featureInjectionEClass, FeatureInjection.class, "FeatureInjection", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getFeatureInjection_Description(), this.getString(), "description", null, 1, 1, FeatureInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(aliasIdDescEClass, AliasIdDesc.class, "AliasIdDesc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getAliasIdDesc_AliasedService(), this.getString(), "aliasedService", null, 1, 1, AliasIdDesc.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(idDescriptorsEClass, IdDescriptors.class, "IdDescriptors", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getIdDescriptors_Registries(), this.getRegistryIdDesc(), null, "registries", null, 0, -1, IdDescriptors.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getIdDescriptors_ServiceSets(), this.getServiceSetIdDesc(), null, "serviceSets", null, 0, -1, IdDescriptors.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(propertyInjectionEClass, PropertyInjection.class, "PropertyInjection", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getPropertyInjection_PropertyName(), this.getString(), "propertyName", null, 1, 1, PropertyInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getPropertyInjection_Values(), this.getInjectedValue(), null, "values", null, 0, -1, PropertyInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(injectedValueEClass, InjectedValue.class, "InjectedValue", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getInjectedValue_Description(), this.getString(), "description", null, 1, 1, InjectedValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(methodInjectionEClass, MethodInjection.class, "MethodInjection", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getMethodInjection_MethodName(), this.getString(), "methodName", null, 1, 1, MethodInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(abstractMethodInjectionEClass, AbstractMethodInjection.class, "AbstractMethodInjection", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEReference(getAbstractMethodInjection_Parameters(), this.getParameterInjection(), null, "parameters", null, 0, -1, AbstractMethodInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(parameterInjectionEClass, ParameterInjection.class, "ParameterInjection", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getParameterInjection_ParameterName(), this.getString(), "parameterName", null, 1, 1, ParameterInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+ initEReference(getParameterInjection_Values(), this.getInjectedValue(), null, "values", null, 0, -1, ParameterInjection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(injectedServiceEClass, InjectedService.class, "InjectedService", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getInjectedService_ServiceName(), this.getString(), "serviceName", null, 1, 1, InjectedService.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(opaqueInjectedValueEClass, OpaqueInjectedValue.class, "OpaqueInjectedValue", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+ initEAttribute(getOpaqueInjectedValue_Value(), this.getString(), "value", null, 1, 1, OpaqueInjectedValue.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);
+
+ initEClass(constructorInjectionEClass, ConstructorInjection.class, "ConstructorInjection", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ initEClass(serviceFactoryIdDescEClass, ServiceFactoryIdDesc.class, "ServiceFactoryIdDesc", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+ // Initialize enums and add enum literals
+ initEEnum(startupKindEEnum, StartupKind.class, "StartupKind");
+ addEEnumLiteral(startupKindEEnum, StartupKind.LAZY);
+ addEEnumLiteral(startupKindEEnum, StartupKind.STARTUP);
+
+ // Initialize data types
+ initEDataType(stringEDataType, String.class, "String", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
+ initEDataType(booleanEDataType, boolean.class, "boolean", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
+ initEDataType(objectEDataType, Object.class, "Object", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
+ initEDataType(intEDataType, int.class, "int", IS_SERIALIZABLE, !IS_GENERATED_INSTANCE_CLASS);
+
+ // Create resource
+ createResource(eNS_URI);
+ }
+
+} //ServicedescriptorswithidPackageImpl
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/util/ServicedescriptorswithidAdapterFactory.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/util/ServicedescriptorswithidAdapterFactory.java
new file mode 100644
index 00000000000..b61f3474e8c
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/util/ServicedescriptorswithidAdapterFactory.java
@@ -0,0 +1,390 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage
+ * @generated
+ */
+public class ServicedescriptorswithidAdapterFactory extends AdapterFactoryImpl {
+ /**
+ * The cached model package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static ServicedescriptorswithidPackage modelPackage;
+
+ /**
+ * Creates an instance of the adapter factory.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorswithidAdapterFactory() {
+ if (modelPackage == null) {
+ modelPackage = ServicedescriptorswithidPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Returns whether this factory is applicable for the type of the object.
+ * <!-- begin-user-doc -->
+ * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+ * <!-- end-user-doc -->
+ * @return whether this factory is applicable for the type of the object.
+ * @generated
+ */
+ @Override
+ public boolean isFactoryForType(Object object) {
+ if (object == modelPackage) {
+ return true;
+ }
+ if (object instanceof EObject) {
+ return ((EObject)object).eClass().getEPackage() == modelPackage;
+ }
+ return false;
+ }
+
+ /**
+ * The switch that delegates to the <code>createXXX</code> methods.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected ServicedescriptorswithidSwitch<Adapter> modelSwitch =
+ new ServicedescriptorswithidSwitch<Adapter>() {
+ @Override
+ public Adapter caseRegistryIdDesc(RegistryIdDesc object) {
+ return createRegistryIdDescAdapter();
+ }
+ @Override
+ public Adapter caseServiceIdDesc(ServiceIdDesc object) {
+ return createServiceIdDescAdapter();
+ }
+ @Override
+ public Adapter caseAbstractServiceIdDesc(AbstractServiceIdDesc object) {
+ return createAbstractServiceIdDescAdapter();
+ }
+ @Override
+ public Adapter caseServiceSetIdDesc(ServiceSetIdDesc object) {
+ return createServiceSetIdDescAdapter();
+ }
+ @Override
+ public Adapter caseFeatureInjection(FeatureInjection object) {
+ return createFeatureInjectionAdapter();
+ }
+ @Override
+ public Adapter caseAliasIdDesc(AliasIdDesc object) {
+ return createAliasIdDescAdapter();
+ }
+ @Override
+ public Adapter caseIdDescriptors(IdDescriptors object) {
+ return createIdDescriptorsAdapter();
+ }
+ @Override
+ public Adapter casePropertyInjection(PropertyInjection object) {
+ return createPropertyInjectionAdapter();
+ }
+ @Override
+ public Adapter caseInjectedValue(InjectedValue object) {
+ return createInjectedValueAdapter();
+ }
+ @Override
+ public Adapter caseMethodInjection(MethodInjection object) {
+ return createMethodInjectionAdapter();
+ }
+ @Override
+ public Adapter caseAbstractMethodInjection(AbstractMethodInjection object) {
+ return createAbstractMethodInjectionAdapter();
+ }
+ @Override
+ public Adapter caseParameterInjection(ParameterInjection object) {
+ return createParameterInjectionAdapter();
+ }
+ @Override
+ public Adapter caseInjectedService(InjectedService object) {
+ return createInjectedServiceAdapter();
+ }
+ @Override
+ public Adapter caseOpaqueInjectedValue(OpaqueInjectedValue object) {
+ return createOpaqueInjectedValueAdapter();
+ }
+ @Override
+ public Adapter caseConstructorInjection(ConstructorInjection object) {
+ return createConstructorInjectionAdapter();
+ }
+ @Override
+ public Adapter caseServiceFactoryIdDesc(ServiceFactoryIdDesc object) {
+ return createServiceFactoryIdDescAdapter();
+ }
+ @Override
+ public Adapter defaultCase(EObject object) {
+ return createEObjectAdapter();
+ }
+ };
+
+ /**
+ * Creates an adapter for the <code>target</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @param target the object to adapt.
+ * @return the adapter for the <code>target</code>.
+ * @generated
+ */
+ @Override
+ public Adapter createAdapter(Notifier target) {
+ return modelSwitch.doSwitch((EObject)target);
+ }
+
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc <em>Registry Id Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.RegistryIdDesc
+ * @generated
+ */
+ public Adapter createRegistryIdDescAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc <em>Service Id Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceIdDesc
+ * @generated
+ */
+ public Adapter createServiceIdDescAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc <em>Abstract Service Id Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractServiceIdDesc
+ * @generated
+ */
+ public Adapter createAbstractServiceIdDescAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc <em>Service Set Id Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceSetIdDesc
+ * @generated
+ */
+ public Adapter createServiceSetIdDescAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection <em>Feature Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.FeatureInjection
+ * @generated
+ */
+ public Adapter createFeatureInjectionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc <em>Alias Id Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AliasIdDesc
+ * @generated
+ */
+ public Adapter createAliasIdDescAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors <em>Id Descriptors</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.IdDescriptors
+ * @generated
+ */
+ public Adapter createIdDescriptorsAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection <em>Property Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.PropertyInjection
+ * @generated
+ */
+ public Adapter createPropertyInjectionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue <em>Injected Value</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedValue
+ * @generated
+ */
+ public Adapter createInjectedValueAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection <em>Method Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.MethodInjection
+ * @generated
+ */
+ public Adapter createMethodInjectionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractMethodInjection <em>Abstract Method Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.AbstractMethodInjection
+ * @generated
+ */
+ public Adapter createAbstractMethodInjectionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection <em>Parameter Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ParameterInjection
+ * @generated
+ */
+ public Adapter createParameterInjectionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService <em>Injected Service</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.InjectedService
+ * @generated
+ */
+ public Adapter createInjectedServiceAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue <em>Opaque Injected Value</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.OpaqueInjectedValue
+ * @generated
+ */
+ public Adapter createOpaqueInjectedValueAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ConstructorInjection <em>Constructor Injection</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ConstructorInjection
+ * @generated
+ */
+ public Adapter createConstructorInjectionAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceFactoryIdDesc <em>Service Factory Id Desc</em>}'.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null so that we can easily ignore cases;
+ * it's useful to ignore a case when inheritance will catch all the cases anyway.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServiceFactoryIdDesc
+ * @generated
+ */
+ public Adapter createServiceFactoryIdDescAdapter() {
+ return null;
+ }
+
+ /**
+ * Creates a new adapter for the default case.
+ * <!-- begin-user-doc -->
+ * This default implementation returns null.
+ * <!-- end-user-doc -->
+ * @return the new adapter.
+ * @generated
+ */
+ public Adapter createEObjectAdapter() {
+ return null;
+ }
+
+} //ServicedescriptorswithidAdapterFactory
diff --git a/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/util/ServicedescriptorswithidSwitch.java b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/util/ServicedescriptorswithidSwitch.java
new file mode 100644
index 00000000000..b3060312538
--- /dev/null
+++ b/incoming/serviceregistry/org.eclipse.papyrus.infra.core.serviceregistry/src/org/eclipse/papyrus/infra/core/serviceregistry/servicedescriptorswithid/util/ServicedescriptorswithidSwitch.java
@@ -0,0 +1,437 @@
+/**
+ */
+package org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.papyrus.infra.core.serviceregistry.servicedescriptorswithid.ServicedescriptorswithidPackage
+ * @generated
+ */
+public class ServicedescriptorswithidSwitch<T> extends Switch<T> {
+ /**
+ * The cached model package
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected static ServicedescriptorswithidPackage modelPackage;
+
+ /**
+ * Creates an instance of the switch.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ServicedescriptorswithidSwitch() {
+ if (modelPackage == null) {
+ modelPackage = ServicedescriptorswithidPackage.eINSTANCE;
+ }
+ }
+
+ /**
+ * Checks whether this is a switch for the given package.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @parameter ePackage the package in question.
+ * @return whether this is a switch for the given package.
+ * @generated
+ */
+ @Override
+ protected boolean isSwitchFor(EPackage ePackage) {
+ return ePackage == modelPackage;
+ }
+
+ /**
+ * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the first non-null result returned by a <code>caseXXX</code> call.
+ * @generated
+ */
+ @Override
+ protected T doSwitch(int classifierID, EObject theEObject) {
+ switch (classifierID) {
+ case ServicedescriptorswithidPackage.REGISTRY_ID_DESC: {
+ RegistryIdDesc registryIdDesc = (RegistryIdDesc)theEObject;
+ T result = caseRegistryIdDesc(registryIdDesc);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.SERVICE_ID_DESC: {
+ ServiceIdDesc serviceIdDesc = (ServiceIdDesc)theEObject;
+ T result = caseServiceIdDesc(serviceIdDesc);
+ if (result == null) result = caseAbstractServiceIdDesc(serviceIdDesc);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.ABSTRACT_SERVICE_ID_DESC: {
+ AbstractServiceIdDesc abstractServiceIdDesc = (AbstractServiceIdDesc)theEObject;
+ T result = caseAbstractServiceIdDesc(abstractServiceIdDesc);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.SERVICE_SET_ID_DESC: {
+ ServiceSetIdDesc serviceSetIdDesc = (ServiceSetIdDesc)theEObject;
+ T result = caseServiceSetIdDesc(serviceSetIdDesc);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.FEATURE_INJECTION: {
+ FeatureInjection featureInjection = (FeatureInjection)theEObject;
+ T result = caseFeatureInjection(featureInjection);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.ALIAS_ID_DESC: {
+ AliasIdDesc aliasIdDesc = (AliasIdDesc)theEObject;
+ T result = caseAliasIdDesc(aliasIdDesc);
+ if (result == null) result = caseAbstractServiceIdDesc(aliasIdDesc);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.ID_DESCRIPTORS: {
+ IdDescriptors idDescriptors = (IdDescriptors)theEObject;
+ T result = caseIdDescriptors(idDescriptors);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.PROPERTY_INJECTION: {
+ PropertyInjection propertyInjection = (PropertyInjection)theEObject;
+ T result = casePropertyInjection(propertyInjection);
+ if (result == null) result = caseFeatureInjection(propertyInjection);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.INJECTED_VALUE: {
+ InjectedValue injectedValue = (InjectedValue)theEObject;
+ T result = caseInjectedValue(injectedValue);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.METHOD_INJECTION: {
+ MethodInjection methodInjection = (MethodInjection)theEObject;
+ T result = caseMethodInjection(methodInjection);
+ if (result == null) result = caseAbstractMethodInjection(methodInjection);
+ if (result == null) result = caseFeatureInjection(methodInjection);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.ABSTRACT_METHOD_INJECTION: {
+ AbstractMethodInjection abstractMethodInjection = (AbstractMethodInjection)theEObject;
+ T result = caseAbstractMethodInjection(abstractMethodInjection);
+ if (result == null) result = caseFeatureInjection(abstractMethodInjection);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.PARAMETER_INJECTION: {
+ ParameterInjection parameterInjection = (ParameterInjection)theEObject;
+ T result = caseParameterInjection(parameterInjection);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.INJECTED_SERVICE: {
+ InjectedService injectedService = (InjectedService)theEObject;
+ T result = caseInjectedService(injectedService);
+ if (result == null) result = caseInjectedValue(injectedService);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.OPAQUE_INJECTED_VALUE: {
+ OpaqueInjectedValue opaqueInjectedValue = (OpaqueInjectedValue)theEObject;
+ T result = caseOpaqueInjectedValue(opaqueInjectedValue);
+ if (result == null) result = caseInjectedValue(opaqueInjectedValue);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.CONSTRUCTOR_INJECTION: {
+ ConstructorInjection constructorInjection = (ConstructorInjection)theEObject;
+ T result = caseConstructorInjection(constructorInjection);
+ if (result == null) result = caseAbstractMethodInjection(constructorInjection);
+ if (result == null) result = caseFeatureInjection(constructorInjection);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ case ServicedescriptorswithidPackage.SERVICE_FACTORY_ID_DESC: {
+ ServiceFactoryIdDesc serviceFactoryIdDesc = (ServiceFactoryIdDesc)theEObject;
+ T result = caseServiceFactoryIdDesc(serviceFactoryIdDesc);
+ if (result == null) result = caseServiceIdDesc(serviceFactoryIdDesc);
+ if (result == null) result = caseAbstractServiceIdDesc(serviceFactoryIdDesc);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
+ default: return defaultCase(theEObject);
+ }
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Registry Id Desc</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Registry Id Desc</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseRegistryIdDesc(RegistryIdDesc object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Service Id Desc</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Service Id Desc</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseServiceIdDesc(ServiceIdDesc object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Abstract Service Id Desc</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Abstract Service Id Desc</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseAbstractServiceIdDesc(AbstractServiceIdDesc object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Service Set Id Desc</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Service Set Id Desc</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseServiceSetIdDesc(ServiceSetIdDesc object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Feature Injection</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Feature Injection</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseFeatureInjection(FeatureInjection object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Alias Id Desc</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Alias Id Desc</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseAliasIdDesc(AliasIdDesc object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Id Descriptors</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Id Descriptors</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseIdDescriptors(IdDescriptors object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Property Injection</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Property Injection</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T casePropertyInjection(PropertyInjection object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Injected Value</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Injected Value</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseInjectedValue(InjectedValue object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Method Injection</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Method Injection</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseMethodInjection(MethodInjection object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Abstract Method Injection</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Abstract Method Injection</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseAbstractMethodInjection(AbstractMethodInjection object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Parameter Injection</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Parameter Injection</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseParameterInjection(ParameterInjection object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Injected Service</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Injected Service</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseInjectedService(InjectedService object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Opaque Injected Value</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Opaque Injected Value</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseOpaqueInjectedValue(OpaqueInjectedValue object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Constructor Injection</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Constructor Injection</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseConstructorInjection(ConstructorInjection object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>Service Factory Id Desc</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>Service Factory Id Desc</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseServiceFactoryIdDesc(ServiceFactoryIdDesc object) {
+ return null;
+ }
+
+ /**
+ * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * <!-- begin-user-doc -->
+ * This implementation returns null;
+ * returning a non-null result will terminate the switch, but this is the last case anyway.
+ * <!-- end-user-doc -->
+ * @param object the target of the switch.
+ * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+ * @generated
+ */
+ @Override
+ public T defaultCase(EObject object) {
+ return null;
+ }
+
+} //ServicedescriptorswithidSwitch

Back to the top