- /*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed 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.
- */
- /*
- * $Id: Compile.java,v 1.17 2004/02/16 21:07:51 minchau Exp $
- */
-
- package com.sun.org.apache.xalan.internal.xsltc.cmdline;
-
- import java.io.File;
- import java.net.URL;
- import java.util.Vector;
-
- import com.sun.org.apache.xalan.internal.xsltc.cmdline.getopt.GetOpt;
- import com.sun.org.apache.xalan.internal.xsltc.cmdline.getopt.GetOptsException;
- import com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC;
- import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
-
- /**
- * @author Jacek Ambroziak
- * @author Santiago Pericas-Geertsen
- * @author G. Todd Miller
- * @author Morten Jorgensen
- */
- public final class Compile {
-
- // Versioning numbers for the compiler -v option output
- private static int VERSION_MAJOR = 1;
- private static int VERSION_MINOR = 4;
- private static int VERSION_DELTA = 0;
-
-
- // This variable should be set to false to prevent any methods in this
- // class from calling System.exit(). As this is a command-line tool,
- // calling System.exit() is normally OK, but we also want to allow for
- // this class being used in other ways as well.
- private static boolean _allowExit = true;
-
- public static void printUsage() {
- StringBuffer vers = new StringBuffer("XSLTC version " +
- VERSION_MAJOR + "." + VERSION_MINOR +
- ((VERSION_DELTA > 0) ? ("."+VERSION_DELTA) : ("")));
- System.err.println(vers + "\n" +
- new ErrorMsg(ErrorMsg.COMPILE_USAGE_STR));
- if (_allowExit) 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;
- boolean useStdIn = false;
- boolean classNameSet = false;
- final GetOpt getopt = new GetOpt(args, "o:d:j:p:uxhsinv");
- if (args.length < 1) printUsage();
-
- final XSLTC xsltc = new XSLTC();
- xsltc.init();
-
- int c;
- while ((c = getopt.getNextOption()) != -1) {
- switch(c) {
- case 'i':
- useStdIn = true;
- break;
- case 'o':
- xsltc.setClassName(getopt.getOptionArg());
- classNameSet = true;
- 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 's':
- _allowExit = false;
- break;
- case 'n':
- xsltc.setTemplateInlining(true); // used to be 'false'
- break;
- case 'v':
- // fall through to case h
- case 'h':
- default:
- printUsage();
- break;
- }
- }
-
- boolean compileOK;
-
- if (useStdIn) {
- if (!classNameSet) {
- System.err.println(new ErrorMsg(ErrorMsg.COMPILE_STDIN_ERR));
- if (_allowExit) System.exit(-1);
- }
- compileOK = xsltc.compile(System.in, xsltc.getClassName());
- }
- else {
- // 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 name = stylesheetNames[i];
- URL url;
- if (inputIsURL)
- url = new URL(name);
- else
- url = (new File(name)).toURL();
- stylesheetVector.addElement(url);
- }
- compileOK = xsltc.compile(stylesheetVector);
- }
-
- // Compile the stylesheet and output class/jar file(s)
- if (compileOK) {
- xsltc.printWarnings();
- if (xsltc.getJarFileName() != null) xsltc.outputToJar();
- if (_allowExit) System.exit(0);
- }
- else {
- xsltc.printWarnings();
- xsltc.printErrors();
- if (_allowExit) System.exit(-1);
- }
- }
- catch (GetOptsException ex) {
- System.err.println(ex);
- printUsage(); // exits with code '-1'
- }
- catch (Exception e) {
- e.printStackTrace();
- if (_allowExit) System.exit(-1);
- }
- }
-
- }