Modified: 
incubator/tuscany/java/sca/modules/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java?view=diff&rev=566432&r1=566431&r2=566432
==============================================================================
--- 
incubator/tuscany/java/sca/modules/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/wsdl2java/src/main/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGenerator.java
 Wed Aug 15 17:20:40 2007
@@ -18,8 +18,10 @@
  */
 package org.apache.tuscany.tools.wsdl2java.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;
@@ -32,8 +34,8 @@
 
 import javax.xml.namespace.QName;
 
+import org.apache.tuscany.sdo.generate.XSD2JavaGenerator;
 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.GenModel;
@@ -56,6 +58,14 @@
 import commonj.sdo.helper.XSDHelper;
 
 public class WSDL2JavaGenerator {
+    //Note: Dynamic SDO is defined as 0x4000 to avoid conflict with XSD2Java 
genOptions
+    static protected final int DYNAMIC_SDO = 0x1;
+    static protected final int GENERATE_SDO = 0x2;
+    static protected final int VERBOSE_MODE = 0x4;
+    static protected final String NO_GEN_PARM = "-noGenerate";
+    static protected final String TARGET_DIR_PARM = "-targetDirectory";
+    static protected final String JAVA_PACKAGE_PARM = "-javaPackage";
+    static protected final String ALL_NAMESPACES_PARM = "-schemaNamespace all";
 
     /**
      * Generate Java interfaces from WSDL Usage arguments: [ -targetDirectory
@@ -79,6 +89,9 @@
         String targetDirectory = null;
         String wsdlJavaPackage = null;
         String xsdJavaPackage = null;
+        String sdoGenArgs = null;
+        String sdoGenArgsString = null;
+        int genOptions = 0;
 
         int index = 0;
         for (; index < args.length && args[index].startsWith("-"); ++index) {
@@ -88,6 +101,14 @@
                 targetDirectory = args[++index];
             } else if (args[index].equalsIgnoreCase("-javaPackage")) {
                 wsdlJavaPackage = args[++index];
+            } else if (args[index].equalsIgnoreCase("-dynamicSDO")) {
+                genOptions |= DYNAMIC_SDO;
+            } else if (args[index].equalsIgnoreCase("-generateSDO")){
+                genOptions |= GENERATE_SDO;
+            } else if (args[index].equalsIgnoreCase("-sdoGenArgs")){
+                sdoGenArgs = args[++index];
+            } else if (args[index].equalsIgnoreCase("-verbose")){
+               genOptions |= VERBOSE_MODE; 
             }
             // else if (...)
             else {
@@ -95,35 +116,155 @@
                 return;
             }
         }
-
+        if (sdoGenArgs!=null && (GENERATE_SDO & genOptions)== 0){
+            genOptions |= GENERATE_SDO;
+        }
+        
+        if (targetDirectory == null) {
+            targetDirectory = ".";
+        }
         String wsdlFileName = args[index];
-        if (wsdlFileName == null || targetDirectory == null) {
+        if (wsdlFileName == null || ((DYNAMIC_SDO & genOptions)!=0 && 
(GENERATE_SDO & genOptions)!= 0)) {
             printUsage();
             return;
         }
-
-        generateFromWSDL(wsdlFileName, portName!=null? new 
String[]{portName}:null, targetDirectory, wsdlJavaPackage, xsdJavaPackage, 0);
-
+        if (sdoGenArgs !=null){
+            try {
+                    File inFile = new File(sdoGenArgs).getAbsoluteFile();
+                    FileReader inputFile = new FileReader(inFile);
+                    BufferedReader bufRead = new BufferedReader(inputFile);
+                    StringBuffer fileContents= new StringBuffer();
+                    String line;
+                    while ((line = bufRead.readLine())!=null){
+                        fileContents.append(line + " ");
+                    }
+                    sdoGenArgsString = fileContents.toString();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                    throw new IllegalArgumentException(e);
+                }
+        } else {
+                sdoGenArgsString = null;
+        }
+        
+        if ((DYNAMIC_SDO & genOptions) != 0){
+            generateDynamicFromWSDL(wsdlFileName, portName!=null? new 
String[]{portName}:null, targetDirectory, wsdlJavaPackage, xsdJavaPackage, 
genOptions);
+        } else {
+            generateFromWSDL(wsdlFileName, portName!=null? new 
String[]{portName}:null, targetDirectory, wsdlJavaPackage, genOptions, 
sdoGenArgsString);   
+        }
+        
+    }
+    
+    @SuppressWarnings("unchecked")
+    public static void generateFromWSDL(String wsdlFileName, String[] ports, 
String targetDirectory, String wsdlJavaPackage, int genOptions, String 
sdoGenArgsString)
+    {
+        try {        
+                if (targetDirectory == null) {
+                    targetDirectory = new 
File(wsdlFileName).getCanonicalFile().getParent();
+                } else {
+                    targetDirectory = new 
File(targetDirectory).getCanonicalPath();
+                }
+                          
+                // Populate the typeMapping table that will be given to the 
Axis2 WSDL2Java 
+                Map<QName, SDODataBindingTypeMappingEntry> typeMapping =
+                                        new HashMap<QName, 
SDODataBindingTypeMappingEntry>();
+                StringBuffer buildCommand = new StringBuffer();
+                //build XSD command lines
+                //build generic command for simple case & dynamic SDO
+                buildCommand.append(ALL_NAMESPACES_PARM);
+                if (sdoGenArgsString == null){
+                     buildCommand.append(" " + TARGET_DIR_PARM + " " + 
targetDirectory);
+                     if (wsdlJavaPackage != null && (genOptions & 
GENERATE_SDO)!=0){
+                         buildCommand.append(" " + JAVA_PACKAGE_PARM + " " + 
wsdlJavaPackage);
+                     }
+                     if ((genOptions & GENERATE_SDO)==0){
+                          buildCommand.append(" ");
+                          buildCommand.append(NO_GEN_PARM);        
+                     }
+                } else {
+                    buildCommand.append(" ");
+                    buildCommand.append(sdoGenArgsString);
+                }
+                buildCommand.append(" ");
+                buildCommand.append(wsdlFileName);
+                String[] sdoGenCommand = 
buildCommand.toString().split("\\s+");  
+                
+                if ((genOptions & VERBOSE_MODE)!=0){
+                        System.out.println("Options passed to XSD2Java: ");
+                        for (int i=0; i<sdoGenCommand.length; i++){ 
System.out.println("\"" + sdoGenCommand[i] + "\"");}        
+                }
+                
+                XSD2JavaGenerator codeGen = new XSD2JavaGenerator();
+                try {
+                        codeGen.generateFromXMLSchema( sdoGenCommand );  
+                } catch (IllegalArgumentException e) {
+                            System.out.println("Specified Invalid XSD2Java 
Arguments.\nFollow the XSD2Java usage, omitting the wsdl/xsd file argument.");
+                            throw new IllegalArgumentException(e);
+                }
+                                    
+                List packages = codeGen.getGeneratedPackageInfo();
+                     
+                for (Iterator iter = packages.iterator(); iter.hasNext();)
+                {
+                    XSD2JavaGenerator.GeneratedPackage packageInfo = 
(XSD2JavaGenerator.GeneratedPackage)iter.next();
+                    for (Iterator iterClass = 
packageInfo.getClasses().iterator(); iterClass.hasNext();)
+                    {
+                        XSD2JavaGenerator.GeneratedPackage.PackageClassInfo 
classInfo = 
(XSD2JavaGenerator.GeneratedPackage.PackageClassInfo)iterClass.next();
+                        SDODataBindingTypeMappingEntry typeMappingEntry;
+                        if ((genOptions & DYNAMIC_SDO)==0){
+                            typeMappingEntry = new 
SDODataBindingTypeMappingEntry(classInfo.getClassName(), 
classInfo.getAnonymous(), classInfo.getProperties());
+                        } else {
+                            // TO DO implement dynamic sdo case
+                            typeMappingEntry = null;
+                            System.out.println();
+                        }                              
+                        QName qname = new 
QName(packageInfo.getNamespace(),classInfo.getName());
+                        typeMapping.put(qname, typeMappingEntry);
+                    }          
+                }
+       
+                JavaInterfaceGenerator codeGenerator = new 
JavaInterfaceGenerator(wsdlFileName,
+                                                                               
   ports,
+                                                                               
   targetDirectory,
+                                                                               
   wsdlJavaPackage,
+                                                                               
   typeMapping);
+                codeGenerator.generate();
+        } catch (Exception e) {
+                e.printStackTrace();
+                throw new IllegalArgumentException(e);
+        }
     }
 
     @SuppressWarnings("unchecked")
     public static void generateFromWSDL(String wsdlFileName, String 
targetDirectory,
             String wsdlJavaPackage,
             String xsdJavaPackage, int genOptions){
-        generateFromWSDL( wsdlFileName, null, targetDirectory,
-                wsdlJavaPackage,
-                xsdJavaPackage, genOptions);
+        String sdoGenArgsString = null;
+        if (xsdJavaPackage != null){
+            sdoGenArgsString = JAVA_PACKAGE_PARM + " " + xsdJavaPackage;
+        }
+        generateFromWSDL( wsdlFileName, null, targetDirectory, 
wsdlJavaPackage, genOptions, sdoGenArgsString);
         
     }
     
+    public static void generateFromWSDL(String wsdlFileName, String[] ports,
+                    String targetDirectory, String wsdlJavaPackage,
+                    String xsdJavaPackage, int genOptions) {
+        String sdoGenArgsString = null;
+        if (xsdJavaPackage != null){
+           sdoGenArgsString = JAVA_PACKAGE_PARM + " " + xsdJavaPackage;
+        }
+        generateFromWSDL( wsdlFileName, null, targetDirectory, 
wsdlJavaPackage, genOptions, sdoGenArgsString);
+    }
     
     @SuppressWarnings("unchecked")
-      public static void generateFromWSDL(String wsdlFileName, String[] ports,
+      public static void generateDynamicFromWSDL(String wsdlFileName, String[] 
ports,
                  String targetDirectory, String wsdlJavaPackage,
                  String xsdJavaPackage, int genOptions) 
      {
 
         // Initialize the SDO runtime
+        DataObjectUtil.initRuntime();
         EPackage.Registry packageRegistry = new 
EPackageRegistryImpl(EPackage.Registry.INSTANCE);
         ExtendedMetaData extendedMetaData = new 
BasicExtendedMetaData(packageRegistry);
         HelperContext context = new HelperContextImpl(extendedMetaData, false);
@@ -176,8 +317,9 @@
                     for (GenClass genClass : 
(List<GenClass>)currentGenPackage.getGenClasses()) {
                         QName qname = new 
QName(extendedMetaData.getNamespace(currentEPackage),
                                                 
extendedMetaData.getName(genClass.getEcoreClass()));
-                        String interfaceName = 
currentGenPackage.getInterfacePackageName() + '.'
-                                               + genClass.getInterfaceName();
+                        String interfaceName = (DYNAMIC_SDO & genOptions) == 
DYNAMIC_SDO ? "commonj.sdo.DataObject" : currentGenPackage
+                                .getInterfacePackageName()
+                                + '.' + genClass.getInterfaceName();
                         SDODataBindingTypeMappingEntry typeMappingEntry =
                                 new 
SDODataBindingTypeMappingEntry(interfaceName, false, null);
                         typeMapping.put(qname, typeMappingEntry);
@@ -197,7 +339,8 @@
                                 GenClass genClass = 
genClasses.get(elementType);
                                 QName qname = new 
QName(extendedMetaData.getNamespace(currentEPackage),
                                         extendedMetaData.getName(element));
-                                String interfaceName = 
genClass.getGenPackage().getInterfacePackageName()
+                                String interfaceName = (DYNAMIC_SDO & 
genOptions) == DYNAMIC_SDO ? "commonj.sdo.DataObject" : genClass
+                                        
.getGenPackage().getInterfacePackageName()
                                 + '.' + genClass.getInterfaceName();
                                 boolean anonymous = 
extendedMetaData.isAnonymous(eClass);
                                 
@@ -207,7 +350,8 @@
                                     EClassifier propertyType = 
feature.getEType();
                                     if (propertyType instanceof EClass) {
                                         GenClass propertyGenClass = 
genClasses.get(propertyType);
-                                        String propertyClassName = 
propertyGenClass.getGenPackage().getInterfacePackageName()
+                                        String propertyClassName = 
(DYNAMIC_SDO & genOptions) == DYNAMIC_SDO ? "commonj.sdo.DataObject"
+                                                : 
propertyGenClass.getGenPackage().getInterfacePackageName() + '.'
                                                                + '.' + 
propertyGenClass.getInterfaceName();
                                         
propertyClassNames.add(propertyClassName);
                                     } else if (propertyType instanceof 
EClassifier) {
@@ -243,10 +387,12 @@
                                                                                
   typeMapping);
                 codeGenerator.generate();
             } catch (Exception e) {
+                e.printStackTrace();
                 throw new IllegalArgumentException(e);
             }
 
         } catch (IOException e) {
+                e.printStackTrace();
             throw new IllegalArgumentException(e);
         }
     }
@@ -327,6 +473,21 @@
         }
         return safeQualifiedName.toString();
     }
+    /*
+     * Converts myClassName to MyClassName
+     */
+    public static String normalizeClassName(String className) {
+
+        StringBuffer normalizedClassName = new StringBuffer();
+        
+        String beginPart = className.substring(0,1);
+        String endPart = className.substring(1);
+        
+        normalizedClassName.append(beginPart.toUpperCase());
+        normalizedClassName.append(endPart);
+
+        return normalizedClassName.toString();
+    }
 
     protected static void printDiagnostic(Diagnostic diagnostic, String 
indent) {
         System.out.print(indent);
@@ -340,11 +501,14 @@
         System.out.println("Usage arguments:");
         System.out.println("  [ -targetDirectory <target-root-directory> ]");
         System.out.println("  [ -javaPackage <java-package-name> ]");
+        System.out.println("  [ -dynamicSDO | -generateSDO [ -sdoGenArgs 
<command-file-name> ]]");
+        System.out.println("  [ -verbose ]");
         System.out.println("  <wsdl-file>");
         System.out.println("");
+        System.out.println("Where <command-file-name> is a text file 
containing valid XSD2Java command\narguments (w/o the wsdl/xsd file name)");
         System.out.println("For example:");
         System.out.println("");
-        System.out.println("  generate somedir/somefile.wsdl");
+        System.out.println("    WSDL2JavaGenerator -targetDirectory myDir 
somedir/somefile.wsdl");
     }
 
 

Modified: 
incubator/tuscany/java/sca/modules/wsdl2java/src/test/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGeneratorTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/wsdl2java/src/test/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGeneratorTestCase.java?view=diff&rev=566432&r1=566431&r2=566432
==============================================================================
--- 
incubator/tuscany/java/sca/modules/wsdl2java/src/test/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGeneratorTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/wsdl2java/src/test/java/org/apache/tuscany/tools/wsdl2java/generate/WSDL2JavaGeneratorTestCase.java
 Wed Aug 15 17:20:40 2007
@@ -32,7 +32,8 @@
             basedir =".";
         
         
-        String[] args=new String[] { "-targetDirectory", basedir + 
"/target/wsdl2java-source",
+        String[] args=new String[] { 
+                "-targetDirectory", basedir + "/target/wsdl2java-source",
                 "-javaPackage", 
"org.apache.tuscany.tools.wsdl2java.generate.account",
                 basedir + "/src/test/resources/AccountService.wsdl"};
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to