]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Move code to where it belongs: if it only applies to RetrieveTableMarker, it does...
authorAndreas L. Delmelle <adelmelle@apache.org>
Sun, 3 Jan 2016 14:30:10 +0000 (14:30 +0000)
committerAndreas L. Delmelle <adelmelle@apache.org>
Sun, 3 Jan 2016 14:30:10 +0000 (14:30 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1722725 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fo/FObj.java
src/java/org/apache/fop/fo/flow/RetrieveTableMarker.java

index 1ef9af8f22aee8dcee6e53650cbcb35aa28b9b6c..ce983dfb207de8e549b810f1a9d7648fe11bc537 100644 (file)
@@ -21,7 +21,6 @@ package org.apache.fop.fo;
 
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -36,7 +35,6 @@ import org.apache.xmlgraphics.util.QName;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.extensions.ExtensionAttachment;
 import org.apache.fop.fo.flow.Marker;
-import org.apache.fop.fo.flow.table.TableCell;
 import org.apache.fop.fo.properties.Property;
 import org.apache.fop.fo.properties.PropertyMaker;
 
@@ -327,7 +325,7 @@ public abstract class FObj extends FONode implements Constants {
      * at the passed-in node (= first call to iterator.next() will
      * return childNode)
      * @param childNode First node in the iterator
-     * @return A ListIterator or null if childNode isn't a child of
+     * @return A FONodeIterator or null if childNode isn't a child of
      * this FObj.
      */
     public FONodeIterator getChildNodes(FONode childNode) {
@@ -372,7 +370,7 @@ public abstract class FObj extends FONode implements Constants {
         String mcname = marker.getMarkerClassName();
         if (firstChild != null) {
             // check for empty childNodes
-            for (Iterator<FONode> iter = getChildNodes(); iter.hasNext();) {
+            for (FONodeIterator iter = getChildNodes(); iter.hasNext();) {
                 FONode node = iter.next();
                 if (node instanceof FObj
                         || (node instanceof FOText
@@ -553,11 +551,6 @@ public abstract class FObj extends FONode implements Constants {
         int found = 1;
         FONode temp = getParent();
         while (temp != null) {
-            if (temp instanceof TableCell && (ancestorID == FO_TABLE_HEADER || ancestorID == FO_TABLE_FOOTER)) {
-                // note that if the retrieve-table-marker is not in a table-header/footer an exception is
-                // thrown, so no need to reset this flag in that case
-                ((TableCell) temp).flagAsHavingRetrieveTableMarker();
-            }
             if (temp.getNameId() == ancestorID) {
                 return found;
             }
index 57ae9e7bb1e8e1fee5a7604a014653afbf9459e7..8340736c7c74b2ceb18c8f87277dfca19165371a 100644 (file)
@@ -25,6 +25,7 @@ import org.xml.sax.Locator;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.flow.table.TableCell;
 
 /**
  * Class modelling the <a href="http://www.w3.org/TR/xsl/#fo_retrieve-table-marker">
@@ -80,6 +81,33 @@ public class RetrieveTableMarker extends AbstractRetrieveMarker {
         getFOEventHandler().endRetrieveTableMarker(this);
     }
 
+    /**
+     * Overridden to flag the ancestor table-cell.
+     *
+     * @param ancestorID    ID of node name to check for (e.g., FO_ROOT)
+     * @return number of levels above FO where ancestor exists,
+     *         -1 if not found
+     */
+    @Override
+    protected int findAncestor(int ancestorID) {
+        int found = 1;
+        FONode temp = getParent();
+        while (temp != null) {
+            if (temp instanceof TableCell
+                    && (ancestorID == FO_TABLE_HEADER || ancestorID == FO_TABLE_FOOTER)) {
+                // note that if the retrieve-table-marker is not in a table-header/footer an exception is
+                // thrown, so no need to reset this flag in that case
+                ((TableCell) temp).flagAsHavingRetrieveTableMarker();
+            }
+            if (temp.getNameId() == ancestorID) {
+                return found;
+            }
+            found += 1;
+            temp = temp.getParent();
+        }
+        return -1;
+    }
+
     /**
      * Return the value for the <code>retrieve-position-within-table</code>
      * property