diff options
Diffstat (limited to 'branches/sdo-1.1.1-incubating/tools/src/main/java/org/apache/tuscany/sdo/generate/XSD2JavaGenerator.java')
-rw-r--r-- | branches/sdo-1.1.1-incubating/tools/src/main/java/org/apache/tuscany/sdo/generate/XSD2JavaGenerator.java | 500 |
1 files changed, 0 insertions, 500 deletions
diff --git a/branches/sdo-1.1.1-incubating/tools/src/main/java/org/apache/tuscany/sdo/generate/XSD2JavaGenerator.java b/branches/sdo-1.1.1-incubating/tools/src/main/java/org/apache/tuscany/sdo/generate/XSD2JavaGenerator.java deleted file mode 100644 index 7e65549165..0000000000 --- a/branches/sdo-1.1.1-incubating/tools/src/main/java/org/apache/tuscany/sdo/generate/XSD2JavaGenerator.java +++ /dev/null @@ -1,500 +0,0 @@ -/** - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -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.HelperContextImpl; -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.GenFeature; -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; -import org.eclipse.emf.ecore.util.BasicExtendedMetaData; -import org.eclipse.emf.ecore.util.ExtendedMetaData; -import org.eclipse.xsd.XSDSchema; - -import commonj.sdo.helper.HelperContext; -import commonj.sdo.helper.XSDHelper; - -public class XSD2JavaGenerator extends JavaGenerator -{ - /** - * Generate static SDOs from XML Schema - * - * Usage arguments: see JavaGenerator - * - * [ -targetDirectory <target-root-directory> ] - * [ -javaPackage <java-package-name> ] - * [ -schemaNamespace <namespace-uri> ] - * [ -namespaceInfo <namespaces-file> ] - * [ other options ... ] - * <xsd-file> | <wsdl-file> - * - * Options: - * - * -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. 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. - * - * Example: - * - * generate somedir/somefile.xsd - * - * See base class JavaGenerator for details and the other options. - * - */ - public static void main(String args[]) - { - try - { - XSD2JavaGenerator generator = new XSD2JavaGenerator(); - generator.processArguments(args); - generator.run(args); - } - catch (Exception e) - { - e.printStackTrace(); - 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); - } - - return index + 1; - } - - protected void run(String args[]) - { - String xsdFileName = args[inputIndex]; - 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); - } - - /** - * This method was invoked by the SDO Mojo plugin - * - * @param xsdFileName - * @param namespace - * @param targetDirectory - * @param javaPackage - * @param prefix - * @param genOptions - */ - public static void generateFromXMLSchema(String xsdFileName, String namespace, String targetDirectory, String javaPackage, String prefix, int genOptions) - { - boolean allNamespaces = false; - - // Need to process the passed-in schemaNamespace value from Mojo plugin the same as the command line - if( "all".equalsIgnoreCase(namespace)) - { - namespace = null; - allNamespaces = true; - } - - 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, allNamespaces); - } - - - protected static GenModel generateFromXMLSchema(String xsdFileName, - EPackage.Registry packageRegistry, - ExtendedMetaData extendedMetaData, - String targetDirectory, - Hashtable packageInfoTable, - int genOptions, - String regenerateBuiltIn, - boolean allNamespaces ) - { - GenModel genModel = null; - - HelperContext hc = new HelperContextImpl(extendedMetaData, false); - XSDHelper xsdHelper = hc.getXSDHelper(); - ((XSDHelperImpl)xsdHelper).setRedefineBuiltIn(regenerateBuiltIn); - - try - { - File inputFile = new File(xsdFileName).getAbsoluteFile(); - InputStream inputStream = new FileInputStream(inputFile); - xsdHelper.define(inputStream, inputFile.toURI().toString()); - - if (targetDirectory == null) - { - targetDirectory = new File(xsdFileName).getCanonicalFile().getParent(); - } - else - { - targetDirectory = new File(targetDirectory).getCanonicalPath(); - } - - if (!packageRegistry.values().isEmpty()) - { - 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()); - } - } - } - */ - } else { - System.err.println("Input schema file " + xsdFileName + " defined no metadata."); - } - - /* - for (Iterator iter = packageRegistry.values().iterator(); iter.hasNext();) - { - EPackage ePackage = (EPackage)iter.next(); - String basePackage = extractBasePackageName(ePackage, javaPackage); - if (prefix == null) - { - prefix = CodeGenUtil.capName(ePackage.getName()); - } - generateFromEPackage(ePackage, targetDirectory, basePackage, prefix, genOptions); - } - */ - } - catch (IOException e) - { - e.printStackTrace(); - } - return genModel; - } - - public static String getSchemaNamespace(String xsdFileName) - { - ResourceSet resourceSet = DataObjectUtil.createResourceSet(); - File inputFile = new File(xsdFileName).getAbsoluteFile(); - Resource model = resourceSet.getResource(URI.createURI(inputFile.toURI().toString()), true); - XSDSchema schema = (XSDSchema)model.getContents().get(0); - String targetNS = schema.getTargetNamespace(); - if (targetNS == null) { - targetNS = schema.getSchemaLocation(); - } - - return targetNS; - } - - protected static void printUsage() - { - System.out.println("Usage arguments:"); - System.out.println(" [ -targetDirectory <target-root-directory> ]"); - 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 ]"); - System.out.println(" [ -noUnsettable ]"); - /* Future Option: System.out.println(" [ -sparsePattern | -storePattern ]"); */ - /* Future Option: System.out.println(" [ -arrayAccessors ]"); */ - /* Future Option: System.out.println(" [ -generateLoader ]"); */ - /* Future Option: System.out.println(" [ -interfaceDataObject ]"); */ - System.out.println(" <xsd-file> | <wsdl-file>"); - System.out.println(""); - System.out.println("For example:"); - System.out.println(""); - 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 if( packageURI != null ) - 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 Hashtable classes; - - public String getNamespace() {return namespace;} - public List getClasses() {return new ArrayList(classes.values());} - - GeneratedPackage(GenPackage genPackage, ExtendedMetaData extendedMetaData, Hashtable eclassGenClassMap ) - { - classes = new Hashtable(); - - 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.getEcoreClass().getName())) { - List features = genClass.getGenFeatures(); - for (Iterator iterFeatures = features.iterator(); iterFeatures.hasNext();) - { - GenFeature feature = (GenFeature)iterFeatures.next(); - addGlobalElement(feature.getEcoreFeature(),extendedMetaData, eclassGenClassMap); - } - } - } - } - - private void addGlobalElement(EStructuralFeature eFeature, ExtendedMetaData extendedMetaData, Hashtable eclassGenClassMap ) - { - - String name = eFeature.getName(); - String classname = ""; - boolean anonymous = false; - List propertyClassNames = null; - - EClassifier eClassifier = eFeature.getEType(); - - if( eClassifier instanceof EClass ) - { - // complex type - EClass eClass = (EClass)eClassifier; - GenClass genEClass = (GenClass)eclassGenClassMap.get(eClassifier); - if( genEClass != null ) - { - classname = genEClass.getGenPackage().getInterfacePackageName() - + '.' + genEClass.getInterfaceName(); - anonymous = extendedMetaData.isAnonymous(eClass); - - // Build list of property names - propertyClassNames = new ArrayList(); - List properties = eClass.getEStructuralFeatures(); - for (Iterator iterProperties = properties.iterator(); iterProperties.hasNext();) - { - EStructuralFeature property = (EStructuralFeature)iterProperties.next(); - EClassifier propertyType = property.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); - } - } - } - } - else - { - // simple type - classname = eClassifier.getInstanceClass().getName(); - } - classes.put( name, new PackageClassInfo( name, classname, anonymous, propertyClassNames ) ); - } - - 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;} - } - } -} |