[327039] Adding static implementation of standard L3 profile.
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/.classpath b/plugins/org.eclipse.uml2.uml.profile.l3/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/.project b/plugins/org.eclipse.uml2.uml.profile.l3/.project
new file mode 100644
index 0000000..6faa768
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.uml2.uml.profile.l3</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.uml.profile.l3/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..7d0c997
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.uml2.uml.profile.l3;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-ClassPath: .
+Bundle-Activator: org.eclipse.uml2.uml.profile.l3.L3Plugin$Implementation
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.uml2.uml.profile.l3,
+ org.eclipse.uml2.uml.profile.l3.internal.impl,
+ org.eclipse.uml2.uml.profile.l3.util
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.uml2.uml;visibility:=reexport
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/about.html b/plugins/org.eclipse.uml2.uml.profile.l3/about.html
new file mode 100755
index 0000000..598b368
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>May 12, 2008</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/build.properties b/plugins/org.eclipse.uml2.uml.profile.l3/build.properties
new file mode 100644
index 0000000..7147a64
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/build.properties
@@ -0,0 +1,22 @@
+# Copyright (c) 2011 CEA and others.
+# All rights reserved.   This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#   CEA - initial API and implementation
+#
+source.. = src/
+output.. = bin/
+bin.includes = about.html,\
+               plugin.*,\
+               .,\
+               model/*.ecore,\
+               model/*.genmodel,\
+               META-INF/
+src.includes = about.html,\
+               model/*.uml
+exclude.. = **/doc-files/**
+javacSource = 1.5
+javacTarget = 1.5
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/model/L3.ecore b/plugins/org.eclipse.uml2.uml.profile.l3/model/L3.ecore
new file mode 100644
index 0000000..d74a493
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/model/L3.ecore
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="l3"
+    nsURI="http://www.eclipse.org/uml2/4.0.0/UML/Profile/L3" nsPrefix="l3">
+  <eClassifiers xsi:type="ecore:EClass" name="BuildComponent">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="base_Component" ordered="false"
+        lowerBound="1" eType="ecore:EClass platform:/plugin/org.eclipse.uml2.uml/model/UML.ecore#//Component"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Metamodel">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="base_Model" ordered="false"
+        lowerBound="1" eType="ecore:EClass platform:/plugin/org.eclipse.uml2.uml/model/UML.ecore#//Model"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SystemModel">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="base_Model" ordered="false"
+        lowerBound="1" eType="ecore:EClass platform:/plugin/org.eclipse.uml2.uml/model/UML.ecore#//Model"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/model/L3.genmodel b/plugins/org.eclipse.uml2.uml.profile.l3/model/L3.genmodel
new file mode 100644
index 0000000..a52f05c
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/model/L3.genmodel
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:genmodel="http://www.eclipse.org/uml2/2.2.0/GenModel" modelDirectory="/org.eclipse.uml2.uml.profile.l3/src"
+    editDirectory="" editorDirectory="" modelPluginID="org.eclipse.uml2.uml.profile.l3"
+    templateDirectory="/org.eclipse.uml2/templates" runtimeJar="true" dynamicTemplates="true"
+    modelName="L3" modelPluginClass="org.eclipse.uml2.uml.profile.l3.L3Plugin" nonNLSMarkers="true"
+    codeFormatting="true" testsDirectory="" importerID="org.eclipse.uml2.uml.ecore.importer"
+    containmentProxies="true" complianceLevel="5.0" copyrightFields="false" usedGenPackages="platform:/plugin/org.eclipse.uml2.types/model/Types.genmodel#//types platform:/plugin/org.eclipse.uml2.uml/model/UML.genmodel#//uml platform:/plugin/org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore"
+    operationReflection="true" invariantPrefix="validate">
+  <genAnnotations source="http://www.eclipse.org/emf/2002/GenModel/importer/org.eclipse.uml2.uml.ecore.importer">
+    <details key="ECORE_TAGGED_VALUES" value="PROCESS"/>
+    <details key="UNION_PROPERTIES" value="PROCESS"/>
+    <details key="DUPLICATE_FEATURES" value="PROCESS"/>
+    <details key="SUBSETTING_PROPERTIES" value="PROCESS"/>
+    <details key="COMMENTS" value="PROCESS"/>
+    <details key="DUPLICATE_FEATURE_INHERITANCE" value="PROCESS"/>
+    <details key="DUPLICATE_OPERATIONS" value="PROCESS"/>
+    <details key="INVARIANT_CONSTRAINTS" value="PROCESS"/>
+    <details key="REDEFINING_PROPERTIES" value="PROCESS"/>
+    <details key="ANNOTATION_DETAILS" value="PROCESS"/>
+    <details key="DUPLICATE_OPERATION_INHERITANCE" value="PROCESS"/>
+    <details key="REDEFINING_OPERATIONS" value="PROCESS"/>
+    <details key="DERIVED_FEATURES" value="PROCESS"/>
+    <details key="OPERATION_BODIES" value="IGNORE"/>
+    <details key="CAMEL_CASE_NAMES" value="IGNORE"/>
+    <details key="SUPER_CLASS_ORDER" value="PROCESS"/>
+  </genAnnotations>
+  <foreignModel>L3.merged.uml</foreignModel>
+  <genPackages xsi:type="genmodel:GenPackage" prefix="L3" basePackage="org.eclipse.uml2.uml.profile"
+      classPackageSuffix="internal.impl" generateExampleClass="false" ecorePackage="L3.ecore#/">
+    <genClasses xsi:type="genmodel:GenClass" ecoreClass="L3.ecore#//BuildComponent">
+      <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+          propertySortChoices="true" ecoreFeature="ecore:EReference L3.ecore#//BuildComponent/base_Component"/>
+    </genClasses>
+    <genClasses xsi:type="genmodel:GenClass" ecoreClass="L3.ecore#//Metamodel">
+      <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+          propertySortChoices="true" ecoreFeature="ecore:EReference L3.ecore#//Metamodel/base_Model"/>
+    </genClasses>
+    <genClasses xsi:type="genmodel:GenClass" ecoreClass="L3.ecore#//SystemModel">
+      <genFeatures xsi:type="genmodel:GenFeature" notify="false" createChild="false"
+          propertySortChoices="true" ecoreFeature="ecore:EReference L3.ecore#//SystemModel/base_Model"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/model/L3.merged.uml b/plugins/org.eclipse.uml2.uml.profile.l3/model/L3.merged.uml
new file mode 100644
index 0000000..0d46b92
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/model/L3.merged.uml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Ecore="http://www.eclipse.org/uml2/schemas/Ecore/5" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/4.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/uml2/schemas/Ecore/5 pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA">
+  <uml:Profile xmi:id="_bcyzQMIyEeCDwPTas6MRfw" name="L3" metamodelReference="_9WrWEMlJEeCA2KY6CawwCg">
+    <packageImport xmi:id="_9WrWEMlJEeCA2KY6CawwCg">
+      <importedPackage xmi:type="uml:Model" href="pathmap://UML_METAMODELS/UML.metamodel.uml#_0"/>
+    </packageImport>
+    <packagedElement xmi:type="uml:Extension" xmi:id="_9WskMMlJEeCA2KY6CawwCg" name="Component_BuildComponent" memberEnd="_9WskMclJEeCA2KY6CawwCg _9WtLQclJEeCA2KY6CawwCg">
+      <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_9WskMclJEeCA2KY6CawwCg" name="extension_BuildComponent" visibility="public" type="_9WtLQMlJEeCA2KY6CawwCg" aggregation="composite" association="_9WskMMlJEeCA2KY6CawwCg">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_9WskMslJEeCA2KY6CawwCg"/>
+      </ownedEnd>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Extension" xmi:id="_9WskM8lJEeCA2KY6CawwCg" name="Model_Metamodel" memberEnd="_9WskNMlJEeCA2KY6CawwCg _9WtLQ8lJEeCA2KY6CawwCg">
+      <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_9WskNMlJEeCA2KY6CawwCg" name="extension_Metamodel" visibility="public" type="_9WtLQslJEeCA2KY6CawwCg" aggregation="composite" association="_9WskM8lJEeCA2KY6CawwCg">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_9WskNclJEeCA2KY6CawwCg"/>
+      </ownedEnd>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Extension" xmi:id="_9WskNslJEeCA2KY6CawwCg" name="Model_SystemModel" memberEnd="_9WskN8lJEeCA2KY6CawwCg _9WtLRclJEeCA2KY6CawwCg">
+      <ownedEnd xmi:type="uml:ExtensionEnd" xmi:id="_9WskN8lJEeCA2KY6CawwCg" name="extension_SystemModel" visibility="public" type="_9WtLRMlJEeCA2KY6CawwCg" aggregation="composite" association="_9WskNslJEeCA2KY6CawwCg">
+        <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_9WskOMlJEeCA2KY6CawwCg"/>
+      </ownedEnd>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Stereotype" xmi:id="_9WtLQMlJEeCA2KY6CawwCg" name="BuildComponent">
+      <ownedAttribute xmi:id="_9WtLQclJEeCA2KY6CawwCg" name="base_Component" visibility="public" association="_9WskMMlJEeCA2KY6CawwCg">
+        <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Component"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Stereotype" xmi:id="_9WtLQslJEeCA2KY6CawwCg" name="Metamodel">
+      <ownedAttribute xmi:id="_9WtLQ8lJEeCA2KY6CawwCg" name="base_Model" visibility="public" association="_9WskM8lJEeCA2KY6CawwCg">
+        <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Model"/>
+      </ownedAttribute>
+    </packagedElement>
+    <packagedElement xmi:type="uml:Stereotype" xmi:id="_9WtLRMlJEeCA2KY6CawwCg" name="SystemModel">
+      <ownedAttribute xmi:id="_9WtLRclJEeCA2KY6CawwCg" name="base_Model" visibility="public" association="_9WskNslJEeCA2KY6CawwCg">
+        <type xmi:type="uml:Class" href="pathmap://UML_METAMODELS/UML.metamodel.uml#Model"/>
+      </ownedAttribute>
+    </packagedElement>
+    <profileApplication xmi:id="_or21kMIyEeCDwPTas6MRfw">
+      <eAnnotations xmi:id="_or88MMIyEeCDwPTas6MRfw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+        <references xmi:type="ecore:EPackage" href="pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA"/>
+      </eAnnotations>
+      <appliedProfile href="pathmap://UML_PROFILES/Ecore.profile.uml#_0"/>
+    </profileApplication>
+  </uml:Profile>
+  <Ecore:EPackage xmi:id="_pyGE4MIyEeCDwPTas6MRfw" base_Package="_bcyzQMIyEeCDwPTas6MRfw" packageName="l3" nsPrefix="l3" nsURI="http://www.eclipse.org/uml2/4.0.0/UML/Profile/L3" basePackage="org.eclipse.uml2.uml.profile" prefix="L3"/>
+</xmi:XMI>
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/model/L3.uml b/plugins/org.eclipse.uml2.uml.profile.l3/model/L3.uml
new file mode 100644
index 0000000..592796c
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/model/L3.uml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xmi:XMI xmi:version="2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Ecore="http://www.eclipse.org/uml2/schemas/Ecore/5" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/4.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/uml2/schemas/Ecore/5 pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA">
+  <uml:Profile xmi:id="_bcyzQMIyEeCDwPTas6MRfw" name="L3">
+    <packageMerge xmi:id="_h2x0IMIyEeCDwPTas6MRfw">
+      <mergedPackage xmi:type="uml:Profile" href="../../org.eclipse.uml2/model/StandardProfileL3.xmi#_0"/>
+    </packageMerge>
+    <profileApplication xmi:id="_or21kMIyEeCDwPTas6MRfw">
+      <eAnnotations xmi:id="_or88MMIyEeCDwPTas6MRfw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+        <references xmi:type="ecore:EPackage" href="pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA"/>
+      </eAnnotations>
+      <appliedProfile href="pathmap://UML_PROFILES/Ecore.profile.uml#_0"/>
+    </profileApplication>
+  </uml:Profile>
+  <Ecore:EPackage xmi:id="_pyGE4MIyEeCDwPTas6MRfw" base_Package="_bcyzQMIyEeCDwPTas6MRfw" packageName="l3" nsPrefix="l3" nsURI="http://www.eclipse.org/uml2/4.0.0/UML/Profile/L3" basePackage="org.eclipse.uml2.uml.profile" prefix="L3"/>
+</xmi:XMI>
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/plugin.properties b/plugins/org.eclipse.uml2.uml.profile.l3/plugin.properties
new file mode 100644
index 0000000..d9658ca
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/plugin.properties
@@ -0,0 +1,14 @@
+# Copyright (c) 2011 CEA and others.
+# All rights reserved.   This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#   CEA - initial API and implementation
+#
+
+# NLS_MESSAGEFORMAT_VAR
+
+pluginName = UML2 Standard L3 Profile
+providerName = Eclipse Modeling Project
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/plugin.xml b/plugins/org.eclipse.uml2.uml.profile.l3/plugin.xml
new file mode 100644
index 0000000..b4d9787
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/plugin.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<!--
+ Copyright (c) 2011 CEA and others.
+ All rights reserved.   This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+   CEA - initial API and implementation
+
+-->
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package
+       uri="http://www.eclipse.org/uml2/4.0.0/UML/Profile/L3"
+       class="org.eclipse.uml2.uml.profile.l3.L3Package"
+       genModel="model/L3.genmodel"/>
+  </extension>
+
+  <extension point="org.eclipse.uml2.uml.generated_package">
+    <profile
+       uri="http://www.eclipse.org/uml2/4.0.0/UML/Profile/L3"
+       location="pathmap://UML_PROFILES/StandardL3.profile.uml#_0"/> 
+  </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/BuildComponent.java b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/BuildComponent.java
new file mode 100644
index 0000000..fd0a45e
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/BuildComponent.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2011 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.profile.l3;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.Component;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Build Component</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.l3.BuildComponent#getBase_Component <em>Base Component</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.uml2.uml.profile.l3.L3Package#getBuildComponent()
+ * @model
+ * @generated
+ */
+public interface BuildComponent
+		extends EObject {
+
+	/**
+	 * Returns the value of the '<em><b>Base Component</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Component</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Component</em>' reference.
+	 * @see #setBase_Component(Component)
+	 * @see org.eclipse.uml2.uml.profile.l3.L3Package#getBuildComponent_Base_Component()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	Component getBase_Component();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.uml2.uml.profile.l3.BuildComponent#getBase_Component <em>Base Component</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Component</em>' reference.
+	 * @see #getBase_Component()
+	 * @generated
+	 */
+	void setBase_Component(Component value);
+
+} // BuildComponent
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/L3Factory.java b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/L3Factory.java
new file mode 100644
index 0000000..55c5969
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/L3Factory.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2011 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.profile.l3;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.uml2.uml.profile.l3.L3Package
+ * @generated
+ */
+public interface L3Factory
+		extends EFactory {
+
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	L3Factory eINSTANCE = org.eclipse.uml2.uml.profile.l3.internal.impl.L3FactoryImpl
+		.init();
+
+	/**
+	 * Returns a new object of class '<em>Build Component</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Build Component</em>'.
+	 * @generated
+	 */
+	BuildComponent createBuildComponent();
+
+	/**
+	 * Returns a new object of class '<em>Metamodel</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Metamodel</em>'.
+	 * @generated
+	 */
+	Metamodel createMetamodel();
+
+	/**
+	 * Returns a new object of class '<em>System Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>System Model</em>'.
+	 * @generated
+	 */
+	SystemModel createSystemModel();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	L3Package getL3Package();
+
+} //L3Factory
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/L3Package.java b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/L3Package.java
new file mode 100644
index 0000000..e40644c
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/L3Package.java
@@ -0,0 +1,326 @@
+/*
+ * Copyright (c) 2011 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.profile.l3;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each operation of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.uml2.uml.profile.l3.L3Factory
+ * @model kind="package"
+ * @generated
+ */
+public interface L3Package
+		extends EPackage {
+
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "l3"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http://www.eclipse.org/uml2/4.0.0/UML/Profile/L3"; //$NON-NLS-1$
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "l3"; //$NON-NLS-1$
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	L3Package eINSTANCE = org.eclipse.uml2.uml.profile.l3.internal.impl.L3PackageImpl
+		.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.uml2.uml.profile.l3.internal.impl.BuildComponentImpl <em>Build Component</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.uml2.uml.profile.l3.internal.impl.BuildComponentImpl
+	 * @see org.eclipse.uml2.uml.profile.l3.internal.impl.L3PackageImpl#getBuildComponent()
+	 * @generated
+	 */
+	int BUILD_COMPONENT = 0;
+
+	/**
+	 * The feature id for the '<em><b>Base Component</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int BUILD_COMPONENT__BASE_COMPONENT = 0;
+
+	/**
+	 * The number of structural features of the '<em>Build Component</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int BUILD_COMPONENT_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Build Component</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int BUILD_COMPONENT_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.uml2.uml.profile.l3.internal.impl.MetamodelImpl <em>Metamodel</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.uml2.uml.profile.l3.internal.impl.MetamodelImpl
+	 * @see org.eclipse.uml2.uml.profile.l3.internal.impl.L3PackageImpl#getMetamodel()
+	 * @generated
+	 */
+	int METAMODEL = 1;
+
+	/**
+	 * The feature id for the '<em><b>Base Model</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int METAMODEL__BASE_MODEL = 0;
+
+	/**
+	 * The number of structural features of the '<em>Metamodel</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int METAMODEL_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>Metamodel</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int METAMODEL_OPERATION_COUNT = 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.uml2.uml.profile.l3.internal.impl.SystemModelImpl <em>System Model</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.uml2.uml.profile.l3.internal.impl.SystemModelImpl
+	 * @see org.eclipse.uml2.uml.profile.l3.internal.impl.L3PackageImpl#getSystemModel()
+	 * @generated
+	 */
+	int SYSTEM_MODEL = 2;
+
+	/**
+	 * The feature id for the '<em><b>Base Model</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SYSTEM_MODEL__BASE_MODEL = 0;
+
+	/**
+	 * The number of structural features of the '<em>System Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SYSTEM_MODEL_FEATURE_COUNT = 1;
+
+	/**
+	 * The number of operations of the '<em>System Model</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SYSTEM_MODEL_OPERATION_COUNT = 0;
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.uml2.uml.profile.l3.BuildComponent <em>Build Component</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Build Component</em>'.
+	 * @see org.eclipse.uml2.uml.profile.l3.BuildComponent
+	 * @generated
+	 */
+	EClass getBuildComponent();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.uml2.uml.profile.l3.BuildComponent#getBase_Component <em>Base Component</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Component</em>'.
+	 * @see org.eclipse.uml2.uml.profile.l3.BuildComponent#getBase_Component()
+	 * @see #getBuildComponent()
+	 * @generated
+	 */
+	EReference getBuildComponent_Base_Component();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.uml2.uml.profile.l3.Metamodel <em>Metamodel</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Metamodel</em>'.
+	 * @see org.eclipse.uml2.uml.profile.l3.Metamodel
+	 * @generated
+	 */
+	EClass getMetamodel();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.uml2.uml.profile.l3.Metamodel#getBase_Model <em>Base Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Model</em>'.
+	 * @see org.eclipse.uml2.uml.profile.l3.Metamodel#getBase_Model()
+	 * @see #getMetamodel()
+	 * @generated
+	 */
+	EReference getMetamodel_Base_Model();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.uml2.uml.profile.l3.SystemModel <em>System Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>System Model</em>'.
+	 * @see org.eclipse.uml2.uml.profile.l3.SystemModel
+	 * @generated
+	 */
+	EClass getSystemModel();
+
+	/**
+	 * Returns the meta object for the reference '{@link org.eclipse.uml2.uml.profile.l3.SystemModel#getBase_Model <em>Base Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the reference '<em>Base Model</em>'.
+	 * @see org.eclipse.uml2.uml.profile.l3.SystemModel#getBase_Model()
+	 * @see #getSystemModel()
+	 * @generated
+	 */
+	EReference getSystemModel_Base_Model();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	L3Factory getL3Factory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each operation of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	interface Literals {
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.uml2.uml.profile.l3.internal.impl.BuildComponentImpl <em>Build Component</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.uml2.uml.profile.l3.internal.impl.BuildComponentImpl
+		 * @see org.eclipse.uml2.uml.profile.l3.internal.impl.L3PackageImpl#getBuildComponent()
+		 * @generated
+		 */
+		EClass BUILD_COMPONENT = eINSTANCE.getBuildComponent();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Component</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference BUILD_COMPONENT__BASE_COMPONENT = eINSTANCE
+			.getBuildComponent_Base_Component();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.uml2.uml.profile.l3.internal.impl.MetamodelImpl <em>Metamodel</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.uml2.uml.profile.l3.internal.impl.MetamodelImpl
+		 * @see org.eclipse.uml2.uml.profile.l3.internal.impl.L3PackageImpl#getMetamodel()
+		 * @generated
+		 */
+		EClass METAMODEL = eINSTANCE.getMetamodel();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Model</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference METAMODEL__BASE_MODEL = eINSTANCE.getMetamodel_Base_Model();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.uml2.uml.profile.l3.internal.impl.SystemModelImpl <em>System Model</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.uml2.uml.profile.l3.internal.impl.SystemModelImpl
+		 * @see org.eclipse.uml2.uml.profile.l3.internal.impl.L3PackageImpl#getSystemModel()
+		 * @generated
+		 */
+		EClass SYSTEM_MODEL = eINSTANCE.getSystemModel();
+
+		/**
+		 * The meta object literal for the '<em><b>Base Model</b></em>' reference feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference SYSTEM_MODEL__BASE_MODEL = eINSTANCE
+			.getSystemModel_Base_Model();
+
+	}
+
+} //L3Package
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/L3Plugin.java b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/L3Plugin.java
new file mode 100644
index 0000000..7fe51e6
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/L3Plugin.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2011 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.profile.l3;
+
+import org.eclipse.emf.common.EMFPlugin;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * This is the central singleton for the L3 model plugin.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public final class L3Plugin
+		extends EMFPlugin {
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final L3Plugin INSTANCE = new L3Plugin();
+
+	/**
+	 * Keep track of the singleton.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Create the instance.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public L3Plugin() {
+		super(new ResourceLocator[]{});
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * Returns the singleton instance of the Eclipse plugin.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the singleton instance.
+	 * @generated
+	 */
+	public static Implementation getPlugin() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the Eclipse <b>Plugin</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static class Implementation
+			extends EclipsePlugin {
+
+		/**
+		 * Creates an instance.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		public Implementation() {
+			super();
+
+			// Remember the static instance.
+			//
+			plugin = this;
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/Metamodel.java b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/Metamodel.java
new file mode 100644
index 0000000..c42d892
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/Metamodel.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2011 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.profile.l3;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.Model;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Metamodel</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.l3.Metamodel#getBase_Model <em>Base Model</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.uml2.uml.profile.l3.L3Package#getMetamodel()
+ * @model
+ * @generated
+ */
+public interface Metamodel
+		extends EObject {
+
+	/**
+	 * Returns the value of the '<em><b>Base Model</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Model</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Model</em>' reference.
+	 * @see #setBase_Model(Model)
+	 * @see org.eclipse.uml2.uml.profile.l3.L3Package#getMetamodel_Base_Model()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	Model getBase_Model();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.uml2.uml.profile.l3.Metamodel#getBase_Model <em>Base Model</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Model</em>' reference.
+	 * @see #getBase_Model()
+	 * @generated
+	 */
+	void setBase_Model(Model value);
+
+} // Metamodel
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/SystemModel.java b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/SystemModel.java
new file mode 100644
index 0000000..23df726
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/SystemModel.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2011 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.profile.l3;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.Model;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>System Model</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.l3.SystemModel#getBase_Model <em>Base Model</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.uml2.uml.profile.l3.L3Package#getSystemModel()
+ * @model
+ * @generated
+ */
+public interface SystemModel
+		extends EObject {
+
+	/**
+	 * Returns the value of the '<em><b>Base Model</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Base Model</em>' reference isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Base Model</em>' reference.
+	 * @see #setBase_Model(Model)
+	 * @see org.eclipse.uml2.uml.profile.l3.L3Package#getSystemModel_Base_Model()
+	 * @model required="true" ordered="false"
+	 * @generated
+	 */
+	Model getBase_Model();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.uml2.uml.profile.l3.SystemModel#getBase_Model <em>Base Model</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Base Model</em>' reference.
+	 * @see #getBase_Model()
+	 * @generated
+	 */
+	void setBase_Model(Model value);
+
+} // SystemModel
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/BuildComponentImpl.java b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/BuildComponentImpl.java
new file mode 100644
index 0000000..91135d6
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/BuildComponentImpl.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2011 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.profile.l3.internal.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.uml2.uml.Component;
+
+import org.eclipse.uml2.uml.profile.l3.BuildComponent;
+import org.eclipse.uml2.uml.profile.l3.L3Package;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Build Component</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.l3.internal.impl.BuildComponentImpl#getBase_Component <em>Base Component</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class BuildComponentImpl
+		extends EObjectImpl
+		implements BuildComponent {
+
+	/**
+	 * The cached value of the '{@link #getBase_Component() <em>Base Component</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_Component()
+	 * @generated
+	 * @ordered
+	 */
+	protected Component base_Component;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected BuildComponentImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return L3Package.Literals.BUILD_COMPONENT;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component getBase_Component() {
+		if (base_Component != null && base_Component.eIsProxy()) {
+			InternalEObject oldBase_Component = (InternalEObject) base_Component;
+			base_Component = (Component) eResolveProxy(oldBase_Component);
+			if (base_Component != oldBase_Component) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE,
+						L3Package.BUILD_COMPONENT__BASE_COMPONENT,
+						oldBase_Component, base_Component));
+			}
+		}
+		return base_Component;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Component basicGetBase_Component() {
+		return base_Component;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Component(Component newBase_Component) {
+		Component oldBase_Component = base_Component;
+		base_Component = newBase_Component;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET,
+				L3Package.BUILD_COMPONENT__BASE_COMPONENT, oldBase_Component,
+				base_Component));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case L3Package.BUILD_COMPONENT__BASE_COMPONENT :
+				if (resolve)
+					return getBase_Component();
+				return basicGetBase_Component();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case L3Package.BUILD_COMPONENT__BASE_COMPONENT :
+				setBase_Component((Component) newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case L3Package.BUILD_COMPONENT__BASE_COMPONENT :
+				setBase_Component((Component) null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case L3Package.BUILD_COMPONENT__BASE_COMPONENT :
+				return base_Component != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //BuildComponentImpl
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/L3FactoryImpl.java b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/L3FactoryImpl.java
new file mode 100644
index 0000000..093c006
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/L3FactoryImpl.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2011 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.profile.l3.internal.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+import org.eclipse.uml2.uml.profile.l3.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class L3FactoryImpl
+		extends EFactoryImpl
+		implements L3Factory {
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static L3Factory init() {
+		try {
+			L3Factory theL3Factory = (L3Factory) EPackage.Registry.INSTANCE
+				.getEFactory("http://www.eclipse.org/uml2/4.0.0/UML/Profile/L3"); //$NON-NLS-1$ 
+			if (theL3Factory != null) {
+				return theL3Factory;
+			}
+		} catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new L3FactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public L3FactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case L3Package.BUILD_COMPONENT :
+				return createBuildComponent();
+			case L3Package.METAMODEL :
+				return createMetamodel();
+			case L3Package.SYSTEM_MODEL :
+				return createSystemModel();
+			default :
+				throw new IllegalArgumentException(
+					"The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public BuildComponent createBuildComponent() {
+		BuildComponentImpl buildComponent = new BuildComponentImpl();
+		return buildComponent;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Metamodel createMetamodel() {
+		MetamodelImpl metamodel = new MetamodelImpl();
+		return metamodel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SystemModel createSystemModel() {
+		SystemModelImpl systemModel = new SystemModelImpl();
+		return systemModel;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public L3Package getL3Package() {
+		return (L3Package) getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static L3Package getPackage() {
+		return L3Package.eINSTANCE;
+	}
+
+} //L3FactoryImpl
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/L3PackageImpl.java b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/L3PackageImpl.java
new file mode 100644
index 0000000..d418892
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/L3PackageImpl.java
@@ -0,0 +1,290 @@
+/*
+ * Copyright (c) 2011 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.profile.l3.internal.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+import org.eclipse.uml2.uml.UMLPackage;
+
+import org.eclipse.uml2.uml.profile.l3.BuildComponent;
+import org.eclipse.uml2.uml.profile.l3.L3Factory;
+import org.eclipse.uml2.uml.profile.l3.L3Package;
+import org.eclipse.uml2.uml.profile.l3.Metamodel;
+import org.eclipse.uml2.uml.profile.l3.SystemModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class L3PackageImpl
+		extends EPackageImpl
+		implements L3Package {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass buildComponentEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass metamodelEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass systemModelEClass = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.uml2.uml.profile.l3.L3Package#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private L3PackageImpl() {
+		super(eNS_URI, L3Factory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+	 * 
+	 * <p>This method is used to initialize {@link L3Package#eINSTANCE} when that field is accessed.
+	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static L3Package init() {
+		if (isInited)
+			return (L3Package) EPackage.Registry.INSTANCE
+				.getEPackage(L3Package.eNS_URI);
+
+		// Obtain or create and register package
+		L3PackageImpl theL3Package = (L3PackageImpl) (EPackage.Registry.INSTANCE
+			.get(eNS_URI) instanceof L3PackageImpl
+			? EPackage.Registry.INSTANCE.get(eNS_URI)
+			: new L3PackageImpl());
+
+		isInited = true;
+
+		// Initialize simple dependencies
+		UMLPackage.eINSTANCE.eClass();
+
+		// Create package meta-data objects
+		theL3Package.createPackageContents();
+
+		// Initialize created meta-data
+		theL3Package.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theL3Package.freeze();
+
+		// Update the registry and return the package
+		EPackage.Registry.INSTANCE.put(L3Package.eNS_URI, theL3Package);
+		return theL3Package;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getBuildComponent() {
+		return buildComponentEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getBuildComponent_Base_Component() {
+		return (EReference) buildComponentEClass.getEStructuralFeatures()
+			.get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getMetamodel() {
+		return metamodelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getMetamodel_Base_Model() {
+		return (EReference) metamodelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSystemModel() {
+		return systemModelEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getSystemModel_Base_Model() {
+		return (EReference) systemModelEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public L3Factory getL3Factory() {
+		return (L3Factory) getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated)
+			return;
+		isCreated = true;
+
+		// Create classes and their features
+		buildComponentEClass = createEClass(BUILD_COMPONENT);
+		createEReference(buildComponentEClass, BUILD_COMPONENT__BASE_COMPONENT);
+
+		metamodelEClass = createEClass(METAMODEL);
+		createEReference(metamodelEClass, METAMODEL__BASE_MODEL);
+
+		systemModelEClass = createEClass(SYSTEM_MODEL);
+		createEReference(systemModelEClass, SYSTEM_MODEL__BASE_MODEL);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized)
+			return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Obtain other dependent packages
+		UMLPackage theUMLPackage = (UMLPackage) EPackage.Registry.INSTANCE
+			.getEPackage(UMLPackage.eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+
+		// Initialize classes, features, and operations; add parameters
+		initEClass(
+			buildComponentEClass,
+			BuildComponent.class,
+			"BuildComponent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(
+			getBuildComponent_Base_Component(),
+			theUMLPackage.getComponent(),
+			null,
+			"base_Component", null, 1, 1, BuildComponent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(
+			metamodelEClass,
+			Metamodel.class,
+			"Metamodel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(
+			getMetamodel_Base_Model(),
+			theUMLPackage.getModel(),
+			null,
+			"base_Model", null, 1, 1, Metamodel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+
+		initEClass(
+			systemModelEClass,
+			SystemModel.class,
+			"SystemModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEReference(
+			getSystemModel_Base_Model(),
+			theUMLPackage.getModel(),
+			null,
+			"base_Model", null, 1, 1, SystemModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
+
+		// Create resource
+		createResource(eNS_URI);
+	}
+
+} //L3PackageImpl
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/MetamodelImpl.java b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/MetamodelImpl.java
new file mode 100644
index 0000000..d2e47b2
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/MetamodelImpl.java
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2011 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.profile.l3.internal.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.uml2.uml.Model;
+
+import org.eclipse.uml2.uml.profile.l3.L3Package;
+import org.eclipse.uml2.uml.profile.l3.Metamodel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Metamodel</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.l3.internal.impl.MetamodelImpl#getBase_Model <em>Base Model</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class MetamodelImpl
+		extends EObjectImpl
+		implements Metamodel {
+
+	/**
+	 * The cached value of the '{@link #getBase_Model() <em>Base Model</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_Model()
+	 * @generated
+	 * @ordered
+	 */
+	protected Model base_Model;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected MetamodelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return L3Package.Literals.METAMODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Model getBase_Model() {
+		if (base_Model != null && base_Model.eIsProxy()) {
+			InternalEObject oldBase_Model = (InternalEObject) base_Model;
+			base_Model = (Model) eResolveProxy(oldBase_Model);
+			if (base_Model != oldBase_Model) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE,
+						L3Package.METAMODEL__BASE_MODEL, oldBase_Model,
+						base_Model));
+			}
+		}
+		return base_Model;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Model basicGetBase_Model() {
+		return base_Model;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Model(Model newBase_Model) {
+		Model oldBase_Model = base_Model;
+		base_Model = newBase_Model;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET,
+				L3Package.METAMODEL__BASE_MODEL, oldBase_Model, base_Model));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case L3Package.METAMODEL__BASE_MODEL :
+				if (resolve)
+					return getBase_Model();
+				return basicGetBase_Model();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case L3Package.METAMODEL__BASE_MODEL :
+				setBase_Model((Model) newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case L3Package.METAMODEL__BASE_MODEL :
+				setBase_Model((Model) null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case L3Package.METAMODEL__BASE_MODEL :
+				return base_Model != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //MetamodelImpl
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/SystemModelImpl.java b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/SystemModelImpl.java
new file mode 100644
index 0000000..bdcf214
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/internal/impl/SystemModelImpl.java
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2011 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.profile.l3.internal.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+
+import org.eclipse.uml2.uml.Model;
+
+import org.eclipse.uml2.uml.profile.l3.L3Package;
+import org.eclipse.uml2.uml.profile.l3.SystemModel;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>System Model</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.uml2.uml.profile.l3.internal.impl.SystemModelImpl#getBase_Model <em>Base Model</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SystemModelImpl
+		extends EObjectImpl
+		implements SystemModel {
+
+	/**
+	 * The cached value of the '{@link #getBase_Model() <em>Base Model</em>}' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getBase_Model()
+	 * @generated
+	 * @ordered
+	 */
+	protected Model base_Model;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SystemModelImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return L3Package.Literals.SYSTEM_MODEL;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Model getBase_Model() {
+		if (base_Model != null && base_Model.eIsProxy()) {
+			InternalEObject oldBase_Model = (InternalEObject) base_Model;
+			base_Model = (Model) eResolveProxy(oldBase_Model);
+			if (base_Model != oldBase_Model) {
+				if (eNotificationRequired())
+					eNotify(new ENotificationImpl(this, Notification.RESOLVE,
+						L3Package.SYSTEM_MODEL__BASE_MODEL, oldBase_Model,
+						base_Model));
+			}
+		}
+		return base_Model;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Model basicGetBase_Model() {
+		return base_Model;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setBase_Model(Model newBase_Model) {
+		Model oldBase_Model = base_Model;
+		base_Model = newBase_Model;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET,
+				L3Package.SYSTEM_MODEL__BASE_MODEL, oldBase_Model, base_Model));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case L3Package.SYSTEM_MODEL__BASE_MODEL :
+				if (resolve)
+					return getBase_Model();
+				return basicGetBase_Model();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case L3Package.SYSTEM_MODEL__BASE_MODEL :
+				setBase_Model((Model) newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case L3Package.SYSTEM_MODEL__BASE_MODEL :
+				setBase_Model((Model) null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case L3Package.SYSTEM_MODEL__BASE_MODEL :
+				return base_Model != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //SystemModelImpl
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/util/L3AdapterFactory.java b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/util/L3AdapterFactory.java
new file mode 100644
index 0000000..2e800cd
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/util/L3AdapterFactory.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2011 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.profile.l3.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.uml2.uml.profile.l3.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.uml2.uml.profile.l3.L3Package
+ * @generated
+ */
+public class L3AdapterFactory
+		extends AdapterFactoryImpl {
+
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static L3Package modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public L3AdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = L3Package.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject) object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch that delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected L3Switch<Adapter> modelSwitch = new L3Switch<Adapter>() {
+
+		@Override
+		public Adapter caseBuildComponent(BuildComponent object) {
+			return createBuildComponentAdapter();
+		}
+
+		@Override
+		public Adapter caseMetamodel(Metamodel object) {
+			return createMetamodelAdapter();
+		}
+
+		@Override
+		public Adapter caseSystemModel(SystemModel object) {
+			return createSystemModelAdapter();
+		}
+
+		@Override
+		public Adapter defaultCase(EObject object) {
+			return createEObjectAdapter();
+		}
+	};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject) target);
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.uml2.uml.profile.l3.BuildComponent <em>Build Component</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.uml2.uml.profile.l3.BuildComponent
+	 * @generated
+	 */
+	public Adapter createBuildComponentAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.uml2.uml.profile.l3.Metamodel <em>Metamodel</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.uml2.uml.profile.l3.Metamodel
+	 * @generated
+	 */
+	public Adapter createMetamodelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.uml2.uml.profile.l3.SystemModel <em>System Model</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.uml2.uml.profile.l3.SystemModel
+	 * @generated
+	 */
+	public Adapter createSystemModelAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //L3AdapterFactory
diff --git a/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/util/L3Switch.java b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/util/L3Switch.java
new file mode 100644
index 0000000..5b632db
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.profile.l3/src/org/eclipse/uml2/uml/profile/l3/util/L3Switch.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2011 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.profile.l3.util;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+import org.eclipse.uml2.uml.profile.l3.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.uml2.uml.profile.l3.L3Package
+ * @generated
+ */
+public class L3Switch<T>
+		extends Switch<T> {
+
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static L3Package modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public L3Switch() {
+		if (modelPackage == null) {
+			modelPackage = L3Package.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Checks whether this is a switch for the given package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @parameter ePackage the package in question.
+	 * @return whether this is a switch for the given package.
+	 * @generated
+	 */
+	@Override
+	protected boolean isSwitchFor(EPackage ePackage) {
+		return ePackage == modelPackage;
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	@Override
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case L3Package.BUILD_COMPONENT : {
+				BuildComponent buildComponent = (BuildComponent) theEObject;
+				T result = caseBuildComponent(buildComponent);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case L3Package.METAMODEL : {
+				Metamodel metamodel = (Metamodel) theEObject;
+				T result = caseMetamodel(metamodel);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case L3Package.SYSTEM_MODEL : {
+				SystemModel systemModel = (SystemModel) theEObject;
+				T result = caseSystemModel(systemModel);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			default :
+				return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Build Component</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Build Component</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseBuildComponent(BuildComponent object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Metamodel</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Metamodel</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseMetamodel(Metamodel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>System Model</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>System Model</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseSystemModel(SystemModel object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	@Override
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //L3Switch