[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);
}