]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
AreaTreeModel and its implementations moved out of AreaTree class.
authorOleg Tkachenko <olegt@apache.org>
Sun, 22 Dec 2002 22:40:31 +0000 (22:40 +0000)
committerOleg Tkachenko <olegt@apache.org>
Sun, 22 Dec 2002 22:40:31 +0000 (22:40 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@195789 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/apps/LayoutHandler.java
src/org/apache/fop/area/AreaTree.java
src/org/apache/fop/area/AreaTreeModel.java [new file with mode: 0644]
src/org/apache/fop/area/CachedRenderPagesModel.java
src/org/apache/fop/area/RenderPagesModel.java [new file with mode: 0644]
src/org/apache/fop/area/StorePagesModel.java [new file with mode: 0644]
src/org/apache/fop/tools/AreaTreeBuilder.java

index 3ea82f855f3f06803761d3ef6d9271e78d4aa5f1..523fef9464b30bd46b3b5a1b5ed748c0781e85e3 100644 (file)
@@ -17,9 +17,7 @@ import org.xml.sax.SAXException;
 
 // FOP
 import org.apache.fop.layout.FontInfo;
-import org.apache.fop.area.AreaTree;
-import org.apache.fop.area.Title;
-import org.apache.fop.area.TreeExt;
+import org.apache.fop.area.*;
 import org.apache.fop.render.Renderer;
 import org.apache.fop.fo.pagination.PageSequence;
 import org.apache.fop.fo.pagination.LayoutMasterSet;
@@ -78,7 +76,7 @@ public class LayoutHandler extends StructureHandler {
      * The current AreaTree for the PageSequence being rendered.
      */
     private AreaTree areaTree;
-    private AreaTree.AreaTreeModel atModel;
+    private AreaTreeModel atModel;
 
     /**
      * @param outputStream the stream that the result is rendered to
@@ -225,7 +223,7 @@ public class LayoutHandler extends StructureHandler {
      * @param model the store pages model
      * @throws FOPException if there is an error
      */
-    private void processAreaTree(AreaTree.StorePagesModel model) throws FOPException {
+    private void processAreaTree(StorePagesModel model) throws FOPException {
         int count = 0;
         int seqc = model.getPageSequenceCount();
         while (count < seqc) {
index afb5c72e15514675fae67ec18ce7853d8d33d281..2fc4ddd0412d45e8ea2d29e20ba671f6d9c4c862 100644 (file)
@@ -192,324 +192,5 @@ public class AreaTree {
         }
         model.endDocument();
     }
-
-    /**
-     * This is the model for the area tree object.
-     * The model implementation can handle the page sequence,
-     * page and extensions.
-     */
-    public abstract static class AreaTreeModel {
-        /**
-         * Start a page sequence on this model.
-         * @param title the title of the new page sequence
-         */
-        public abstract void startPageSequence(Title title);
-
-        /**
-         * Add a page to this moel.
-         * @param page the page to add to the model.
-         */
-        public abstract void addPage(PageViewport page);
-
-        /**
-         * Add an extension to this model.
-         * @param ext the extension to add
-         * @param when when the extension should be handled
-         */
-        public abstract void addExtension(TreeExt ext, int when);
-
-        /**
-         * Signal the end of the document for any processing.
-         */
-        public abstract void endDocument();
-    }
-
-    /**
-     * This class stores all the pages in the document
-     * for interactive agents.
-     * The pages are stored and can be retrieved in any order.
-     */
-    public static class StorePagesModel extends AreaTreeModel {
-        private List pageSequence = null;
-        private List titles = new ArrayList();
-        private List currSequence;
-        private List extensions = new ArrayList();
-
-        /**
-         * Create a new store pages model
-         */
-        public StorePagesModel() {
-        }
-
-        /**
-         * Start a new page sequence.
-         * This creates a new list for the pages in the new page sequence.
-         * @param title the title of the page sequence.
-         */
-        public void startPageSequence(Title title) {
-            titles.add(title);
-            if (pageSequence == null) {
-                pageSequence = new ArrayList();
-            }
-            currSequence = new ArrayList();
-            pageSequence.add(currSequence);
-        }
-
-        /**
-         * Add a page.
-         * @param page the page to add to the current page sequence
-         */
-        public void addPage(PageViewport page) {
-            currSequence.add(page);
-        }
-
-        /**
-         * Get the page sequence count.
-         * @return the number of page sequences in the document.
-         */
-        public int getPageSequenceCount() {
-            return pageSequence.size();
-        }
-
-        /**
-         * Get the title for a page sequence.
-         * @param count the page sequence count
-         * @return the title of the page sequence
-         */
-        public Title getTitle(int count) {
-            return (Title) titles.get(count);
-        }
-
-        /**
-         * Get the page count.
-         * @param seq the page sequence to count.
-         * @return returns the number of pages in a page sequence
-         */
-        public int getPageCount(int seq) {
-            List sequence = (List) pageSequence.get(seq);
-            return sequence.size();
-        }
-
-        /**
-         * Get the page for a position in the document.
-         * @param seq the page sequence number
-         * @param count the page count in the sequence
-         * @return the PageViewport for the particular page
-         */
-        public PageViewport getPage(int seq, int count) {
-            List sequence = (List) pageSequence.get(seq);
-            return (PageViewport) sequence.get(count);
-        }
-
-        /**
-         * Add an extension to the store page model.
-         * The extension is stored so that it can be retrieved in the
-         * appropriate position.
-         * @param ext the extension to add
-         * @param when when the extension should be handled
-         */
-        public void addExtension(TreeExt ext, int when) {
-            int seq, page;
-            switch(when) {
-                case TreeExt.IMMEDIATELY:
-                    seq = pageSequence == null ? 0 : pageSequence.size();
-                    page = currSequence == null ? 0 : currSequence.size();
-                break;
-                case TreeExt.AFTER_PAGE:
-                break;
-                case TreeExt.END_OF_DOC:
-                break;
-            }
-            extensions.add(ext);
-        }
-
-        /**
-         * Get the list of extensions that apply at a particular
-         * position in the document.
-         * @param seq the page sequence number
-         * @param count the page count in the sequence
-         * @return the list of extensions
-         */
-        public List getExtensions(int seq, int count) {
-            return null;
-        }
-
-        /**
-         * Get the end of document extensions for this stroe pages model.
-         * @return the list of end extensions
-         */
-        public List getEndExtensions() {
-            return extensions;
-        }
-
-        /**
-         * End document, do nothing.
-         */
-        public void endDocument() {
-        }
-    }
-
-    /**
-     * This uses the store pages model to store the pages
-     * each page is either rendered if ready or prepared
-     * for later rendering.
-     * Once a page is rendered it is cleared to release the
-     * contents but the PageViewport is retained. So even
-     * though the pages are stored the contents are discarded.
-     */
-    public static class RenderPagesModel extends StorePagesModel {
-        /**
-         * The renderer that will render the pages.
-         */
-        protected Renderer renderer;
-        /**
-         * Pages that have been prepared but not rendered yet.
-         */
-        protected List prepared = new ArrayList();
-        private List pendingExt = new ArrayList();
-        private List endDocExt = new ArrayList();
-
-        /**
-         * Create a new render pages model with the given renderer.
-         * @param rend the renderer to render pages to
-         */
-        public RenderPagesModel(Renderer rend) {
-            renderer = rend;
-        }
-
-        /**
-         * Start a new page sequence.
-         * This tells the renderer that a new page sequence has
-         * started with the given title.
-         * @param title the title of the new page sequence
-         */
-        public void startPageSequence(Title title) {
-            super.startPageSequence(title);
-            renderer.startPageSequence(title);
-        }
-
-        /**
-         * Add a page to the render page model.
-         * If the page is finished it can be rendered immediately.
-         * If the page needs resolving then if the renderer supports
-         * out of order rendering it can prepare the page. Otherwise
-         * the page is added to a queue.
-         * @param page the page to add to the model
-         */
-        public void addPage(PageViewport page) {
-            super.addPage(page);
-
-            // for links the renderer needs to prepare the page
-            // it is more appropriate to do this after queued pages but
-            // it will mean that the renderer has not prepared a page that
-            // could be referenced
-            boolean done = renderer.supportsOutOfOrder() && page.isResolved();
-            if (done) {
-                try {
-                    renderer.renderPage(page);
-                } catch (Exception e) {
-                    // use error handler to handle this FOP or IO Exception
-                    e.printStackTrace();
-                }
-                page.clear();
-            } else {
-                preparePage(page);
-            }
-
-
-            // check prepared pages
-            boolean cont = checkPreparedPages(page);
-
-            if (cont) {
-                renderExtensions(pendingExt);
-                pendingExt.clear();
-            }
-        }
-
-        /**
-         * Check prepared pages
-         * @return true if the current page should be rendered
-         *         false if the renderer doesn't support out of order
-         *         rendering and there are pending pages
-         */
-        protected boolean checkPreparedPages(PageViewport newpage) {
-            for (Iterator iter = prepared.iterator(); iter.hasNext();) {
-                PageViewport p = (PageViewport)iter.next();
-                if (p.isResolved()) {
-                    try {
-                        renderer.renderPage(p);
-                    } catch (Exception e) {
-                        // use error handler to handle this FOP or IO Exception
-                        e.printStackTrace();
-                    }
-                    p.clear();
-                    iter.remove();
-                } else {
-                    // if keeping order then stop at first page not resolved
-                    if (!renderer.supportsOutOfOrder()) {
-                        break;
-                    }
-                }
-            }
-            return renderer.supportsOutOfOrder() || prepared.isEmpty();
-        }
-
-        /**
-         * Prepare a page.
-         * An unresolved page can be prepared if the renderer supports
-         * it and the page will be rendered later.
-         * @param page the page to prepare
-         */
-        protected void preparePage(PageViewport page) {
-            if (renderer.supportsOutOfOrder()) {
-                renderer.preparePage(page);
-            }
-            prepared.add(page);
-        }
-
-        /**
-         * Add an extension to this model.
-         * If handle immediately then send directly to the renderer.
-         * The after page ones are handled after the next page is added.
-         * End of document extensions are added to a list to be
-         * handled at the end.
-         * @param ext the extension
-         * @param when when to render the extension
-         */
-        public void addExtension(TreeExt ext, int when) {
-            switch(when) {
-                case TreeExt.IMMEDIATELY:
-                    renderer.renderExtension(ext);
-                break;
-                case TreeExt.AFTER_PAGE:
-                    pendingExt.add(ext);
-                break;
-                case TreeExt.END_OF_DOC:
-                    endDocExt.add(ext);
-                break;
-            }
-        }
-
-        private void renderExtensions(List list) {
-            for (int count = 0; count < list.size(); count++) {
-                TreeExt ext = (TreeExt)list.get(count);
-                renderer.renderExtension(ext);
-            }
-        }
-
-        /**
-         * End the document. Render any end document extensions.
-         */
-        public void endDocument() {
-            // render any pages that had unresolved ids
-            checkPreparedPages(null);
-
-            renderExtensions(pendingExt);
-            pendingExt.clear();
-
-            renderExtensions(endDocExt);
-        }
-    }
-
 }
 
diff --git a/src/org/apache/fop/area/AreaTreeModel.java b/src/org/apache/fop/area/AreaTreeModel.java
new file mode 100644 (file)
index 0000000..2c99f1d
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+* $Id$
+* Copyright (C) 2002 The Apache Software Foundation. All rights reserved.
+* For details on use and redistribution please refer to the
+* LICENSE file included with these sources.
+*/
+
+package org.apache.fop.area;
+
+/**
+ * This is the model for the area tree object.
+ * The model implementation can handle the page sequence,
+ * page and extensions.
+ */
+public abstract class AreaTreeModel {
+    /**
+     * Start a page sequence on this model.
+     * @param title the title of the new page sequence
+     */
+    public abstract void startPageSequence(Title title);
+
+    /**
+     * Add a page to this moel.
+     * @param page the page to add to the model.
+     */
+    public abstract void addPage(PageViewport page);
+
+    /**
+     * Add an extension to this model.
+     * @param ext the extension to add
+     * @param when when the extension should be handled
+     */
+    public abstract void addExtension(TreeExt ext, int when);
+
+    /**
+     * Signal the end of the document for any processing.
+     */
+    public abstract void endDocument();
+}
index f18c66967493831499e66deb1b30e50df87073e4..32130341e4e969944b87a72cebc7ab63e0468439 100644 (file)
@@ -27,7 +27,7 @@ import java.io.BufferedInputStream;
  * the page contents to a file and once the page is resolved
  * the contents a reloaded.
  */
-public class CachedRenderPagesModel extends AreaTree.RenderPagesModel {
+public class CachedRenderPagesModel extends RenderPagesModel {
     private Map pageMap = new HashMap();
 
     /**
diff --git a/src/org/apache/fop/area/RenderPagesModel.java b/src/org/apache/fop/area/RenderPagesModel.java
new file mode 100644 (file)
index 0000000..6292227
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+* $Id$
+* Copyright (C) 2002 The Apache Software Foundation. All rights reserved.
+* For details on use and redistribution please refer to the
+* LICENSE file included with these sources.
+*/
+
+package org.apache.fop.area;
+
+// FOP
+import org.apache.fop.render.Renderer;
+
+// Java
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * This uses the store pages model to store the pages
+ * each page is either rendered if ready or prepared
+ * for later rendering.
+ * Once a page is rendered it is cleared to release the
+ * contents but the PageViewport is retained. So even
+ * though the pages are stored the contents are discarded.
+ */
+public class RenderPagesModel extends StorePagesModel {
+    /**
+     * The renderer that will render the pages.
+     */
+    protected Renderer renderer;
+    /**
+     * Pages that have been prepared but not rendered yet.
+     */
+    protected List prepared = new ArrayList();
+    private List pendingExt = new ArrayList();
+    private List endDocExt = new ArrayList();
+
+    /**
+     * Create a new render pages model with the given renderer.
+     * @param rend the renderer to render pages to
+     */
+    public RenderPagesModel(Renderer rend) {
+        renderer = rend;
+    }
+
+    /**
+     * Start a new page sequence.
+     * This tells the renderer that a new page sequence has
+     * started with the given title.
+     * @param title the title of the new page sequence
+     */
+    public void startPageSequence(Title title) {
+        super.startPageSequence(title);
+        renderer.startPageSequence(title);
+    }
+
+    /**
+     * Add a page to the render page model.
+     * If the page is finished it can be rendered immediately.
+     * If the page needs resolving then if the renderer supports
+     * out of order rendering it can prepare the page. Otherwise
+     * the page is added to a queue.
+     * @param page the page to add to the model
+     */
+    public void addPage(PageViewport page) {
+        super.addPage(page);
+
+        // for links the renderer needs to prepare the page
+        // it is more appropriate to do this after queued pages but
+        // it will mean that the renderer has not prepared a page that
+        // could be referenced
+        boolean done = renderer.supportsOutOfOrder() && page.isResolved();
+        if (done) {
+            try {
+                renderer.renderPage(page);
+            } catch (Exception e) {
+                // use error handler to handle this FOP or IO Exception
+                e.printStackTrace();
+            }
+            page.clear();
+        } else {
+            preparePage(page);
+        }
+
+
+        // check prepared pages
+        boolean cont = checkPreparedPages(page);
+
+        if (cont) {
+            renderExtensions(pendingExt);
+            pendingExt.clear();
+        }
+    }
+
+    /**
+     * Check prepared pages
+     * @return true if the current page should be rendered
+     *         false if the renderer doesn't support out of order
+     *         rendering and there are pending pages
+     */
+    protected boolean checkPreparedPages(PageViewport newpage) {
+        for (Iterator iter = prepared.iterator(); iter.hasNext();) {
+            PageViewport p = (PageViewport)iter.next();
+            if (p.isResolved()) {
+                try {
+                    renderer.renderPage(p);
+                } catch (Exception e) {
+                    // use error handler to handle this FOP or IO Exception
+                    e.printStackTrace();
+                }
+                p.clear();
+                iter.remove();
+            } else {
+                // if keeping order then stop at first page not resolved
+                if (!renderer.supportsOutOfOrder()) {
+                    break;
+                }
+            }
+        }
+        return renderer.supportsOutOfOrder() || prepared.isEmpty();
+    }
+
+    /**
+     * Prepare a page.
+     * An unresolved page can be prepared if the renderer supports
+     * it and the page will be rendered later.
+     * @param page the page to prepare
+     */
+    protected void preparePage(PageViewport page) {
+        if (renderer.supportsOutOfOrder()) {
+            renderer.preparePage(page);
+        }
+        prepared.add(page);
+    }
+
+    /**
+     * Add an extension to this model.
+     * If handle immediately then send directly to the renderer.
+     * The after page ones are handled after the next page is added.
+     * End of document extensions are added to a list to be
+     * handled at the end.
+     * @param ext the extension
+     * @param when when to render the extension
+     */
+    public void addExtension(TreeExt ext, int when) {
+        switch(when) {
+            case TreeExt.IMMEDIATELY:
+                renderer.renderExtension(ext);
+                break;
+            case TreeExt.AFTER_PAGE:
+                pendingExt.add(ext);
+                break;
+            case TreeExt.END_OF_DOC:
+                endDocExt.add(ext);
+                break;
+        }
+    }
+
+    private void renderExtensions(List list) {
+        for (int count = 0; count < list.size(); count++) {
+            TreeExt ext = (TreeExt)list.get(count);
+            renderer.renderExtension(ext);
+        }
+    }
+
+    /**
+     * End the document. Render any end document extensions.
+     */
+    public void endDocument() {
+        // render any pages that had unresolved ids
+        checkPreparedPages(null);
+
+        renderExtensions(pendingExt);
+        pendingExt.clear();
+
+        renderExtensions(endDocExt);
+    }
+}
+
diff --git a/src/org/apache/fop/area/StorePagesModel.java b/src/org/apache/fop/area/StorePagesModel.java
new file mode 100644 (file)
index 0000000..0005ad3
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+* $Id$
+* Copyright (C) 2002 The Apache Software Foundation. All rights reserved.
+* For details on use and redistribution please refer to the
+* LICENSE file included with these sources.
+*/
+
+package org.apache.fop.area;
+
+// Java
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * This class stores all the pages in the document
+ * for interactive agents.
+ * The pages are stored and can be retrieved in any order.
+ */
+public class StorePagesModel extends AreaTreeModel {
+    private List pageSequence = null;
+    private List titles = new ArrayList();
+    private List currSequence;
+    private List extensions = new ArrayList();
+
+    /**
+     * Create a new store pages model
+     */
+    public StorePagesModel() {
+    }
+
+    /**
+     * Start a new page sequence.
+     * This creates a new list for the pages in the new page sequence.
+     * @param title the title of the page sequence.
+     */
+    public void startPageSequence(Title title) {
+        titles.add(title);
+        if (pageSequence == null) {
+            pageSequence = new ArrayList();
+        }
+        currSequence = new ArrayList();
+        pageSequence.add(currSequence);
+    }
+
+    /**
+     * Add a page.
+     * @param page the page to add to the current page sequence
+     */
+    public void addPage(PageViewport page) {
+        currSequence.add(page);
+    }
+
+    /**
+     * Get the page sequence count.
+     * @return the number of page sequences in the document.
+     */
+    public int getPageSequenceCount() {
+        return pageSequence.size();
+    }
+
+    /**
+     * Get the title for a page sequence.
+     * @param count the page sequence count
+     * @return the title of the page sequence
+     */
+    public Title getTitle(int count) {
+        return (Title) titles.get(count);
+    }
+
+    /**
+     * Get the page count.
+     * @param seq the page sequence to count.
+     * @return returns the number of pages in a page sequence
+     */
+    public int getPageCount(int seq) {
+        List sequence = (List) pageSequence.get(seq);
+        return sequence.size();
+    }
+
+    /**
+     * Get the page for a position in the document.
+     * @param seq the page sequence number
+     * @param count the page count in the sequence
+     * @return the PageViewport for the particular page
+     */
+    public PageViewport getPage(int seq, int count) {
+        List sequence = (List) pageSequence.get(seq);
+        return (PageViewport) sequence.get(count);
+    }
+
+    /**
+     * Add an extension to the store page model.
+     * The extension is stored so that it can be retrieved in the
+     * appropriate position.
+     * @param ext the extension to add
+     * @param when when the extension should be handled
+     */
+    public void addExtension(TreeExt ext, int when) {
+        int seq, page;
+        switch(when) {
+            case TreeExt.IMMEDIATELY:
+                seq = pageSequence == null ? 0 : pageSequence.size();
+                page = currSequence == null ? 0 : currSequence.size();
+                break;
+            case TreeExt.AFTER_PAGE:
+                break;
+            case TreeExt.END_OF_DOC:
+                break;
+        }
+        extensions.add(ext);
+    }
+
+    /**
+     * Get the list of extensions that apply at a particular
+     * position in the document.
+     * @param seq the page sequence number
+     * @param count the page count in the sequence
+     * @return the list of extensions
+     */
+    public List getExtensions(int seq, int count) {
+        return null;
+    }
+
+    /**
+     * Get the end of document extensions for this stroe pages model.
+     * @return the list of end extensions
+     */
+    public List getEndExtensions() {
+        return extensions;
+    }
+
+    /**
+     * End document, do nothing.
+     */
+    public void endDocument() {
+    }
+}
\ No newline at end of file
index 467c40b0a6e56e3523052c6bdd21cdd679cc466c..ce7d67199f2430af96bca89221228f534f75a5a7 100644 (file)
@@ -7,7 +7,7 @@
 
 package org.apache.fop.tools;
 
-import org.apache.fop.apps.*;
+// FOP
 import org.apache.fop.area.*;
 import org.apache.fop.area.inline.*;
 import org.apache.fop.area.inline.Character;
@@ -21,21 +21,24 @@ import org.apache.fop.layout.FontMetric;
 import org.apache.fop.fo.FOUserAgent;
 import org.apache.fop.fo.properties.RuleStyle;
 
+// Avalon
 import org.apache.avalon.framework.logger.ConsoleLogger;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
 
+// Java
 import java.io.*;
 import java.util.*;
-
 import java.awt.geom.Rectangle2D;
 import java.util.StringTokenizer;
 
+// JAXP
 import javax.xml.parsers.DocumentBuilderFactory;
 
+// DOM
 import org.w3c.dom.*;
 
+// Batik
 import org.apache.batik.dom.svg.SVGDOMImplementation;
-import org.apache.batik.dom.util.DOMUtilities;
 
 /**
  * Area tree tester.
@@ -88,7 +91,7 @@ public class AreaTreeBuilder extends AbstractLogEnabled {
         setupLogger(ua);
         rend.setUserAgent(ua);
 
-        AreaTree.StorePagesModel sm = AreaTree.createStorePagesModel();
+        StorePagesModel sm = AreaTree.createStorePagesModel();
         TreeLoader tl = new TreeLoader(fi);
         tl.setTreeModel(sm);
         try {
@@ -101,7 +104,7 @@ public class AreaTreeBuilder extends AbstractLogEnabled {
         }
     }
 
-    protected void renderAreaTree(AreaTree.StorePagesModel sm,
+    protected void renderAreaTree(StorePagesModel sm,
                                   Renderer rend, String out) {
         try {
             OutputStream os =
@@ -153,7 +156,7 @@ public class AreaTreeBuilder extends AbstractLogEnabled {
 // the xml format is the same as the xml renderer output
 class TreeLoader {
     AreaTree areaTree;
-    AreaTree.AreaTreeModel model;
+    AreaTreeModel model;
     FontInfo fontInfo;
     FontState currentFontState;
 
@@ -161,7 +164,7 @@ class TreeLoader {
         fontInfo = fi;
     }
 
-    public void setTreeModel(AreaTree.AreaTreeModel mo) {
+    public void setTreeModel(AreaTreeModel mo) {
         model = mo;
     }