You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by gm...@apache.org on 2004/06/27 15:29:32 UTC

cvs commit: xml-fop/src/java/org/apache/fop/render/awt AWTRenderer.java

gmazza      2004/06/27 06:29:32

  Modified:    src/java/org/apache/fop/apps Driver.java FOUserAgent.java
               src/java/org/apache/fop/fo Constants.java
                        FOInputHandler.java FOTreeHandler.java
               src/java/org/apache/fop/fo/pagination Flow.java
               src/java/org/apache/fop/render/awt AWTRenderer.java
  Log:
  1.)  Moved Renderer instantiation from Driver to FOTreeHandler, as it is the only
  FOInputHandler subclass concerned with Renderer creation. (MIFHandler and RTFHandler
  are hardcoded to a particular renderer-type).
  
  2.)  Added a RendererOverride member variable in FOUserAgent, for use by
  AWTRenderer as well as external (i.e. user-defined) renderers.  FOTreeHandler coded
  to reference it.
  
  3.)  Flow validity checking which was added yesterday temporarily commented-out;
  I misread the content model from the spec (I will have to account for fo:markers
  as initial children.)
  
  Revision  Changes    Path
  1.77      +58 -101   xml-fop/src/java/org/apache/fop/apps/Driver.java
  
  Index: Driver.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/Driver.java,v
  retrieving revision 1.76
  retrieving revision 1.77
  diff -u -r1.76 -r1.77
  --- Driver.java	26 Jun 2004 19:37:13 -0000	1.76
  +++ Driver.java	27 Jun 2004 13:29:32 -0000	1.77
  @@ -35,7 +35,6 @@
   import org.apache.fop.fo.FOTreeBuilder;
   import org.apache.fop.fo.FOInputHandler;
   import org.apache.fop.fo.FOTreeHandler;
  -import org.apache.fop.render.Renderer;
   import org.apache.fop.render.awt.AWTRenderer;
   import org.apache.fop.render.mif.MIFHandler;
   import org.apache.fop.render.rtf.RTFHandler;
  @@ -57,16 +56,16 @@
    * driver.setRenderer(RENDER_PDF);
    * driver.run();
    * </PRE>
  - * If neccessary, calling classes can call into the lower level
  + * If necessary, calling classes can call into the lower level
    * methods to setup and
  - * render. Methods can be called to set the
  + * render. Methods within FOUserAgent can be called to set the
    * Renderer to use, the (possibly multiple) ElementMapping(s) to
    * use and the OutputStream to use to output the results of the
  - * rendering (where applicable). In the case of the Renderer and
  + * rendering (where applicable). In the case of 
    * ElementMapping(s), the Driver may be supplied either with the
    * object itself, or the name of the class, in which case Driver will
    * instantiate the class itself. The advantage of the latter is it
  - * enables runtime determination of Renderer and ElementMapping(s).
  + * enables runtime determination of ElementMapping(s).
    * <P>
    * Once the Driver is set up, the render method
    * is called. Depending on whether DOM or SAX is being used, the
  @@ -83,7 +82,7 @@
    *
    * <PRE>
    * Driver driver = new Driver();
  - * driver.setRenderer(new org.apache.fop.render.awt.AWTRenderer(translator));
  + * driver.setRenderer(RENDER_AWT);
    * driver.render(parser, fileInputSource(args[0]));
    * </PRE>
    */
  @@ -100,11 +99,6 @@
       private int rendererType = NOT_SET;
   
       /**
  -     * the renderer to use to output the area tree
  -     */
  -    private Renderer renderer;
  -
  -    /**
        * the SAX ContentHandler
        */
       private FOInputHandler foInputHandler;
  @@ -127,7 +121,7 @@
       /**
        * The system resources that FOP will use
        */
  -    private FOUserAgent userAgent = null;
  +    private FOUserAgent foUserAgent = null;
   
       /**
        * Main constructor for the Driver class.
  @@ -142,7 +136,8 @@
        */
       public Driver(AWTRenderer renderer) {
           this();
  -        setRenderer(renderer);
  +        rendererType = RENDER_AWT;
  +        foUserAgent = renderer.getUserAgent();
       }
   
       /**
  @@ -171,15 +166,30 @@
       }
   
       /**
  +     * Resets the Driver so it can be reused. Property and element
  +     * mappings are reset to defaults.
  +     * The output stream is cleared. The renderer is cleared.
  +     */
  +    public synchronized void reset() {
  +        source = null;
  +        stream = null;
  +        reader = null;
  +        if (treeBuilder != null) {
  +            treeBuilder.reset();
  +        }
  +    }
  +
  +    /**
        * Optionally sets the FOUserAgent instance for FOP to use. The Driver
        * class sets up its own FOUserAgent if none is set through this method.
        * @param agent FOUserAgent to use
        */
  -    public void setUserAgent(FOUserAgent agent) {
  -        userAgent = agent;
  -        if (renderer != null) {
  -            renderer.setUserAgent(userAgent);
  +    public void setUserAgent(FOUserAgent agent) throws FOPException {
  +        if (foUserAgent != null) {
  +            throw new IllegalStateException("FOUserAgent " +
  +                "instance already set.");
           }
  +        foUserAgent = agent;
       }
   
       /**
  @@ -187,24 +197,10 @@
        * @return the user agent
        */
       public FOUserAgent getUserAgent() {
  -        if (userAgent == null) {
  -            userAgent = new FOUserAgent();
  -        }
  -        return userAgent;
  -    }
  -
  -    /**
  -     * Resets the Driver so it can be reused. Property and element
  -     * mappings are reset to defaults.
  -     * The output stream is cleared. The renderer is cleared.
  -     */
  -    public synchronized void reset() {
  -        source = null;
  -        stream = null;
  -        reader = null;
  -        if (treeBuilder != null) {
  -            treeBuilder.reset();
  +        if (foUserAgent == null) {
  +            foUserAgent = new FOUserAgent();
           }
  +        return foUserAgent;
       }
   
       /**
  @@ -241,68 +237,30 @@
       }
   
       /**
  -     * Method to set the rendering type to use. Must be one of
  +     * Method to set the rendering type desired. Must be one of
        * <ul>
  -     * <li>RENDER_PDF</li>
  -     * <li>RENDER_AWT</li>
  -     * <li>RENDER_PRINT</li>
  -     * <li>RENDER_MIF</li>
  -     * <li>RENDER_XML</li>
  -     * <li>RENDER_PCL</li>
  -     * <li>RENDER_PS</li>
  -     * <li>RENDER_TXT</li>
  -     * <li>RENDER_SVG</li>
  -     * <li>RENDER_RTF</li>
  +     * <li>Driver.RENDER_PDF</li>
  +     * <li>Driver.RENDER_AWT</li>
  +     * <li>Driver.RENDER_PRINT</li>
  +     * <li>Driver.RENDER_MIF</li>
  +     * <li>Driver.RENDER_XML</li>
  +     * <li>Driver.RENDER_PCL</li>
  +     * <li>Driver.RENDER_PS</li>
  +     * <li>Driver.RENDER_TXT</li>
  +     * <li>Driver.RENDER_SVG</li>
  +     * <li>Driver.RENDER_RTF</li>
        * </ul>
  -     * @param renderer the type of renderer to use
  -     * @throws IllegalArgumentException if an unsupported renderer type was required.
  +     * @param renderType the type of renderer to use
  +     * @throws IllegalArgumentException if an unsupported renderer type was requested.
        */
  -    public void setRenderer(int renderer) throws IllegalArgumentException {
  -        rendererType = renderer;
  -        switch (renderer) {
  -        case RENDER_PDF:
  -            setRenderer(new org.apache.fop.render.pdf.PDFRenderer());
  -            break;
  -        case RENDER_AWT:
  -            setRenderer(new org.apache.fop.render.awt.AWTRenderer());
  -            break;
  -        case RENDER_PRINT:
  -            setRenderer(new org.apache.fop.render.awt.AWTPrintRenderer());
  -            break;
  -        case RENDER_PCL:
  -            setRenderer(new org.apache.fop.render.pcl.PCLRenderer());
  -            break;
  -        case RENDER_PS:
  -            setRenderer(new org.apache.fop.render.ps.PSRenderer());
  -            break;
  -        case RENDER_TXT:
  -            setRenderer(new org.apache.fop.render.txt.TXTRenderer());
  -            break;
  -        case RENDER_MIF:
  -            //foInputHandler will be set later
  -            break;
  -        case RENDER_XML:
  -            setRenderer(new org.apache.fop.render.xml.XMLRenderer());
  -            break;
  -        case RENDER_SVG:
  -            setRenderer(new org.apache.fop.render.svg.SVGRenderer());
  -            break;
  -        case RENDER_RTF:
  -            //foInputHandler will be set later
  -            break;
  -        default:
  +    public void setRenderer(int renderType) throws IllegalArgumentException {
  +        if (renderType < RENDER_MIN_CONST || renderType > RENDER_MAX_CONST) {
               rendererType = NOT_SET;
  -            throw new IllegalArgumentException("Unknown renderer type " + renderer);
  +            throw new IllegalArgumentException(
  +                "Invalid renderer ID#" + renderType);
           }
  -    }
   
  -    /**
  -     * Set the Renderer to use.
  -     * @param renderer the renderer instance to use
  -     */
  -    private void setRenderer(Renderer renderer) {
  -        renderer.setUserAgent(getUserAgent());
  -        this.renderer = renderer;
  +        this.rendererType = renderType;
       }
   
       /**
  @@ -344,16 +302,17 @@
           // TODO: - do this stuff in a better way
           // PIJ: I guess the structure handler should be created by the renderer.
           if (rendererType == RENDER_MIF) {
  -            foInputHandler = new MIFHandler(userAgent, stream);
  +            foInputHandler = new MIFHandler(foUserAgent, stream);
           } else if (rendererType == RENDER_RTF) {
  -            foInputHandler = new RTFHandler(userAgent, stream);
  +            foInputHandler = new RTFHandler(foUserAgent, stream);
           } else {
  -            if (renderer == null) {
  +            if (rendererType == NOT_SET) {
                   throw new IllegalStateException(
  -                        "Renderer not set when using standard foInputHandler");
  +                        "Renderer must be set using setRenderer(int renderType)");
               }
   
  -            foInputHandler = new FOTreeHandler(userAgent, renderer, stream, true);
  +            foInputHandler = new FOTreeHandler(foUserAgent, rendererType, 
  +                stream, true);
           }
   
           treeBuilder.setFOInputHandler(foInputHandler);
  @@ -369,7 +328,7 @@
       public synchronized void render(InputHandler inputHandler)
                   throws FOPException {
           XMLReader parser = inputHandler.getParser();
  -        userAgent.setBaseURL(inputHandler.getBaseURL());
  +        foUserAgent.setBaseURL(inputHandler.getBaseURL());
           render(parser, inputHandler.getInputSource());
       }
   
  @@ -431,7 +390,6 @@
       /**
        * Runs the formatting and renderering process using the previously set
        * parser, input source, renderer and output stream.
  -     * If the renderer was not set, default to PDF.
        * If no parser was set, and the input source is not a dom document,
        * get a default SAX parser.
        * @throws IOException in case of IO errors.
  @@ -442,9 +400,8 @@
               initialize();
           }
   
  -        if (renderer == null && rendererType != RENDER_RTF
  -            && rendererType != RENDER_MIF) {
  -                setRenderer(RENDER_PDF);
  +        if (rendererType == NOT_SET) {
  +            rendererType = RENDER_PDF;
           }
   
           if (source == null) {
  
  
  
  1.12      +19 -2     xml-fop/src/java/org/apache/fop/apps/FOUserAgent.java
  
  Index: FOUserAgent.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/FOUserAgent.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- FOUserAgent.java	26 Jun 2004 19:37:13 -0000	1.11
  +++ FOUserAgent.java	27 Jun 2004 13:29:32 -0000	1.12
  @@ -27,6 +27,7 @@
   
   // FOP
   import org.apache.fop.pdf.PDFEncryptionParams;
  +import org.apache.fop.render.Renderer;
   
   /**
    * The User Agent for fo.
  @@ -59,7 +60,7 @@
       private float px2mm = 0.35277777777777777778f; //72dpi (=25.4/dpi)
       private HashMap rendererOptions = new java.util.HashMap();
       private InputHandler inputHandler = null;
  -    
  +    private Renderer rendererOverride = null;
       
       /** Producer:  Metadata element for the system/software that produces
        * the document. (Some renderers can store this in the document.)
  @@ -91,6 +92,22 @@
        */
       public InputHandler getInputHandler() {
           return inputHandler;
  +    }
  +
  +    /**
  +     * Sets the producer of the document.  
  +     * @param producer source of document
  +     */
  +    public void setRendererOverride(Renderer renderer) {
  +        this.rendererOverride = renderer;
  +    }
  +
  +    /**
  +     * Returns the producer of the document
  +     * @return producer name
  +     */
  +    public Renderer getRendererOverride() {
  +        return rendererOverride;
       }
   
       /**
  
  
  
  1.8       +4 -1      xml-fop/src/java/org/apache/fop/fo/Constants.java
  
  Index: Constants.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/Constants.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Constants.java	26 Jun 2004 19:37:13 -0000	1.7
  +++ Constants.java	27 Jun 2004 13:29:32 -0000	1.8
  @@ -25,6 +25,9 @@
          apps.Driver to describe the input (either .FO or .XML/.XSL)
          and desired output (PDF, PS, AWT, etc.) of the document */
          
  +    /** render constants for bounds checking */
  +    int RENDER_MIN_CONST = 1;
  +    int RENDER_MAX_CONST = 10;
       /** input / output not set */
       int NOT_SET = 0;
       /** input: fo file */
  
  
  
  1.22      +2 -2      xml-fop/src/java/org/apache/fop/fo/FOInputHandler.java
  
  Index: FOInputHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FOInputHandler.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- FOInputHandler.java	19 Jun 2004 13:35:33 -0000	1.21
  +++ FOInputHandler.java	27 Jun 2004 13:29:32 -0000	1.22
  @@ -66,7 +66,7 @@
       /** 
        * The FOUserAgent for this process
        */
  -    private FOUserAgent foUserAgent;
  +    protected FOUserAgent foUserAgent;
   
       /** 
        * The Font information relevant for this document
  
  
  
  1.24      +41 -3     xml-fop/src/java/org/apache/fop/fo/FOTreeHandler.java
  
  Index: FOTreeHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FOTreeHandler.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- FOTreeHandler.java	19 Jun 2004 13:35:33 -0000	1.23
  +++ FOTreeHandler.java	27 Jun 2004 13:29:32 -0000	1.24
  @@ -115,10 +115,17 @@
        * @param store if true then use the store pages model and keep the
        *        area tree in memory
        */
  -    public FOTreeHandler(FOUserAgent userAgent, Renderer renderer, 
  +    public FOTreeHandler(FOUserAgent userAgent, int renderType, 
           OutputStream stream, boolean store) throws FOPException {
           super(userAgent);
  -        this.renderer = renderer;
  +
  +        if (foUserAgent.getRendererOverride() != null) {
  +            renderer = foUserAgent.getRendererOverride();
  +        } else {
  +            renderer = createRenderer(renderType);
  +            renderer.setUserAgent(foUserAgent);
  +        }
  +        
           areaTree = new AreaTree(renderer);
   
           try {
  @@ -135,6 +142,37 @@
           
           if (collectStatistics) {
               runtime = Runtime.getRuntime();
  +        }
  +    }
  +
  +    /**
  +     * Creates a Renderer object based on render-type desired
  +     * @param renderType the type of renderer to use
  +     * @return Renderer the new Renderer instance
  +     * @throws IllegalArgumentException if an unsupported renderer type was requested
  +     */
  +    private Renderer createRenderer(int renderType) throws IllegalArgumentException {
  +
  +        switch (renderType) {
  +        case Constants.RENDER_PDF:
  +            return new org.apache.fop.render.pdf.PDFRenderer();
  +        case Constants.RENDER_AWT:
  +            return new org.apache.fop.render.awt.AWTRenderer();
  +        case Constants.RENDER_PRINT:
  +            return new org.apache.fop.render.awt.AWTPrintRenderer();
  +        case Constants.RENDER_PCL:
  +            return new org.apache.fop.render.pcl.PCLRenderer();
  +        case Constants.RENDER_PS:
  +            return new org.apache.fop.render.ps.PSRenderer();
  +        case Constants.RENDER_TXT:
  +            return new org.apache.fop.render.txt.TXTRenderer();
  +        case Constants.RENDER_XML:
  +            return new org.apache.fop.render.xml.XMLRenderer();
  +        case Constants.RENDER_SVG:
  +            return new org.apache.fop.render.svg.SVGRenderer();
  +        default:
  +            throw new IllegalArgumentException("Invalid renderer type " 
  +                + renderType);
           }
       }
   
  
  
  
  1.15      +5 -3      xml-fop/src/java/org/apache/fop/fo/pagination/Flow.java
  
  Index: Flow.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/pagination/Flow.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- Flow.java	26 Jun 2004 19:37:13 -0000	1.14
  +++ Flow.java	27 Jun 2004 13:29:32 -0000	1.15
  @@ -65,13 +65,15 @@
   
       /**
        * @see org.apache.fop.fo.FONode#validateChildNode(Locator, String, String)
  -     * XSL/FOP Content Model: (%block;)+
  +     * XSL/FOP Content Model: markers* (%block;)+
        */
  -    protected void validateChildNode(Locator loc, String nsURI, String localName) {
  +/*  temporarily disabled:  need to account for fo-markers which may be initial children
  +     protected void validateChildNode(Locator loc, String nsURI, String localName) {
           if (!isBlockItem(nsURI, localName)) {
               invalidChildError(loc, nsURI, localName);
           }
       }
  +*/
   
       /**
        * Make sure content model satisfied, if so then tell the
  
  
  
  1.27      +4 -0      xml-fop/src/java/org/apache/fop/render/awt/AWTRenderer.java
  
  Index: AWTRenderer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/awt/AWTRenderer.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- AWTRenderer.java	25 Jun 2004 23:35:00 -0000	1.26
  +++ AWTRenderer.java	27 Jun 2004 13:29:32 -0000	1.27
  @@ -106,6 +106,10 @@
           createPreviewDialog(foUserAgent.getInputHandler());
       }
   
  +    public FOUserAgent getUserAgent() {
  +        return userAgent;
  +    }
  +
       /**
        * @see org.apache.fop.render.Renderer
        */
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: fop-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-cvs-help@xml.apache.org