morten      01/07/12 04:32:37

  Modified:    java/src/org/apache/xalan/xsltc/runtime DefaultRun.java
  Added:       java/src/org/apache/xalan/xsltc/cmdline Compile.java
                        Transform.java
  Log:
  Extracted the command-line stuff from the core XSLTC packages. The command-
  line handling is now in xalan.xsltc.cmdline.Compile and
  xalan.xsltc.cmdline.Transform. The command-line stuff is still left in
  xalan.xsltc.compiler.XSLTC and xalan.xsltc.runtime.DefaultRun for backwards
  compatability. This should be removed shortly.
  PR:           n/a
  Obtained from:        n/a
  Submitted by: [EMAIL PROTECTED]
  Reviewed by:  [EMAIL PROTECTED]
  
  Revision  Changes    Path
  1.1                  
xml-xalan/java/src/org/apache/xalan/xsltc/cmdline/Compile.java
  
  Index: Compile.java
  ===================================================================
  /*
   * @(#)$Id: Compile.java,v 1.1 2001/07/12 11:32:26 morten Exp $
   *
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 2001, Sun
   * Microsystems., http://www.sun.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * @author Jacek Ambroziak
   * @author Santiago Pericas-Geertsen
   * @author G. Todd Miller
   * @author Morten Jorgensen
   *
   */
  
  package org.apache.xalan.xsltc.cmdline;
  
  import java.io.*;
  import java.util.Vector;
  import java.net.URL;
  
  import org.apache.xalan.xsltc.DOM;
  import org.apache.xalan.xsltc.Translet;
  import org.apache.xalan.xsltc.TransletOutputHandler;
  
  import org.apache.xalan.xsltc.compiler.XSLTC;
  import org.apache.xalan.xsltc.compiler.util.Util;
  import org.apache.xalan.xsltc.util.getopt.*;
  
  public final class Compile {
  
      private final static String USAGE_STRING =
        "Usage:\n" + 
        "   xsltc [-o <output>] [-d <directory>] [-j <jarfile>]\n"+
        "         [-p <package name>] [-x] [-u] <stylesheet>... \n\n"+
        "   Where <output> is the name to give the the generated translet.\n"+
        "         <stylesheet> is one or more stylesheet file names, or if,\n"+
        "         the -u options is specified, one or more stylesheet URLs.\n"+
        "         <directory> is the output directory.\n"+
        "         <jarfile> is the name of a JAR-file to put all generated 
classes in.\n"+
        "         <package-name> is a package name to prefix all class names 
with.\n\n"+
        "   Notes:\n"+
        "         The -o option is ignored when multiple stylesheets are 
specified.\n"+
        "         The -x option switched on debug messages.";
      
      public static void printUsage() {
        System.err.println(USAGE_STRING);
        System.exit(-1);
      }
  
      /** 
       * This method implements the command line compiler. See the USAGE_STRING
       * constant for a description. It may make sense to move the command-line
       * handling to a separate package (ie. make one xsltc.cmdline.Compiler
       * class that contains this main() method and one xsltc.cmdline.Transform
       * class that contains the DefaultRun stuff).
       */
      public static void main(String[] args) {
        try {
            boolean inputIsURL = false;
  
            final GetOpt getopt = new GetOpt(args, "o:d:j:p:uxhs");
            if (args.length < 1) printUsage();
  
            final XSLTC xsltc = new XSLTC();
            xsltc.init();
  
            int c;
            while ((c = getopt.getNextOption()) != -1) {
                switch(c) {
                case 'o':
                    xsltc.setClassName(getopt.getOptionArg());
                    break;
                case 'd':
                    xsltc.setDestDirectory(getopt.getOptionArg());
                    break;
                case 'p':
                    xsltc.setPackageName(getopt.getOptionArg());
                    break;
                case 'j':  
                    xsltc.setJarFileName(getopt.getOptionArg());
                    break;
                case 'x':
                    xsltc.setDebug(true);
                    break;
                case 'u':
                    inputIsURL = true;
                    break;
                case 'h':
                default:
                    printUsage();
                    break; 
                }
            }
  
            // Generate a vector containg URLs for all stylesheets specified
            final String[] stylesheetNames = getopt.getCmdArgs();
            final Vector   stylesheetVector = new Vector();
            for (int i = 0; i < stylesheetNames.length; i++) {
                final String stylesheetName = stylesheetNames[i];
                final URL    stylesheetURL;
                if (inputIsURL) {
                    stylesheetVector.addElement(new URL(stylesheetName));
                }
                else {
                    stylesheetVector.addElement((new 
File(stylesheetName)).toURL());
                }
  
            }
  
            // Compile the stylesheet and output class/jar file(s)
            if (xsltc.compile(stylesheetVector)) {
                if (xsltc.getJarFileName() != null) xsltc.outputToJar();
            }
            else {
                Util.println("compilation failed");
                System.exit(-1); return;
            }
        }
        catch (GetOptsException ex) {
            System.err.println(ex);
            printUsage();
        }
        catch (Exception e) {
            e.printStackTrace();
            System.exit(-1);
        }
      }
  
  }
  
  
  
  1.1                  
xml-xalan/java/src/org/apache/xalan/xsltc/cmdline/Transform.java
  
  Index: Transform.java
  ===================================================================
  /*
   * @(#)$Id: Transform.java,v 1.1 2001/07/12 11:32:27 morten Exp $
   *
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 2001, Sun
   * Microsystems., http://www.sun.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * @author Jacek Ambroziak
   * @author Santiago Pericas-Geertsen
   * @author G. Todd Miller
   * @author Morten Jorgensen
   *
   */
  
  package org.apache.xalan.xsltc.cmdline;
  
  import java.io.*;
  import java.io.InputStream;
  import java.net.MalformedURLException;
  import java.net.UnknownHostException;
  import java.util.Vector;
  
  import javax.xml.parsers.SAXParser;
  import javax.xml.parsers.SAXParserFactory;
  import javax.xml.parsers.ParserConfigurationException;
  
  import org.xml.sax.XMLReader;
  import org.xml.sax.SAXException;
  
  import org.apache.xalan.xsltc.DOM;
  import org.apache.xalan.xsltc.Translet;
  import org.apache.xalan.xsltc.TransletException;
  import org.apache.xalan.xsltc.TransletOutputHandler;
  
  import org.apache.xalan.xsltc.runtime.*;
  import org.apache.xalan.xsltc.dom.DOMImpl;
  import org.apache.xalan.xsltc.dom.Axis;
  import org.apache.xalan.xsltc.dom.DTDMonitor;
  
  final public class Transform {
  
      private static final String NAMESPACE_FEATURE =
        "http://xml.org/sax/features/namespaces";;
  
      private TransletOutputHandler _handler;
  
      private String  _fileName;
      private String  _className;
      private String  _jarFileSrc;
      private boolean _isJarFileSpecified = false;
      private Vector  _params = null;
      private boolean _uri, _debug;
  
      public Transform(String className, String fileName,
                     boolean uri, boolean debug) {
        _fileName = fileName;
        _className = className;
        _uri = uri;
        _debug = debug;
      }
  
      public void setParameters(Vector params) {
        _params = params;
      }
  
      private void setJarFileInputSrc(boolean flag,  String jarFile) {
        // TODO: at this time we do not do anything with this
        // information, attempts to add the jarfile to the CLASSPATH
        // were successful via System.setProperty, but the effects
        // were not visible to the running JVM. For now we add jarfile
        // to CLASSPATH in the wrapper script that calls this program. 
        _isJarFileSpecified = flag;
        // TODO verify jarFile exists...
        _jarFileSrc = jarFile;  
      }
  
      private void doTransform() {
        try {
            final Class clazz = Class.forName(_className);
            final Translet translet = (Translet)clazz.newInstance();
  
            // Create a SAX parser and get the XMLReader object it uses
            final SAXParserFactory factory = SAXParserFactory.newInstance();
            try {
                factory.setFeature(NAMESPACE_FEATURE,true);
            }
            catch (Exception e) {
                factory.setNamespaceAware(true);
            }
            final SAXParser parser = factory.newSAXParser();
            final XMLReader reader = parser.getXMLReader();
  
            // Set the DOM's DOM builder as the XMLReader's SAX2 content handler
            final DOMImpl dom = new DOMImpl();
            reader.setContentHandler(dom.getBuilder());
            // Create a DTD monitor and pass it to the XMLReader object
            final DTDMonitor dtdMonitor = new DTDMonitor();
            dtdMonitor.handleDTD(reader);
  
            AbstractTranslet _translet = (AbstractTranslet)translet;
            dom.setDocumentURI(_fileName);
            if (_uri)
                reader.parse(_fileName);
            else
                reader.parse("file:"+(new File(_fileName).getAbsolutePath()));
            
            // Set size of key/id indices
            _translet.setIndexSize(dom.getSize());
            // If there are any elements with ID attributes, build an index
            dtdMonitor.buildIdIndex(dom, 0, _translet);
  
            _translet.setDTDMonitor(dtdMonitor);
  
            // Pass global parameters
            int n = _params.size();
            for (int i = 0; i < n; i++) {
                Parameter param = (Parameter) _params.elementAt(i);
                translet.addParameter(param._name, param._value);
            }
  
            // Transform the document
            String encoding = translet.getOutputEncoding();
            if (encoding == null) encoding = "UTF-8";
  
            //TextOutput textOutput = new TextOutput(System.out, encoding);
            DefaultSAXOutputHandler saxHandler = new 
                DefaultSAXOutputHandler(System.out, encoding);
            TextOutput textOutput = new TextOutput(saxHandler, encoding);
            translet.transform(dom, textOutput);
  
            if (_debug) {
                TransletOutputBase handler = new TransletOutputBase();
                long start = System.currentTimeMillis();
                final int nTimes = 100;
                for (int i = 0; i < nTimes; i++)
                    translet.transform(dom, dom.getIterator(), handler);
                long end = System.currentTimeMillis();
                System.out.println("total " + (end - start) + " msec for " 
                                   + nTimes + " transformations");
                System.out.println(((double)end - start)/nTimes + " msec avg");
            }
        }
        catch (TransletException e) {
            System.err.println("\nTranslet Error: " + e.getMessage());
            if (_debug) {
                System.err.println(e.toString());
                e.printStackTrace();
            }
            System.exit(-1);        
        }
        catch (RuntimeException e) {
            System.err.println("\nRuntime Error: " + e.getMessage());
            if (_debug) {
                System.err.println(e.toString());
                e.printStackTrace();
            }
            System.exit(-1);
        }
        catch (FileNotFoundException e) {
            System.err.println("Error: File or URI '"+_fileName+"' not found.");
            System.exit(-1);
        }
        catch (MalformedURLException e) {
            System.err.println("Error: Invalid URI '"+_fileName+"'.");
            System.exit(-1);
        }
        catch (ClassNotFoundException e) {
            System.err.println("Error: Cannot find class '"+_className+"'.");
            System.exit(-1);
        }
          catch (UnknownHostException e) {
            System.err.println("Error: Can't resolve URI specification '"+ 
                               _fileName+"'.");
            System.exit(-1);
          }
        catch (Exception e) {
            e.printStackTrace();
            System.err.println("Error: internal error.");
            System.exit(-1);
        }
      }
  
      private final static String USAGE_STRING =
        "Usage: \n" +
        "     xslt [-j <jarfile>] {-u <document_url> | <document>} <class>\n"+
        "          [<name1>=<value1> ...]\n\n" +
        "           <document> is the xml document to be transformed, or\n" +
        "           <document_url> is a url for the xml document,\n" +
        "           <class> is the translet class which is either in\n" +
        "           user's CLASSPATH or in the <jarfile> specified \n" +
        "           with the -j option.\n" +
        "          also: [-x] (debug), [-s] (don't allow System.exit)"; 
  
      public static void printUsage() {
        System.err.println(USAGE_STRING);
        System.exit(-1);
      }
  
      public static void main(String[] args) {
        try {
            if (args.length > 0) {
                int i;
                boolean uri = false, debug = false;
                boolean isJarFileSpecified = false;
                String  jarFile = null;
  
                // Parse options starting with '-'
                for (i = 0; i < args.length && args[i].charAt(0) == '-'; i++) {
                    if (args[i].equals("-u")) {
                        uri = true;
                    }
                    else if (args[i].equals("-x")) {
                        debug = true;
                    }
                    else if (args[i].equals("-j")) {
                        isJarFileSpecified = true;      
                        jarFile = args[++i];
                    }
                    else {
                        printUsage();
                    }
                }
  
                // Enough arguments left ?
                if (args.length - i < 2) printUsage();
  
                // Get document file and class name
                Transform handler = new Transform(args[i+1],args[i],uri,debug);
                handler.setJarFileInputSrc(isJarFileSpecified,  jarFile);
  
                // Parse stylesheet parameters
                Vector params = new Vector();
                for (i += 2; i < args.length; i++) {
                    final int equal = args[i].indexOf('=');
                    if (equal > 0) {
                        final String name  = args[i].substring(0, equal);
                        final String value = args[i].substring(equal+1);
                        params.addElement(new Parameter(name, value));
                    }
                    else {
                        printUsage();
                    }
                }
  
                if (i == args.length) {
                    handler.setParameters(params);
                    handler.doTransform();
                    System.exit(0);
                }
            } else {
                printUsage();
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
      }
  }
  
  
  
  1.9       +5 -3      
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/DefaultRun.java
  
  Index: DefaultRun.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/DefaultRun.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- DefaultRun.java   2001/07/09 10:17:53     1.8
  +++ DefaultRun.java   2001/07/12 11:32:30     1.9
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: DefaultRun.java,v 1.8 2001/07/09 10:17:53 morten Exp $
  + * @(#)$Id: DefaultRun.java,v 1.9 2001/07/12 11:32:30 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -82,10 +82,12 @@
   import org.apache.xalan.xsltc.dom.DOMImpl;
   import org.apache.xalan.xsltc.dom.Axis;
   import org.apache.xalan.xsltc.dom.DTDMonitor;
  -import org.apache.xalan.xsltc.compiler.Constants;
   
   final public class DefaultRun {
   
  +    private static final String NAMESPACE_FEATURE =
  +     "http://xml.org/sax/features/namespaces";;
  +
       private TransletOutputHandler _handler;
   
       private String  _fileName;
  @@ -128,7 +130,7 @@
            // Create a SAX parser and get the XMLReader object it uses
            final SAXParserFactory factory = SAXParserFactory.newInstance();
            try {
  -             factory.setFeature(Constants.NAMESPACE_FEATURE,true);
  +             factory.setFeature(NAMESPACE_FEATURE, true);
            }
            catch (Exception e) {
                factory.setNamespaceAware(true);
  
  
  

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

Reply via email to