fop-commits  

svn commit: r655614 - in /xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table: CollapsingBorderResolver.java GridUnit.java Table.java TableBody.java TableCell.java TableColumn.java TableFObj.j

vhennebert
Mon, 12 May 2008 12:38:05 -0700

Author: vhennebert
Date: Mon May 12 12:37:39 2008
New Revision: 655614

URL: http://svn.apache.org/viewvc?rev=655614&view=rev
Log:
Put the resolutions of collapsed borders together into the 
CollapsingBorderResolver class.
The previous scheme allowed for early resolution of borders where possible, but 
made it hard to understand since the resolution was spread in the various table 
classes. Now everything is done inside a single class

Modified:
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/CollapsingBorderResolver.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/GridUnit.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/Table.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableBody.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableCell.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableColumn.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableFObj.java
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableRow.java

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/CollapsingBorderResolver.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/CollapsingBorderResolver.java?rev=655614&r1=655613&r2=655614&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/CollapsingBorderResolver.java
 (original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/CollapsingBorderResolver.java
 Mon May 12 12:37:39 2008
@@ -24,6 +24,7 @@
 import java.util.List;
 
 import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
+import org.apache.fop.layoutmgr.table.CollapsingBorderModel;
 
 /**
  * A class that implements the border-collapsing model.
@@ -32,6 +33,8 @@
 
     private Table table;
 
+    private CollapsingBorderModel collapsingBorderModel;
+
     /**
      * The previously registered row, either in the header or the body(-ies), 
but not in
      * the footer (handled separately).
@@ -74,6 +77,9 @@
 
         protected boolean firstInPart;
 
+        private BorderSpecification borderStartTableAndBody;
+        private BorderSpecification borderEndTableAndBody;
+
         /**
          * Integrates border-before specified on the table and its column.
          * 
@@ -174,6 +180,10 @@
         void startPart(TableBody part) {
             tablePart = part;
             firstInPart = true;
+            borderStartTableAndBody = 
collapsingBorderModel.determineWinner(table.borderStart,
+                    tablePart.borderStart);
+            borderEndTableAndBody = 
collapsingBorderModel.determineWinner(table.borderEnd,
+                    tablePart.borderEnd);
         }
 
         /**
@@ -188,6 +198,8 @@
          * @param container the containing element
          */
         void endRow(List/*<GridUnit>*/ row, TableCellContainer container) {
+            BorderSpecification borderStart = borderStartTableAndBody;
+            BorderSpecification borderEnd = borderEndTableAndBody;
             // Resolve before- and after-borders for the table-row
             if (container instanceof TableRow) {
                 TableRow tableRow = (TableRow) container;
@@ -200,6 +212,10 @@
                     
gu.integrateBorderSegment(CommonBorderPaddingBackground.AFTER, tableRow,
                             last, last, true);
                 }
+                borderStart = 
collapsingBorderModel.determineWinner(borderStart,
+                        tableRow.borderStart);
+                borderEnd = collapsingBorderModel.determineWinner(borderEnd,
+                        tableRow.borderEnd);
             }
             if (firstInPart) {
                 // Integrate the border-before of the part
@@ -215,7 +231,7 @@
             Iterator colIter = table.getColumns().iterator();
             TableColumn col = (TableColumn) colIter.next();
             gu.integrateBorderSegment(CommonBorderPaddingBackground.START, 
col);
-            gu.integrateBorderSegment(CommonBorderPaddingBackground.START, 
container);
+            gu.integrateBorderSegment(CommonBorderPaddingBackground.START, 
borderStart);
             while (guIter.hasNext()) {
                 GridUnit nextGU = (GridUnit) guIter.next();
                 TableColumn nextCol = (TableColumn) colIter.next();
@@ -228,7 +244,7 @@
                 col = nextCol;
             }
             gu.integrateBorderSegment(CommonBorderPaddingBackground.END, col);
-            gu.integrateBorderSegment(CommonBorderPaddingBackground.END, 
container);
+            gu.integrateBorderSegment(CommonBorderPaddingBackground.END, 
borderEnd);
         }
 
         void endPart() {
@@ -371,7 +387,26 @@
 
     CollapsingBorderResolver(Table table) {
         this.table = table;
+        collapsingBorderModel = 
CollapsingBorderModel.getBorderModelFor(table.getBorderCollapse());
         firstInTable = true;
+        // Resolve before and after borders between the table and each 
table-column
+        int index = 0;
+        do {
+            TableColumn col = table.getColumn(index);
+            // See endRow method in ResolverInHeader for an explanation of the 
hack
+            col.borderBefore.integrateSegment(table.borderBefore, true, false, 
true);
+            col.borderBefore.leadingTrailing = col.borderBefore.rest;
+            col.borderAfter.integrateSegment(table.borderAfter, true, false, 
true);
+            col.borderAfter.leadingTrailing = col.borderAfter.rest;
+            /*
+             * TODO The border resolution must be done only once for each 
table column,
+             * even if it's repeated; otherwise, re-resolving against the 
table's borders
+             * will lead to null border specifications.
+             * 
+             * Eventually table columns should probably be cloned instead.
+             */
+            index += col.getNumberColumnsRepeated();
+        } while (index < table.getNumberOfColumns());
     }
 
     /** [EMAIL PROTECTED] */
@@ -388,9 +423,7 @@
                 // No header, leading borders determined by the table
                 leadingBorders = new ArrayList(table.getNumberOfColumns());
                 for (Iterator colIter = table.getColumns().iterator(); 
colIter.hasNext();) {
-                    // See endRow method in ResolverInHeader for an 
explanation of the hack
                     ConditionalBorder border = ((TableColumn) 
colIter.next()).borderBefore;
-                    border.leadingTrailing = border.rest;
                     leadingBorders.add(border);
                 }
             }
@@ -402,9 +435,7 @@
                     // No footer, trailing borders determined by the table
                     trailingBorders = new 
ArrayList(table.getNumberOfColumns());
                     for (Iterator colIter = table.getColumns().iterator(); 
colIter.hasNext();) {
-                        // See endRow method in ResolverInHeader for an 
explanation of the hack
                         ConditionalBorder border = ((TableColumn) 
colIter.next()).borderAfter;
-                        border.leadingTrailing = border.rest;
                         trailingBorders.add(border);
                     }
                 }

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/GridUnit.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/GridUnit.java?rev=655614&r1=655613&r2=655614&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/GridUnit.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/GridUnit.java 
Mon May 12 12:37:39 2008
@@ -374,6 +374,24 @@
         }
     }
 
+    /**
+     * For the given side, integrates in the conflict resolution the given 
border segment.
+     * 
+     * @param side the side to consider (one of 
CommonBorderPaddingBackground.START|END)
+     * @param segment a border specification to integrate at the given side
+     */
+    void integrateBorderSegment(int side, BorderSpecification segment) {
+        switch(side) {
+        case CommonBorderPaddingBackground.START:
+            borderStart = collapsingBorderModel.determineWinner(borderStart, 
segment);
+            break;
+        case CommonBorderPaddingBackground.END:
+            borderEnd = collapsingBorderModel.determineWinner(borderEnd, 
segment);
+            break;
+        default: assert false;
+        }
+    }
+
     void integrateCompetingBorder(int side, ConditionalBorder competitor,
             boolean withNormal, boolean withLeadingTrailing, boolean withRest) 
{
         switch (side) {

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/Table.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/Table.java?rev=655614&r1=655613&r2=655614&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/Table.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/Table.java Mon 
May 12 12:37:39 2008
@@ -265,7 +265,7 @@
         case FO_TABLE_HEADER:
         case FO_TABLE_FOOTER:
         case FO_TABLE_BODY:
-            if (!columnsFinalized) {
+            if (!inMarker() && !columnsFinalized) {
                 columnsFinalized = true;
                 if (hasExplicitColumns) {
                     finalizeColumns();
@@ -291,14 +291,6 @@
         }
     }
 
-    /** [EMAIL PROTECTED] */
-    protected void setCollapsedBorders() {
-        createBorder(CommonBorderPaddingBackground.START);
-        createBorder(CommonBorderPaddingBackground.END);
-        createBorder(CommonBorderPaddingBackground.BEFORE);
-        createBorder(CommonBorderPaddingBackground.AFTER);
-    }
-
     private void finalizeColumns() throws FOPException {
         for (int i = 0; i < columns.size(); i++) {
             if (columns.get(i) == null) {

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableBody.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableBody.java?rev=655614&r1=655613&r2=655614&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableBody.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableBody.java 
Mon May 12 12:37:39 2008
@@ -211,15 +211,6 @@
         super.addChildNode(child);
     }
 
-    /** {inheritDoc} */
-    protected void setCollapsedBorders() {
-        Table table = (Table) parent;
-        createBorder(CommonBorderPaddingBackground.START, table);
-        createBorder(CommonBorderPaddingBackground.END, table);
-        createBorder(CommonBorderPaddingBackground.BEFORE);
-        createBorder(CommonBorderPaddingBackground.AFTER);
-    }
-
     void addRowGroup(List rowGroup) {
         rowGroups.add(rowGroup);
     }

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableCell.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableCell.java?rev=655614&r1=655613&r2=655614&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableCell.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableCell.java 
Mon May 12 12:37:39 2008
@@ -134,14 +134,6 @@
     }
 
     /** [EMAIL PROTECTED] */
-    protected void setCollapsedBorders() {
-        createBorder(CommonBorderPaddingBackground.BEFORE);
-        createBorder(CommonBorderPaddingBackground.AFTER);
-        createBorder(CommonBorderPaddingBackground.START);
-        createBorder(CommonBorderPaddingBackground.END);
-    }
-
-    /** [EMAIL PROTECTED] */
     public boolean generatesReferenceAreas() {
         return true;
     }

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableColumn.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableColumn.java?rev=655614&r1=655613&r2=655614&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableColumn.java 
(original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableColumn.java 
Mon May 12 12:37:39 2008
@@ -134,15 +134,6 @@
     }
 
     /** [EMAIL PROTECTED] */
-    protected void setCollapsedBorders() {
-        Table table = (Table) parent;
-        createBorder(CommonBorderPaddingBackground.BEFORE, table);
-        createBorder(CommonBorderPaddingBackground.AFTER, table);
-        createBorder(CommonBorderPaddingBackground.START);
-        createBorder(CommonBorderPaddingBackground.END);
-    }
-
-    /** [EMAIL PROTECTED] */
     public void endOfNode() throws FOPException {
         getFOEventHandler().endColumn(this);
     }

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableFObj.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableFObj.java?rev=655614&r1=655613&r2=655614&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableFObj.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableFObj.java 
Mon May 12 12:37:39 2008
@@ -226,7 +226,12 @@
      * Prepares the borders of this element if the collapsing-border model is 
in use.
      * Conflict resolution with parent elements is done where applicable.
      */
-    protected abstract void setCollapsedBorders();
+    protected void setCollapsedBorders() {
+        createBorder(CommonBorderPaddingBackground.START);
+        createBorder(CommonBorderPaddingBackground.END);
+        createBorder(CommonBorderPaddingBackground.BEFORE);
+        createBorder(CommonBorderPaddingBackground.AFTER);
+    }
 
     /**
      * Creates a BorderSpecification from the border set on the given side. If 
no border
@@ -234,7 +239,7 @@
      * 
      * @param side one of CommonBorderPaddingBackground.BEFORE|AFTER|START|END
      */
-    protected void createBorder(int side) {
+    private void createBorder(int side) {
         BorderSpecification borderSpec = new BorderSpecification(
                 getCommonBorderPaddingBackground().getBorderInfo(side), 
getNameId());
         switch (side) {
@@ -253,33 +258,4 @@
         default: assert false;
         }
     }
-
-    /**
-     * Creates a BorderSpecification from the border set on the given side, 
performing
-     * conflict resolution with the same border on the given object.
-     * 
-     * @param side one of CommonBorderPaddingBackground.BEFORE|AFTER|START|END
-     * @param competitor a parent table element whose side coincides with the 
given side
-     * on this element
-     */
-    protected void createBorder(int side, TableFObj competitor) {
-        createBorder(side);
-        switch (side) {
-        case CommonBorderPaddingBackground.BEFORE:
-            borderBefore.integrateSegment(competitor.borderBefore, true, true, 
true);
-            break;
-        case CommonBorderPaddingBackground.AFTER:
-            borderAfter.integrateSegment(competitor.borderAfter, true, true, 
true);
-            break;
-        case CommonBorderPaddingBackground.START:
-            borderStart = collapsingBorderModel.determineWinner(borderStart,
-                    competitor.borderStart);
-            break;
-        case CommonBorderPaddingBackground.END:
-            borderEnd = collapsingBorderModel.determineWinner(borderEnd,
-                    competitor.borderEnd);
-            break;
-        default: assert false;
-        }
-    }
 }

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableRow.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableRow.java?rev=655614&r1=655613&r2=655614&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableRow.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableRow.java 
Mon May 12 12:37:39 2008
@@ -138,15 +138,6 @@
         return true;
     }
 
-    /** [EMAIL PROTECTED] */
-    protected void setCollapsedBorders() {
-        TableBody body = (TableBody) parent;
-        createBorder(CommonBorderPaddingBackground.START, body);
-        createBorder(CommonBorderPaddingBackground.END, body);
-        createBorder(CommonBorderPaddingBackground.BEFORE);
-        createBorder(CommonBorderPaddingBackground.AFTER);
-    }
-
     /** @return the "break-after" property. */
     public int getBreakAfter() {
         return breakAfter;



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

  • svn commit: r655614 - in /xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table: CollapsingBorderResolver.java GridUnit.java Table.java TableBody.java TableCell.java TableColumn.java TableFObj.j vhennebert