From 57c7cd8e88c2e19fe34c5f4e69febba1ffe34a81 Mon Sep 17 00:00:00 2001 From: rfeng Date: Sun, 12 Jul 2009 18:07:15 +0000 Subject: Use GenModel to find the class name for static SDOs git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@793385 13f79535-47bb-0310-9956-ffa450edef68 --- .../tools/wsdl2java/sdo/SDODatabinding.java | 64 +++++++++++++++++----- 1 file changed, 50 insertions(+), 14 deletions(-) (limited to 'branches/sca-java-1.x') diff --git a/branches/sca-java-1.x/tools/databinding/sdo/src/main/java/org/apache/tuscany/tools/wsdl2java/sdo/SDODatabinding.java b/branches/sca-java-1.x/tools/databinding/sdo/src/main/java/org/apache/tuscany/tools/wsdl2java/sdo/SDODatabinding.java index de7e23ec71..91e445bec5 100644 --- a/branches/sca-java-1.x/tools/databinding/sdo/src/main/java/org/apache/tuscany/tools/wsdl2java/sdo/SDODatabinding.java +++ b/branches/sca-java-1.x/tools/databinding/sdo/src/main/java/org/apache/tuscany/tools/wsdl2java/sdo/SDODatabinding.java @@ -29,6 +29,7 @@ import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; import java.util.Hashtable; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -42,6 +43,10 @@ import org.apache.cxf.tools.wsdlto.core.DataBindingProfile; import org.apache.tuscany.sdo.api.SDOUtil; import org.apache.tuscany.sdo.generate.XSD2JavaGenerator; import org.apache.tuscany.sdo.helper.HelperContextImpl; +import org.eclipse.emf.codegen.ecore.genmodel.GenClass; +import org.eclipse.emf.codegen.ecore.genmodel.GenModel; +import org.eclipse.emf.codegen.ecore.genmodel.GenPackage; +import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.impl.EPackageRegistryImpl; @@ -64,6 +69,7 @@ public class SDODatabinding extends XSD2JavaGenerator implements DataBindingProf private boolean dynamic; private ExtendedMetaData extendedMetaData; + private GenModel genModel; public void generate(ToolContext context) throws ToolException { if (dynamic) { @@ -106,10 +112,11 @@ public class SDODatabinding extends XSD2JavaGenerator implements DataBindingProf try { processArguments(args); - run(args); + genModel = runXSD2Java(args); } catch (Exception e) { e.printStackTrace(); printUsage(); + return; } HelperContext hc = new HelperContextImpl(extendedMetaData, false); @@ -118,21 +125,21 @@ public class SDODatabinding extends XSD2JavaGenerator implements DataBindingProf } - protected void run(String args[]) { + protected GenModel runXSD2Java(String args[]) { String xsdFileName = args[inputIndex]; EPackage.Registry packageRegistry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE); extendedMetaData = new BasicExtendedMetaData(packageRegistry); String packageURI = getSchemaNamespace(xsdFileName); Hashtable packageInfoTable = createPackageInfoTable(packageURI, schemaNamespace, javaPackage, prefix, namespaceInfo); - generateFromXMLSchema(xsdFileName, - packageRegistry, - extendedMetaData, - targetDirectory, - packageInfoTable, - genOptions, - generateBuiltIn, - allNamespaces); + return generateFromXMLSchema(xsdFileName, + packageRegistry, + extendedMetaData, + targetDirectory, + packageInfoTable, + genOptions, + generateBuiltIn, + allNamespaces); } private static Hashtable createPackageInfoTable(String packageURI, @@ -216,13 +223,42 @@ public class SDODatabinding extends XSD2JavaGenerator implements DataBindingProf } private String getClassName(Type type) { - EClassifier eClass = (EClassifier)type; - String name = eClass.getInstanceClassName(); - if (name == null) { + EClassifier eClassifier = (EClassifier)type; + String name = eClassifier.getInstanceClassName(); + if (name != null) { + return name; + } + + if (genModel == null) { return type.getName(); + } + + List packages = genModel.getGenPackages(); + Hashtable genClasses = new Hashtable(); + for (Iterator iter = packages.iterator(); iter.hasNext();) { + // loop through the list, once to build up the eclass to genclass mapper + GenPackage genPackage = iter.next(); + List classes = genPackage.getGenClasses(); + for (Iterator classIter = classes.iterator(); classIter.hasNext();) { + GenClass genClass = classIter.next(); + genClasses.put(genClass.getEcoreClass(), genClass); + } + } + + if (eClassifier instanceof EClass) { + // complex type + EClass eClass = (EClass)eClassifier; + GenClass genEClass = (GenClass)genClasses.get(eClassifier); + if (genEClass != null) { + name = genEClass.getGenPackage().getInterfacePackageName() + '.' + genEClass.getInterfaceName(); + + } } else { - return name; + // simple type + name = eClassifier.getInstanceClass().getName(); } + return name; + } public String getWrappedElementType(QName wrapperElement, QName item) { -- cgit v1.2.3