Bug 578290 - [Sirius][ModelExplorer] The SiriusDiagram customization must be registered in architecture context for UML

Change-Id: Ie2054dc73856fb6b157df0ff86fb417e8c353e0a
Signed-off-by: Vincent Lorenzo <vincent.lorenzo@cea.fr>
diff --git a/features/org.eclipse.papyrus.uml.siriusdiag.feature/feature.xml b/features/org.eclipse.papyrus.uml.siriusdiag.feature/feature.xml
index 02d9a3b..0b4a007 100755
--- a/features/org.eclipse.papyrus.uml.siriusdiag.feature/feature.xml
+++ b/features/org.eclipse.papyrus.uml.siriusdiag.feature/feature.xml
@@ -24,6 +24,13 @@
          version="0.0.0"/>
 
    <plugin
+         id="org.eclipse.papyrus.sirius.integration.uml.architecture"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
          id="org.eclipse.papyrus.uml.sirius.clazz.diagram"
          download-size="0"
          install-size="0"
diff --git a/plugins/integration/pom.xml b/plugins/integration/pom.xml
new file mode 100755
index 0000000..bdeb0d4
--- /dev/null
+++ b/plugins/integration/pom.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.eclipse.papyrus.sirius-plugins</groupId>
+		<artifactId>org.eclipse.papyrus.sirius.plugins</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+	</parent>
+
+	<groupId>org.eclipse.papyrus.sirius.plugins-integration</groupId>
+	<artifactId>org.eclipse.papyrus.sirius.plugins.integration</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<name>Papyrus-Sirius Integration Plugins</name>
+	<description>Container of the Papyrus-Sirius Plugins in charge of the integration with Papyrus</description>
+
+	<modules>
+		<module>uml</module>
+	</modules>
+</project>
diff --git a/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/.classpath b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/.classpath
new file mode 100755
index 0000000..e801ebf
--- /dev/null
+++ b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/.project b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/.project
new file mode 100755
index 0000000..1f4c7de
--- /dev/null
+++ b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.papyrus.sirius.integration.uml.architecture</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.papyrus.plugin.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.papyrus.plugin.nature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/.settings/org.eclipse.jdt.core.prefs b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/.settings/org.eclipse.jdt.core.prefs
new file mode 100755
index 0000000..c9545f0
--- /dev/null
+++ b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/META-INF/MANIFEST.MF b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/META-INF/MANIFEST.MF
new file mode 100755
index 0000000..2d71930
--- /dev/null
+++ b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/META-INF/MANIFEST.MF
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: org.eclipse.papyrus.sirius.integration.uml.architecture;singleton:=true
+Bundle-Version: 0.7.0.qualifier
+Bundle-Activator: org.eclipse.papyrus.sirius.integration.uml.architecture.Activator
+Bundle-Vendor: %Bundle-Vendor
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.23.0,4.0.0)",
+ org.eclipse.papyrus.infra.architecture;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.papyrus.infra.architecture.representation;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.architecture.representation.edit;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.papyrus.infra.core.architecture;bundle-version="[3.1.0,4.0.0)",
+ org.eclipse.papyrus.infra.siriusdiag.modelexplorer;bundle-version="[1.0.0,2.0.0)",
+ org.eclipse.papyrus.uml.architecture;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.papyrus.uml.diagram.common;bundle-version="[5.0.0,6.0.0)",
+ org.eclipse.papyrus.uml.modelexplorer;bundle-version="[3.1.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.119.0,4.0.0)"
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Automatic-Module-Name: org.eclipse.papyrus.sirius.integration.uml.architecture
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/OSGI-INF/l10n/bundle.properties b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/OSGI-INF/l10n/bundle.properties
new file mode 100755
index 0000000..141748b
--- /dev/null
+++ b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,3 @@
+#Properties file for org.eclipse.papyrus.sirius.integration.uml.architecture
+Bundle-Vendor = Eclipse Modeling Project
+Bundle-Name = Papyrus-Sirius - UML Architecture Contribution (Incubation)
\ No newline at end of file
diff --git a/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/about.html b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/about.html
new file mode 100755
index 0000000..3e183aa
--- /dev/null
+++ b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>November 30, 2017</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 2.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="https://www.eclipse.org/legal/epl-2.0/">https://www.eclipse.org/legal/epl-2.0/</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/build.properties b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/build.properties
new file mode 100755
index 0000000..ad13e8c
--- /dev/null
+++ b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/build.properties
@@ -0,0 +1,9 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml,\
+               resources/,\
+               OSGI-INF/,\
+               about.html
+src.includes = about.html
diff --git a/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/plugin.xml b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/plugin.xml
new file mode 100755
index 0000000..95f905e
--- /dev/null
+++ b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/plugin.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.papyrus.infra.architecture.models">
+      <model
+            path="resources/sirius-uml.architecture">
+      </model>
+   </extension>
+
+</plugin>
+
diff --git a/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/pom.xml b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/pom.xml
new file mode 100755
index 0000000..75598ec
--- /dev/null
+++ b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/pom.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.eclipse.papyrus.sirius.plugins.integration-uml</groupId>
+		<artifactId>org.eclipse.papyrus.sirius.plugins.integration.uml</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>org.eclipse.papyrus.sirius.integration.uml.architecture</artifactId>
+	<version>0.7.0-SNAPSHOT</version>
+	<packaging>eclipse-plugin</packaging>
+
+</project>
\ No newline at end of file
diff --git a/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/resources/sirius-uml.architecture b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/resources/sirius-uml.architecture
new file mode 100755
index 0000000..b5b068e
--- /dev/null
+++ b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/resources/sirius-uml.architecture
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<architecture:ArchitectureDomain xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:architecture="http://www.eclipse.org/papyrus/infra/core/architecture" xmlns:custom="http://www.eclipse.org/papyrus/emf/facet/custom/0.2.incubation/custom" xmlns:customizationconfiguration="http://www.eclipse.org/papyrus/emf/facet/architecture/configuration" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:elementtypesconfigurations="http://www.eclipse.org/papyrus/infra/elementtypesconfigurations/1.2" xmi:id="_pNW38LaHEeiKuPQLywy7Og" id="org.eclipse.papyrus.softwareEngineering" name="Software Engineering" description="The domain of developing software systems" icon="platform:/plugin/org.eclipse.papyrus.uml.architecture/icons/domain.gif">
+  <contexts xmi:type="architecture:ArchitectureDescriptionLanguage" xmi:id="_-tAb0Lp2EeiViqj5DY8SRQ" id="org.eclipse.papyrus.infra.services.edit.TypeContext" name="UML" creationCommandClass="org.eclipse.papyrus.uml.diagram.common.commands.CreateUMLModelCommand">
+    <viewpoints xmi:type="architecture:ArchitectureViewpoint" xmi:id="_1tp4cOEIEeiLVapXeWCJtQ" id="org.eclipse.papyrus.uml.analysis" name="Software Analysis" icon="platform:/plugin/org.eclipse.papyrus.uml.architecture/icons/viewpoint.gif"/>
+    <viewpoints xmi:type="architecture:ArchitectureViewpoint" xmi:id="_dmWHgLp3EeiViqj5DY8SRQ" id="org.eclipse.papyrus.uml.design" name="Software Design" description="" icon="platform:/plugin/org.eclipse.papyrus.uml.architecture/icons/viewpoint.gif"/>
+    <metamodel xmi:type="ecore:EPackage" href="http://www.eclipse.org/uml2/5.0.0/UML#/"/>
+    <treeViewerConfigurations xmi:type="customizationconfiguration:EMFFacetTreeViewerConfiguration" xmi:id="_CumAsCmwEeugfKShn9DTcQ">
+      <customizationReferences xmi:type="customizationconfiguration:CustomizationReference" xmi:id="_DLqXMCmwEeugfKShn9DTcQ">
+        <referencedCustomization xmi:type="custom:Customization" href="platform:/plugin/org.eclipse.papyrus.infra.siriusdiag.modelexplorer/resources/SiriusDiagram.custom#/"/>
+        <applicationRule xmi:type="customizationconfiguration:AbsoluteOrder" xmi:id="_QVkzwCmwEeugfKShn9DTcQ" order="10"/>
+      </customizationReferences>
+    </treeViewerConfigurations>
+  </contexts>
+</architecture:ArchitectureDomain>
diff --git a/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/src/org/eclipse/papyrus/sirius/integration/uml/architecture/Activator.java b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/src/org/eclipse/papyrus/sirius/integration/uml/architecture/Activator.java
new file mode 100755
index 0000000..75103b0
--- /dev/null
+++ b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/src/org/eclipse/papyrus/sirius/integration/uml/architecture/Activator.java
@@ -0,0 +1,57 @@
+/******************************************************************************
+ * Copyright (c) 2022 CEA LIST, Artal Technologies
+ *
+ * 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.integration.uml.architecture;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.papyrus.sirius.integration.uml.architecture"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/usecases.md b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/usecases.md
new file mode 100755
index 0000000..56da398
--- /dev/null
+++ b/plugins/integration/uml/org.eclipse.papyrus.sirius.integration.uml.architecture/usecases.md
@@ -0,0 +1,5 @@
+#org.eclipse.papyrus.sirius.integration.uml.architecture
+This plugin is in charge to provide the required UML Architecture configuration to support Sirius Diagram
+
+- Sirius Diagram EMFFacet customization, to display Sirius Diagram into the ModelExplorer
+- ElementType for Sirius Diagram in order to ensure the deletion of the diagram when its context is deleted (TODO).
diff --git a/plugins/integration/uml/pom.xml b/plugins/integration/uml/pom.xml
new file mode 100755
index 0000000..2ead0b7
--- /dev/null
+++ b/plugins/integration/uml/pom.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.eclipse.papyrus.sirius.plugins-integration</groupId>
+		<artifactId>org.eclipse.papyrus.sirius.plugins.integration</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+	</parent>
+
+	<groupId>org.eclipse.papyrus.sirius.plugins.integration-uml</groupId>
+	<artifactId>org.eclipse.papyrus.sirius.plugins.integration.uml</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<name>Papyrus-Sirius UML Integration Plugins</name>
+	<description>Container of the Papyrus-Sirius Plugins in charge of the integration with the UML part of Papyrus</description>
+
+	<modules>
+		<module>org.eclipse.papyrus.sirius.integration.uml.architecture</module>
+	</modules>
+</project>
diff --git a/plugins/pom.xml b/plugins/pom.xml
index b5e2b71..1148798 100755
--- a/plugins/pom.xml
+++ b/plugins/pom.xml
@@ -22,6 +22,7 @@
 		<module>core</module>
 		<module>doc</module>
 		<module>infra</module>
+		<module>integration</module>
 		<module>uml</module>
 	</modules>
 </project>
diff --git a/tests/org.eclipse.papyrus.sirius.bundles.tests/src/org/eclipse/papyrus/sirius/bundles/tests/internal/BundleTestsUtils.java b/tests/org.eclipse.papyrus.sirius.bundles.tests/src/org/eclipse/papyrus/sirius/bundles/tests/internal/BundleTestsUtils.java
index 92ead63..2284e8f 100755
--- a/tests/org.eclipse.papyrus.sirius.bundles.tests/src/org/eclipse/papyrus/sirius/bundles/tests/internal/BundleTestsUtils.java
+++ b/tests/org.eclipse.papyrus.sirius.bundles.tests/src/org/eclipse/papyrus/sirius/bundles/tests/internal/BundleTestsUtils.java
@@ -400,7 +400,10 @@
 	public static void checkAutomaticBundleName(List<Bundle> bundles) {
 		StringBuilder builder = new StringBuilder();
 		for (Bundle current : bundles) {
-			final String bundleSymbolicName = current.getHeaders().get(BUNDLE_SYMBOLIC_NAME);
+			String bundleSymbolicName = current.getHeaders().get(BUNDLE_SYMBOLIC_NAME);
+			if (bundleSymbolicName.contains(";")) {//$NON-NLS-1$ // probably followed by singleton=true
+				bundleSymbolicName = bundleSymbolicName.substring(0, bundleSymbolicName.indexOf(";"));//$NON-NLS-1$
+			}
 			final String value = current.getHeaders().get(AUTOMATIC_MODULE_NAME);
 			if (null == value) {
 				builder.append(NLS.bind("The plugin {0} don't declare the property Automatic-Module-Name.\n", bundleSymbolicName)); //$NON-NLS-1$