gmazza      2004/07/25 10:04:44

  Modified:    src/java/org/apache/fop/apps CommandLineOptions.java
                        InputHandler.java
               src/java/org/apache/fop/fo FObj.java
               src/java/org/apache/fop/tools TestConverter.java
               src/java/org/apache/fop/tools/anttasks Fop.java
               test/java/org/apache/fop BasicDriverTestCase.java
  Removed:     src/java/org/apache/fop/apps FOFileHandler.java
                        XSLTInputHandler.java
  Log:
  Took advantage of the Transformer similarities between FO input and
  (XSL, XSLT) input to combine the two into InputHandler.
  
  Revision  Changes    Path
  1.27      +2 -2      xml-fop/src/java/org/apache/fop/apps/CommandLineOptions.java
  
  Index: CommandLineOptions.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/CommandLineOptions.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- CommandLineOptions.java   24 Jul 2004 05:47:44 -0000      1.26
  +++ CommandLineOptions.java   25 Jul 2004 17:04:44 -0000      1.27
  @@ -483,9 +483,9 @@
       private InputHandler createInputHandler() throws IllegalArgumentException {
           switch (inputmode) {
               case FO_INPUT:
  -                return new FOFileHandler(fofile);
  +                return new InputHandler(fofile);
               case XSLT_INPUT:
  -                return new XSLTInputHandler(xmlfile, xsltfile, xsltParams);
  +                return new InputHandler(xmlfile, xsltfile, xsltParams);
               default:
                   throw new IllegalArgumentException("Error creating InputHandler 
object.");
           }
  
  
  
  1.15      +85 -10    xml-fop/src/java/org/apache/fop/apps/InputHandler.java
  
  Index: InputHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/InputHandler.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- InputHandler.java 25 Jul 2004 01:47:47 -0000      1.14
  +++ InputHandler.java 25 Jul 2004 17:04:44 -0000      1.15
  @@ -18,19 +18,47 @@
   
   package org.apache.fop.apps;
   
  +// Imported java.io classes
  +import java.io.File;
  +import java.util.Vector;
  +
  +// Imported TraX classes
  +import javax.xml.transform.Result;
  +import javax.xml.transform.Source;
  +import javax.xml.transform.Transformer;
  +import javax.xml.transform.TransformerFactory;
  +import javax.xml.transform.sax.SAXResult;
  +import javax.xml.transform.stream.StreamSource;
  +
   /**
  - * Abstract super class for input handlers.
  + * Class for handling files input from command line
  + * either with XML and XSLT files (and optionally xsl
  + * parameters) or FO File input alone
    */
  -public abstract class InputHandler {
  -
  -    protected String baseURL = null;
  +public class InputHandler {
  +    private File sourcefile = null;  // either FO or XML/XSLT usage
  +    private File stylesheet = null;  // for XML/XSLT usage
  +    private Vector xsltParams = null; // for XML/XSLT usage
       
       /**
  -     * Get the base URL associated with this input source
  -     * @return the input source
  +     * Constructor for XML->XSLT->FO input
  +     * @param xmlfile XML file
  +     * @param xsltfile XSLT file
  +     * @param params Vector of command-line parameters (name, value, 
  +     *      name, value, ...) for XSL stylesheet, null if none
  +     */
  +    public InputHandler(File xmlfile, File xsltfile, Vector params) {
  +        sourcefile  = xmlfile;
  +        stylesheet = xsltfile;
  +        xsltParams = params;
  +    }
  +
  +    /**
  +     * Constructor for FO input
  +     * @param fofile the file to read the FO document.
        */
  -    public String getBaseURL() {
  -        return baseURL;
  +    public InputHandler(File fofile) {
  +        sourcefile = fofile;
       }
   
       /**
  @@ -38,6 +66,53 @@
        * @param fop -- Fop object
        * @throws FOPException in case of an error during processing
        */
  -    public void render(Fop fop) throws FOPException {}
  +    public void render(Fop fop) throws FOPException {
   
  +        // if base URL was not explicitly set in FOUserAgent, obtain here
  +        if (fop.getUserAgent().getBaseURL() == null) {
  +            String baseURL = null;
  +
  +            try {
  +                baseURL =
  +                    new File(sourcefile.getAbsolutePath()).
  +                        getParentFile().toURL().toExternalForm();
  +            } catch (Exception e) {
  +                baseURL = "";
  +            }
  +            fop.getUserAgent().setBaseURL(baseURL);
  +        }
  +
  +        try {
  +            // Setup XSLT
  +            TransformerFactory factory = TransformerFactory.newInstance();
  +            Transformer transformer;
  +            
  +            if (stylesheet == null) {   // FO Input
  +                transformer = factory.newTransformer();
  +            } else {    // XML/XSLT input
  +                transformer = factory.newTransformer(new StreamSource(
  +                    stylesheet));
  +            
  +                // Set the value of parameters, if any, defined for stylesheet
  +                if (xsltParams != null) { 
  +                    for (int i = 0; i < xsltParams.size(); i += 2) {
  +                        transformer.setParameter((String) xsltParams.elementAt(i),
  +                            (String) xsltParams.elementAt(i + 1));
  +                    }
  +                }
  +            }
  +
  +            // Create a SAXSource from the input Source file
  +            Source src = new StreamSource(sourcefile);
  +
  +            // Resulting SAX events (the generated FO) must be piped through to FOP
  +            Result res = new SAXResult(fop.getDefaultHandler());
  +
  +            // Start XSLT transformation and FOP processing
  +            transformer.transform(src, res);
  +
  +        } catch (Exception e) {
  +            throw new FOPException(e);
  +        }
  +    }
   }
  
  
  
  1.54      +1 -1      xml-fop/src/java/org/apache/fop/fo/FObj.java
  
  Index: FObj.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FObj.java,v
  retrieving revision 1.53
  retrieving revision 1.54
  diff -u -r1.53 -r1.54
  --- FObj.java 25 Jul 2004 16:11:04 -0000      1.53
  +++ FObj.java 25 Jul 2004 17:04:44 -0000      1.54
  @@ -57,7 +57,7 @@
       protected Map layoutDimension = null;
   
       /** During input FO validation, certain FO's are not valid as
  -        child nodes if this FO is a descendant of an Out Of Line 
  +        child nodes if they would be a descendant of an Out Of Line 
           Formatting Object as defined in specification.
           See Section 6.2 of 1.0/1.2 spec for more information.
       */
  
  
  
  1.21      +4 -6      xml-fop/src/java/org/apache/fop/tools/TestConverter.java
  
  Index: TestConverter.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/tools/TestConverter.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- TestConverter.java        25 Jul 2004 01:47:47 -0000      1.20
  +++ TestConverter.java        25 Jul 2004 17:04:44 -0000      1.21
  @@ -27,10 +27,8 @@
   import javax.xml.parsers.DocumentBuilderFactory;
   
   import org.apache.fop.apps.Fop;
  -import org.apache.fop.apps.FOFileHandler;
   import org.apache.fop.apps.FOUserAgent;
   import org.apache.fop.apps.InputHandler;
  -import org.apache.fop.apps.XSLTInputHandler;
   import org.w3c.dom.Document;
   import org.w3c.dom.Node;
   import org.w3c.dom.NodeList;
  @@ -296,11 +294,11 @@
   
               InputHandler inputHandler = null;
               if (xsl == null) {
  -                inputHandler = new FOFileHandler(xmlFile);
  +                inputHandler = new InputHandler(xmlFile);
               } else {
  -                inputHandler = new XSLTInputHandler(xmlFile,
  -                                                    new File(baseDir + "/"
  -                                                             + xsl), null);
  +                inputHandler = new InputHandler(xmlFile,
  +                                                new File(baseDir + "/"
  +                                                         + xsl), null);
               }
   
               FOUserAgent userAgent = new FOUserAgent();
  
  
  
  1.19      +1 -2      xml-fop/src/java/org/apache/fop/tools/anttasks/Fop.java
  
  Index: Fop.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/tools/anttasks/Fop.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- Fop.java  24 Jul 2004 05:47:45 -0000      1.18
  +++ Fop.java  25 Jul 2004 17:04:44 -0000      1.19
  @@ -35,7 +35,6 @@
   
   // FOP
   import org.apache.fop.apps.InputHandler;
  -import org.apache.fop.apps.FOFileHandler;
   import org.apache.fop.fo.Constants;
   import org.apache.fop.apps.FOPException;
   import org.apache.fop.apps.FOUserAgent;
  @@ -517,7 +516,7 @@
   
       private void render(File foFile, File outFile,
                           int renderer) throws FOPException {
  -        InputHandler inputHandler = new FOFileHandler(foFile);
  +        InputHandler inputHandler = new InputHandler(foFile);
   
           OutputStream out = null;
           try {
  
  
  
  1.14      +2 -3      xml-fop/test/java/org/apache/fop/BasicDriverTestCase.java
  
  Index: BasicDriverTestCase.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/test/java/org/apache/fop/BasicDriverTestCase.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- BasicDriverTestCase.java  25 Jul 2004 01:47:47 -0000      1.13
  +++ BasicDriverTestCase.java  25 Jul 2004 17:04:44 -0000      1.14
  @@ -37,7 +37,6 @@
   import org.apache.commons.io.output.ByteArrayOutputStream;
   import org.apache.fop.apps.Fop;
   import org.apache.fop.apps.InputHandler;
  -import org.apache.fop.apps.XSLTInputHandler;
   import org.w3c.dom.Document;
   
   /**
  @@ -151,7 +150,7 @@
           Fop fop = new Fop(Fop.RENDER_PDF);
           fop.setOutputStream(baout);
           
  -        InputHandler handler = new XSLTInputHandler(xmlFile, xsltFile, null);
  +        InputHandler handler = new InputHandler(xmlFile, xsltFile, null);
           handler.render(fop);
           
           assertTrue("Generated PDF has zero length", baout.size() > 0);
  
  
  

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

Reply via email to