]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
1.) Returned to recursion for FOEventHandler.
authorGlen Mazza <gmazza@apache.org>
Mon, 13 Sep 2004 03:46:04 +0000 (03:46 +0000)
committerGlen Mazza <gmazza@apache.org>
Mon, 13 Sep 2004 03:46:04 +0000 (03:46 +0000)
2.)  InstreamForeignObject validation changed to accomodate Finn's validation
changes.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197945 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fo/FONode.java
src/java/org/apache/fop/fo/FOTreeBuilder.java
src/java/org/apache/fop/fo/flow/InstreamForeignObject.java
src/java/org/apache/fop/fo/pagination/Root.java

index 0b422bc8b46446481500ed34f6bf2db228164240..24e345a00883d3457d1814202f9ad5d5deef094b 100644 (file)
@@ -41,12 +41,6 @@ public abstract class FONode {
 
     protected static String FO_URI = FOElementMapping.URI;
 
-    /** 
-     * FOEventHandler that handles FO events occurring 
-     * during FO Tree processing.
-     */
-    protected static FOEventHandler foEventHandler = null;
-
     /** Parent FO node */
     protected FONode parent;
 
@@ -78,21 +72,13 @@ public abstract class FONode {
         }
     }
 
-    /**
-     * Sets the FOEventHandler that the FOTree processing fires events to
-     * @param eventHandler the FOEventHandler subclass to send FO events to
-     */
-    public static void setFOEventHandler(FOEventHandler eventHandler) {
-        FONode.foEventHandler = eventHandler;
-    } 
-
     /**
      * Recursively goes up the FOTree hierarchy until the fo:root is found,
      * which returns the parent FOEventHandler.
      * @return the FOEventHandler object that is the parent of the FO Tree
      */
     public FOEventHandler getFOEventHandler() {
-        return FONode.foEventHandler;
+        return parent.getFOEventHandler();
     }
 
     /**
index 38bd0ef18f66588125e118d17bfb581a888ef622..cda21f8e044820534e8aaca84025864922e397ae 100644 (file)
@@ -218,7 +218,6 @@ public class FOTreeBuilder extends DefaultHandler {
      */
     public void startDocument() throws SAXException {
         rootFObj = null;    // allows FOTreeBuilder to be reused
-        FONode.setFOEventHandler(foEventHandler);
         if (log.isDebugEnabled()) {
             log.debug("Building formatting object tree");
         }
@@ -278,6 +277,7 @@ public class FOTreeBuilder extends DefaultHandler {
 
         if (rootFObj == null) {
             rootFObj = (Root) foNode;
+            rootFObj.setFOEventHandler(foEventHandler);
         } else {
             currentFObj.addChildNode(foNode);
         }
index bbb92af802d4b4b6ab42c6c6e60629852b3f4775..6505db5f7bb906a8ecd1db4b2eb5034278148e21 100644 (file)
@@ -37,8 +37,6 @@ import org.apache.fop.fo.FObj;
  */
 public class InstreamForeignObject extends FObj {
 
-    boolean hasNonXSLNamespaceElement = false;
-
     /**
      * constructs an instream-foreign-object object (called by Maker).
      *
@@ -56,10 +54,8 @@ public class InstreamForeignObject extends FObj {
         throws SAXParseException {
         if (nsURI == FO_URI) {
             invalidChildError(loc, nsURI, localName);
-        } else if (hasNonXSLNamespaceElement) {
+        } else if (childNodes != null) {
             tooManyNodesError(loc, "child element");
-        } else {
-            hasNonXSLNamespaceElement = true;
         }
     }
 
@@ -69,7 +65,7 @@ public class InstreamForeignObject extends FObj {
      * @see org.apache.fop.fo.FONode#end
      */
     protected void endOfNode() throws SAXParseException {
-        if (!hasNonXSLNamespaceElement) {
+        if (childNodes == null) {
             missingChildElementError("one (1) non-XSL namespace child");
         }
     }
index 4ef17ddeca9538b30eb662a0c0d89fbcfcf9b164..da3f642bf42af9f8648e824fe304bd44c645cd60 100644 (file)
@@ -28,6 +28,7 @@ import org.xml.sax.SAXParseException;
 // FOP
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
+import org.apache.fop.fo.FOEventHandler;
 import org.apache.fop.fo.extensions.ExtensionElementMapping;
 import org.apache.fop.fo.extensions.Bookmarks;
 
@@ -49,6 +50,11 @@ public class Root extends FObj {
     private int runningPageNumberCounter = 0;
 
     /**
+     * FOEventHandler object for this FO Tree
+     */
+    private FOEventHandler foEventHandler = null;
+     
+     /**
      * @see org.apache.fop.fo.FONode#FONode(FONode)
      */
     public Root(FONode parent) {
@@ -107,6 +113,25 @@ public class Root extends FObj {
     }
 
     /**
+     * Sets the FOEventHandler object that this Root is attached to
+     * @param foEventHandler the FOEventHandler object
+     */
+    public void setFOEventHandler(FOEventHandler foEventHandler) {
+        this.foEventHandler = foEventHandler;
+    }
+
+    /**         
+     * This method overrides the FONode version. The FONode version calls the   
+     * method by the same name for the parent object. Since Root is at the top          
+     * of the tree, it returns the actual FOEventHandler object. Thus, any FONode       
+     * can use this chain to find which FOEventHandler it is being built for.   
+     * @return the FOEventHandler implementation that this Root is attached to          
+     */         
+    public FOEventHandler getFOEventHandler() {         
+        return foEventHandler;          
+    }
+
+     /**
      * Returns the number of pages generated (over all PageSequence instances).
      * @return the number of pages
      */