]> source.dussan.org Git - poi.git/commitdiff
Bugzilla 525612: added methods to get/set a table row's Can't Split and Repeat Heade...
authorYegor Kozlov <yegor@apache.org>
Tue, 7 Feb 2012 09:21:15 +0000 (09:21 +0000)
committerYegor Kozlov <yegor@apache.org>
Tue, 7 Feb 2012 09:21:15 +0000 (09:21 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1241387 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableRow.java

index 29d223a0e760b6d908b54c8ce42ce8e395225ac6..718e7a3b6e7ff89e56b2496e90d34c92387e6d3c 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta6" date="2012-??-??">
+           <action dev="poi-developers" type="add">52562 - Added methods to get/set a table row's Can't Split and Repeat Header attributes  in XWPF</action>
            <action dev="poi-developers" type="add">52561 - Added methods to set table inside borders and cell margins in XWPF</action>
            <action dev="poi-developers" type="add">52569 - Support DConRefRecord in HSSF</action>
            <action dev="poi-developers" type="add">52575 - added an option to ignore missing workbook references in formula evaluator</action>
index a717d7f374c4ce250d9d975002c7aa1940b74ddd..9da23023863ef4ea011619c89cd460980860ff6f 100644 (file)
@@ -22,13 +22,16 @@ import java.util.List;
 
 import org.apache.poi.util.Internal;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHeight;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTrPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
 
 
 /**
  * @author gisellabronzetti
+ * @author gregg morris - added removeCell(), setCantSplitRow(), setRepeatHeader()
  */
 public class XWPFTableRow {
 
@@ -64,6 +67,11 @@ public class XWPFTableRow {
         return null;
     }
     
+    public void removeCell(int pos) {
+        if (pos >= 0 && pos < ctRow.sizeOfTcArray()) {
+               tableCells.remove(pos);
+        }      
+    }
     /**
      * adds a new TableCell at the end of this tableRow
      */
@@ -105,7 +113,6 @@ public class XWPFTableRow {
         return properties.sizeOfTrHeightArray() == 0 ? 0 : properties.getTrHeightArray(0).getVal().intValue();
     }
 
-
     private CTTrPr getTrPr() {
         return (ctRow.isSetTrPr()) ? ctRow.getTrPr() : ctRow.addNewTrPr();
     }
@@ -136,9 +143,67 @@ public class XWPFTableRow {
         */
        public XWPFTableCell getTableCell(CTTc cell) {
                for(int i=0; i<tableCells.size(); i++){
-                       if(tableCells.get(i).getCTTc() == cell) return tableCells.get(i); 
+                       if (tableCells.get(i).getCTTc() == cell)
+                               return tableCells.get(i); 
                }
                return null;
        }
 
+       /**
+        * This attribute controls whether to allow table rows to split across pages.
+        * The logic for this attribute is a little unusual: a true value means
+        * DON'T allow rows to split, false means allow rows to split.
+        * @param split - if true, don't allow rows to be split. If false, allow
+        *        rows to be split.
+        */
+       public void setCantSplitRow(boolean split) {
+               CTTrPr trpr = getTrPr();
+               CTOnOff onoff = trpr.addNewCantSplit();
+               onoff.setVal(split ? STOnOff.ON : STOnOff.OFF);
+       }
+
+       /**
+        * Return true if the "can't split row" value is true. The logic for this
+        * attribute is a little unusual: a TRUE value means DON'T allow rows to
+        * split, FALSE means allow rows to split.
+        * @return true if rows can't be split, false otherwise.
+        */
+       public boolean isCantSplitRow() {
+               boolean isCant = false;
+               CTTrPr trpr = getTrPr();
+               if (trpr.sizeOfCantSplitArray() > 0) {
+                       CTOnOff onoff = trpr.getCantSplitList().get(0);
+                       isCant = onoff.getVal().equals(STOnOff.ON);
+               }
+               return isCant;
+       }
+
+       /**
+        * This attribute controls whether to repeat a table's header row at the top
+        * of a table split across pages.
+        * @param repeat - if TRUE, repeat header row at the top of each page of table;
+        *                 if FALSE, don't repeat header row.
+        */
+       public void setRepeatHeader(boolean repeat) {
+               CTTrPr trpr = getTrPr();
+               CTOnOff onoff = trpr.addNewTblHeader();
+               onoff.setVal(repeat ? STOnOff.ON : STOnOff.OFF);
+       }
+
+       /**
+        * Return true if a table's header row should be repeated at the top of a
+        * table split across pages.
+        * @return true if table's header row should be repeated at the top of each
+        *         page of table, false otherwise.
+        */
+       public boolean isRepeatHeader() {
+               boolean repeat = false;
+               CTTrPr trpr = getTrPr();
+               if (trpr.sizeOfTblHeaderArray() > 0) {
+                       CTOnOff rpt = trpr.getTblHeaderList().get(0);
+                       repeat = rpt.getVal().equals(STOnOff.ON);
+               }
+               return repeat;
+       }
+
 }// end class
index c2b751ad2e0e591e93158bf1b1bc9ac8be95b742..abdf1688c91dc7d282327a6951544bba5f8c81ba 100644 (file)
@@ -20,27 +20,50 @@ package org.apache.poi.xwpf.usermodel;
 import junit.framework.TestCase;
 
 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
 
 public class TestXWPFTableRow extends TestCase {
 
-       
-       
        @Override
        protected void setUp() throws Exception {
-               // TODO Auto-generated method stub
                super.setUp();
        }
 
-       public void testSomething() throws Exception {
-               
+       public void testCreateRow() throws Exception {
                CTRow ctRow = CTRow.Factory.newInstance();
-
+               assertNotNull(ctRow);
        }
        
        @Override
        protected void tearDown() throws Exception {
-               // TODO Auto-generated method stub
                super.tearDown();
        }
 
+       public void testSetGetCantSplitRow() {
+            // create a table
+            XWPFDocument doc = new XWPFDocument();
+            CTTbl ctTable = CTTbl.Factory.newInstance();
+            XWPFTable table = new XWPFTable(ctTable, doc);
+            // table has a single row by default; grab it
+            XWPFTableRow tr = table.getRow(0);
+            assertNotNull(tr);
+
+            tr.setCantSplitRow(true);
+            boolean isCant = tr.isCantSplitRow();
+            assert(isCant);
+       }
+
+       public void testSetGetRepeatHeader() {
+        // create a table
+            XWPFDocument doc = new XWPFDocument();
+            CTTbl ctTable = CTTbl.Factory.newInstance();
+            XWPFTable table = new XWPFTable(ctTable, doc);
+            // table has a single row by default; grab it
+            XWPFTableRow tr = table.getRow(0);
+            assertNotNull(tr);
+
+            tr.setRepeatHeader(true);
+            boolean isRpt = tr.isRepeatHeader();
+            assert(isRpt);
+       }
 }