| /************************************************************************ |
| * |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER |
| * |
| * Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved. |
| * |
| * Use is subject to license terms. |
| * |
| * 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. You can also |
| * obtain a copy of the License at http://odftoolkit.org/docs/license.txt |
| * |
| * 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.odftoolkit.odfxsltrunner; |
| |
| import java.io.FileNotFoundException; |
| import java.io.PrintStream; |
| import java.util.Arrays; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Vector; |
| |
| /** |
| * This application applies an XSLT style sheet to an ODF file. To run this application from the command line without Ant, try: |
| * java -jar "[path/]odfxsltrunner.jar". |
| */ |
| public class Main { |
| |
| private static final String VERSION="1.1.0"; |
| |
| /** Creates a new instance of Main */ |
| public Main() { |
| } |
| |
| /** |
| * @param aArgs the command line arguments |
| */ |
| public static void main(String[] aArgs) { |
| |
| String aStyleSheetName = null; |
| String aInputName = null; |
| String aOutputName = null; |
| String aPath = "content.xml"; |
| String aLogFileName = null; |
| String aTransformerFactoryClass = null; |
| int aInputMode = ODFXSLTRunner.INPUT_MODE_PACKAGE; |
| int aOutputMode = ODFXSLTRunner.OUTPUT_MODE_COPY_INPUT_PACKAGE; |
| Vector<XSLTParameter> aParams = null; |
| Vector<String> aExtractFileNames = null; |
| int nLogLevel = CommandLineLogger.ERROR; |
| |
| boolean bCommandLineValid = true; |
| List<String> aArgList = Arrays.asList(aArgs); |
| Iterator<String> aArgIter = aArgList.iterator(); |
| while( aArgIter.hasNext() && bCommandLineValid ) |
| { |
| String aArg = aArgIter.next(); |
| if( aArg.equals("-f") ) |
| { |
| if( aArgIter.hasNext() ) |
| aTransformerFactoryClass = aArgIter.next(); |
| else |
| bCommandLineValid = false; |
| } |
| else if( aArg.equals("-i") ) |
| { |
| aInputMode = ODFXSLTRunner.INPUT_MODE_FILE; |
| } |
| else if( aArg.equals("-l") ) |
| { |
| if( aArgIter.hasNext() ) |
| aLogFileName = aArgIter.next(); |
| else |
| bCommandLineValid = false; |
| } |
| else if( aArg.equals("-o") ) |
| { |
| if( aOutputMode == ODFXSLTRunner.OUTPUT_MODE_COPY_INPUT_PACKAGE ) |
| aOutputMode = ODFXSLTRunner.OUTPUT_MODE_FILE; |
| else |
| bCommandLineValid = false; |
| } |
| else if( aArg.equals("-p") ) |
| { |
| if( aArgIter.hasNext() ) |
| aPath = aArgIter.next(); |
| else |
| bCommandLineValid = false; |
| } |
| else if( aArg.equals("-r") ) |
| { |
| if( aOutputMode == ODFXSLTRunner.OUTPUT_MODE_COPY_INPUT_PACKAGE ) |
| aOutputMode = ODFXSLTRunner.OUTPUT_MODE_REPLACE_INPUT_PACKAGE; |
| else |
| bCommandLineValid = false; |
| } |
| else if( aArg.equals("-t") ) |
| { |
| if( aOutputMode == ODFXSLTRunner.OUTPUT_MODE_COPY_INPUT_PACKAGE ) |
| aOutputMode = ODFXSLTRunner.OUTPUT_MODE_TEMPLATE_PACKAGE; |
| else |
| bCommandLineValid = false; |
| } |
| else if( aArg.equals("-v") ) |
| { |
| nLogLevel = CommandLineLogger.INFO; |
| } |
| else if( aArg.equals("-x") ) |
| { |
| if( aArgIter.hasNext() ) |
| { |
| if( aExtractFileNames == null ) |
| aExtractFileNames = new Vector<String>(); |
| aExtractFileNames.add( aArgIter.next() ); |
| } |
| else |
| bCommandLineValid = false; |
| } |
| else if( aArg.startsWith("-") ) |
| { |
| System.out.print(aArg); |
| System.out.println(": unknown option, use '-' for help"); |
| bCommandLineValid = false; |
| break; |
| } |
| else if( aStyleSheetName == null ) |
| { |
| aStyleSheetName = aArg; |
| } |
| else if( aInputName == null ) |
| { |
| aInputName = aArg; |
| } |
| else if( aOutputMode != ODFXSLTRunner.OUTPUT_MODE_REPLACE_INPUT_PACKAGE && aOutputName == null ) |
| { |
| aOutputName = aArg; |
| } |
| else if( aArg.indexOf('=') != -1 ) |
| { |
| if( aParams == null ) |
| aParams = new Vector<XSLTParameter>(); |
| aParams.add(new XSLTCommandLineParameter(aArg) ); |
| } |
| else |
| { |
| bCommandLineValid = false; |
| break; |
| } |
| } |
| |
| if( aOutputMode == ODFXSLTRunner.OUTPUT_MODE_COPY_INPUT_PACKAGE && |
| aOutputName == null ) |
| aOutputMode = ODFXSLTRunner.OUTPUT_MODE_STDOUT; |
| |
| // check usage |
| bCommandLineValid = aInputName != null && aStyleSheetName != null; |
| bCommandLineValid = bCommandLineValid && |
| !(aOutputMode == ODFXSLTRunner.OUTPUT_MODE_REPLACE_INPUT_PACKAGE || aOutputMode == ODFXSLTRunner.OUTPUT_MODE_STDOUT) == (aOutputName != null); |
| |
| // print help |
| if( !bCommandLineValid ) |
| { |
| printUsage(); |
| return; |
| } |
| |
| PrintStream aLogStream = null; |
| if( aLogFileName != null ) |
| { |
| try |
| { |
| aLogStream = new PrintStream( aLogFileName ); |
| } |
| catch( FileNotFoundException e ) |
| { |
| System.err.println(e.getMessage()); |
| } |
| } |
| |
| boolean bError = false; |
| try |
| { |
| ODFXSLTRunner aRunner = new ODFXSLTRunner(); |
| Logger aLogger = new CommandLineLogger( aLogStream!=null ? aLogStream : System.err, nLogLevel ); |
| bError = aRunner.runXSLT( aStyleSheetName, aParams, aInputName, aInputMode, aOutputName, aOutputMode, aPath, aTransformerFactoryClass, aExtractFileNames, aLogger ); |
| } |
| catch( Exception e ) |
| { |
| System.err.println(e.getMessage()); |
| } |
| // if( bError ) |
| // System.err.println("transformation failed"); |
| |
| if( aLogStream != null ) |
| aLogStream.close(); |
| } |
| |
| private static void printUsage() |
| { |
| System.out.print("odfxsltrunner v"); |
| System.out.println( VERSION ); |
| System.out.println(); |
| System.out.println( "usage: odfxsltrunner <style sheet> [-v] [-f <factory>] [-p <path in package>] [-l log file] [-t] <input package> <output package> {<param>=<value>}"); |
| System.out.println( " odfxsltrunner <style sheet> [-v] [-f <factory>] [-p <path in package>] [-l log file] -r <package> {<param>=<value>}"); |
| System.out.println( " odfxsltrunner <style sheet> [-v] [-f <factory>] {-x <export path>} [-p <path in package>] [-l log file] -o <input package> <output file> {<param>=<value>}"); |
| System.out.println( " odfxsltrunner <style sheet> [-v] [-f <factory>] [-p <path in package>] [-l log file] -i <input file> <output package> {<param>=<value>}"); |
| System.out.println(); |
| System.out.println( "If no option except -p is specified, the transformation <style sheet> is applied to the file <path in package> contained in the ODF package <input package>, <path in package> is replaced with the result of the transformation, and the full package is stored as <output package>." ); |
| System.out.println(); |
| System.out.println( "-t: Store result of transformation in the file <path in package> of existing an existing ODF package <output package>" ); |
| System.out.println( "-r: Don't store result as a new ODF package but replace input ODF package <package>" ); |
| System.out.println( "-i: Input file <input file> is a plain XML file" ); |
| System.out.println( "-o: Store result of tranformation as plain XML file in <output file>" ); |
| System.out.println(); |
| System.out.println( "-l: Write messages into file <log file> instead of stderr" ); |
| System.out.println( "-p: Apply style sheet to <path in package>; default is content.xml" ); |
| System.out.println( "-f: Use XSLT Transformer factory <factory>" ); |
| System.out.println(); |
| System.out.println( "-x: Extract specified file or directory <export path> from ODF package <input package> to the directory of the <output file>; this option may be specified multiple times" ); |
| System.out.println( "-v: Verbose output" ); |
| System.out.println(); |
| System.out.println( "<param>=<value>: Specifies an parameter/value pair that is passed to the XSL transformation; multiple paramater/vlaue pairs may be specified" ); |
| } |
| |
| } |