After this commit, DAS test cases are failing as described on the continuum build failure report[1]. I tried updating SDO to the revision prior to this commit (>svn update -r 543519), and then I get a clean DAS build.
I have created JIRA TUSCANY-1323 to track the issue, Could someone on the SDO team please take a look at this ? [1] http://www.mail-archive.com/tuscany-dev%40ws.apache.org/msg18484.html [2] https://issues.apache.org/jira/browse/TUSCANY-1323 ---------- Forwarded message ---------- From: [EMAIL PROTECTED] <[EMAIL PROTECTED]> Date: Jun 1, 2007 9:04 AM Subject: svn commit: r543520 - in /incubator/tuscany/java/sdo/tools: src/main/java/org/apache/tuscany/sdo/generate/ src/main/java/org/apache/tuscany/sdo/generate/templates/model/ templates/models/ To: [EMAIL PROTECTED] Author: kelvingoodson Date: Fri Jun 1 09:04:20 2007 New Revision: 543520 URL: http://svn.apache.org/viewvc?view=rev&rev=543520 Log: Fix for TUSCANY-1233 Modified: incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/JavaGenerator.java incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/XSD2JavaGenerator.java incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/templates/model/SDOFactoryClass.java incubator/tuscany/java/sdo/tools/templates/models/SDOFactoryClass.javajet Modified: incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/JavaGenerator.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/JavaGenerator.java?view=diff&rev=543520&r1=543519&r2=543520 ============================================================================== --- incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/JavaGenerator.java (original) +++ incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/JavaGenerator.java Fri Jun 1 09:04:20 2007 @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.StringTokenizer; @@ -84,6 +85,7 @@ * [ -generateLoader ] * [ -interfaceDataObject ] * [ -sparsePattern | -storePattern ] + * [ -noGenerate ] * * Basic options: * @@ -152,7 +154,10 @@ * implementation. It changes the generator pattern to generate accessors which delegate to the * reflective methods (as opposed to the other way around) and changes the DataObject base class * to org.apache.tuscany.sdo.impl.StoreDataObjectImpl. Note that this option generates classes that - * require a Store implementation to be provided before they can be run. + * require a Store implementation to be provided before they can be run. + * -noGenerate + * A basic implementation of this switch is in place, but is not fully implemented. An intention + * behind this is to provide commentary on the artifacts that would be generated. * * */ @@ -169,6 +174,7 @@ //FIXME Temporary, I need this option for now to get Switch classes generated for the SCDL models public static int OPTION_GENERATE_SWITCH=0x100; public static int OPTION_INTERFACE_DO=0x400; + public static int OPTION_NO_GENERATE=0x800; static { @@ -279,6 +285,10 @@ { genOptions |= OPTION_INTERFACE_DO; } + else if (args[index].equalsIgnoreCase("-noGenerate")) + { + genOptions |= OPTION_NO_GENERATE; + } //else if (...) else { @@ -340,29 +350,50 @@ } } - public static void generatePackages(Collection packageList, String packageURI, String shortName, String targetDirectory, String javaPackage, String prefix, int genOptions) + protected static void generatePackages(Collection packageList, String packageURI, String shortName, String targetDirectory, String javaPackage, String prefix, int genOptions) + { + Hashtable packageInfoTable = new Hashtable(); + packageInfoTable.put(packageURI, new PackageInfo(javaPackage, prefix, packageURI, shortName )); + generatePackages(packageList, targetDirectory, packageInfoTable, genOptions, false); + } + + protected static GenModel generatePackages(Collection packageList, String targetDirectory, Hashtable packageInfoTable, int genOptions, boolean allNamespaces ) { ResourceSet resourceSet = DataObjectUtil.createResourceSet(); List usedGenPackages = new ArrayList(); GenModel genModel = null; + ArrayList packagesToModel = new ArrayList(); for (Iterator iter = packageList.iterator(); iter.hasNext();) { EPackage currentEPackage = (EPackage)iter.next(); - boolean generateCurrent = currentEPackage.getNsURI().equals(packageURI); - String currentBasePackage = extractBasePackageName(currentEPackage, generateCurrent ? javaPackage : null); - String currentPrefix = generateCurrent && prefix != null ? prefix : CodeGenUtil.capName(shortName != null ? shortName : currentEPackage.getName()); - GenPackage currentGenPackage = createGenPackage(currentEPackage, currentBasePackage, currentPrefix, genOptions, resourceSet); - if (generateCurrent) - { - genModel = currentGenPackage.getGenModel(); - } + String packageNamespace = currentEPackage.getNsURI(); + PackageInfo packageInfo = (PackageInfo)packageInfoTable.get(packageNamespace); + boolean bTargetPackage = allNamespaces; + String javaPackage = null; + String prefix = null; + String shortName = null; + if( packageInfo != null ) + { + bTargetPackage = true; + javaPackage = packageInfo.getBasePackage(); + prefix = packageInfo.getPrefix(); + shortName = packageInfo.getShortName(); + } + String currentBasePackage = extractBasePackageName(currentEPackage, bTargetPackage ? javaPackage : null); + String currentPrefix = bTargetPackage && prefix != null ? prefix : CodeGenUtil.capName(shortName != null ? shortName : currentEPackage.getName()); + packageInfoTable.put(currentEPackage, new PackageInfo(currentBasePackage, currentPrefix, null, null )); + + if( allNamespaces || packageInfo != null ) + packagesToModel.add(currentEPackage); else - { - usedGenPackages.add(currentGenPackage); - } - } - - if (genModel == null) return; // nothing to generate + { + GenPackage currentGenPackage = createGenPackage(currentEPackage, currentBasePackage, currentPrefix, genOptions, resourceSet); + usedGenPackages.add(currentGenPackage); + } + } + genModel = createGenPackages(packagesToModel, packageInfoTable, genOptions, resourceSet); + + if (genModel == null) return null; // nothing to generate //TODO Figure out which predefined packages are really "used" usedGenPackages.add(createGenPackage(SDOPackageImpl.eINSTANCE, "org.apache.tuscany", "SDO", 0, resourceSet)); @@ -372,16 +403,22 @@ //usedGenPackages.add(createGenPackage((EPackage)XMLFactory.INSTANCE, "org.apache.tuscany.sdo.model", "XML", 0, resourceSet)); genModel.getUsedGenPackages().addAll(usedGenPackages); - - // Invoke the SDO JavaGenerator to generate the SDO classes - try - { - generateFromGenModel(genModel, new File(targetDirectory).getCanonicalPath(), genOptions); - } - catch (IOException e) + + // If the display namespace option is selected, Don't generate + if( (genOptions & OPTION_NO_GENERATE) == 0) { - e.printStackTrace(); + // Invoke the SDO JavaGenerator to generate the SDO classes + try + { + generateFromGenModel(genModel, new File(targetDirectory).getCanonicalPath(), genOptions); + } + catch (IOException e) + { + e.printStackTrace(); + } } + + return genModel; } /** @@ -396,6 +433,27 @@ return schema.getTargetNamespace(); } + protected static GenModel createGenPackages(Collection ePackages, Hashtable packageInfoTable, int genOptions, ResourceSet resourceSet) + { + GenModel genModel = ecore2GenModel(ePackages, packageInfoTable, genOptions); + + for (Iterator iter = ePackages.iterator(); iter.hasNext();) + { + EPackage ePackage = (EPackage)iter.next(); + + URI ecoreURI = URI.createURI("file:///" + ePackage.getName() + ".ecore"); + URI genModelURI = ecoreURI.trimFileExtension().appendFileExtension("genmodel"); + + Resource ecoreResource = resourceSet.createResource(ecoreURI); + ecoreResource.getContents().add(ePackage); + + Resource genModelResource = resourceSet.createResource(genModelURI); + genModelResource.getContents().add(genModel); + } + + return genModel; + } + public static GenPackage createGenPackage(EPackage ePackage, String basePackage, String prefix, int genOptions, ResourceSet resourceSet) { GenModel genModel = ecore2GenModel(ePackage, basePackage, prefix, genOptions); @@ -449,8 +507,8 @@ //if ((genOptions & OPTION_USE_EMF_PATTERNS) == 0) { - generator.getAdapterFactoryDescriptorRegistry().addDescriptor - (GenModelPackage.eNS_URI, SDOGenModelGeneratorAdapterFactory.DESCRIPTOR); + generator.getAdapterFactoryDescriptorRegistry().addDescriptor + (GenModelPackage.eNS_URI, SDOGenModelGeneratorAdapterFactory.DESCRIPTOR); } generator.setInput(genModel); @@ -470,8 +528,17 @@ public static GenModel ecore2GenModel(EPackage ePackage, String basePackage, String prefix, int genOptions) { + ArrayList ePackages = new ArrayList(); + ePackages.add(ePackage); + Hashtable packageInfoTable = new Hashtable(); + packageInfoTable.put(ePackage, new PackageInfo(basePackage, prefix, null, null )); + return ecore2GenModel(ePackages, packageInfoTable, genOptions ); + } + + private static GenModel ecore2GenModel(Collection ePackages, Hashtable packageInfoTable, int genOptions) + { GenModel genModel = GenModelFactory.eINSTANCE.createGenModel(); - genModel.initialize(Collections.singleton(ePackage)); + genModel.initialize(ePackages); genModel.setRootExtendsInterface(""); genModel.setRootImplementsInterface("commonj.sdo.DataObject"); @@ -536,43 +603,48 @@ genModel.setRootExtendsInterface("java.io.Serializable"); } - GenPackage genPackage = (GenPackage)genModel.getGenPackages().get(0); - - if (basePackage != null) - { - genPackage.setBasePackage(basePackage); - } - if (prefix != null) + //GenPackage genPackage = (GenPackage)genModel.getGenPackages().get(0); + Collection packages = genModel.getGenPackages(); + for (Iterator iter1 = packages.iterator(); iter1.hasNext();) { - genPackage.setPrefix(prefix); - } + GenPackage genPackage = (GenPackage)iter1.next(); + PackageInfo packageInfo = (PackageInfo)packageInfoTable.get(genPackage.getEcorePackage()); + + if (packageInfo.getBasePackage() != null) + { + genPackage.setBasePackage(packageInfo.getBasePackage()); + } + if (packageInfo.getPrefix() != null) + { + genPackage.setPrefix(packageInfo.getPrefix()); + } - //FIXME Temporary, I need this option for now to get Switch classes generated for the SCDL models - if ((genOptions & OPTION_GENERATE_SWITCH) == 0) - { - genPackage.setAdapterFactory(false); - } + //FIXME Temporary, I need this option for now to get Switch classes generated for the SCDL models + if ((genOptions & OPTION_GENERATE_SWITCH) == 0) + { + genPackage.setAdapterFactory(false); + } - if ((genOptions & OPTION_GENERATE_LOADER) != 0) - { - //FIXME workaround compile error with 02162006 build, generated code references non-existent EcoreResourceImpl class - genPackage.setResource(GenResourceKind.XML_LITERAL); - //genPackage.setDataTypeConverters(true); - } - else - { - genPackage.setResource(GenResourceKind.NONE_LITERAL); - for (Iterator iter = genPackage.getGenClasses().iterator(); iter.hasNext();) + if ((genOptions & OPTION_GENERATE_LOADER) != 0) { - GenClass genClass = (GenClass)iter.next(); - if ("DocumentRoot".equals(genClass.getName())) + //FIXME workaround compile error with 02162006 build, generated code references non-existent EcoreResourceImpl class + genPackage.setResource(GenResourceKind.XML_LITERAL); + //genPackage.setDataTypeConverters(true); + } + else + { + genPackage.setResource(GenResourceKind.NONE_LITERAL); + for (Iterator iter2 = genPackage.getGenClasses().iterator(); iter2.hasNext();) { - genClass.setDynamic(true); // Don't generate DocumentRoot class - break; - } + GenClass genClass = (GenClass)iter2.next(); + if ("DocumentRoot".equals(genClass.getName())) + { + genClass.setDynamic(true); // Don't generate DocumentRoot class + break; + } + } } } - return genModel; } @@ -624,4 +696,28 @@ System.out.println("Usage: this is a deprecated command replaced by XSD2JavaGenerator"); } + public static class PackageInfo + { + private String basePackage; + private String prefix; + private String namespace; + private String shortName; + + public PackageInfo(String basePackage, String prefix, String namespace, String shortName ) + { + setBasePackage(basePackage); + setPrefix(prefix); + setNamespace(namespace); + setShortName(shortName); + } + + public void setBasePackage(String basePackage) { this.basePackage = basePackage; } + public String getBasePackage() { return basePackage; } + public void setPrefix(String prefix) { this.prefix = prefix; } + public String getPrefix() { return prefix; } + public void setNamespace(String namespace) { this.namespace = namespace; } + public String getNamespace() { return namespace; } + public void setShortName(String shortName) { this.shortName = shortName; } + public String getShortName() { return shortName; } + } } Modified: incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/XSD2JavaGenerator.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/XSD2JavaGenerator.java?view=diff&rev=543520&r1=543519&r2=543520 ============================================================================== --- incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/XSD2JavaGenerator.java (original) +++ incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/XSD2JavaGenerator.java Fri Jun 1 09:04:20 2007 @@ -19,15 +19,27 @@ */ package org.apache.tuscany.sdo.generate; +import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; +import java.io.FileReader; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; import org.apache.tuscany.sdo.helper.XSDHelperImpl; import org.apache.tuscany.sdo.util.DataObjectUtil; +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.common.util.URI; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.impl.EPackageRegistryImpl; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; @@ -47,6 +59,7 @@ * [ -targetDirectory <target-root-directory> ] * [ -javaPackage <java-package-name> ] * [ -schemaNamespace <namespace-uri> ] + * [ -namespaceInfo <namespaces-file> ] * [ other options ... ] * <xsd-file> | <wsdl-file> * @@ -54,7 +67,14 @@ * * -schemaNamespace * Generate classes for XSD types in the specified targetNamespace. By default, types in the - * targetNamespace of the first schema in the specified xsd or wsdl file are generated. + * targetNamespace of the first schema in the specified xsd or wsdl file are generated. Specify + * 'all' and this parameter will act as a wildcard selecting all namespaces for code generation. + * -namespaceInfo + * Specifies the name of a file that should contain a list of namespaces and their associated package names. + * Optionally, a prefix may be assigned to each namespace as well. These values are separated by semicolons. + * So each line in the file would look something like this: + * + * some\namespace;custom.package.name;optionalPrefix * * NOTE: see the base class JavaGenerator for other options. * @@ -78,21 +98,34 @@ printUsage(); } } + protected String schemaNamespace = null; + protected String namespaceInfo = null; protected String generateBuiltIn = null; + protected static GeneratedPackages generatedPackages = null; + protected boolean allNamespaces = false; protected int handleArgument(String args[], int index) { if (args[index].equalsIgnoreCase("-schemaNamespace")) { schemaNamespace = args[++index]; + if( "all".equalsIgnoreCase(schemaNamespace) ) + { + schemaNamespace = null; + allNamespaces = true; + } } else if (args[index].equalsIgnoreCase("-generateBuiltIn")) { // Internal option used when regenerating one of the built-in (predefined) models (e.g., commonj.sdo). generateBuiltIn = args[++index]; } + else if (args[index].equalsIgnoreCase("-namespaceInfo")) + { + namespaceInfo = args[++index]; + } else { return super.handleArgument(args, index); @@ -104,21 +137,36 @@ protected void run(String args[]) { String xsdFileName = args[inputIndex]; - generateFromXMLSchema(xsdFileName, schemaNamespace, targetDirectory, javaPackage, prefix, genOptions, generateBuiltIn); + EPackage.Registry packageRegistry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE); + ExtendedMetaData 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); } public static void generateFromXMLSchema(String xsdFileName, String namespace, String targetDirectory, String javaPackage, String prefix, int genOptions) { - generateFromXMLSchema(xsdFileName, namespace, targetDirectory, javaPackage, prefix, genOptions, null); + EPackage.Registry packageRegistry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE); + ExtendedMetaData extendedMetaData = new BasicExtendedMetaData(packageRegistry); + String packageURI = getSchemaNamespace(xsdFileName); + Hashtable packageInfoTable = createPackageInfoTable(packageURI, namespace, javaPackage, prefix, null ); + generateFromXMLSchema(xsdFileName, packageRegistry, extendedMetaData, targetDirectory, packageInfoTable, genOptions, null, false ); } - protected static void generateFromXMLSchema(String xsdFileName, String namespace, String targetDirectory, String javaPackage, String prefix, int genOptions, String regenerateBuiltIn) + + protected static GenModel generateFromXMLSchema(String xsdFileName, + EPackage.Registry packageRegistry, + ExtendedMetaData extendedMetaData, + String targetDirectory, + Hashtable packageInfoTable, + int genOptions, + String regenerateBuiltIn, + boolean allNamespaces ) { + GenModel genModel = null; + DataObjectUtil.initRuntime(); - EPackage.Registry packageRegistry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE); - ExtendedMetaData extendedMetaData = new BasicExtendedMetaData(packageRegistry); XSDHelper xsdHelper = new XSDHelperImpl(extendedMetaData, regenerateBuiltIn); - try { File inputFile = new File(xsdFileName).getAbsoluteFile(); @@ -136,10 +184,27 @@ if (!packageRegistry.values().isEmpty()) { - String packageURI = namespace != null ? namespace : getSchemaNamespace(xsdFileName); - generatePackages(packageRegistry.values(), packageURI, null, targetDirectory, javaPackage, prefix, genOptions); + genModel = generatePackages(packageRegistry.values(), targetDirectory, packageInfoTable, genOptions, allNamespaces ); + // For now, this option is not supported + /* + if( (genModel != null) ) + { + if((extendedMetaData != null)) + { + // Display only, will report all namespaces and associated packages found + List genPackages = genModel.getGenPackages(); + for (Iterator iter = genPackages.iterator(); iter.hasNext();) + { + GenPackage genPackage = (GenPackage)iter.next(); + EPackage ecorePackage = genPackage.getEcorePackage(); + if( (genOptions & OPTION_DISPLAY_NAMESPACES) != 0) + System.out.println(extendedMetaData.getNamespace(ecorePackage)+";"+genPackage.getInterfacePackageName()+"."+ecorePackage.getName()); + } + } + } + */ } - + /* for (Iterator iter = packageRegistry.values().iterator(); iter.hasNext();) { @@ -157,6 +222,7 @@ { e.printStackTrace(); } + return genModel; } public static String getSchemaNamespace(String xsdFileName) @@ -175,6 +241,7 @@ System.out.println(" [ -javaPackage <java-package-name> ]"); System.out.println(" [ -prefix <prefix-string> ]"); System.out.println(" [ -schemaNamespace <namespace-uri> ]"); + System.out.println(" [ -namespaceInfo <namespaces-file> ]"); System.out.println(" [ -noInterfaces ]"); System.out.println(" [ -noContainment ]"); System.out.println(" [ -noNotification ]"); @@ -190,4 +257,208 @@ System.out.println(" generate somedir/somefile.xsd"); } + public void generateFromXMLSchema(String args[]) + { + try + { + processArguments(args); + EPackage.Registry packageRegistry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE); + ExtendedMetaData extendedMetaData = new BasicExtendedMetaData(packageRegistry); + String xsdFileName = args[inputIndex]; + String packageURI = getSchemaNamespace(xsdFileName); + Hashtable packageInfoTable = createPackageInfoTable(packageURI, schemaNamespace, javaPackage, prefix, namespaceInfo ); + GenModel genModel = generateFromXMLSchema(xsdFileName, packageRegistry, extendedMetaData, targetDirectory, packageInfoTable, genOptions, generateBuiltIn, allNamespaces); + generatedPackages = new GeneratedPackages(genModel,extendedMetaData); + } + catch (IllegalArgumentException e) + { + printUsage(); + } + } + + private static Hashtable createPackageInfoTable( String packageURI, String schemaNamespace, String javaPackage, String prefix, String namespaceInfo ) + { + Hashtable packageInfoTable = new Hashtable(); + + if( namespaceInfo != null ) + { + try + { + FileReader inputFile = new FileReader(namespaceInfo); + BufferedReader bufRead = new BufferedReader(inputFile); + + String line = bufRead.readLine(); + while( line != null ) + { + if( line.length() > 0 ) + { + String [] options = line.split(";"); + if( options.length > 1 ) + { + if( options.length > 2 ) + packageInfoTable.put(options[0], new PackageInfo(options[1], options[2], options[0], null )); + else + packageInfoTable.put(options[0], new PackageInfo(options[1], null, options[0], null )); + } + else + packageInfoTable.put(options[0], new PackageInfo(null, null, options[0], null )); + } + line = bufRead.readLine(); + } + } + catch (IOException e) + { + e.printStackTrace(); + } + } + else + { + if( schemaNamespace != null ) + packageInfoTable.put(schemaNamespace, new PackageInfo(javaPackage, prefix, schemaNamespace, null )); + else + packageInfoTable.put(packageURI, new PackageInfo(javaPackage, prefix, null, null )); + } + return packageInfoTable; + } + + public List getGeneratedPackageInfo() + { + if( generatedPackages != null ) + return generatedPackages.getPackageList(); + else + return null; + } + + protected class GeneratedPackages + { + private List genPackages = null; + + GeneratedPackages(GenModel genModel, ExtendedMetaData extendedMetaData) + { + 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 = (GenPackage)iter.next(); + List classes = genPackage.getGenClasses(); + for (Iterator classIter = classes.iterator(); classIter.hasNext();) + { + GenClass genClass = (GenClass)classIter.next(); + genClasses.put(genClass.getEcoreClass(), genClass); + } + } + genPackages = new ArrayList(); + for (Iterator iter = packages.iterator(); iter.hasNext();) + { + // now process the pckage list + GenPackage genPackage = (GenPackage)iter.next(); + genPackages.add(new GeneratedPackage(genPackage,extendedMetaData,genClasses)); + } + } + + List getPackageList() {return genPackages;} + } + + public class GeneratedPackage + { + private String namespace; + private List classes; + + public String getNamespace() {return namespace;} + public List getClasses() {return classes;} + + GeneratedPackage(GenPackage genPackage, ExtendedMetaData extendedMetaData, Hashtable eclassGenClassMap ) + { + classes = new ArrayList(); + + EPackage ePackage = genPackage.getEcorePackage(); + namespace = extendedMetaData.getNamespace(ePackage); + + List genClasses = genPackage.getGenClasses(); + for (Iterator iterClass = genClasses.iterator(); iterClass.hasNext();) + { + GenClass genClass = (GenClass)iterClass.next(); + if( !("DocumentRoot".equals(genClass.getInterfaceName()))) + { + String name = extendedMetaData.getName(genClass.getEcoreClass()); + String className = genPackage.getInterfacePackageName() + "." + genClass.getInterfaceName(); + classes.add( new PackageClassInfo( name, className, false, null ) ); + EClass documentRoot = extendedMetaData.getDocumentRoot(ePackage); + if( documentRoot != null ) + { + List rootElements = extendedMetaData.getElements(documentRoot); + for (Iterator iterRoot = rootElements.iterator(); iterRoot.hasNext();) + { + EStructuralFeature element = (EStructuralFeature)iterRoot.next(); + EClassifier elementType = element.getEType(); + if( elementType instanceof EClass ) + { + // complex type + EClass eClass = (EClass)elementType; + GenClass genEClass = (GenClass)eclassGenClassMap.get(elementType); + name = extendedMetaData.getName(element); + String interfaceName = genEClass.getGenPackage().getInterfacePackageName() + + '.' + genEClass.getInterfaceName(); + boolean anonymous = extendedMetaData.isAnonymous(eClass); + + // Build list of property class names + List propertyClassNames = new ArrayList(); + List properties = eClass.getEStructuralFeatures(); + for (Iterator iterProperties = properties.iterator(); iterProperties.hasNext();) + { + EStructuralFeature feature = (EStructuralFeature)iterProperties.next(); + EClassifier propertyType = feature.getEType(); + if (propertyType instanceof EClass) + { + GenClass propertyGenClass = (GenClass)eclassGenClassMap.get(propertyType); + if( propertyGenClass != null ) + { + String propertyClassName = propertyGenClass.getGenPackage().getInterfacePackageName() + '.' + + propertyGenClass.getInterfaceName(); + propertyClassNames.add(propertyClassName); + } + } + else if (propertyType instanceof EClassifier) + { + String propertyClassName = propertyType.getInstanceClass().getName(); + propertyClassNames.add(propertyClassName); + } + } + classes.add( new PackageClassInfo( name, interfaceName, anonymous, propertyClassNames ) ); + } + else + { + // simple type + name = extendedMetaData.getName(element); + className = elementType.getInstanceClass().getName(); + classes.add( new PackageClassInfo( name, className, false, null ) ); + } + } + } + } + } + } + + public class PackageClassInfo + { + private String name; + private String className = null; + private boolean anonymous = false; + private List properties = null; + + PackageClassInfo( String name, String className, boolean anonymous, List properties ) + { + this.name = name; + this.className = className; + this.anonymous = anonymous; + this.properties = properties; + } + + public String getName() {return name;} + public String getClassName() {return className;} + public boolean getAnonymous() {return anonymous;} + public List getProperties() {return properties;} + } + } } Modified: incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/templates/model/SDOFactoryClass.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/templates/model/SDOFactoryClass.java?view=diff&rev=543520&r1=543519&r2=543520 ============================================================================== --- incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/templates/model/SDOFactoryClass.java (original) +++ incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/templates/model/SDOFactoryClass.java Fri Jun 1 09:04:20 2007 @@ -139,7 +139,7 @@ protected final String TEXT_99 = ".NAMESPACE_URI);" + NL + "\t\t"; protected final String TEXT_100 = " the"; protected final String TEXT_101 = " = new "; - protected final String TEXT_102 = "();" + NL + "\t\tisInited = true;" + NL + "" + NL + "\t\t// Initialize simple dependencies"; + protected final String TEXT_102 = "();" + NL + "\t\tisInited = true;" + NL + "" + NL + "\t\t// Initialize dependencies"; protected final String TEXT_103 = NL + "\t\t"; protected final String TEXT_104 = ".registerStaticTypes("; protected final String TEXT_105 = ".class);"; @@ -623,7 +623,9 @@ stringBuffer.append(TEXT_101); stringBuffer.append(factoryType); stringBuffer.append(TEXT_102); - for (Iterator p=genPackage.getPackageSimpleDependencies().iterator(); p.hasNext();) { GenPackage dep = (GenPackage)p.next(); + HashSet packages = new HashSet(genPackage.getPackageSimpleDependencies()); + for (Iterator p=genPackage.getPackageInitializationDependencies().iterator(); p.hasNext();) { packages.add(p.next()); } + for (Iterator p=packages.iterator(); p.hasNext();) { GenPackage dep = (GenPackage)p.next(); stringBuffer.append(TEXT_103); stringBuffer.append(genModel.getImportedName("org.apache.tuscany.sdo.util.SDOUtil")); stringBuffer.append(TEXT_104); Modified: incubator/tuscany/java/sdo/tools/templates/models/SDOFactoryClass.javajet URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/tools/templates/models/SDOFactoryClass.javajet?view=diff&rev=543520&r1=543519&r2=543520 ============================================================================== --- incubator/tuscany/java/sdo/tools/templates/models/SDOFactoryClass.javajet (original) +++ incubator/tuscany/java/sdo/tools/templates/models/SDOFactoryClass.javajet Fri Jun 1 09:04:20 2007 @@ -258,8 +258,10 @@ <%=factoryType%> the<%=factoryType%> = new <%=factoryType%>(); isInited = true; - // Initialize simple dependencies - <%for (Iterator p=genPackage.getPackageSimpleDependencies().iterator(); p.hasNext();) { GenPackage dep = (GenPackage)p.next();%> + // Initialize dependencies + <%HashSet packages = new HashSet(genPackage.getPackageSimpleDependencies());%> + <%for (Iterator p=genPackage.getPackageInitializationDependencies().iterator(); p.hasNext();) { packages.add(p.next()); }%> + <%for (Iterator p=packages.iterator(); p.hasNext();) { GenPackage dep = (GenPackage)p.next();%> <%=genModel.getImportedName("org.apache.tuscany.sdo.util.SDOUtil")%>.registerStaticTypes(<%=dep.getImportedFactoryInterfaceName()%>.class); <%}%> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- Luciano Resende Apache Tuscany Committer http://people.apache.org/~lresende http://lresende.blogspot.com/ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
