Author: kpvdr
Date: Wed Nov 22 08:54:30 2006
New Revision: 478234

URL: http://svn.apache.org/viewvc?view=rev&rev=478234
Log:
Changes to allow gentools to be used from a makefile

Added:
    incubator/qpid/trunk/qpid/gentools/build   (with props)
Modified:
    incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/Main.java

Added: incubator/qpid/trunk/qpid/gentools/build
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/gentools/build?view=auto&rev=478234
==============================================================================
--- incubator/qpid/trunk/qpid/gentools/build (added)
+++ incubator/qpid/trunk/qpid/gentools/build Wed Nov 22 08:54:30 2006
@@ -0,0 +1,15 @@
+#!/bin/bash
+cd src
+echo "--------- Building gentools ----------"
+echo "Clearing out old build files..."
+for f in org/apache/qpid/gentools/*.class; do
+       if [ -e $f ]; then
+               rm $f
+    fi
+done
+echo "Compiling..."
+javac org/apache/qpid/gentools/*.java
+echo "Done. Try it out..."
+java org/apache/qpid/gentools/Main
+echo "--------- Building gentools completed ----------"
+cd ..

Propchange: incubator/qpid/trunk/qpid/gentools/build
------------------------------------------------------------------------------
    svn:executable = *

Modified: 
incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/Main.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/Main.java?view=diff&rev=478234&r1=478233&r2=478234
==============================================================================
--- incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/Main.java 
(original)
+++ incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/Main.java 
Wed Nov 22 08:54:30 2006
@@ -23,6 +23,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -34,17 +35,31 @@
 
 public class Main
 {
+    private static final String defaultOutDir = ".." + Utils.fileSeparator + 
"gen";
+    private static final String defaultCppTemplateDir = ".." + 
Utils.fileSeparator + "templ.cpp";
+    private static final String defaultJavaTemplateDir = ".." + 
Utils.fileSeparator + "templ.java";
+    
        private DocumentBuilder docBuilder;
        private AmqpVersionSet versionSet;
        private Generator generator;
     private AmqpConstantSet constants;
        private AmqpDomainMap domainMap;
        private AmqpModel model;
+    
+    private String outDir;
+    private String tmplDir;
+    private boolean javaFlag;
+    private ArrayList<String> xmlFiles;
+    private File[] modelTemplateFiles;
+    private File[] classTemplateFiles;
+    private File[] methodTemplateFiles;
+    private File[] fieldTemplateFiles;
        
        public Main() throws ParserConfigurationException
        {
                docBuilder = 
DocumentBuilderFactory.newInstance().newDocumentBuilder();
                versionSet = new AmqpVersionSet();
+        xmlFiles = new ArrayList<String>();
        }
        
        public void run(String[] args)
@@ -57,117 +72,28 @@
                                IllegalAccessException,
                        InvocationTargetException
        {
-               File[] modelTemplateFiles = new File[]{};
-               File[] classTemplateFiles = new File[]{};
-               File[] methodTemplateFiles = new File[]{};
-               File[] fieldTemplateFiles = new File[]{};
-               String outDir = "out";
-               
-               if (args[0].compareToIgnoreCase("-c") == 0)
-               {
-                       // *** C++ generation ***
-                       System.out.println("C++ generation mode.");
-                       generator = new CppGenerator(versionSet);
-            constants = new AmqpConstantSet(generator);
-                       domainMap = new AmqpDomainMap(generator);
-                       model = new AmqpModel(generator);                       
-                       modelTemplateFiles = new File[]
-                       {
-                               new 
File("templ.cpp/AMQP_ServerOperations.h.tmpl"),
-                               new 
File("templ.cpp/AMQP_ClientOperations.h.tmpl"),
-                               new File("templ.cpp/AMQP_ServerProxy.h.tmpl"),
-                               new File("templ.cpp/AMQP_ClientProxy.h.tmpl"),
-                               new File("templ.cpp/AMQP_ServerProxy.cpp.tmpl"),
-                               new File("templ.cpp/AMQP_ClientProxy.cpp.tmpl"),
-                new File("templ.cpp/AMQP_Constants.h.tmpl"),
-                               new 
File("templ.cpp/AMQP_MethodVersionMap.h.tmpl"),
-                               new 
File("templ.cpp/AMQP_MethodVersionMap.cpp.tmpl")
-                       };
-                       methodTemplateFiles = new File[]
-                       {
-                               new File("templ.cpp/MethodBodyClass.h.tmpl")
-                       };
-                       outDir += ".cpp";
-               }
-               else if (args[0].compareToIgnoreCase("-j") == 0)
-               {
-                       // *** Java generation ***
-                       System.out.println("Java generation mode.");
-                       generator = new JavaGenerator(versionSet);
-            constants = new AmqpConstantSet(generator);
-                       domainMap = new AmqpDomainMap(generator);
-                       model = new AmqpModel(generator);               
-                       modelTemplateFiles = new File[]
-                       {
-                new File("templ.java/MethodRegistryClass.tmpl"),
-                new File("templ.java/AmqpConstantsClass.tmpl")
-            };
-                       classTemplateFiles = new File[]
-                       {
-                new File("templ.java/PropertyContentHeaderClass.tmpl")
-            };
-                       methodTemplateFiles = new File[]
-                       {
-                new File("templ.java/MethodBodyClass.tmpl")
-            };
-                       outDir += ".java";
-               }
-               else
-               {
-                       System.err.println("ERROR: Required argument specifying 
language (C++ [-c] or Java [-j]) missing.");
-                       usage();                
-               }
+               modelTemplateFiles = new File[]{};
+               classTemplateFiles = new File[]{};
+               methodTemplateFiles = new File[]{};
+               fieldTemplateFiles = new File[]{};
+        
+        // 0. Initialize
+        outDir = defaultOutDir;
+        tmplDir = null;
+        javaFlag = true;
+        xmlFiles.clear();
+        processArgs(args);
+               if (javaFlag)
+            prepareJava();
+        else
+            prepareCpp();
 
                if (modelTemplateFiles.length == 0 && classTemplateFiles.length 
== 0 &&
                        methodTemplateFiles.length == 0 && 
fieldTemplateFiles.length == 0)
                        System.err.println("  WARNING: No template files.");
                
-               
-               // 1. Suck in all the XML spec files provided on the command 
line.
-               System.out.println("Analyzing XML Specification files:");
-               for (int i=1; i<args.length; i++)
-               {
-                       File f = new File(args[i]);
-                       if (f.exists())
-                       {
-                               // 1a. Initialize dom
-                               System.out.print("  \"" + args[i] + "\":");
-                               Document doc = docBuilder.parse(new 
File(args[i]));
-                               Node amqpNode = Utils.findChild(doc, 
Utils.ELEMENT_AMQP);
-                               
-                               // 1b. Extract version (major and minor) from 
the XML file
-                               int major = 
Utils.getNamedIntegerAttribute(amqpNode, Utils.ATTRIBUTE_MAJOR);
-                               int minor = 
Utils.getNamedIntegerAttribute(amqpNode, Utils.ATTRIBUTE_MINOR);
-                               AmqpVersion version = new AmqpVersion(major, 
minor);
-                               System.out.println(" Found version " + 
version.toString() + ".");
-                               versionSet.add(version);
-                               
-                               // 1c. Extract domains
-                               constants.addFromNode(amqpNode, 0, version);
-                
-                // 1d. Extract domains
-                domainMap.addFromNode(amqpNode, 0, version);
-                               
-                               // 1e. Extract class/method/field heirarchy
-                               model.addFromNode(amqpNode, 0, version);
-                       }
-                       else
-                               System.err.println("ERROR: AMQP XML file \"" + 
args[i] + "\" not found.");
-               }
-// *** DEBUG INFO ***  Uncomment bits from this block to see lots of stuff....
-//             System.out.println();
-//             System.out.println("*** Debug output ***");
-//             System.out.println();
-//             versionSet.print(System.out, 0, 2);
-//             System.out.println();
-//             constants.print(System.out, 0, 2);
-//             System.out.println();
-//             domainMap.print(System.out, 0, 2);
-//             System.out.println();
-//             model.print(System.out, 0, 2);
-//             System.out.println();
-//             System.out.println("*** End debug output ***");
-//             System.out.println();
+               // 1. Suck in all the XML spec files provided on the command 
line
+        analyzeXML();
                
                // 2. Load up all templates
                generator.initializeTemplates(modelTemplateFiles, 
classTemplateFiles,
@@ -180,6 +106,148 @@
                System.out.println("Done.");
        }
 
+    private void processArgs(String[] args)
+    {
+        // Crude but simple...
+        for (int i=0; i<args.length; i++)
+        {
+            String arg = args[i];
+            if (arg.charAt(0) == '-')
+            {
+                switch (arg.charAt(1))
+                {
+                    case 'c':
+                    case 'C':
+                        javaFlag = false;
+                        break;
+                    case 'j':
+                    case 'J':
+                        javaFlag = true;
+                        break;
+                    case 'o':
+                    case 'O':
+                        if (++i < args.length)
+                        {
+                            outDir = args[i];
+                        }
+                       break;
+                    case 't':
+                    case 'T':
+                        if (++i < args.length)
+                        {
+                            tmplDir = args[i];
+                        }
+                        break;
+                }
+            }
+            else
+            {
+                xmlFiles.add(args[i]);
+            }
+        }
+    }
+    
+    private void prepareJava()
+    {
+        if (tmplDir == null)
+            tmplDir = defaultJavaTemplateDir;
+        System.out.println("Java generation mode.");
+        generator = new JavaGenerator(versionSet);
+        constants = new AmqpConstantSet(generator);
+        domainMap = new AmqpDomainMap(generator);
+        model = new AmqpModel(generator);       
+        modelTemplateFiles = new File[]
+        {
+            new File(tmplDir + Utils.fileSeparator + 
"MethodRegistryClass.tmpl"),
+            new File(tmplDir + Utils.fileSeparator + "AmqpConstantsClass.tmpl")
+        };
+        classTemplateFiles = new File[]
+        {
+            new File(tmplDir + Utils.fileSeparator + 
"PropertyContentHeaderClass.tmpl")
+        };
+        methodTemplateFiles = new File[]
+        {
+            new File(tmplDir + Utils.fileSeparator + "MethodBodyClass.tmpl")
+        };
+    }
+    
+    private void prepareCpp()
+    {
+        if (tmplDir == null)
+            tmplDir = defaultCppTemplateDir;
+        System.out.println("C++ generation mode.");
+        generator = new CppGenerator(versionSet);
+        constants = new AmqpConstantSet(generator);
+        domainMap = new AmqpDomainMap(generator);
+        model = new AmqpModel(generator);           
+        modelTemplateFiles = new File[]
+        {
+            new File(tmplDir + Utils.fileSeparator + 
"AMQP_ServerOperations.h.tmpl"),
+            new File(tmplDir + Utils.fileSeparator + 
"AMQP_ClientOperations.h.tmpl"),
+            new File(tmplDir + Utils.fileSeparator + 
"AMQP_ServerProxy.h.tmpl"),
+            new File(tmplDir + Utils.fileSeparator + 
"AMQP_ClientProxy.h.tmpl"),
+            new File(tmplDir + Utils.fileSeparator + 
"AMQP_ServerProxy.cpp.tmpl"),
+            new File(tmplDir + Utils.fileSeparator + 
"AMQP_ClientProxy.cpp.tmpl"),
+            new File(tmplDir + Utils.fileSeparator + "AMQP_Constants.h.tmpl"),
+            new File(tmplDir + Utils.fileSeparator + 
"AMQP_MethodVersionMap.h.tmpl"),
+            new File(tmplDir + Utils.fileSeparator + 
"AMQP_MethodVersionMap.cpp.tmpl")
+        };
+        methodTemplateFiles = new File[]
+        {
+            new File(tmplDir + Utils.fileSeparator + "MethodBodyClass.h.tmpl")
+        };        
+    }
+
+    private void analyzeXML()
+        throws IOException, SAXException, AmqpParseException, 
AmqpTypeMappingException
+    {
+        System.out.println("XML files: " + xmlFiles);
+        for (int i=0; i<xmlFiles.size(); i++)
+        {
+            String filename = xmlFiles.get(i);
+            File f = new File(filename);
+            if (f.exists())
+            {
+                // 1a. Initialize dom
+                System.out.print("  \"" + filename + "\":");
+                Document doc = docBuilder.parse(new File(filename));
+                Node amqpNode = Utils.findChild(doc, Utils.ELEMENT_AMQP);
+                
+                // 1b. Extract version (major and minor) from the XML file
+                int major = Utils.getNamedIntegerAttribute(amqpNode, 
Utils.ATTRIBUTE_MAJOR);
+                int minor = Utils.getNamedIntegerAttribute(amqpNode, 
Utils.ATTRIBUTE_MINOR);
+                AmqpVersion version = new AmqpVersion(major, minor);
+                System.out.println(" Found version " + version.toString() + 
".");
+                versionSet.add(version);
+                
+                // 1c. Extract domains
+                constants.addFromNode(amqpNode, 0, version);
+                
+                // 1d. Extract domains
+                domainMap.addFromNode(amqpNode, 0, version);
+                
+                // 1e. Extract class/method/field heirarchy
+                model.addFromNode(amqpNode, 0, version);
+            }
+            else
+                System.err.println("ERROR: AMQP XML file \"" + filename + "\" 
not found.");
+        }
+// *** DEBUG INFO ***  Uncomment bits from this block to see lots of stuff....
+//      System.out.println();
+//      System.out.println("*** Debug output ***");
+//      System.out.println();
+//      versionSet.print(System.out, 0, 2);
+//      System.out.println();
+//      constants.print(System.out, 0, 2);
+//      System.out.println();
+//      domainMap.print(System.out, 0, 2);
+//      System.out.println();
+//      model.print(System.out, 0, 2);
+//      System.out.println();
+//      System.out.println("*** End debug output ***");
+//      System.out.println();        
+    }
+    
        public static void main(String[] args)
        {
                if (args.length < 2)
@@ -199,10 +267,14 @@
        public static void usage()
        {
                System.out.println("AMQP XML generator v.0.0");
-               System.out.println("Usage: Main -c|-j filename [filename ...]");
-               System.out.println("       where -c flags C++ generation.");
-               System.out.println("             -j flags Java generation.");
-               System.out.println("             filename is a space-separated 
list of files to be parsed.");
+               System.out.println("Usage: Main -c|-j [-o outDir] [-t tmplDir] 
XMLfile [XMLfile ...]");
+               System.out.println("       where -c:         Generate C++.");
+               System.out.println("             -j:         Generate Java.");
+        System.out.println("             -o outDir:  Use outDir as the output 
dir (default=\"" + defaultOutDir + "\").");
+        System.out.println("             -t tmplDir: Find templates in 
tmplDir.");
+        System.out.println("                         Defaults: \"" + 
defaultCppTemplateDir + "\" for C++;");
+        System.out.println("                                   \"" + 
defaultJavaTemplateDir + "\" for java.");
+               System.out.println("             XMLfile is a space-separated 
list of AMQP XML files to be parsed.");
                System.exit(0);
        }
        


Reply via email to