You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ad...@apache.org on 2008/07/06 00:53:59 UTC

svn commit: r674245 - /xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableFObj.java

Author: adelmelle
Date: Sat Jul  5 15:53:58 2008
New Revision: 674245

URL: http://svn.apache.org/viewvc?rev=674245&view=rev
Log:
Fixed ClassCastException when specifying column-number on something other than a fo:table-column or fo:table-cell...

Modified:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableFObj.java

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=674245&r1=674244&r2=674245&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 Sat Jul  5 15:53:58 2008
@@ -55,9 +55,10 @@
     CollapsingBorderModel collapsingBorderModel;
 
     /**
-     * Main constructor
+     * Create a TableFObj instance that is a child
+     * of the given {@link FONode}
      *
-     * @param parent    the parent node
+     * @param parent the parent {@link FONode}
      */
     public TableFObj(FONode parent) {
         super(parent);
@@ -81,6 +82,8 @@
     }
 
     /**
+     * Return the value for the "border-precedence" property
+     * for the given side.
      *
      * @param side  the side for which to return the border precedence
      * @return the "border-precedence" value for the given side
@@ -102,13 +105,13 @@
 
     /**
      * Convenience method to returns a reference
-     * to the base Table instance
+     * to the base {@link Table} instance.
      *
      * @return  the base table instance
      *
      */
     public Table getTable() {
-        // Will be overridden in Table; for any other Table-node, recursive call to
+        // Overridden in Table; for any other Table-node, recursive call to
         // parent.getTable()
         return ((TableFObj) parent).getTable();
     }
@@ -119,13 +122,13 @@
     public abstract CommonBorderPaddingBackground getCommonBorderPaddingBackground();
 
     /**
-     * PropertyMaker subclass for the column-number property
-     *
+     * {@link PropertyMaker} subclass for the column-number property
      */
     public static class ColumnNumberPropertyMaker extends PropertyMaker {
 
         /**
          * Constructor
+         *
          * @param propId    the id of the property for which the maker should
          *                  be created
          */
@@ -144,46 +147,50 @@
 
 
         /**
+         * {@inheritDoc}
          * Check the value of the column-number property.
-         * Return the parent's column index (initial value) in case
-         * of a negative or zero value
-         *
-         * @see org.apache.fop.fo.properties.PropertyMaker#make(PropertyList, String, FObj)
          */
         public Property make(PropertyList propertyList, String value, FObj fo)
                     throws PropertyException {
+
             Property p = super.make(propertyList, value, fo);
 
-            ColumnNumberManagerHolder parent
-                    = (ColumnNumberManagerHolder) propertyList.getParentFObj();
-            ColumnNumberManager columnIndexManager =  parent.getColumnNumberManager();
             int columnIndex = p.getNumeric().getValue();
             int colSpan = propertyList.get(Constants.PR_NUMBER_COLUMNS_SPANNED)
                                 .getNumeric().getValue();
-            
-            int lastIndex = columnIndex - 1 + colSpan;
-            for (int i = columnIndex; i <= lastIndex; ++i) {
-                if (columnIndexManager.isColumnNumberUsed(i)) {
-                    /* if column-number is already in use by another
-                     * cell/column => error!
-                     */
-                    TableEventProducer eventProducer = TableEventProducer.Provider.get(
-                            fo.getUserAgent().getEventBroadcaster());
-                    eventProducer.cellOverlap(this, propertyList.getFObj().getName(),
-                                                i, fo.getLocator());
+
+            // only check whether the column-number is occupied in case it was
+            // specified on a fo:table-cell or fo:table-column
+            int foId = propertyList.getFObj().getNameId();
+            if (foId == FO_TABLE_COLUMN || foId == FO_TABLE_CELL) {
+                ColumnNumberManagerHolder parent
+                        = (ColumnNumberManagerHolder) propertyList.getParentFObj();
+                ColumnNumberManager columnIndexManager = parent.getColumnNumberManager();
+                int lastIndex = columnIndex - 1 + colSpan;
+                for (int i = columnIndex; i <= lastIndex; ++i) {
+                    if (columnIndexManager.isColumnNumberUsed(i)) {
+                        /* if column-number is already in use by another
+                         * cell/column => error!
+                         */
+                        TableEventProducer eventProducer
+                                = TableEventProducer.Provider.get(
+                                    fo.getUserAgent().getEventBroadcaster());
+                        eventProducer.cellOverlap(
+                                this, propertyList.getFObj().getName(),
+                                i, propertyList.getFObj().getLocator());
+                    }
                 }
             }
-
             return p;
         }
-        
+
         /**
-         * If the value is not positive, return a property whose value is the next column number
-         * 
          * {@inheritDoc}
+         * If the value is not positive, return a property whose value
+         * is the next column number.
          */
-        public Property convertProperty(Property p, 
-                                        PropertyList propertyList, FObj fo) 
+        public Property convertProperty(Property p,
+                                        PropertyList propertyList, FObj fo)
                     throws PropertyException {
             if (p instanceof EnumProperty) {
                 return EnumNumber.getInstance(p);
@@ -191,15 +198,24 @@
             Number val = p.getNumber();
             if (val != null) {
                 int i = Math.round(val.floatValue());
+                int foId = propertyList.getFObj().getNameId();
                 if (i <= 0) {
-                    ColumnNumberManagerHolder parent =
-                        (ColumnNumberManagerHolder) propertyList.getParentFObj();
-                    ColumnNumberManager columnIndexManager =  parent.getColumnNumberManager();
-                    i = columnIndexManager.getCurrentColumnNumber();
+                    if (foId == FO_TABLE_CELL || foId == FO_TABLE_COLUMN) {
+                        ColumnNumberManagerHolder parent =
+                            (ColumnNumberManagerHolder) propertyList.getParentFObj();
+                        ColumnNumberManager columnIndexManager = parent.getColumnNumberManager();
+                        i = columnIndexManager.getCurrentColumnNumber();
+                    } else {
+                        /* very exceptional case:
+                         * negative column-number specified on
+                         * a FO that is not a fo:table-cell or fo:table-column
+                         */
+                        i = 1;
+                    }
                     TableEventProducer eventProducer =
                         TableEventProducer.Provider.get(fo.getUserAgent().getEventBroadcaster());
                     eventProducer.forceNextColumnNumber(this, propertyList.getFObj().getName(),
-                                                        val, i, fo.getLocator());
+                                                        val, i, propertyList.getFObj().getLocator());
                 }
                 return NumberProperty.getInstance(i);
             }
@@ -233,26 +249,26 @@
     /**
      * Creates a BorderSpecification from the border set on the given side. If no border
      * is set, a BorderSpecification with border-style none is created.
-     * 
+     *
      * @param side one of CommonBorderPaddingBackground.BEFORE|AFTER|START|END
      */
     private void createBorder(int side) {
         BorderSpecification borderSpec = new BorderSpecification(
                 getCommonBorderPaddingBackground().getBorderInfo(side), getNameId());
         switch (side) {
-        case CommonBorderPaddingBackground.BEFORE:
-            borderBefore = new ConditionalBorder(borderSpec, collapsingBorderModel);
-            break;
-        case CommonBorderPaddingBackground.AFTER:
-            borderAfter = new ConditionalBorder(borderSpec, collapsingBorderModel);
-            break;
-        case CommonBorderPaddingBackground.START:
-            borderStart = borderSpec;
-            break;
-        case CommonBorderPaddingBackground.END:
-            borderEnd = borderSpec;
-            break;
-        default: assert false;
+            case CommonBorderPaddingBackground.BEFORE:
+                borderBefore = new ConditionalBorder(borderSpec, collapsingBorderModel);
+                break;
+            case CommonBorderPaddingBackground.AFTER:
+                borderAfter = new ConditionalBorder(borderSpec, collapsingBorderModel);
+                break;
+            case CommonBorderPaddingBackground.START:
+                borderStart = borderSpec;
+                break;
+            case CommonBorderPaddingBackground.END:
+                borderEnd = borderSpec;
+                break;
+            default: assert false;
         }
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org


Re: svn commit: r674245 - /xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableFObj.java

Posted by Andreas Delmelle <an...@telenet.be>.
On Jul 7, 2008, at 12:44, Vincent Hennebert wrote:

> Hi,
>
>> Author: adelmelle
>> Date: Sat Jul  5 15:53:58 2008
>> New Revision: 674245
>>          switch (side) {
>> -        case CommonBorderPaddingBackground.BEFORE:
>> -            borderBefore = new ConditionalBorder(borderSpec,  
>> collapsingBorderModel);
>> <snip />
>> +            case CommonBorderPaddingBackground.BEFORE:
>> +                borderBefore = new ConditionalBorder(borderSpec,  
>> collapsingBorderModel);
>> +                break;
>>
> FWIW, the original indentation scheme was following Java’s code
> conventions:
> http://java.sun.com/docs/codeconv/html/CodeConventions.doc6.html#468

Sorry. I paid no mind, but the change did seem a bit out-of-place...

I'll rectify.


Cheers

Andreas

Re: svn commit: r674245 - /xmlgraphics/fop/trunk/src/java/org/apache/fop/fo/flow/table/TableFObj.java

Posted by Vincent Hennebert <vi...@anyware-tech.com>.
Hi,

> Author: adelmelle
> Date: Sat Jul  5 15:53:58 2008
> New Revision: 674245
>          switch (side) {
> -        case CommonBorderPaddingBackground.BEFORE:
> -            borderBefore = new ConditionalBorder(borderSpec, collapsingBorderModel);
> -            break;
> -        case CommonBorderPaddingBackground.AFTER:
> -            borderAfter = new ConditionalBorder(borderSpec, collapsingBorderModel);
> -            break;
> -        case CommonBorderPaddingBackground.START:
> -            borderStart = borderSpec;
> -            break;
> -        case CommonBorderPaddingBackground.END:
> -            borderEnd = borderSpec;
> -            break;
> -        default: assert false;
> +            case CommonBorderPaddingBackground.BEFORE:
> +                borderBefore = new ConditionalBorder(borderSpec, collapsingBorderModel);
> +                break;
> +            case CommonBorderPaddingBackground.AFTER:
> +                borderAfter = new ConditionalBorder(borderSpec, collapsingBorderModel);
> +                break;
> +            case CommonBorderPaddingBackground.START:
> +                borderStart = borderSpec;
> +                break;
> +            case CommonBorderPaddingBackground.END:
> +                borderEnd = borderSpec;
> +                break;
> +            default: assert false;

FWIW, the original indentation scheme was following Java’s code
conventions:
http://java.sun.com/docs/codeconv/html/CodeConventions.doc6.html#468

No big deal, however.
Vincent