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]