Bug 581393: [Sirius][ClassDiagram] Provide a way to be able to represent elements outside of the context of the diagram
-create NO_SYNCH mapping for Class, Component, DataType, Enumeration, Interface, Model, Package, PrimitiveType and Signal
-create semantic drop for these elements
-connect them to the DirectEdit
-write documentation

Change-Id: I8482a40a23b3a1f53dfe51df4c387b6086a3c678
Signed-off-by: Vincent Lorenzo <vincent.lorenzo@cea.fr>
diff --git a/plugins/doc/org.eclipse.papyrus.sirius.doc/src/site/mediawiki/papyrus-sirius-devDoc.mediawiki b/plugins/doc/org.eclipse.papyrus.sirius.doc/src/site/mediawiki/papyrus-sirius-devDoc.mediawiki
index ddf456d..fb810ba 100755
--- a/plugins/doc/org.eclipse.papyrus.sirius.doc/src/site/mediawiki/papyrus-sirius-devDoc.mediawiki
+++ b/plugins/doc/org.eclipse.papyrus.sirius.doc/src/site/mediawiki/papyrus-sirius-devDoc.mediawiki
@@ -145,6 +145,25 @@
 
 NB: Currently these methods, for each UML Element, are in the ClassDiagramServices. In the future, we will probably create a java class for each semantic element, and the '''ClassDiagramServices''' will delegate to these classes. This point is still open for a discussion, because we are also thinking about a connection to the Papyrus Edition Service and it could be redundant.
 
+==Mapping for elements defined outside of the current diagram context==
+To be able to represent UML Elements located outside of the diagram context, we created specific mappings. These mappings are defined as ''Not Synchronized'' in order to avoid to reveal all outside elements on the diagram when the user uses a ''Synchronized'' diagram. To get the expected result, we created:
+*a new service providing methods named '''getOutside{MetaclassName}''', used by the field ''semantic Candidates Expression'' (named ''org.eclipse.papyrus.sirius.uml.diagram.clazz.services.ClassDiagramOutsideMappingServices'' for ClassDiagram);
+*new ''Not Synchronized'' mappings for nodes, named '''CD_NOT_SYNC_{MetaclassName}''';
+*all these mapping re-use the compartments used by their equivalent ''Unsynchronizable'' version;
+*all these mapping use a specific ''semantic Candidates Expression'' called '''getOutside{MetaclassName}''';
+*all previous semantic drops have been modified to include this condition '''not self.isOutsideOfTheDiagramContext(newViewContainer)''';
+*new semantic drops have been added and use this condition: '''self.isOutsideOfTheDiagramContext(newViewContainer)''';
+*we don't provide graphical drop for these nodes (because dropping them into an ''inside'' node will change the mapping to use and the dropped element will disappear of the diagram!).
+
+In addition, we propose a specific appearance to these elements: 
+*the mapping takes the same appearance than others, but with a ''white'' background and a ''bold'' and ''gray'' label;
+*a ''Style Customization'' is defined, to get all borders in ''gray'' when the element is read-only;
+*a ''Generic Decoration'' is defined to display a specific icon when the element is defined outside of the context of the diagram;
+*a ''Generic Decoration'' is defined to display a specific icon when the element is read-only;
+
+We also configure these new mappings in order to use the ''DirectEdit'':
+*the ''precondition'' becomes : '''aql:self.oclIsKindOf(uml::NamedElement) and not self.isReadOnly()'''
+
 = Sirius viewpoint =
 
 Each new diagram contribution is added in a new plugin, which contains the description of the mapping, the filters and the tools available for this diagram.
diff --git a/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.clazz/META-INF/MANIFEST.MF b/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.clazz/META-INF/MANIFEST.MF
index 7552aff..50c9467 100755
--- a/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.clazz/META-INF/MANIFEST.MF
+++ b/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.clazz/META-INF/MANIFEST.MF
@@ -8,22 +8,22 @@
 Require-Bundle: com.google.guava;bundle-version="[30.1.0,31.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.25.0,4.0.0)",
  org.eclipse.emf.transaction;bundle-version="[1.9.0,2.0.0)",
- org.eclipse.papyrus.sirius.uml.diagram.common;bundle-version="[0.7.0,1.0.0)",
- org.eclipse.papyrus.uml.profile;bundle-version="[4.2.0,5.0.0)",
- org.eclipse.papyrus.uml.service.types;bundle-version="[5.2.0,6.0.0)",
- org.eclipse.sirius.common;bundle-version="[7.0.2,8.0.0)",
- org.eclipse.sirius.diagram;bundle-version="[7.0.2,8.0.0)",
- org.eclipse.sirius.ecore.extender;bundle-version="[7.0.2,8.0.0)",
- org.eclipse.sirius;bundle-version="[7.0.2,8.0.0)",
- org.eclipse.ui;bundle-version="[3.201.0,4.0.0)",
- org.eclipse.uml2.uml.edit;bundle-version="[5.5.0,6.0.0)",
- org.eclipse.uml2.uml;bundle-version="[5.5.0,6.0.0)",
  org.eclipse.papyrus.infra.core.log;bundle-version="[2.0.0,3.0.0)",
  org.eclipse.papyrus.infra.core;bundle-version="[4.3.0,5.0.0)",
  org.eclipse.papyrus.infra.emf;bundle-version="[4.2.0,5.0.0)",
  org.eclipse.papyrus.infra.services.labelprovider;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.sirius.uml.diagram.common;bundle-version="[0.7.0,1.0.0)",
+ org.eclipse.papyrus.uml.profile;bundle-version="[4.2.0,5.0.0)",
+ org.eclipse.papyrus.uml.service.types;bundle-version="[5.2.0,6.0.0)",
  org.eclipse.papyrus.uml.tools.utils;bundle-version="[4.1.0,5.0.0)",
- org.eclipse.swt;bundle-version="[3.120.0,4.0.0)"
+ org.eclipse.sirius.common;bundle-version="[7.0.2,8.0.0)",
+ org.eclipse.sirius.diagram;bundle-version="[7.0.2,8.0.0)",
+ org.eclipse.sirius.ecore.extender;bundle-version="[7.0.2,8.0.0)",
+ org.eclipse.sirius;bundle-version="[7.0.2,8.0.0)",
+ org.eclipse.swt;bundle-version="[3.120.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.201.0,4.0.0)",
+ org.eclipse.uml2.uml.edit;bundle-version="[5.5.0,6.0.0)",
+ org.eclipse.uml2.uml;bundle-version="[5.5.0,6.0.0)"
 Bundle-Activator: org.eclipse.papyrus.sirius.uml.diagram.clazz.Activator
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
diff --git a/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.clazz/description/papyrus_class.odesign b/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.clazz/description/papyrus_class.odesign
index d3607a9..befcc35 100755
--- a/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.clazz/description/papyrus_class.odesign
+++ b/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.clazz/description/papyrus_class.odesign
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <description:Group xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:tool="http://www.eclipse.org/sirius/description/tool/1.1.0" xmlns:tool_1="http://www.eclipse.org/sirius/diagram/description/tool/1.1.0" documentation="Copyright (c) 2009, 2014, 2021-2022 Obeo, CEA LIST, Artal Technologies&#xD;&#xA;&#xD;&#xA;All rights reserved. This program and the accompanying materials&#xD;&#xA;are made available under the terms of the Eclipse Public License 2.0&#xD;&#xA;which accompanies this distribution, and is available at&#xD;&#xA;https://www.eclipse.org/legal/epl-2.0/&#xD;&#xA;&#xD;&#xA;SPDX-License-Identifier: EPL-2.0&#xD;&#xA;&#xD;&#xA;Contributors:&#xD;&#xA;     Obeo - initial API and implementation&#xD;&#xA;     Aurelien Didier (ARTAL) - aurelien.didier51@gmail.com - adaptation to integrate in Papyrus&#xD;&#xA;     Vincent Lorenzo (CEA LIST) - vincent.lorenzo@cea.fr  - adaptation to integrate in Papyrus" name="papyrus" version="12.0.0.2017041100">
   <ownedViewpoints name="ClassDiagram" modelFileExtension="uml">
-    <ownedRepresentations xsi:type="description_1:DiagramDescription" dropDescriptions="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticPackageDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticClassDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticModelDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticEnumerationDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticDataTypeDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.4/@ownedTools[name='GraphicalEnumerationDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticComponentDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticInterfaceDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticSignalDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticInstanceSpecificationDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticInformationItemDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticPrimitiveTypeDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticCommentDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticConstraintDrop']" documentation="Representation to edit class diagrams" name="ClassDiagram" titleExpression="aql:self.name +' Class Diagram'" domainClass="uml::Package" preconditionExpression="" enablePopupBars="true">
+    <ownedRepresentations xsi:type="description_1:DiagramDescription" dropDescriptions="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticPackageDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticModelDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticEnumerationDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticDataTypeDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.4/@ownedTools[name='GraphicalEnumerationDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticComponentDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticInterfaceDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticSignalDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticInstanceSpecificationDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticInformationItemDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticPrimitiveTypeDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticCommentDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticConstraintDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='SemanticClassDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='Semantic_NOT_SYNC_ClassDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='Semantic_NOT_SYNC_DataTypeDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='Semantic_NOT_SYNC_PackageDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='Semantic_NOT_SYNC_PrimitiveTypeDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='Semantic_NOT_SYNC_ComponentDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='Semantic_NOT_SYNC_EnumerationDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='Semantic_NOT_SYNC_InterfaceDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='Semantic_NOT_SYNC_ModelDrop'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.3/@ownedTools[name='Semantic_NOT_SYNC_SignalDrop']" documentation="Representation to edit class diagrams" name="ClassDiagram" titleExpression="aql:self.name +' Class Diagram'" domainClass="uml::Package" preconditionExpression="" enablePopupBars="true">
       <metamodel href="platform:/plugin/org.eclipse.uml2.uml/model/UML.ecore#/"/>
       <defaultLayer name="Class">
         <nodeMappings name="CD_Comment" deletionDescription="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.6/@ownedTools[name='PapyrusSemanticDeleteAction']" labelDirectEdit="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.5/@ownedTools[name='Comment_body_EditionTool']" semanticCandidatesExpression="feature:ownedComment" createElements="false" domainClass="uml.Comment">
@@ -321,7 +321,7 @@
         </containerMappings>
         <containerMappings name="CD_Enumeration" preconditionExpression="aql:self.oclIsTypeOf(uml::Enumeration)" deletionDescription="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.6/@ownedTools[name='PapyrusSemanticDeleteAction']" labelDirectEdit="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.5/@ownedTools[name='NamedElement_name_EditionTool']" semanticCandidatesExpression="feature:packagedElement" domainClass="uml.Enumeration" childrenPresentation="VerticalStack">
           <subContainerMappings name="CD_EnumerationLiteralsCompartment" semanticCandidatesExpression="aql:self" synchronizationLock="true" domainClass="uml.Enumeration" reusedNodeMappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Enumeration']/@subContainerMappings[name='CD_EnumerationLiteralsCompartment']/@subNodeMappings[name='CD_EnumerationLiteralLabelNode']" childrenPresentation="List">
-            <subNodeMappings name="CD_EnumerationLiteralLabelNode" semanticCandidatesExpression="aql:if(self.oclIsTypeOf(uml::Enumeration)) then self.ownedLiteral else null endif" createElements="false" semanticElements="service:getSemanticElements" domainClass="uml.EnumerationLiteral">
+            <subNodeMappings name="CD_EnumerationLiteralLabelNode" semanticCandidatesExpression="aql:if(self.oclIsTypeOf(uml::Enumeration)) then self.ownedLiteral else null endif" semanticElements="service:getSemanticElements" domainClass="uml.EnumerationLiteral">
               <style xsi:type="style:SquareDescription" labelSize="9" labelExpression="service:computeUmlLabel" labelAlignment="LEFT" sizeComputationExpression="1" color="//@userColorsPalettes[name='CD_ColorPalette']/@entries[name='CustomBlue']">
                 <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
                 <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
@@ -418,7 +418,7 @@
               <labelBorderStyle href="environment:/viewpoint#//@labelBorderStyles/@labelBorderStyleDescriptions.1"/>
             </style>
           </subContainerMappings>
-          <style xsi:type="style:FlatContainerStyleDescription" arcWidth="5" arcHeight="5" borderSizeComputationExpression="1" labelSize="9" labelExpression="service:buildMultilineLabel(diagram)" labelAlignment="LEFT" tooltipExpression="service:computeTooltip" roundedCorner="true" widthComputationExpression="service:defaultWidth" heightComputationExpression="service:defaultHeight">
+          <style xsi:type="style:FlatContainerStyleDescription" arcWidth="5" arcHeight="5" borderSizeComputationExpression="1" labelSize="9" labelExpression="service:buildMultilineLabel(diagram)" labelAlignment="LEFT" tooltipExpression="service:computeTooltip" widthComputationExpression="service:defaultWidth" heightComputationExpression="service:defaultHeight">
             <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
             <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
             <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
@@ -443,7 +443,7 @@
               <labelBorderStyle href="environment:/viewpoint#//@labelBorderStyles/@labelBorderStyleDescriptions.2"/>
             </style>
           </subContainerMappings>
-          <style xsi:type="style:FlatContainerStyleDescription" arcWidth="5" arcHeight="5" borderSizeComputationExpression="1" labelSize="9" labelExpression="service:buildLabel" tooltipExpression="service:computeTooltip" roundedCorner="true" widthComputationExpression="service:defaultWidth" heightComputationExpression="service:defaultHeight" foregroundColor="//@userColorsPalettes[name='CD_ColorPalette']/@entries[name='CustomBlue']">
+          <style xsi:type="style:FlatContainerStyleDescription" arcWidth="5" arcHeight="5" borderSizeComputationExpression="1" labelSize="9" labelExpression="service:buildLabel" tooltipExpression="service:computeTooltip" widthComputationExpression="service:defaultWidth" heightComputationExpression="service:defaultHeight" foregroundColor="//@userColorsPalettes[name='CD_ColorPalette']/@entries[name='CustomBlue']">
             <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
             <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
             <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
@@ -546,6 +546,88 @@
             <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
           </style>
         </containerMappings>
+        <containerMappings name="CD_NOT_SYNC_Class" preconditionExpression="aql:self.oclIsTypeOf(uml::Class)" deletionDescription="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.6/@ownedTools[name='PapyrusSemanticDeleteAction']" labelDirectEdit="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.5/@ownedTools[name='NamedElement_name_EditionTool']" semanticCandidatesExpression="service:getOutsideClasses(diagram)" createElements="false" documentation="This mapping is used to represent Class defined outside of the context of the diagram. This mapping is NOT SYNCHRONIZED to avoid to represent all Classes defined in libraries when the user uses a synchronized diagram. " domainClass="uml.Class" reusedContainerMappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Class']/@subContainerMappings[name='CD_ClassAttributesCompartment'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Class']/@subContainerMappings[name='CD_ClassOperationsCompartment'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Class']/@subContainerMappings[name='CD_ClassNestedClassifiersCompartment']" childrenPresentation="VerticalStack">
+          <style xsi:type="style:FlatContainerStyleDescription" borderSizeComputationExpression="1" labelSize="9" labelExpression="service:buildMultilineLabel(diagram)" tooltipExpression="service:computeTooltip" widthComputationExpression="service:defaultWidth" heightComputationExpression="service:defaultHeight">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelFormat>bold</labelFormat>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+            <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+          </style>
+        </containerMappings>
+        <containerMappings name="CD_NOT_SYNC_Component" preconditionExpression="aql:self.oclIsTypeOf(uml::Component)" labelDirectEdit="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.5/@ownedTools[name='NamedElement_name_EditionTool']" semanticCandidatesExpression="service:getOutsideComponents(diagram)" createElements="false" documentation="This mapping is used to represent Component defined outside of the context of the diagram. This mapping is NOT SYNCHRONIZED to avoid to represent all Components defined in libraries when the user uses a synchronized diagram. " domainClass="uml.Component" reusedContainerMappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Component']/@subContainerMappings[name='CD_ComponentAttributesCompartment'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Component']/@subContainerMappings[name='CD_ComponentOperationsCompartment'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Component']/@subContainerMappings[name='CD_ComponentNestedClassifiersCompartment']" childrenPresentation="VerticalStack">
+          <style xsi:type="style:FlatContainerStyleDescription" borderSizeComputationExpression="1" labelSize="9" labelExpression="service:buildMultilineLabel(diagram)" tooltipExpression="service:computeTooltip" widthComputationExpression="service:defaultWidth" heightComputationExpression="service:defaultHeight">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelFormat>bold</labelFormat>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+            <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+          </style>
+        </containerMappings>
+        <containerMappings name="CD_NOT_SYNC_DataType" preconditionExpression="aql:self.oclIsTypeOf(uml::DataType)" deletionDescription="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.6/@ownedTools[name='PapyrusSemanticDeleteAction']" labelDirectEdit="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.5/@ownedTools[name='NamedElement_name_EditionTool']" semanticCandidatesExpression="service:getOutsideDataTypes(diagram)" createElements="false" documentation="This mapping is used to represent DataType defined outside of the context of the diagram. This mapping is NOT SYNCHRONIZED to avoid to represent all DataTypes defined in libraries when the user uses a synchronized diagram. " domainClass="uml.DataType" reusedContainerMappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_DataType']/@subContainerMappings[name='CD_DataTypeAttributesCompartment'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_DataType']/@subContainerMappings[name='CD_DataTypeOperationsCompartment']" childrenPresentation="VerticalStack">
+          <style xsi:type="style:FlatContainerStyleDescription" borderSizeComputationExpression="1" labelSize="9" labelExpression="service:buildMultilineLabel(diagram)" tooltipExpression="service:computeTooltip" widthComputationExpression="service:defaultWidth" heightComputationExpression="service:defaultHeight">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelFormat>bold</labelFormat>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+            <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+          </style>
+        </containerMappings>
+        <containerMappings name="CD_NOT_SYNC_Enumeration" preconditionExpression="aql:self.oclIsTypeOf(uml::Enumeration)" labelDirectEdit="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.5/@ownedTools[name='NamedElement_name_EditionTool']" semanticCandidatesExpression="service:getOutsideEnumerations(diagram)" createElements="false" documentation="This mapping is used to represent Enumeration defined outside of the context of the diagram. This mapping is NOT SYNCHRONIZED to avoid to represent all Enumerations defined in libraries when the user uses a synchronized diagram. " domainClass="uml.Enumeration" reusedContainerMappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Enumeration']/@subContainerMappings[name='CD_EnumerationLiteralsCompartment']" childrenPresentation="VerticalStack">
+          <style xsi:type="style:FlatContainerStyleDescription" borderSizeComputationExpression="1" labelSize="9" labelExpression="service:buildMultilineLabel(diagram)" tooltipExpression="service:computeTooltip" widthComputationExpression="service:defaultWidth" heightComputationExpression="service:defaultHeight">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelFormat>bold</labelFormat>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+            <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+          </style>
+        </containerMappings>
+        <containerMappings name="CD_NOT_SYNC_Interface" preconditionExpression="aql:self.oclIsTypeOf(uml::Interface)" labelDirectEdit="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.5/@ownedTools[name='NamedElement_name_EditionTool']" semanticCandidatesExpression="service:getOutsideInterfaces(diagram)" createElements="false" documentation="This mapping is used to represent Interface defined outside of the context of the diagram. This mapping is NOT SYNCHRONIZED to avoid to represent all Interfaces defined in libraries when the user uses a synchronized diagram. " domainClass="uml.Interface" reusedContainerMappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Interface']/@subContainerMappings[name='CD_InterfaceAttributesCompartment'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Interface']/@subContainerMappings[name='CD_InterfaceOperationsCompartment'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Interface']/@subContainerMappings[name='CD_InterfaceNestedClassifiersCompartment']" childrenPresentation="VerticalStack">
+          <style xsi:type="style:FlatContainerStyleDescription" borderSizeComputationExpression="1" labelSize="9" labelExpression="service:buildMultilineLabel(diagram)" tooltipExpression="service:computeTooltip" widthComputationExpression="service:defaultWidth" heightComputationExpression="service:defaultHeight">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelFormat>bold</labelFormat>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+            <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+          </style>
+        </containerMappings>
+        <containerMappings name="CD_NOT_SYNC_Model" preconditionExpression="aql:self.oclIsTypeOf(uml::Model)" labelDirectEdit="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.5/@ownedTools[name='NamedElement_name_EditionTool']" semanticCandidatesExpression="service:getOutsideModels(diagram)" createElements="false" documentation="This mapping is used to represent Model defined outside of the context of the diagram. This mapping is NOT SYNCHRONIZED to avoid to represent all Models defined in libraries when the user uses a synchronized diagram. " domainClass="uml.Model" reusedContainerMappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Model']/@subContainerMappings[name='CD_ModelPackagedElementsCompartment']" childrenPresentation="VerticalStack">
+          <style xsi:type="style:FlatContainerStyleDescription" borderSizeComputationExpression="1" labelSize="9" labelExpression="service:buildMultilineLabel(diagram)" tooltipExpression="service:computeTooltip" widthComputationExpression="service:defaultWidth" heightComputationExpression="service:defaultHeight">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelFormat>bold</labelFormat>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+            <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+          </style>
+        </containerMappings>
+        <containerMappings name="CD_NOT_SYNC_Package" preconditionExpression="aql:self.oclIsTypeOf(uml::Package)" deletionDescription="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.6/@ownedTools[name='PapyrusSemanticDeleteAction']" labelDirectEdit="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.5/@ownedTools[name='NamedElement_name_EditionTool']" semanticCandidatesExpression="service:getOutsidePackages(diagram)" createElements="false" documentation="This mapping is used to represent Package defined outside of the context of the diagram. This mapping is NOT SYNCHRONIZED to avoid to represent all DataTypes defined in libraries when the user uses a synchronized diagram. " domainClass="uml.Package" reusedContainerMappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Package']/@subContainerMappings[name='CD_PackagePackagedElementsCompartment']" childrenPresentation="VerticalStack">
+          <style xsi:type="style:FlatContainerStyleDescription" borderSizeComputationExpression="1" labelSize="9" labelExpression="service:buildMultilineLabel(diagram)" labelAlignment="LEFT" tooltipExpression="service:computeTooltip" widthComputationExpression="service:defaultWidth" heightComputationExpression="service:defaultHeight">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelFormat>bold</labelFormat>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+            <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+            <labelBorderStyle href="environment:/viewpoint#//@labelBorderStyles/@labelBorderStyleDescriptions.0"/>
+          </style>
+        </containerMappings>
+        <containerMappings name="CD_NOT_SYNC_PrimitiveType" preconditionExpression="aql:self.oclIsTypeOf(uml::PrimitiveType)" deletionDescription="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.6/@ownedTools[name='PapyrusSemanticDeleteAction']" labelDirectEdit="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.5/@ownedTools[name='NamedElement_name_EditionTool']" semanticCandidatesExpression="service:getOutsidePrimitiveTypes(diagram)" createElements="false" documentation="This mapping is used to represent PrimitiveType defined outside of the context of the diagram. This mapping is NOT SYNCHRONIZED to avoid to represent all PrimitiveTypes defined in libraries when the user uses a synchronized diagram. " domainClass="uml.PrimitiveType" reusedContainerMappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_PrimitiveType']/@subContainerMappings[name='CD_PrimitiveTypeAttributesCompartment'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_PrimitiveType']/@subContainerMappings[name='CD_PrimitiveTypeOperationsCompartment']" childrenPresentation="VerticalStack">
+          <style xsi:type="style:FlatContainerStyleDescription" borderSizeComputationExpression="1" labelSize="9" labelExpression="service:buildMultilineLabel(diagram)" tooltipExpression="service:computeTooltip" widthComputationExpression="service:defaultWidth" heightComputationExpression="service:defaultHeight">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelFormat>bold</labelFormat>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+            <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+          </style>
+        </containerMappings>
+        <containerMappings name="CD_NOT_SYNC_Signal" preconditionExpression="aql:self.oclIsTypeOf(uml::Signal)" labelDirectEdit="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@toolSections.5/@ownedTools[name='NamedElement_name_EditionTool']" semanticCandidatesExpression="service:getOutsideSignals(diagram)" createElements="false" documentation="This mapping is used to represent Signal defined outside of the context of the diagram. This mapping is NOT SYNCHRONIZED to avoid to represent all Signals defined in libraries when the user uses a synchronized diagram. " domainClass="uml.Signal" reusedContainerMappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Signal']/@subContainerMappings[name='CD_SignalAttributesCompartment']" childrenPresentation="VerticalStack">
+          <style xsi:type="style:FlatContainerStyleDescription" borderSizeComputationExpression="1" labelSize="9" labelExpression="service:buildMultilineLabel(diagram)" tooltipExpression="service:computeTooltip" widthComputationExpression="service:defaultWidth" heightComputationExpression="service:defaultHeight">
+            <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+            <labelFormat>bold</labelFormat>
+            <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/>
+            <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+            <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+          </style>
+        </containerMappings>
         <toolSections name="Nodes" icon="/org.eclipse.gmf.runtime.diagram.ui/icons/group.gif">
           <ownedTools xsi:type="tool:ToolDescription" documentation="Create a Class" name="CreateClassTool" label="Class" iconPath="/org.eclipse.uml2.uml.edit/icons/full/obj16/Class.gif">
             <element name="element"/>
@@ -1702,7 +1784,7 @@
           </ownedTools>
         </toolSections>
         <toolSections documentation="The Drop from the Papyrus ModelExplorer." name="SemanticDrop">
-          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticClassDrop" precondition="aql:self.oclIsTypeOf(uml::Class)" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Class']" dragSource="PROJECT_EXPLORER">
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticClassDrop" precondition="aql:self.oclIsTypeOf(uml::Class) and not self.isOutsideOfTheDiagramContext(newViewContainer)" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Class']" dragSource="PROJECT_EXPLORER">
             <oldContainer name="oldSemanticContainer"/>
             <newContainer name="newSemanticContainer"/>
             <element name="element"/>
@@ -1724,7 +1806,7 @@
               </firstModelOperations>
             </initialOperation>
           </ownedTools>
-          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticComponentDrop" precondition="aql:self.oclIsTypeOf(uml::Component)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Component']" dragSource="PROJECT_EXPLORER">
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticComponentDrop" precondition="aql:self.oclIsTypeOf(uml::Component) and not self.isOutsideOfTheDiagramContext(newViewContainer)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Component']" dragSource="PROJECT_EXPLORER">
             <oldContainer name="oldSemanticContainer"/>
             <newContainer name="newSemanticContainer"/>
             <element name="element"/>
@@ -1755,7 +1837,7 @@
               </firstModelOperations>
             </initialOperation>
           </ownedTools>
-          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticDataTypeDrop" precondition="aql:self.oclIsTypeOf(uml::DataType)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_DataType'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_DataTypeLabelNode']" dragSource="PROJECT_EXPLORER">
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticDataTypeDrop" precondition="aql:self.oclIsTypeOf(uml::DataType) and not self.isOutsideOfTheDiagramContext(newViewContainer)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_DataType'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_DataTypeLabelNode']" dragSource="PROJECT_EXPLORER">
             <oldContainer name="oldSemanticContainer"/>
             <newContainer name="newSemanticContainer"/>
             <element name="element"/>
@@ -1780,7 +1862,7 @@
               </firstModelOperations>
             </initialOperation>
           </ownedTools>
-          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticEnumerationDrop" precondition="aql:self.oclIsTypeOf(uml::Enumeration)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Enumeration'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_EnumerationLabelNode']" dragSource="PROJECT_EXPLORER">
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticEnumerationDrop" precondition="aql:self.oclIsTypeOf(uml::Enumeration) and not self.isOutsideOfTheDiagramContext(newViewContainer)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Enumeration'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_EnumerationLabelNode']" dragSource="PROJECT_EXPLORER">
             <oldContainer name="oldSemanticContainer"/>
             <newContainer name="newSemanticContainer"/>
             <element name="element"/>
@@ -1827,7 +1909,7 @@
               </firstModelOperations>
             </initialOperation>
           </ownedTools>
-          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticInterfaceDrop" precondition="aql:self.oclIsTypeOf(uml::Interface)" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Interface']" dragSource="PROJECT_EXPLORER">
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticInterfaceDrop" precondition="aql:self.oclIsTypeOf(uml::Interface) and not self.isOutsideOfTheDiagramContext(newViewContainer)" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Interface']" dragSource="PROJECT_EXPLORER">
             <oldContainer name="oldSemanticContainer"/>
             <newContainer name="newSemanticContainer"/>
             <element name="element"/>
@@ -1838,7 +1920,7 @@
               </firstModelOperations>
             </initialOperation>
           </ownedTools>
-          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticModelDrop" precondition="aql:self.oclIsTypeOf(uml::Model)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Model']" dragSource="PROJECT_EXPLORER">
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticModelDrop" precondition="aql:self.oclIsTypeOf(uml::Model) and not self.isOutsideOfTheDiagramContext(newViewContainer)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Model']" dragSource="PROJECT_EXPLORER">
             <oldContainer name="oldSemanticContainer"/>
             <newContainer name="newSemanticContainer"/>
             <element name="element"/>
@@ -1864,7 +1946,7 @@
               </firstModelOperations>
             </initialOperation>
           </ownedTools>
-          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticPackageDrop" precondition="aql:self.oclIsTypeOf(uml::Package)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Package']" dragSource="PROJECT_EXPLORER">
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticPackageDrop" precondition="aql:self.oclIsTypeOf(uml::Package) and not self.isOutsideOfTheDiagramContext(newViewContainer)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Package']" dragSource="PROJECT_EXPLORER">
             <oldContainer name="oldSemanticContainer"/>
             <newContainer name="newSemanticContainer"/>
             <element name="element"/>
@@ -1890,7 +1972,7 @@
               </firstModelOperations>
             </initialOperation>
           </ownedTools>
-          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticPrimitiveTypeDrop" precondition="aql:self.oclIsTypeOf(uml::PrimitiveType)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_PrimitiveType'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_PrimitiveTypeLabelNode']" dragSource="PROJECT_EXPLORER">
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticPrimitiveTypeDrop" precondition="aql:self.oclIsTypeOf(uml::PrimitiveType) and not self.isOutsideOfTheDiagramContext(newViewContainer)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_PrimitiveType'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_PrimitiveTypeLabelNode']" dragSource="PROJECT_EXPLORER">
             <oldContainer name="oldSemanticContainer"/>
             <newContainer name="newSemanticContainer"/>
             <element name="element"/>
@@ -1915,7 +1997,7 @@
               </firstModelOperations>
             </initialOperation>
           </ownedTools>
-          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticSignalDrop" precondition="aql:self.oclIsTypeOf(uml::Signal)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Signal']" dragSource="PROJECT_EXPLORER">
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="SemanticSignalDrop" precondition="aql:self.oclIsTypeOf(uml::Signal) and not self.isOutsideOfTheDiagramContext(newViewContainer)" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Signal']" dragSource="PROJECT_EXPLORER">
             <oldContainer name="oldSemanticContainer"/>
             <newContainer name="newSemanticContainer"/>
             <element name="element"/>
@@ -1926,6 +2008,105 @@
               </firstModelOperations>
             </initialOperation>
           </ownedTools>
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="Semantic_NOT_SYNC_ClassDrop" precondition="aql:self.oclIsTypeOf(uml::Class) and self.isOutsideOfTheDiagramContext(newViewContainer)" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Class']" dragSource="PROJECT_EXPLORER">
+            <oldContainer name="oldSemanticContainer"/>
+            <newContainer name="newSemanticContainer"/>
+            <element name="element"/>
+            <newViewContainer name="newContainerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="var:element">
+                <subModelOperations xsi:type="tool_1:CreateView" mapping="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Class']" containerViewExpression="aql:newContainerView"/>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="Semantic_NOT_SYNC_DataTypeDrop" precondition="aql:self.oclIsTypeOf(uml::DataType) and self.isOutsideOfTheDiagramContext(newViewContainer)" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_DataType']" dragSource="PROJECT_EXPLORER">
+            <oldContainer name="oldSemanticContainer"/>
+            <newContainer name="newSemanticContainer"/>
+            <element name="element"/>
+            <newViewContainer name="newContainerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="var:element">
+                <subModelOperations xsi:type="tool_1:CreateView" mapping="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_DataType']" containerViewExpression="aql:newContainerView"/>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="Semantic_NOT_SYNC_PackageDrop" precondition="aql:self.oclIsTypeOf(uml::Package) and self.isOutsideOfTheDiagramContext(newViewContainer)" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Package']" dragSource="PROJECT_EXPLORER">
+            <oldContainer name="oldSemanticContainer"/>
+            <newContainer name="newSemanticContainer"/>
+            <element name="element"/>
+            <newViewContainer name="newContainerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="var:element">
+                <subModelOperations xsi:type="tool_1:CreateView" mapping="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Package']" containerViewExpression="aql:newContainerView"/>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="Semantic_NOT_SYNC_PrimitiveTypeDrop" precondition="aql:self.oclIsTypeOf(uml::PrimitiveType) and self.isOutsideOfTheDiagramContext(newViewContainer)" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_PrimitiveType']" dragSource="PROJECT_EXPLORER">
+            <oldContainer name="oldSemanticContainer"/>
+            <newContainer name="newSemanticContainer"/>
+            <element name="element"/>
+            <newViewContainer name="newContainerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="var:element">
+                <subModelOperations xsi:type="tool_1:CreateView" mapping="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_PrimitiveType']" containerViewExpression="aql:newContainerView"/>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="Semantic_NOT_SYNC_ComponentDrop" precondition="aql:self.oclIsTypeOf(uml::Component) and self.isOutsideOfTheDiagramContext(newViewContainer)" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Component']" dragSource="PROJECT_EXPLORER">
+            <oldContainer name="oldSemanticContainer"/>
+            <newContainer name="newSemanticContainer"/>
+            <element name="element"/>
+            <newViewContainer name="newContainerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="var:element">
+                <subModelOperations xsi:type="tool_1:CreateView" mapping="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Component']" containerViewExpression="aql:newContainerView"/>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="Semantic_NOT_SYNC_EnumerationDrop" precondition="aql:self.oclIsTypeOf(uml::Enumeration) and self.isOutsideOfTheDiagramContext(newViewContainer)" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Enumeration']" dragSource="PROJECT_EXPLORER">
+            <oldContainer name="oldSemanticContainer"/>
+            <newContainer name="newSemanticContainer"/>
+            <element name="element"/>
+            <newViewContainer name="newContainerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="var:element">
+                <subModelOperations xsi:type="tool_1:CreateView" mapping="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Enumeration']" containerViewExpression="aql:newContainerView"/>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="Semantic_NOT_SYNC_InterfaceDrop" precondition="aql:self.oclIsTypeOf(uml::Interface) and self.isOutsideOfTheDiagramContext(newViewContainer)" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Interface']" dragSource="PROJECT_EXPLORER">
+            <oldContainer name="oldSemanticContainer"/>
+            <newContainer name="newSemanticContainer"/>
+            <element name="element"/>
+            <newViewContainer name="newContainerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="var:element">
+                <subModelOperations xsi:type="tool_1:CreateView" mapping="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Interface']" containerViewExpression="aql:newContainerView"/>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="Semantic_NOT_SYNC_ModelDrop" precondition="aql:self.oclIsTypeOf(uml::Model) and self.isOutsideOfTheDiagramContext(newViewContainer)" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Model']" dragSource="PROJECT_EXPLORER">
+            <oldContainer name="oldSemanticContainer"/>
+            <newContainer name="newSemanticContainer"/>
+            <element name="element"/>
+            <newViewContainer name="newContainerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="var:element">
+                <subModelOperations xsi:type="tool_1:CreateView" mapping="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Model']" containerViewExpression="aql:newContainerView"/>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
+          <ownedTools xsi:type="tool_1:ContainerDropDescription" name="Semantic_NOT_SYNC_SignalDrop" precondition="aql:self.oclIsTypeOf(uml::Signal) and self.isOutsideOfTheDiagramContext(newViewContainer)" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Signal']" dragSource="PROJECT_EXPLORER">
+            <oldContainer name="oldSemanticContainer"/>
+            <newContainer name="newSemanticContainer"/>
+            <element name="element"/>
+            <newViewContainer name="newContainerView"/>
+            <initialOperation>
+              <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="var:element">
+                <subModelOperations xsi:type="tool_1:CreateView" mapping="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Signal']" containerViewExpression="aql:newContainerView"/>
+              </firstModelOperations>
+            </initialOperation>
+          </ownedTools>
         </toolSections>
         <toolSections name="GraphicalDrop">
           <ownedTools xsi:type="tool_1:ContainerDropDescription" name="GraphicalEnumerationDrop" forceRefresh="true" mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Enumeration'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_EnumerationLabelNode']">
@@ -1953,7 +2134,7 @@
               <firstModelOperations xsi:type="tool:ChangeContext" browseExpression="service:constraint_setFirstSpecificationBody(arg0)"/>
             </initialOperation>
           </ownedTools>
-          <ownedTools xsi:type="tool_1:DirectEditLabel" name="NamedElement_name_EditionTool" precondition="aql:self.oclIsKindOf(uml::NamedElement)" inputLabelExpression="aql:self.name">
+          <ownedTools xsi:type="tool_1:DirectEditLabel" name="NamedElement_name_EditionTool" precondition="aql:self.oclIsKindOf(uml::NamedElement) and not self.isReadOnly()" inputLabelExpression="aql:self.name">
             <mask mask="{0}"/>
             <initialOperation>
               <firstModelOperations xsi:type="tool:SetValue" featureName="name" valueExpression="aql:arg0"/>
@@ -2128,6 +2309,10 @@
             </menuItemDescription>
           </ownedTools>
         </toolSections>
+        <decorationDescriptionsSet>
+          <decorationDescriptions xsi:type="description_1:MappingBasedDecoration" name="CD_OutsideOfTheContext_Decoration" position="NORTH_EAST" distributionDirection="HORIZONTAL" preconditionExpression="aql:if(element.oclIsKindOf(uml::NamedElement)) then element.oclAsType(uml::NamedElement).isOutsideOfTheDiagramContext(diagram) else false endif" imageExpression="org.eclipse.papyrus.sirius.uml.diagram.common/icons/decorators/oustideOfTheContext.gif" tooltipExpression="This element is defined outside of the context of the diagram." mappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Class'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Component'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_DataType'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Enumeration'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Interface'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Model'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Package'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_PrimitiveType'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Signal']"/>
+          <decorationDescriptions xsi:type="description:GenericDecorationDescription" name="CD_ReadOnly_Decorator" position="NORTH_EAST" distributionDirection="HORIZONTAL" preconditionExpression="service:element.isReadOnly()" imageExpression="org.eclipse.papyrus.sirius.uml.diagram.common/icons/decorators/readOnly.gif" tooltipExpression="This element is read-only."/>
+        </decorationDescriptionsSet>
         <customization>
           <vsmElementCustomizations xsi:type="description:VSMElementCustomization" predicateExpression="aql:self.oclIsKindOf(uml::Association)">
             <featureCustomizations xsi:type="description:EAttributeCustomization" appliedOn="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_Association']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_AssociationClass_Link']/@style" attributeName="sourceArrow" value="service:association_getSourceDecorator()"/>
@@ -2138,6 +2323,11 @@
           <vsmElementCustomizations xsi:type="description:VSMElementCustomization" predicateExpression="aql:if(self.oclIsKindOf(uml::Classifier) or self.oclIsKindOf(uml::Feature)) then true else false endif">
             <featureCustomizations xsi:type="description:EAttributeCustomization" appliedOn="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_Association']/@style/@centerLabelStyleDescription //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_AssociationClass_Link']/@style/@centerLabelStyleDescription //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_AssociationClass_Node']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Class']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_ClassLabelNode']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Component']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_DataType']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_DataTypeLabelNode']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Enumeration']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_EnumerationLabelNode']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@nodeMappings[name='CD_InformationItem']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Interface']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_InterfaceLabelNode']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_OwnedOperation']/@subNodeMappings[name='CD_OperationLabelNode']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_PrimitiveType']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_PrimitiveTypeLabelNode']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_OwnedReception']/@subNodeMappings[name='CD_ReceptionLabelNode']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Signal']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_SignalLabelNode']/@style" attributeName="labelFormat" value="service:getLabelStyle()"/>
           </vsmElementCustomizations>
+          <vsmElementCustomizations xsi:type="description:VSMElementCustomization" predicateExpression="aql:self.oclIsKindOf(uml::NamedElement) and self.oclAsType(uml::NamedElement).isOutsideOfTheDiagramContext(view) and self.isReadOnly()">
+            <featureCustomizations xsi:type="description:EReferenceCustomization" appliedOn="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Class']/@subContainerMappings[name='CD_ClassNestedClassifiersCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Class']/@subContainerMappings[name='CD_ClassOperationsCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Class']/@subContainerMappings[name='CD_ClassAttributesCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Component']/@subContainerMappings[name='CD_ComponentAttributesCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Component']/@subContainerMappings[name='CD_ComponentNestedClassifiersCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Component']/@subContainerMappings[name='CD_ComponentOperationsCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_DataType']/@subContainerMappings[name='CD_DataTypeAttributesCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_DataType']/@subContainerMappings[name='CD_DataTypeOperationsCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_DataType']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Enumeration']/@subContainerMappings[name='CD_EnumerationLiteralsCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Interface']/@subContainerMappings[name='CD_InterfaceAttributesCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Interface']/@subContainerMappings[name='CD_InterfaceNestedClassifiersCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Interface']/@subContainerMappings[name='CD_InterfaceOperationsCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Model']/@subContainerMappings[name='CD_ModelPackagedElementsCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Package']/@subContainerMappings[name='CD_PackagePackagedElementsCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_PrimitiveType']/@subContainerMappings[name='CD_PrimitiveTypeAttributesCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_PrimitiveType']/@subContainerMappings[name='CD_PrimitiveTypeOperationsCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Signal']/@subContainerMappings[name='CD_SignalAttributesCompartment']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Class']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Component']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_DataType']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Enumeration']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Interface']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Model']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Package']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_PrimitiveType']/@style //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_NOT_SYNC_Signal']/@style" referenceName="borderColor">
+              <value href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/>
+            </featureCustomizations>
+          </vsmElementCustomizations>
         </customization>
       </defaultLayer>
       <additionalLayers endUserDocumentation="This layer is used to display the qualified name of the elements." name="QualifiedNameLayer" label="Display Qualified Name" reusedMappings="//@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_Abstraction'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_Association'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_AssociationClass_Link'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_AssociationClass_Node'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Class'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Class']/@borderedNodeMappings[name='CD_RedefinableTemplateSignature'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_ClassLabelNode'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@nodeMappings[name='CD_Comment'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Component'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@nodeMappings[name='CD_Constraint'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_DataType'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_DataTypeLabelNode'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_Dependency'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_ElementImport'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Enumeration'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_EnumerationLabelNode'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Enumeration']/@subContainerMappings[name='CD_EnumerationLiteralsCompartment']/@subNodeMappings[name='CD_EnumerationLiteralLabelNode'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_Generalization'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_GeneralizationSet'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_InformationFlow'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@nodeMappings[name='CD_InformationItem'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_InstanceSpecification_Link'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_InstanceSpecification_Node'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Interface'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_InterfaceLabelNode'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_InterfaceRealization'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Model'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_OwnedOperation']/@subNodeMappings[name='CD_OperationLabelNode'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Package'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_PackageImport'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_PackageMerge'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_PrimitiveType'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_PrimitiveTypeLabelNode'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_OwnedAttribute']/@subNodeMappings[name='CD_PropertyLabelNode'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_Realization'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_OwnedReception']/@subNodeMappings[name='CD_ReceptionLabelNode'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_Signal'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_SHARED_NestedClassifier']/@subNodeMappings[name='CD_SignalLabelNode'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@containerMappings[name='CD_InstanceSpecification_Node']/@subContainerMappings[name='CD_InstanceSpecificationSlotsCompartment']/@subNodeMappings[name='CD_SlotLabelNode'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_Substitution'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_TemplateBinding'] //@ownedViewpoints[name='ClassDiagram']/@ownedRepresentations[name='ClassDiagram']/@defaultLayer/@edgeMappings[name='CD_Usage']"/>
@@ -2148,6 +2338,7 @@
     <ownedJavaExtensions qualifiedClassName="org.eclipse.papyrus.sirius.uml.diagram.common.services.SemanticDeletionService"/>
     <ownedJavaExtensions qualifiedClassName="org.eclipse.papyrus.sirius.uml.diagram.common.core.services.StyleServices"/>
     <ownedJavaExtensions qualifiedClassName="org.eclipse.papyrus.sirius.uml.diagram.common.core.services.UMLLabelService"/>
+    <ownedJavaExtensions qualifiedClassName="org.eclipse.papyrus.sirius.uml.diagram.clazz.services.ClassDiagramOutsideMappingServices"/>
   </ownedViewpoints>
   <userColorsPalettes name="CD_ColorPalette">
     <entries xsi:type="description:UserFixedColor" red="195" green="215" blue="221" name="CustomBlue"/>
diff --git a/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.clazz/src/org/eclipse/papyrus/sirius/uml/diagram/clazz/services/ClassDiagramOutsideMappingServices.java b/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.clazz/src/org/eclipse/papyrus/sirius/uml/diagram/clazz/services/ClassDiagramOutsideMappingServices.java
new file mode 100755
index 0000000..9a68bc2
--- /dev/null
+++ b/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.clazz/src/org/eclipse/papyrus/sirius/uml/diagram/clazz/services/ClassDiagramOutsideMappingServices.java
@@ -0,0 +1,285 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  Vincent Lorenzo (CEA LIST) <vincent.lorenzo@cea.fr> - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.sirius.uml.diagram.clazz.services;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.DDiagramElement;
+import org.eclipse.sirius.diagram.DSemanticDiagram;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Component;
+import org.eclipse.uml2.uml.DataType;
+import org.eclipse.uml2.uml.Enumeration;
+import org.eclipse.uml2.uml.Interface;
+import org.eclipse.uml2.uml.Model;
+import org.eclipse.uml2.uml.NamedElement;
+import org.eclipse.uml2.uml.Namespace;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.PrimitiveType;
+import org.eclipse.uml2.uml.Signal;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.eclipse.uml2.uml.resource.UMLResource;
+
+/**
+ * This service is used to manage elements which are outside of the context of the current diagram. 
+ */
+public class ClassDiagramOutsideMappingServices {
+
+	/**
+	 * 
+	 * Constructor.
+	 *
+	 */
+	public ClassDiagramOutsideMappingServices() {
+		// nothing to do
+	}
+
+	/**
+	 * This method is used to know if the element is outside of the context of the diagram where we want to represent it.
+	 * This method is used by Semantic DnD.
+	 * 
+	 * @param element
+	 *            a UML {@link NamedElement}
+	 * @param aContainerView
+	 *            a containerView
+	 * @return
+	 *         <code>true</code> if the containerView is a {@link DSemanticDiagram} (or an children of a {@link DSemanticDiagram}) and if the element is not a children of the {@link DSemanticDiagram#getTarget()}.
+	 */
+	public boolean isOutsideOfTheDiagramContext(final NamedElement element, final EObject aContainerView) {
+		if (aContainerView instanceof DSemanticDiagram) {
+			return isOutsideOfTheDiagramContext(element, (DSemanticDiagram) aContainerView);
+		} else if (aContainerView instanceof DDiagramElement) {
+			final DDiagram parentDiagram = ((DDiagramElement) aContainerView).getParentDiagram();
+			if (parentDiagram instanceof DSemanticDiagram) {
+				return isOutsideOfTheDiagramContext(element, (DSemanticDiagram) parentDiagram);
+			}
+		}
+		return false; // others cases are forbidden
+	}
+
+	/**
+	 * This method is used to know if the element is external to the diagram where we want to represent it.
+	 * This method is used by getSemanticCandidates expression
+	 * 
+	 * @param element
+	 *            a UML {@link NamedElement}
+	 * @param diagram
+	 *            a diagram
+	 * @return
+	 *         <code>true</code> if the element is not a children of the {@link DSemanticDiagram#getTarget()}.
+	 */
+	private boolean isOutsideOfTheDiagramContext(final NamedElement element, final DSemanticDiagram diagram) {
+		Assert.isTrue(diagram.getTarget() instanceof NamedElement, "We expected a NamedElement as target for a Diagram"); //$NON-NLS-1$
+		NamedElement target = (NamedElement) diagram.getTarget();
+		final Collection<Namespace> namespaces = element.allNamespaces();
+		return !namespaces.contains(target);
+	}
+
+	/**
+	 * 
+	 * @param element
+	 *            an element
+	 * @return
+	 *         <code>true</code> if the element is read-only
+	 */
+	public boolean isReadOnly(final EObject element) {
+		return EMFHelper.isReadOnly(element);
+	}
+
+	/**
+	 * 
+	 * @param self
+	 *            the context of the search
+	 * @param diagram
+	 *            the current {@link DSemanticDiagram}
+	 * @return
+	 *         all {@link Class}es in the ResourceSet external to the diagram
+	 */
+	public Collection<EObject> getOutsideClasses(final EObject self, final DSemanticDiagram diagram) {
+		return getOutsideElements(self, diagram, UMLPackage.eINSTANCE.getClass_());
+	}
+
+	/**
+	 * 
+	 * @param self
+	 *            the context of the search
+	 * @param diagram
+	 *            the current {@link DSemanticDiagram}
+	 * @return
+	 *         all {@link Component}s in the ResourceSet defined outside of the context of the current diagram
+	 */
+	public Collection<EObject> getOutsideComponents(final EObject self, final DSemanticDiagram diagram) {
+		return getOutsideElements(self, diagram, UMLPackage.eINSTANCE.getComponent());
+	}
+
+	/**
+	 * 
+	 * @param self
+	 *            the context of the search
+	 * @param diagram
+	 *            the current {@link DSemanticDiagram}
+	 * @return
+	 *         all {@link DataType}s in the ResourceSet defined outside of the context of the current diagram
+	 */
+	public Collection<EObject> getOutsideDataTypes(final EObject self, final DSemanticDiagram diagram) {
+		return getOutsideElements(self, diagram, UMLPackage.eINSTANCE.getDataType());
+	}
+
+	/**
+	 * 
+	 * @param self
+	 *            the context of the search
+	 * @param diagram
+	 *            the current {@link DSemanticDiagram}
+	 * @return
+	 *         all {@link Enumeration}s in the ResourceSet defined outside of the context of the current diagram
+	 */
+	public Collection<EObject> getOutsideEnumerations(final EObject self, final DSemanticDiagram diagram) {
+		return getOutsideElements(self, diagram, UMLPackage.eINSTANCE.getEnumeration());
+	}
+
+	/**
+	 * 
+	 * @param self
+	 *            the context of the search
+	 * @param diagram
+	 *            the current {@link DSemanticDiagram}
+	 * @return
+	 *         all {@link Interface}s in the ResourceSet defined outside of the context of the current diagram
+	 */
+	public Collection<EObject> getOutsideInterfaces(final EObject self, final DSemanticDiagram diagram) {
+		return getOutsideElements(self, diagram, UMLPackage.eINSTANCE.getInterface());
+	}
+
+	/**
+	 * 
+	 * @param self
+	 *            the context of the search
+	 * @param diagram
+	 *            the current {@link DSemanticDiagram}
+	 * @return
+	 *         all {@link Package}s in the ResourceSet defined outside of the context of the current diagram
+	 */
+	public Collection<EObject> getOutsidePackages(final EObject self, final DSemanticDiagram diagram) {
+		return getOutsideElements(self, diagram, UMLPackage.eINSTANCE.getPackage());
+	}
+
+	/**
+	 * 
+	 * @param self
+	 *            the context of the search
+	 * @param diagram
+	 *            the current {@link DSemanticDiagram}
+	 * @return
+	 *         all {@link PrimitiveType}s in the ResourceSet defined outside of the context of the current diagram
+	 */
+	public Collection<EObject> getOutsidePrimitiveTypes(final EObject self, final DSemanticDiagram diagram) {
+		return getOutsideElements(self, diagram, UMLPackage.eINSTANCE.getPrimitiveType());
+	}
+
+	/**
+	 * 
+	 * @param self
+	 *            the context of the search
+	 * @param diagram
+	 *            the current {@link DSemanticDiagram}
+	 * @return
+	 *         all {@link Model}s in the ResourceSet defined outside of the context of the current diagram
+	 */
+	public Collection<EObject> getOutsideModels(final EObject self, final DSemanticDiagram diagram) {
+		return getOutsideElements(self, diagram, UMLPackage.eINSTANCE.getModel());
+	}
+
+	/**
+	 * 
+	 * @param self
+	 *            the context of the search
+	 * @param diagram
+	 *            the current {@link DSemanticDiagram}
+	 * @return
+	 *         all {@link Signal}s in the ResourceSet defined outside of the context of the current diagram
+	 */
+	public Collection<EObject> getOutsideSignals(final EObject self, final DSemanticDiagram diagram) {
+		return getOutsideElements(self, diagram, UMLPackage.eINSTANCE.getSignal());
+	}
+
+	/**
+	 * 
+	 * @param self
+	 *            the context of the search
+	 * @param diagram
+	 *            the current {@link DSemanticDiagram}
+	 * @param wantedType
+	 *            the {@link EClass} represented the wanted type
+	 * @return
+	 *         all EObject with the wanted EClass type in the {@link ResourceSet} defined outside of the context of the current diagram
+	 */
+	private Collection<EObject> getOutsideElements(final EObject self, final DSemanticDiagram diagram, final EClass wantedType) {
+		final Collection<EObject> wantedElements = new ArrayList<EObject>();
+		final Resource currentResource = self.eResource();
+		final ResourceSet set = currentResource.getResourceSet();
+		for (final Resource resource : set.getResources()) {
+			if (resource instanceof UMLResource) {
+				final Collection<NamedElement> elements = getAllElementsByType((UMLResource) resource, wantedType);
+				if (resource == currentResource) {
+					// when the element comes from the current semantic resource, we need to check the element is outside of the context of the current diagram
+					for (final NamedElement current : elements) {
+						if (isOutsideOfTheDiagramContext((NamedElement) current, diagram)) {
+							wantedElements.add(current);
+						}
+					}
+				} else {
+					wantedElements.addAll(elements);
+				}
+			}
+		}
+
+		return wantedElements;
+	}
+
+	/**
+	 * 
+	 * @param resource
+	 *            a {@link UMLResource}
+	 * @param wantedEClassType
+	 *            the EClass of the wanted elements
+	 * @return
+	 *         all {@link NamedElement} found in the {@link UMLResource} which are instance of the expected EClass (using ==)
+	 */
+	private Collection<NamedElement> getAllElementsByType(final UMLResource resource, final EClass wantedEClassType) {
+		// TODO later : try to use the service org.eclipse.papyrus.uml.domain.services.services.UMLService.getAllReachable(EObject, String)
+		// TODO later : maybe we could use a cache for these libraries
+		// - we find pathmap://UML_METAMODELS/Ecore.metamodel.uml
+		// - we also find pathmap://UML_METAMODELS/UML.metamodel.uml
+		// - we also find pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml
+		final Collection<NamedElement> elements = new ArrayList<NamedElement>();
+		final Iterator<EObject> iter = resource.getAllContents();
+		while (iter.hasNext()) {
+			final EObject current = iter.next();
+			if (current instanceof NamedElement && current.eClass() == wantedEClassType) {
+				elements.add((NamedElement) current);
+			}
+		}
+		return elements;
+	}
+}
diff --git a/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.common/icons/decorators/oustideOfTheContext.gif b/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.common/icons/decorators/oustideOfTheContext.gif
new file mode 100755
index 0000000..c8ebb31
--- /dev/null
+++ b/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.common/icons/decorators/oustideOfTheContext.gif
Binary files differ
diff --git a/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.common/icons/decorators/readOnly.gif b/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.common/icons/decorators/readOnly.gif
new file mode 100755
index 0000000..7f136b7
--- /dev/null
+++ b/plugins/uml/org.eclipse.papyrus.sirius.uml.diagram.common/icons/decorators/readOnly.gif
Binary files differ