Author: centic
Date: Sat Mar 12 11:45:34 2016
New Revision: 1734694

URL: http://svn.apache.org/viewvc?rev=1734694&view=rev
Log:
Apply patch to fix bug 57495: getTableArray method can not get 0 pos table

Modified:
    poi/trunk/src/java/org/apache/poi/util/Units.java
    poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
    poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFootnote.java
    poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
    poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java
    
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java

Modified: poi/trunk/src/java/org/apache/poi/util/Units.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/Units.java?rev=1734694&r1=1734693&r2=1734694&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/Units.java (original)
+++ poi/trunk/src/java/org/apache/poi/util/Units.java Sat Mar 12 11:45:34 2016
@@ -48,11 +48,20 @@ public class Units {
     /**
      * Converts points to EMUs
      * @param points points
-     * @return emus
+     * @return EMUs
      */
     public static int toEMU(double points){
         return (int)Math.rint(EMU_PER_POINT*points);
     }
+    
+    /**
+     * Converts pixels to EMUs
+     * @param pixels pixels
+     * @return EMUs
+     */
+    public static int pixelToEMU(int pixels) {
+        return pixels*EMU_PER_PIXEL;
+    }
 
     /**
      * Converts EMUs to points

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java?rev=1734694&r1=1734693&r2=1734694&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java 
(original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java 
Sat Mar 12 11:45:34 2016
@@ -335,7 +335,7 @@ public class XWPFDocument extends POIXML
      */
     @Override
     public XWPFTable getTableArray(int pos) {
-        if (pos > 0 && pos < tables.size()) {
+        if (pos >= 0 && pos < tables.size()) {
             return tables.get(pos);
         }
         return null;
@@ -349,7 +349,10 @@ public class XWPFDocument extends POIXML
     }
 
     public XWPFFooter getFooterArray(int pos) {
-        return footers.get(pos);
+        if(pos >=0 && pos < footers.size()) {
+            return footers.get(pos);
+        }
+        return null;
     }
 
     /**
@@ -360,7 +363,10 @@ public class XWPFDocument extends POIXML
     }
 
     public XWPFHeader getHeaderArray(int pos) {
-        return headers.get(pos);
+        if(pos >=0 && pos < headers.size()) {
+            return headers.get(pos);
+        }
+        return null;
     }
 
     public String getTblStyle(XWPFTable table) {

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFootnote.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFootnote.java?rev=1734694&r1=1734693&r2=1734694&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFootnote.java 
(original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFootnote.java 
Sat Mar 12 11:45:34 2016
@@ -1,32 +1,33 @@
-/* ====================================================================
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-==================================================================== */
-package org.apache.poi.xwpf.usermodel;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.poi.POIXMLDocumentPart;
-import org.apache.xmlbeans.XmlCursor;
-import org.apache.xmlbeans.XmlObject;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFtnEdn;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
+/* ====================================================================
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+package org.apache.poi.xwpf.usermodel;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.poi.POIXMLDocumentPart;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFtnEdn;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
 
@@ -36,8 +37,8 @@ public class XWPFFootnote implements Ite
     private List<XWPFPictureData> pictures = new ArrayList<XWPFPictureData>();
     private List<IBodyElement> bodyElements = new ArrayList<IBodyElement>();
 
-    private CTFtnEdn ctFtnEdn;
-    private XWPFFootnotes footnotes;
+    private CTFtnEdn ctFtnEdn;
+    private XWPFFootnotes footnotes;
     private XWPFDocument document;
 
     public XWPFFootnote(CTFtnEdn note, XWPFFootnotes xFootnotes) {
@@ -85,16 +86,16 @@ public class XWPFFootnote implements Ite
         return paragraphs.iterator();
     }
 
-    public List<XWPFTable> getTables() {
-        return tables;
-    }
-
-    public List<XWPFPictureData> getPictures() {
-        return pictures;
-    }
-
-    public List<IBodyElement> getBodyElements() {
-        return bodyElements;
+    public List<XWPFTable> getTables() {
+        return tables;
+    }
+
+    public List<XWPFPictureData> getPictures() {
+        return pictures;
+    }
+
+    public List<IBodyElement> getBodyElements() {
+        return bodyElements;
     }
 
     public CTFtnEdn getCTFtnEdn() {
@@ -106,16 +107,16 @@ public class XWPFFootnote implements Ite
     }
 
     /**
-     * @param pos in table array
-     * @return The table at position pos
+     * @param pos in table array
+     * @return The table at position pos
      * @see org.apache.poi.xwpf.usermodel.IBody#getTableArray(int)
      */
     public XWPFTable getTableArray(int pos) {
-        if (pos > 0 && pos < tables.size()) {
+        if (pos >= 0 && pos < tables.size()) {
             return tables.get(pos);
         }
         return null;
-    }
+    }
 
     /**
      * inserts an existing XWPFTable to the arrays bodyElements and tables
@@ -123,8 +124,8 @@ public class XWPFFootnote implements Ite
      * @param pos
      * @param table
      * @see org.apache.poi.xwpf.usermodel.IBody#insertTable(int pos, XWPFTable 
table)
-     */
-    public void insertTable(int pos, XWPFTable table) {
+     */
+    public void insertTable(int pos, XWPFTable table) {
         bodyElements.add(pos, table);
         int i = 0;
         for (CTTbl tbl : ctFtnEdn.getTblArray()) {
@@ -132,11 +133,11 @@ public class XWPFFootnote implements Ite
                 break;
             }
             i++;
-        }
-        tables.add(i, table);
-
-    }
-
+        }
+        tables.add(i, table);
+
+    }
+
     /**
      * if there is a corresponding {@link XWPFTable} of the parameter ctTable 
in the tableList of this header
      * the method will return this table
@@ -153,8 +154,8 @@ public class XWPFFootnote implements Ite
                 return table;
         }
         return null;
-    }
-
+    }
+
     /**
      * if there is a corresponding {@link XWPFParagraph} of the parameter 
ctTable in the paragraphList of this header or footer
      * the method will return this paragraph
@@ -171,7 +172,7 @@ public class XWPFFootnote implements Ite
                 return paragraph;
         }
         return null;
-    }
+    }
 
     /**
      * Returns the paragraph that holds
@@ -180,9 +181,11 @@ public class XWPFFootnote implements Ite
      * @see org.apache.poi.xwpf.usermodel.IBody#getParagraphArray(int pos)
      */
     public XWPFParagraph getParagraphArray(int pos) {
-
-        return paragraphs.get(pos);
-    }
+        if(pos >=0 && pos < paragraphs.size()) {
+            return paragraphs.get(pos);
+        }
+        return null;
+    }
 
     /**
      * get the TableCell which belongs to the TableCell
@@ -190,7 +193,7 @@ public class XWPFFootnote implements Ite
      * @param cell
      * @see org.apache.poi.xwpf.usermodel.IBody#getTableCell(CTTc cell)
      */
-    public XWPFTableCell getTableCell(CTTc cell) {
+    public XWPFTableCell getTableCell(CTTc cell) {
         XmlCursor cursor = cell.newCursor();
         cursor.toParent();
         XmlObject o = cursor.getObject();
@@ -210,8 +213,11 @@ public class XWPFFootnote implements Ite
             return null;
         }
         XWPFTableRow tableRow = table.getRow(row);
+        if(tableRow == null){
+            return null;
+        }
         return tableRow.getTableCell(cell);
-    }
+    }
 
     /**
      * verifies that cursor is on the right position
@@ -263,12 +269,12 @@ public class XWPFFootnote implements Ite
                     i++;
             }
             bodyElements.add(i, newT);
-            cursor = t.newCursor();
-            cursor.toEndToken();
-            return newT;
-        }
-        return null;
-    }
+            cursor = t.newCursor();
+            cursor.toEndToken();
+            return newT;
+        }
+        return null;
+    }
 
     /**
      * add a new paragraph at position of the cursor
@@ -303,12 +309,12 @@ public class XWPFFootnote implements Ite
                     i++;
             }
             bodyElements.add(i, newP);
-            cursor.toCursor(p.newCursor());
-            cursor.toEndToken();
-            return newP;
-        }
-        return null;
-    }
+            cursor.toCursor(p.newCursor());
+            cursor.toEndToken();
+            return newP;
+        }
+        return null;
+    }
 
     /**
      * add a new table to the end of the footnote
@@ -316,13 +322,13 @@ public class XWPFFootnote implements Ite
      * @param table
      * @return the added XWPFTable
      */
-    public XWPFTable addNewTbl(CTTbl table) {
-        CTTbl newTable = ctFtnEdn.addNewTbl();
-        newTable.set(table);
-        XWPFTable xTable = new XWPFTable(newTable, this);
-        tables.add(xTable);
-        return xTable;
-    }
+    public XWPFTable addNewTbl(CTTbl table) {
+        CTTbl newTable = ctFtnEdn.addNewTbl();
+        newTable.set(table);
+        XWPFTable xTable = new XWPFTable(newTable, this);
+        tables.add(xTable);
+        return xTable;
+    }
 
     /**
      * add a new paragraph to the end of the footnote
@@ -330,14 +336,14 @@ public class XWPFFootnote implements Ite
      * @param paragraph
      * @return the added XWPFParagraph
      */
-    public XWPFParagraph addNewParagraph(CTP paragraph) {
-        CTP newPara = ctFtnEdn.addNewP();
-        newPara.set(paragraph);
-        XWPFParagraph xPara = new XWPFParagraph(newPara, this);
-        paragraphs.add(xPara);
-        return xPara;
-    }
-
+    public XWPFParagraph addNewParagraph(CTP paragraph) {
+        CTP newPara = ctFtnEdn.addNewP();
+        newPara.set(paragraph);
+        XWPFParagraph xPara = new XWPFParagraph(newPara, this);
+        paragraphs.add(xPara);
+        return xPara;
+    }
+
     /**
      * @see org.apache.poi.xwpf.usermodel.IBody#getXWPFDocument()
      */
@@ -351,8 +357,8 @@ public class XWPFFootnote implements Ite
      * @see org.apache.poi.xwpf.usermodel.IBody#getPart()
      */
     public POIXMLDocumentPart getPart() {
-        return footnotes;
-    }
+        return footnotes;
+    }
 
     /**
      * get the PartType of the body
@@ -360,6 +366,6 @@ public class XWPFFootnote implements Ite
      * @see org.apache.poi.xwpf.usermodel.IBody#getPartType()
      */
     public BodyType getPartType() {
-        return BodyType.FOOTNOTE;
-    }
-}
+        return BodyType.FOOTNOTE;
+    }
+}

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java?rev=1734694&r1=1734693&r2=1734694&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java 
(original)
+++ 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java 
Sat Mar 12 11:45:34 2016
@@ -212,8 +212,10 @@ public abstract class XWPFHeaderFooter e
      * the text of the header or footer.
      */
     public XWPFParagraph getParagraphArray(int pos) {
-
-        return paragraphs.get(pos);
+        if(pos >= 0 && pos<paragraphs.size()){
+            return paragraphs.get(pos);
+        }
+        return null;
     }
 
     /**
@@ -431,8 +433,7 @@ public abstract class XWPFHeaderFooter e
      * @see org.apache.poi.xwpf.usermodel.IBody#getTableArray(int)
      */
     public XWPFTable getTableArray(int pos) {
-
-        if (pos > 0 && pos < tables.size()) {
+        if (pos >= 0 && pos < tables.size()) {
             return tables.get(pos);
         }
         return null;

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java?rev=1734694&r1=1734693&r2=1734694&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java 
(original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java 
Sat Mar 12 11:45:34 2016
@@ -1,42 +1,42 @@
-/* ====================================================================
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You under the Apache License, Version 2.0
-   (the "License"); you may not use this file except in compliance with
-   the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-==================================================================== */
-package org.apache.poi.xwpf.usermodel;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.EnumMap;
-import java.util.HashMap;
-import java.util.List;
-
-import org.apache.poi.POIXMLDocumentPart;
-import org.apache.poi.util.Internal;
-import org.apache.xmlbeans.XmlCursor;
-import org.apache.xmlbeans.XmlObject;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtRun;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalJc;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+package org.apache.poi.xwpf.usermodel;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.List;
+
+import org.apache.poi.POIXMLDocumentPart;
+import org.apache.poi.util.Internal;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtRun;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVerticalJc;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
 
 /**
  * Represents a Cell within a {@link XWPFTable}. The
@@ -46,20 +46,20 @@ public class XWPFTableCell implements IB
     private static EnumMap<XWPFVertAlign, STVerticalJc.Enum> alignMap;
     // Create a map from the STVerticalJc.Enum values to the XWPF-level enums
     private static HashMap<Integer, XWPFVertAlign> stVertAlignTypeMap;
-
-    static {
-        // populate enum maps
-        alignMap = new EnumMap<XWPFVertAlign, 
STVerticalJc.Enum>(XWPFVertAlign.class);
-        alignMap.put(XWPFVertAlign.TOP, 
STVerticalJc.Enum.forInt(STVerticalJc.INT_TOP));
-        alignMap.put(XWPFVertAlign.CENTER, 
STVerticalJc.Enum.forInt(STVerticalJc.INT_CENTER));
-        alignMap.put(XWPFVertAlign.BOTH, 
STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTH));
-        alignMap.put(XWPFVertAlign.BOTTOM, 
STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTTOM));
-
-        stVertAlignTypeMap = new HashMap<Integer, XWPFVertAlign>();
-        stVertAlignTypeMap.put(STVerticalJc.INT_TOP, XWPFVertAlign.TOP);
-        stVertAlignTypeMap.put(STVerticalJc.INT_CENTER, XWPFVertAlign.CENTER);
-        stVertAlignTypeMap.put(STVerticalJc.INT_BOTH, XWPFVertAlign.BOTH);
-        stVertAlignTypeMap.put(STVerticalJc.INT_BOTTOM, XWPFVertAlign.BOTTOM);
+
+    static {
+        // populate enum maps
+        alignMap = new EnumMap<XWPFVertAlign, 
STVerticalJc.Enum>(XWPFVertAlign.class);
+        alignMap.put(XWPFVertAlign.TOP, 
STVerticalJc.Enum.forInt(STVerticalJc.INT_TOP));
+        alignMap.put(XWPFVertAlign.CENTER, 
STVerticalJc.Enum.forInt(STVerticalJc.INT_CENTER));
+        alignMap.put(XWPFVertAlign.BOTH, 
STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTH));
+        alignMap.put(XWPFVertAlign.BOTTOM, 
STVerticalJc.Enum.forInt(STVerticalJc.INT_BOTTOM));
+
+        stVertAlignTypeMap = new HashMap<Integer, XWPFVertAlign>();
+        stVertAlignTypeMap.put(STVerticalJc.INT_TOP, XWPFVertAlign.TOP);
+        stVertAlignTypeMap.put(STVerticalJc.INT_CENTER, XWPFVertAlign.CENTER);
+        stVertAlignTypeMap.put(STVerticalJc.INT_BOTH, XWPFVertAlign.BOTH);
+        stVertAlignTypeMap.put(STVerticalJc.INT_BOTTOM, XWPFVertAlign.BOTTOM);
 
     }
 
@@ -75,8 +75,8 @@ public class XWPFTableCell implements IB
     /**
      * If a table cell does not include at least one block-level element, then 
this document shall be considered corrupt
      */
-    public XWPFTableCell(CTTc cell, XWPFTableRow tableRow, IBody part) {
-        this.ctTc = cell;
+    public XWPFTableCell(CTTc cell, XWPFTableRow tableRow, IBody part) {
+        this.ctTc = cell;
         this.part = part;
         this.tableRow = tableRow;
         // NB: If a table cell does not include at least one block-level 
element, then this document shall be considered corrupt.
@@ -84,10 +84,10 @@ public class XWPFTableCell implements IB
             cell.addNewP();
         bodyElements = new ArrayList<IBodyElement>();
         paragraphs = new ArrayList<XWPFParagraph>();
-        tables = new ArrayList<XWPFTable>();
-
-        XmlCursor cursor = ctTc.newCursor();
-        cursor.selectPath("./*");
+        tables = new ArrayList<XWPFTable>();
+
+        XmlCursor cursor = ctTc.newCursor();
+        cursor.selectPath("./*");
         while (cursor.toNextSelection()) {
             XmlObject o = cursor.getObject();
             if (o instanceof CTP) {
@@ -116,7 +116,7 @@ public class XWPFTableCell implements IB
     @Internal
     public CTTc getCTTc() {
         return ctTc;
-    }
+    }
 
     /**
      * returns an Iterator with paragraphs and tables
@@ -130,10 +130,10 @@ public class XWPFTableCell implements IB
     public void setParagraph(XWPFParagraph p) {
         if (ctTc.sizeOfPArray() == 0) {
             ctTc.addNewP();
-        }
-        ctTc.setPArray(0, p.getCTP());
-    }
-
+        }
+        ctTc.setPArray(0, p.getCTP());
+    }
+
     /**
      * returns a list of paragraphs
      */
@@ -224,23 +224,23 @@ public class XWPFTableCell implements IB
         ctshd.setFill(rgbStr);
     }
 
-    /**
-     * Get the vertical alignment of the cell.
-     *
-     * @return the cell alignment enum value or <code>null</code>
-     * if no vertical alignment is set.
-     */
-    public XWPFVertAlign getVerticalAlignment() {
-        XWPFVertAlign vAlign = null;
-        CTTcPr tcpr = ctTc.getTcPr();
-        if (tcpr != null) {
-            CTVerticalJc va = tcpr.getVAlign();
-            if (va != null && va.getVal() != null) {
-                vAlign = stVertAlignTypeMap.get(va.getVal().intValue());
-            }
-        }
-        return vAlign;
-    }
+    /**
+     * Get the vertical alignment of the cell.
+     *
+     * @return the cell alignment enum value or <code>null</code>
+     * if no vertical alignment is set.
+     */
+    public XWPFVertAlign getVerticalAlignment() {
+        XWPFVertAlign vAlign = null;
+        CTTcPr tcpr = ctTc.getTcPr();
+        if (tcpr != null) {
+            CTVerticalJc va = tcpr.getVAlign();
+            if (va != null && va.getVal() != null) {
+                vAlign = stVertAlignTypeMap.get(va.getVal().intValue());
+            }
+        }
+        return vAlign;
+    }
 
     /**
      * Set the vertical alignment of the cell.
@@ -343,7 +343,7 @@ public class XWPFTableCell implements IB
      * @see org.apache.poi.xwpf.usermodel.IBody#getParagraphArray(int)
      */
     public XWPFParagraph getParagraphArray(int pos) {
-        if (pos > 0 && pos < paragraphs.size()) {
+        if (pos >= 0 && pos < paragraphs.size()) {
             return paragraphs.get(pos);
         }
         return null;
@@ -381,7 +381,7 @@ public class XWPFTableCell implements IB
      * @see org.apache.poi.xwpf.usermodel.IBody#getTableArray(int)
      */
     public XWPFTable getTableArray(int pos) {
-        if (pos > 0 && pos < tables.size()) {
+        if(pos >= 0 && pos < tables.size()) {
             return tables.get(pos);
         }
         return null;
@@ -399,15 +399,15 @@ public class XWPFTableCell implements IB
      *
      * @see org.apache.poi.xwpf.usermodel.IBody#insertTable(int, 
org.apache.poi.xwpf.usermodel.XWPFTable)
      */
-    public void insertTable(int pos, XWPFTable table) {
-        bodyElements.add(pos, table);
-        int i = 0;
-        for (CTTbl tbl : ctTc.getTblArray()) {
-            if (tbl == table.getCTTbl()) {
-                break;
-            }
-            i++;
-        }
+    public void insertTable(int pos, XWPFTable table) {
+        bodyElements.add(pos, table);
+        int i = 0;
+        for (CTTbl tbl : ctTc.getTblArray()) {
+            if (tbl == table.getCTTbl()) {
+                break;
+            }
+            i++;
+        }
         tables.add(i, table);
     }
 
@@ -466,9 +466,9 @@ public class XWPFTableCell implements IB
                 text.append('\t');
             }
         }
-    }
-
-    /**
+    }
+
+    /**
      * get the TableCell which belongs to the TableCell
      */
     public XWPFTableCell getTableCell(CTTc cell) {

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java?rev=1734694&r1=1734693&r2=1734694&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java 
(original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java 
Sat Mar 12 11:45:34 2016
@@ -21,6 +21,7 @@ import static org.junit.Assert.assertNot
 
 import java.io.IOException;
 
+import org.apache.poi.util.Units;
 import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
 import org.apache.poi.xwpf.XWPFTestDataSamples;
 import org.apache.poi.xwpf.usermodel.XWPFRun.FontCharRange;
@@ -55,7 +56,6 @@ public class TestXWPFBugs {
         doc.close();
     }
 
-
     @Test
     public void bug57312_NullPointException() throws IOException {
         XWPFDocument doc = 
XWPFTestDataSamples.openSampleDocument("57312.docx");
@@ -82,6 +82,40 @@ public class TestXWPFBugs {
         }
     }
 
+    @Test
+    public void bug57495_getTableArrayInDoc() {
+        XWPFDocument doc =new XWPFDocument();
+        //let's create a few tables for the test
+        for(int i=0;i<3;i++) {
+            doc.createTable(2, 2);
+        }
+        XWPFTable table = doc.getTableArray(0);
+        assertNotNull(table);
+        //let's check also that returns the correct table
+        XWPFTable same = doc.getTables().get(0);
+        assertEquals(table, same);
+    }
+
+    @Test
+    public void bug57495_getParagraphArrayInTableCell() {
+        XWPFDocument doc =new XWPFDocument();
+        //let's create a table for the test
+        XWPFTable table = doc.createTable(2, 2);       
+        assertNotNull(table);
+        XWPFParagraph p = table.getRow(0).getCell(0).getParagraphArray(0);
+        assertNotNull(p);
+        //let's check also that returns the correct paragraph
+        XWPFParagraph same = 
table.getRow(0).getCell(0).getParagraphs().get(0);        
+        assertEquals(p, same);
+    }
+    
+    @Test
+    public void bug57495_convertPixelsToEMUs() {
+        int pixels = 100;
+        int expectedEMU = 952500;
+        int result = Units.pixelToEMU(pixels);
+        assertEquals(expectedEMU, result);
+    }
 
     @Test
     public void test56392() throws IOException, OpenXML4JException {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to