]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Removal of Visitor patterns from AbstractRenderer, moving of business logic from...
authorGlen Mazza <gmazza@apache.org>
Wed, 25 Feb 2004 03:32:17 +0000 (03:32 +0000)
committerGlen Mazza <gmazza@apache.org>
Wed, 25 Feb 2004 03:32:17 +0000 (03:32 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197368 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/area/inline/Character.java
src/java/org/apache/fop/area/inline/InlineArea.java
src/java/org/apache/fop/area/inline/InlineAreaVisitor.java [deleted file]
src/java/org/apache/fop/area/inline/InlineParent.java
src/java/org/apache/fop/area/inline/Leader.java
src/java/org/apache/fop/area/inline/Space.java
src/java/org/apache/fop/area/inline/TextArea.java
src/java/org/apache/fop/area/inline/Viewport.java
src/java/org/apache/fop/render/AbstractRenderer.java
src/java/org/apache/fop/render/xml/XMLRenderer.java

index e1eacd682c79ce4ce22633f6b2ae5521c4d87f3a..d4da2711dab8fc5707f7a0f6b5e899e91cf26ad1 100644 (file)
@@ -66,16 +66,6 @@ public class Character extends InlineArea {
         character = ch;
     }
 
-    /**
-     * Handle InlineAreaVisitor request by passing this back to it.
-     *
-     * @param visitor the InlineAreaVisitor wishing to process this.
-     * @see org.apache.fop.area.inline.InlineAreaVisitor
-     */
-    public void acceptVisitor(InlineAreaVisitor visitor) {
-        visitor.serveVisitor(this);
-    }
-
     /**
      * Get the character for this inline character area.
      *
index 87e4207ff1622d1da937a031d1e8a507506c5180..7493c64517ab06aafcd92dedea41ddee5e3b119e 100644 (file)
@@ -58,8 +58,6 @@ import org.apache.fop.traits.BorderProps;
  * Inline Area
  * This area is for all inline areas that can be placed
  * in a line area.
- * Extensions of this class should render themselves with the
- * requested renderer.
  */
 public class InlineArea extends Area {
     // int width;
@@ -74,17 +72,6 @@ public class InlineArea extends Area {
      */
     protected int verticalPosition = 0;
 
-    /**
-     * Handle a visitor (usually a renderer) for this inline area.
-     * Inline areas that extend this class are expected
-     * to pass themselves back to the visitor so that the visitor can process
-     * them, usually by rendering them.
-     *
-     * @param visitor the InlineAreaVisitor that will process this
-     */
-    public void acceptVisitor(InlineAreaVisitor visitor) {
-    }
-
     /**
      * Set the width of this inline area.
      * Currently sets the ipd.
diff --git a/src/java/org/apache/fop/area/inline/InlineAreaVisitor.java b/src/java/org/apache/fop/area/inline/InlineAreaVisitor.java
deleted file mode 100644 (file)
index 0a5911b..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * $Id$
- * ============================================================================
- *                    The Apache Software License, Version 1.1
- * ============================================================================
- *
- * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modifica-
- * tion, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- *
- * 3. The end-user documentation included with the redistribution, if any, must
- *    include the following acknowledgment: "This product includes software
- *    developed by the Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowledgment may appear in the software itself, if
- *    and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "FOP" and "Apache Software Foundation" must not be used to
- *    endorse or promote products derived from this software without prior
- *    written permission. For written permission, please contact
- *    apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache", nor may
- *    "Apache" appear in their name, without prior written permission of the
- *    Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- * ============================================================================
- *
- * This software consists of voluntary contributions made by many individuals
- * on behalf of the Apache Software Foundation and was originally created by
- * James Tauber <jtauber@jtauber.com>. For more information on the Apache
- * Software Foundation, please see <http://www.apache.org/>.
- */
-package org.apache.fop.area.inline;
-
-/**
- * <p>Implements the GoF Visitor design pattern to allow access to inline areas
- * without knowing what subclass of InlineArea is being accessed. This is used
- * primarily to keep the area tree classes isolated from any classes (typically
- * renderers) that might need access to them.</p>
- */
-public interface InlineAreaVisitor {
-
-    /**
-     * Handle a visitor request to process an inline viewport.
-     *
-     * @param viewport  The viewport area
-     */
-    void serveVisitor(Viewport viewport);
-
-    /**
-     * Handle a visitor request to process inline text.
-     *
-     * @param area  The text area
-     */
-    void serveVisitor(TextArea area);
-
-    /**
-     * Handle a visitor request to process an inline parent area.
-     *
-     * @param ip  The inline parent area
-     */
-    void serveVisitor(InlineParent ip);
-
-    /**
-     * Handle a visitor request to process an inline character.
-     *
-     * @param ch  The inline character
-     */
-    void serveVisitor(org.apache.fop.area.inline.Character ch);
-
-    /**
-     * Handle a visitor request to process an inline space.
-     *
-     * @param space  The inline space
-     */
-    void serveVisitor(Space space);
-
-    /**
-     * Handle a visitor request to process an inline leader area.
-     *
-     * @param area  The inline leader area.
-     */
-    void serveVisitor(Leader area);
-
-}
index e8f93c3f87d1b7c99c249d6889fd89fee1752d5c..dd830b53cf669f2869b22437501d8700ba325638 100644 (file)
@@ -76,16 +76,6 @@ public class InlineParent extends InlineArea {
     public InlineParent() {
     }
 
-    /**
-     * Handle InlineAreaVisitor request by passing this back to it.
-     *
-     * @param visitor the InlineAreaVisitor wishing to process this.
-     * @see org.apache.fop.area.inline.InlineAreaVisitor
-     */
-    public void acceptVisitor(InlineAreaVisitor visitor) {
-        visitor.serveVisitor(this);
-    }
-
     /**
      * Override generic Area method.
      *
index d535fc99b7bc0b5e625c25258330f1465bd298da..bfa5f098c153fb705dafee8883a59b26671c9177 100644 (file)
@@ -108,15 +108,5 @@ public class Leader extends InlineArea {
         return ruleThickness;
     }
 
-    /**
-     * Handle InlineAreaVisitor request by passing this back to it.
-     *
-     * @param visitor the InlineAreaVisitor wishing to process this.
-     * @see org.apache.fop.area.inline.InlineAreaVisitor
-     */
-    public void acceptVisitor(InlineAreaVisitor visitor) {
-        visitor.serveVisitor(this);
-    }
-
 }
 
index 92095eb82ffd41174d7e5cda781025842ecb18ca..a0549848aab03689b50cc90c57a97253126df545 100644 (file)
@@ -56,14 +56,4 @@ package org.apache.fop.area.inline;
  */
 public class Space extends InlineArea {
 
-    /**
-     * Handle InlineAreaVisitor request by passing this back to it.
-     *
-     * @param visitor the InlineAreaVisitor wishing to process this.
-     * @see org.apache.fop.area.inline.InlineAreaVisitor
-     */
-    public void acceptVisitor(InlineAreaVisitor visitor) {
-        visitor.serveVisitor(this);
-    }
-
 }
index 00e90193df8c2bb5590bfd369b90a284c01f8a17..c187264a60f7300f68926b5f162a7072418b049c 100644 (file)
@@ -67,16 +67,6 @@ public class TextArea extends InlineArea {
     public TextArea() {
     }
 
-    /**
-     * Handle InlineAreaVisitor request by passing this back to it.
-     *
-     * @param visitor the InlineAreaVisitor wishing to process this.
-     * @see org.apache.fop.area.inline.InlineAreaVisitor
-     */
-    public void acceptVisitor(InlineAreaVisitor visitor) {
-        visitor.serveVisitor(this);
-    }
-
     /**
      * Set the text string
      *
index 6c01afb3f3b86ced3eebde82a838b6a1769d95b2..aa454cf6ac64c7e9c47fa6b3cc0a18b65bd20e7a 100644 (file)
@@ -124,16 +124,6 @@ public class Viewport extends InlineArea {
         return content;
     }
 
-    /**
-     * Handle InlineAreaVisitor request by passing this back to it.
-     *
-     * @param visitor the InlineAreaVisitor wishing to process this.
-     * @see org.apache.fop.area.inline.InlineAreaVisitor
-     */
-    public void acceptVisitor(InlineAreaVisitor visitor) {
-        visitor.serveVisitor(this);
-    }
-
     private void writeObject(java.io.ObjectOutputStream out)
     throws IOException {
         out.writeBoolean(contentPosition != null);
index 5ed907c350423e746725ed98503b89b24ee81248..cfa2758d10d5237965ddce2440ae1573d53986c8 100644 (file)
@@ -85,7 +85,6 @@ import org.apache.fop.area.inline.Container;
 import org.apache.fop.area.inline.ForeignObject;
 import org.apache.fop.area.inline.Image;
 import org.apache.fop.area.inline.InlineArea;
-import org.apache.fop.area.inline.InlineAreaVisitor;
 import org.apache.fop.area.inline.InlineParent;
 import org.apache.fop.area.inline.Leader;
 import org.apache.fop.area.inline.Space;
@@ -109,7 +108,7 @@ import org.apache.avalon.framework.configuration.ConfigurationException;
  * handle viewports. This keeps track of the current block and inline position.
  */
 public abstract class AbstractRenderer extends AbstractLogEnabled
-         implements Renderer, Configurable, InlineAreaVisitor, Constants {
+         implements Renderer, Configurable, Constants {
 
     /**
      * user agent
@@ -618,10 +617,61 @@ public abstract class AbstractRenderer extends AbstractLogEnabled
 
         for (int count = 0; count < children.size(); count++) {
             InlineArea inline = (InlineArea) children.get(count);
-            inline.acceptVisitor(this);
+            renderInlineArea(inline);
         }
     }
 
+    protected void renderInlineArea(InlineArea inlineArea) {
+        if (inlineArea instanceof TextArea) {
+            renderText((TextArea) inlineArea);
+        } else if (inlineArea instanceof InlineParent) {
+            renderInlineParent((InlineParent) inlineArea);
+        } else if (inlineArea instanceof Space) {
+            renderInlineSpace((Space) inlineArea);
+        } else if (inlineArea instanceof Character) {
+            renderCharacter((Character) inlineArea);
+        } else if (inlineArea instanceof Viewport) {
+            renderViewport((Viewport) inlineArea);
+        } else if (inlineArea instanceof Leader) {
+            renderLeader((Leader) inlineArea);
+        }
+    }
+
+
+    /** @see org.apache.fop.render.Renderer */
+    public void renderCharacter(Character ch) {
+        currentBlockIPPosition += ch.getWidth();
+    }
+
+    /** @see org.apache.fop.render.Renderer */
+    public void renderInlineSpace(Space space) {
+        // an inline space moves the inline progression position
+        // for the current block by the width or height of the space
+        // it may also have styling (only on this object) that needs
+        // handling
+        currentBlockIPPosition += space.getWidth();
+    }
+
+    /** @see org.apache.fop.render.Renderer */
+    public void renderLeader(Leader area) {
+        currentBlockIPPosition += area.getWidth();
+    }
+
+    /** @see org.apache.fop.render.Renderer */
+    public void renderText(TextArea text) {
+        currentBlockIPPosition += text.getWidth();
+    }
+
+    /** @see org.apache.fop.render.Renderer */
+    public void renderInlineParent(InlineParent ip) {
+        int saveIP = currentBlockIPPosition;
+        Iterator iter = ip.getChildAreas().iterator();
+        while (iter.hasNext()) {
+            renderInlineArea((InlineArea) iter.next()); 
+        }
+        currentBlockIPPosition = saveIP + ip.getWidth();
+    }
+
     /** @see org.apache.fop.render.Renderer */
     public void renderViewport(Viewport viewport) {
         Area content = viewport.getContent();
@@ -677,40 +727,6 @@ public abstract class AbstractRenderer extends AbstractLogEnabled
         // Some renderers (ex. Text) don't support foreign objects.
     }
 
-    /** @see org.apache.fop.render.Renderer */
-    public void renderCharacter(Character ch) {
-        currentBlockIPPosition += ch.getWidth();
-    }
-
-    /** @see org.apache.fop.render.Renderer */
-    public void renderInlineSpace(Space space) {
-        // an inline space moves the inline progression position
-        // for the current block by the width or height of the space
-        // it may also have styling (only on this object) that needs
-        // handling
-        currentBlockIPPosition += space.getWidth();
-    }
-
-    /** @see org.apache.fop.render.Renderer */
-    public void renderLeader(Leader area) {
-        currentBlockIPPosition += area.getWidth();
-    }
-
-    /** @see org.apache.fop.render.Renderer */
-    public void renderText(TextArea text) {
-        currentBlockIPPosition += text.getWidth();
-    }
-
-    /** @see org.apache.fop.render.Renderer */
-    public void renderInlineParent(InlineParent ip) {
-        int saveIP = currentBlockIPPosition;
-        Iterator iter = ip.getChildAreas().iterator();
-        while (iter.hasNext()) {
-            ((InlineArea) iter.next()).acceptVisitor(this);
-        }
-        currentBlockIPPosition = saveIP + ip.getWidth();
-    }
-
     /**
      * Set the default xml handler for the given mime type.
      * @param mime MIME type
@@ -770,78 +786,5 @@ public abstract class AbstractRenderer extends AbstractLogEnabled
                     + "No handler defined for XML: " + namespace);
         }
     }
-
-    /**
-     * Render the specified Viewport.
-     * Required by InlineAreaVisitor interface, which is used to determine which
-     * InlineArea subclass should be rendered.
-     *
-     * @param viewport  The Viewport area to be rendered
-     * @see org.apache.fop.area.inline.InlineAreaVisitor
-     */
-    public void serveVisitor(Viewport viewport) {
-        renderViewport(viewport);
-    }
-
-    /**
-     * Render the specified Text.
-     * Required by InlineAreaVisitor interface, which is used to determine which
-     * InlineArea subclass should be rendered.
-     *
-     * @param area  The Text area to be rendered
-     * @see org.apache.fop.area.inline.InlineAreaVisitor
-     */
-    public void serveVisitor(TextArea area) {
-        renderText(area);
-    }
-
-    /**
-     * Render the specified InlineParent.
-     * Required by InlineAreaVisitor interface, which is used to determine which
-     * InlineArea subclass should be rendered.
-     *
-     * @param ip  The InlineParent area to be rendered
-     * @see org.apache.fop.area.inline.InlineAreaVisitor
-     */
-    public void serveVisitor(InlineParent ip) {
-        renderInlineParent(ip);
-    }
-
-    /**
-     * Render the specified Character.
-     * Required by InlineAreaVisitor interface, which is used to determine which
-     * InlineArea subclass should be rendered.
-     *
-     * @param ch  The Character area to be rendered
-     * @see org.apache.fop.area.inline.InlineAreaVisitor
-     */
-    public void serveVisitor(org.apache.fop.area.inline.Character ch) {
-        renderCharacter(ch);
-    }
-
-    /**
-     * Render the specified Space.
-     * Required by InlineAreaVisitor interface, which is used to determine which
-     * InlineArea subclass should be rendered.
-     *
-     * @param space  The Space area to be rendered
-     * @see org.apache.fop.area.inline.InlineAreaVisitor
-     */
-    public void serveVisitor(Space space) {
-        renderInlineSpace(space);
-    }
-
-    /**
-     * Render the specified Leader.
-     * Required by InlineAreaVisitor interface, which is used to determine which
-     * InlineArea subclass should be rendered.
-     *
-     * @param area  The Leader area to be rendered
-     * @see org.apache.fop.area.inline.InlineAreaVisitor
-     */
-    public void serveVisitor(Leader area) {
-        renderLeader(area);
-    }
-
 }
 
index 80e48d98d9b1864b44d169e889f8a2142b1bc2ea..0950e5dad6ed76a76124d9a0f60a0b25d5b617e1 100644 (file)
@@ -272,7 +272,7 @@ public class XMLRenderer extends AbstractRenderer {
 
             for (int count = 0; count < children.size(); count++) {
                 InlineArea inline = (InlineArea) children.get(count);
-                inline.acceptVisitor(this);
+                renderInlineArea(inline);
             }
 
             writeEndTag("</title>");
@@ -476,7 +476,7 @@ public class XMLRenderer extends AbstractRenderer {
         }
         writeStartTag("<inlineparent" + prop + ">");
         super.renderInlineParent(ip);
-    writeEndTag("</inlineparent>");
+        writeEndTag("</inlineparent>");
     }
 
     /**