Bugzilla 525612: added methods to get/set a table row's Can't Split and Repeat Header attributes in XWPF

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1241387 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Yegor Kozlov 2012-02-07 09:21:15 +00:00
parent 9ade81c403
commit 82014d6ba9
3 changed files with 98 additions and 9 deletions

View File

@ -34,6 +34,7 @@
<changes> <changes>
<release version="3.8-beta6" date="2012-??-??"> <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">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">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> <action dev="poi-developers" type="add">52575 - added an option to ignore missing workbook references in formula evaluator</action>

View File

@ -22,13 +22,16 @@ import java.util.List;
import org.apache.poi.util.Internal; import org.apache.poi.util.Internal;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHeight; 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.CTRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTrPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTrPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;
/** /**
* @author gisellabronzetti * @author gisellabronzetti
* @author gregg morris - added removeCell(), setCantSplitRow(), setRepeatHeader()
*/ */
public class XWPFTableRow { public class XWPFTableRow {
@ -64,6 +67,11 @@ public class XWPFTableRow {
return null; 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 * 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(); return properties.sizeOfTrHeightArray() == 0 ? 0 : properties.getTrHeightArray(0).getVal().intValue();
} }
private CTTrPr getTrPr() { private CTTrPr getTrPr() {
return (ctRow.isSetTrPr()) ? ctRow.getTrPr() : ctRow.addNewTrPr(); return (ctRow.isSetTrPr()) ? ctRow.getTrPr() : ctRow.addNewTrPr();
} }
@ -136,9 +143,67 @@ public class XWPFTableRow {
*/ */
public XWPFTableCell getTableCell(CTTc cell) { public XWPFTableCell getTableCell(CTTc cell) {
for(int i=0; i<tableCells.size(); i++){ 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; 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 }// end class

View File

@ -20,27 +20,50 @@ package org.apache.poi.xwpf.usermodel;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
public class TestXWPFTableRow extends TestCase { public class TestXWPFTableRow extends TestCase {
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
// TODO Auto-generated method stub
super.setUp(); super.setUp();
} }
public void testSomething() throws Exception { public void testCreateRow() throws Exception {
CTRow ctRow = CTRow.Factory.newInstance(); CTRow ctRow = CTRow.Factory.newInstance();
assertNotNull(ctRow);
} }
@Override @Override
protected void tearDown() throws Exception { protected void tearDown() throws Exception {
// TODO Auto-generated method stub
super.tearDown(); 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);
}
} }