You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ke...@apache.org on 2007/06/01 18:04:21 UTC
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/
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: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org