You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2006/02/23 00:20:01 UTC
svn commit: r379972 -
/incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/JavaGenerator.java
Author: jsdelfino
Date: Wed Feb 22 15:19:56 2006
New Revision: 379972
URL: http://svn.apache.org/viewcvs?rev=379972&view=rev
Log:
added support for code generation from XSDs referencing multiple namespaces
Modified:
incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/JavaGenerator.java
Modified: incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/JavaGenerator.java
URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sdo/tools/src/main/java/org/apache/tuscany/sdo/generate/JavaGenerator.java?rev=379972&r1=379971&r2=379972&view=diff
==============================================================================
--- 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 Wed Feb 22 15:19:56 2006
@@ -21,8 +21,10 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
import java.util.StringTokenizer;
import org.apache.tuscany.sdo.helper.XSDHelperImpl;
@@ -45,6 +47,8 @@
import org.eclipse.emf.ecore.util.BasicExtendedMetaData;
import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.ecore.util.ExtendedMetaData;
+import org.eclipse.xsd.XSDSchema;
+import org.eclipse.xsd.util.XSDResourceImpl;
import commonj.sdo.helper.XSDHelper;
@@ -227,7 +231,11 @@
public static void generateFromXMLSchema(String xsdFileName, String targetDirectory, String javaPackage, String prefix, int genOptions)
{
DataObjectUtil.initRuntime();
- EPackage.Registry packageRegistry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE);
+ EPackage.Registry packageRegistry = new EPackageRegistryImpl(EPackage.Registry.INSTANCE)
+ {
+ public EPackage firstPackage = null;
+
+ };
ExtendedMetaData extendedMetaData = new BasicExtendedMetaData(packageRegistry);
XSDHelper xsdHelper = new XSDHelperImpl(extendedMetaData);
@@ -246,6 +254,36 @@
targetDirectory = new File(targetDirectory).getCanonicalPath();
}
+ if (!packageRegistry.values().isEmpty())
+ {
+ String packageURI = getSchemaNamespace(xsdFileName);
+ ResourceSet resourceSet = DataObjectUtil.createResourceSet();
+
+ List usedGenPackages = new ArrayList();
+ GenModel genModel = null;
+
+ for (Iterator iter = packageRegistry.values().iterator(); iter.hasNext();)
+ {
+ EPackage currentEPackage = (EPackage)iter.next();
+ String currentBasePackage = extractBasePackageName(currentEPackage, javaPackage);
+ String currentPrefix = prefix == null ? CodeGenUtil.capName(currentEPackage.getName()) : prefix;
+
+ GenPackage currentGenPackage = createGenPackage(currentEPackage, currentBasePackage, currentPrefix, genOptions, resourceSet);
+ if (currentEPackage.getNsURI().equals(packageURI))
+ {
+ genModel = currentGenPackage.getGenModel();
+ }
+ else
+ {
+ usedGenPackages.add(currentGenPackage);
+ }
+ }
+
+ genModel.getUsedGenPackages().addAll(usedGenPackages);
+ generateFromGenModel(genModel, targetDirectory);
+ }
+
+ /*
for (Iterator iter = packageRegistry.values().iterator(); iter.hasNext();)
{
EPackage ePackage = (EPackage)iter.next();
@@ -256,11 +294,43 @@
}
generateFromEPackage(ePackage, targetDirectory, basePackage, prefix, genOptions);
}
+ */
}
catch (IOException e)
{
e.printStackTrace();
}
+ }
+
+ public static String getSchemaNamespace(String xsdFileName)
+ {
+ File inputFile = new File(xsdFileName).getAbsoluteFile();
+ ResourceSet resourceSet = DataObjectUtil.createResourceSet();
+ Resource model = resourceSet.createResource(URI.createURI(inputFile.toURI().toString()));
+ try {
+ InputStream inputStream = new FileInputStream(inputFile);
+ ((XSDResourceImpl)model).load(inputStream, null);
+ }
+ catch (Exception e) {}
+ XSDSchema schema = (XSDSchema)model.getContents().get(0);
+ return schema.getTargetNamespace();
+
+ }
+
+ public static GenPackage createGenPackage(EPackage ePackage, String basePackage, String prefix, int genOptions, ResourceSet resourceSet)
+ {
+ GenModel genModel = ecore2GenModel(ePackage, basePackage, prefix, genOptions);
+
+ 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 (GenPackage)genModel.getGenPackages().get(0);
}
public static void generateFromEPackage(EPackage ePackage, String targetDirectory, String basePackage, String prefix, int genOptions)