]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Bugzilla #39533:
authorJeremias Maerki <jeremias@apache.org>
Thu, 18 May 2006 15:54:17 +0000 (15:54 +0000)
committerJeremias Maerki <jeremias@apache.org>
Thu, 18 May 2006 15:54:17 +0000 (15:54 +0000)
Bugfix: NullPointerException in RTF output when a table does not contain table-columns.
The code now informs the user that he should explicitely define the table-columns.

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

src/java/org/apache/fop/render/rtf/RTFHandler.java
src/java/org/apache/fop/render/rtf/rtflib/rtfdoc/ITableColumnsInfo.java
src/java/org/apache/fop/render/rtf/rtflib/tools/TableContext.java
test/java/org/apache/fop/render/rtf/rtflib/testdocs/DummyTableColumnsInfo.java

index ed33cf9dfb024dcefa70a6af6e3499913411f06d..d50cd7a6117e988f360ab5b87b196fd9a0a4b448 100644 (file)
@@ -1585,8 +1585,14 @@ public class RTFHandler extends FOEventHandler {
             Table table = (Table) foNode;
 
             //recurse all table-columns
-            for (Iterator it = table.getColumns().iterator(); it.hasNext();) {
-                recurseFONode( (FONode) it.next() );
+            if (table.getColumns() != null) {
+                for (Iterator it = table.getColumns().iterator(); it.hasNext();) {
+                    recurseFONode( (FONode) it.next() );
+                }
+            } else {
+                //TODO Implement implicit column setup handling!
+                log.warn("No table-columns found on table. RTF output requires that all"
+                        + " table-columns for a table are defined. Output will be incorrect.");
             }
 
             //recurse table-header
index f744ec7ecb8e0f61a6f11544a45cbf9e40ab7d28..2f624fa7d188b50df37625095c21db0b92d5a4ec 100644 (file)
@@ -31,7 +31,7 @@ package org.apache.fop.render.rtf.rtflib.rtfdoc;
 
 public interface ITableColumnsInfo {
     /** value for invalid column width */
-    float INVALID_COLUM_WIDTH = 200f;
+    float INVALID_COLUMN_WIDTH = 200f;
 
     /** reset the column iteration index, meant to be called when creating a new row */
     void selectFirstColumn();
index 0f5f67635b48abe7312ad6e6ab5e49fd1fe60b95..176e173dea53fc686fcbff4836c7986384abcf44 100644 (file)
@@ -94,12 +94,10 @@ public class TableContext implements ITableColumnsInfo {
     }
 
     /**
-     * 
+     * Adds a column and sets its width. 
      * @param width Width of next column
-     * @throws Exception
      */
-    public void setNextColumnWidth(Float width)
-            throws Exception {
+    public void setNextColumnWidth(Float width) {
         colWidths.add(width);
     }
 
@@ -165,6 +163,9 @@ public class TableContext implements ITableColumnsInfo {
             boolean bFirstSpanningCol) {
 
         if (colIndex < colRowSpanningNumber.size()) {
+            while (colIndex >= colFirstSpanningCol.size()) {
+                setNextFirstSpanningCol(false);
+            }
             colFirstSpanningCol.set(colIndex, new Boolean(bFirstSpanningCol));
         } else {
             colFirstSpanningCol.add(new Boolean(bFirstSpanningCol));
@@ -229,13 +230,16 @@ public class TableContext implements ITableColumnsInfo {
      * 'number-columns-spanned' processing
      */
     public float getColumnWidth() {
-        try {
-            return ((Float)colWidths.get(colIndex)).floatValue();
-        } catch (IndexOutOfBoundsException ex) {
-            // this code contributed by Trembicki-Guy, Ed <GuyE@DNB.com>
-            log.warn("fo:table-column width not defined, using " + INVALID_COLUM_WIDTH);
-            return INVALID_COLUM_WIDTH;
+        if (colIndex < 0) {
+            throw new IllegalStateException("colIndex must not be negative!");
+        } else if (colIndex >= getNumberOfColumns()) {
+            log.warn("Column width for column " + (colIndex + 1) + " is not defined, using " 
+                    + INVALID_COLUMN_WIDTH);
+            while (colIndex >= getNumberOfColumns()) {
+                setNextColumnWidth(new Float(INVALID_COLUMN_WIDTH));
+            }
         }
+        return ((Float)colWidths.get(colIndex)).floatValue();
     }
 
     /**
index 49f40b471777f8a95e9e145ba4c4645b8abda905..15a60f6f35db642322810f998b2b74b31a5d7c00 100644 (file)
@@ -39,7 +39,7 @@ import org.apache.fop.render.rtf.rtflib.rtfdoc.ITableColumnsInfo;
 class DummyTableColumnsInfo implements ITableColumnsInfo {
 
     public float getColumnWidth() {
-        return INVALID_COLUM_WIDTH;
+        return INVALID_COLUMN_WIDTH;
     }
 
     public void selectFirstColumn() {