import java.io.File;
import java.io.FileNotFoundException;
import java.util.Locale;
+import java.util.Vector;
// Avalon
import org.apache.avalon.framework.logger.ConsoleLogger;
private Logger log;
+ private Vector xsltParams = null;
+
/**
* Construct a command line option object from command line arguments
* @param args command line parameters
i = i + parseUnknownOption(args, i);
} else if (args[i].equals("-at")) {
i = i + parseAreaTreeOption(args, i);
+ } else if (args[i].equals("-param")) {
+ if (i + 2 < args.length) {
+ if (xsltParams == null) {
+ xsltParams = new Vector();
+ }
+ String name = args[++i];
+ xsltParams.addElement(name);
+ String expression = args[++i];
+ xsltParams.addElement(expression);
+ } else {
+ throw new FOPException("invalid param usage: use -param <name> <value>");
+ }
} else {
printUsage();
return false;
case FO_INPUT:
return new FOFileHandler(fofile);
case XSLT_INPUT:
- return new XSLTInputHandler(xmlfile, xsltfile);
+ return new XSLTInputHandler(xmlfile, xsltfile, xsltParams);
default:
throw new FOPException("Invalid inputmode setting!");
}
+ " -fo infile xsl:fo input file \n"
+ " -xml infile xml input file, must be used together with -xsl \n"
+ " -xsl stylesheet xslt stylesheet \n \n"
+/* + " -param name value <value> to use for parameter <name> in xslt stylesheet\n"
+ + " (repeat '-param name value' for each parameter)\n \n" */
+ " [OUTPUT] \n"
+ " outfile input will be rendered as pdf file into outfile \n"
+ " -pdf outfile input will be rendered as pdf file (outfile req'd) \n"
// Imported java.io classes
import java.io.File;
+import java.util.Vector;
// Imported TraX classes
import javax.xml.transform.Source;
*/
public class XSLTInputHandler extends InputHandler {
- private Transformer transformer;
private StreamSource xmlSource;
private Source xsltSource;
+ private Vector xsltParams = null; // not yet implemented
+
+ /**
+ * Constructor for files as input
+ * @param xmlfile XML file
+ * @param xsltfile XSLT file
+ * @param params Vector of command-line parameters (name, value,
+ * name, value, ...) for XSL stylesheet
+ * @throws FOPException if initializing the Transformer fails
+ */
+ public XSLTInputHandler(File xmlfile, File xsltfile, Vector params) throws FOPException {
+ this.xmlSource = new StreamSource(xmlfile);
+ this.xsltSource = new StreamSource(xsltfile);
+ xsltParams = params;
+ }
/**
* Constructor for files as input
* @param xmlfile XML file
* @param xsltfile XSLT file
* @throws FOPException if initializing the Transformer fails
+ * @deprecated Use JAXP instead.
*/
public XSLTInputHandler(File xmlfile, File xsltfile) throws FOPException {
this.xmlSource = new StreamSource(xmlfile);
this.xsltSource = new StreamSource(xsltfile);
- initTransformer();
}
/**
* @param xmlURL XML URL
* @param xsltURL XSLT URL
* @throws FOPException if initializing the Transformer fails
+ * @deprecated Use JAXP instead.
*/
public XSLTInputHandler(String xmlURL, String xsltURL) throws FOPException {
this.xmlSource = new StreamSource(xmlURL);
this.xsltSource = new StreamSource(xsltURL);
- initTransformer();
}
/**
* @param xmlSource XML InputSource
* @param xsltSource XSLT InputSource
* @throws FOPException if initializing the Transformer fails
+ * @deprecated Use JAXP instead.
*/
public XSLTInputHandler(InputSource xmlSource, InputSource xsltSource)
throws FOPException {
xmlSource.getSystemId());
this.xsltSource = new StreamSource(xsltSource.getByteStream(),
xsltSource.getSystemId());
- initTransformer();
- }
-
- private void initTransformer() throws FOPException {
- try {
- this.transformer =
- TransformerFactory.newInstance().newTransformer(xsltSource);
- } catch (Exception ex) {
- throw new FOPException(ex);
- }
}
/**
* @see org.apache.fop.apps.InputHandler#getParser()
*/
public XMLReader getParser() throws FOPException {
- return getXMLFilter(xsltSource);
+ return getXMLFilter(xsltSource, xsltParams);
}
/**
* XMLReaders or XMLFilters
* @throws FOPException if setting up the XMLFilter fails
*/
- public static XMLFilter getXMLFilter(Source xsltSource) throws FOPException {
+ public static XMLFilter getXMLFilter(Source xsltSource, Vector inParams) throws FOPException {
try {
// Instantiate a TransformerFactory.
TransformerFactory tFactory = TransformerFactory.newInstance();
- // Determine whether the TransformerFactory supports The use uf SAXSource
+ // Determine whether the TransformerFactory supports The use of SAXSource
// and SAXResult
if (tFactory.getFeature(SAXSource.FEATURE)
&& tFactory.getFeature(SAXResult.FEATURE)) {
// Create an XMLFilter for each stylesheet.
XMLFilter xmlfilter =
saxTFactory.newXMLFilter(xsltSource);
-
+
+/* if (inParams != null) {
+ Transformer transformer = ??? how to obtain from an XMLFilter?
+ int nParams = inParams.size();
+
+ for (int i = 0; i < nParams; i += 2) {
+ transformer.setParameter((String) inParams.elementAt(i),
+ (String) inParams.elementAt(i + 1));
+ }
+ }
+*/
+
// Create an XMLReader.
XMLReader parser = FOFileHandler.createParser();
if (parser == null) {