[358792] Adding built-in type mapping and generator model support for
UML primitive types.
diff --git a/plugins/org.eclipse.uml2.codegen.ecore/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.codegen.ecore/META-INF/MANIFEST.MF
index f5ab8e3..fe7ee4e 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.uml2.codegen.ecore/META-INF/MANIFEST.MF
@@ -20,6 +20,7 @@
  org.eclipse.core.resources,
  org.eclipse.emf.ecore.xmi;visibility:=reexport,
  org.eclipse.emf.codegen.ecore;visibility:=reexport,
- org.eclipse.jdt.core
+ org.eclipse.jdt.core,
+ org.eclipse.uml2.types
 Eclipse-LazyStart: true
 Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/impl/GenModelImpl.java b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/impl/GenModelImpl.java
index 2fc66ec..b2f4aec 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/impl/GenModelImpl.java
+++ b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/impl/GenModelImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2011 IBM Corporation, Embarcadero Technologies, and others.
+ * Copyright (c) 2005, 2011 IBM Corporation, Embarcadero Technologies, 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
@@ -9,11 +9,12 @@
  *   IBM - initial API and implementation
  *   Kenn Hussey (Embarcadero Technologies) - 208016, 247980
  *   Kenn Hussey - 284809
+ *   Kenn Hussey (CEA) - 358792
  *
- * $Id: GenModelImpl.java,v 1.22 2011/05/09 03:32:04 khussey Exp $
  */
 package org.eclipse.uml2.codegen.ecore.genmodel.impl;
 
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.emf.codegen.ecore.genmodel.GenClass;
@@ -28,6 +29,8 @@
 import org.eclipse.emf.common.notify.Notification;
 
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EcorePackage;
 
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 
@@ -37,6 +40,7 @@
 import org.eclipse.uml2.codegen.ecore.genmodel.GenModelPackage;
 
 import org.eclipse.uml2.codegen.ecore.genmodel.util.UML2GenModelUtil;
+import org.eclipse.uml2.types.TypesPackage;
 
 /**
  * <!-- begin-user-doc -->
@@ -608,4 +612,36 @@
 		}
 	}
 
+	private GenPackage typesGenPackage = null;
+
+	@Override
+	public GenPackage findGenPackage(EPackage ePackage) {
+		GenPackage result = super.findGenPackage(ePackage);
+
+		if (result == null) {
+
+			if (!isMainGenModel() && ePackage == TypesPackage.eINSTANCE) {
+				result = getMainGenModel().findGenPackage(ePackage);
+			} else if (ePackage == TypesPackage.eINSTANCE) {
+
+				if (typesGenPackage == null) {
+					org.eclipse.emf.codegen.ecore.genmodel.GenModel typesGenModel = getGenModel()
+						.createGenModel();
+					typesGenModel.initialize(Collections
+						.singleton(TypesPackage.eINSTANCE));
+					typesGenModel.setMainGenModel(this);
+					typesGenModel.setImportManager(getImportManager());
+					typesGenModel.setLanguage("en");
+					typesGenPackage = typesGenModel.getGenPackages().get(0);
+					typesGenPackage.setPrefix("types");
+					typesGenPackage.setBasePackage("org.eclipse.uml2");
+				}
+
+				result = typesGenPackage;
+			}
+		}
+
+		return result;
+	}
+
 }
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
index 1916e03..e6d8756 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/util/UMLUtil.java
@@ -10,10 +10,9 @@
  *   Kenn Hussey (Embarcadero Technologies) - 199624, 184249, 204406, 208125, 204200, 213218, 213903, 220669, 208016, 226396, 271470
  *   Nicolas Rouquette (JPL) - 260120, 313837
  *   Kenn Hussey - 286329, 313601, 314971, 344907, 236184
- *   Kenn Hussey (CEA) - 327039
+ *   Kenn Hussey (CEA) - 327039, 358792
  *   Yann Tanguy (CEA) - 350402
  *
- * $Id: UMLUtil.java,v 1.89 2011/05/06 01:42:10 khussey Exp $
  */
 package org.eclipse.uml2.uml.util;
 
@@ -2550,6 +2549,9 @@
 
 						eType = EcorePackage.eINSTANCE.getEClassifier(type
 							.getName());
+					} else if (qualifiedName.startsWith("PrimitiveTypes::")) { //$NON-NLS-1$
+						eType = TypesPackage.eINSTANCE.getEClassifier(type
+							.getName());
 					} else if (qualifiedName.startsWith("XMLPrimitiveTypes::")) { //$NON-NLS-1$
 						eType = XMLTypePackage.eINSTANCE.getEClassifier(type
 							.getName());
@@ -6225,6 +6227,18 @@
 			return null;
 		}
 
+		protected Model getUMLPrimitiveTypesLibrary(EModelElement eModelElement) {
+			ResourceSet resourceSet = getResourceSet(eModelElement);
+
+			if (resourceSet != null) {
+				return load(resourceSet,
+					URI.createURI(UMLResource.UML_PRIMITIVE_TYPES_LIBRARY_URI),
+					UMLPackage.Literals.MODEL);
+			}
+
+			return null;
+		}
+
 		protected Model getXMLPrimitiveTypesLibrary(EModelElement eModelElement) {
 			ResourceSet resourceSet = getResourceSet(eModelElement);
 
@@ -6246,6 +6260,15 @@
 				: null;
 		}
 
+		protected PrimitiveType getUMLPrimitiveType(
+				EModelElement eModelElement, String name) {
+			Model umlPrimitiveTypesLibrary = getUMLPrimitiveTypesLibrary(eModelElement);
+
+			return umlPrimitiveTypesLibrary != null
+				? (PrimitiveType) umlPrimitiveTypesLibrary.getOwnedType(name)
+				: null;
+		}
+
 		protected PrimitiveType getXMLPrimitiveType(
 				EModelElement eModelElement, String name) {
 			Model xmlPrimitiveTypesLibrary = getXMLPrimitiveTypesLibrary(eModelElement);
@@ -6273,6 +6296,8 @@
 
 						if (XMLTypePackage.eNS_URI.equals(nsURI)) {
 							type = getXMLPrimitiveType(eModelElement, name);
+						} else if (TypesPackage.eNS_URI.equals(nsURI)) {
+							type = getUMLPrimitiveType(eModelElement, name);
 						} else if (EcorePackage.eNS_URI.equals(nsURI)) {
 							type = getEcorePrimitiveType(eModelElement, name);
 						}