Browse Source

XWPFNumbering.addAbstractNum will definitely throw an exception

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1875747 13f79535-47bb-0310-9956-ffa450edef68
tags/before_ooxml_3rd_edition
Alain Béarez 4 years ago
parent
commit
a639808c2c

+ 4
- 0
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFAbstractNum.java View File

@@ -57,4 +57,8 @@ public class XWPFAbstractNum {
return ctAbstractNum;
}

public void setCtAbstractNum(CTAbstractNum ctAbstractNum) {
this.ctAbstractNum = ctAbstractNum;
}

}

+ 17
- 1
src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java View File

@@ -23,6 +23,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.xml.namespace.QName;
@@ -237,7 +238,7 @@ public class XWPFNumbering extends POIXMLDocumentPart {
if (abstractNum.getAbstractNum() != null) { // Use the current CTAbstractNum if it exists
ctNumbering.addNewAbstractNum().set(abstractNum.getAbstractNum());
} else {
ctNumbering.addNewAbstractNum();
abstractNum.setCtAbstractNum(ctNumbering.addNewAbstractNum());
abstractNum.getAbstractNum().setAbstractNumId(BigInteger.valueOf(pos));
ctNumbering.setAbstractNumArray(pos, abstractNum.getAbstractNum());
}
@@ -283,5 +284,20 @@ public class XWPFNumbering extends POIXMLDocumentPart {
return null;
return num.getCTNum().getAbstractNumId().getVal();
}

/**
* @return all abstractNums
*/
public List<XWPFAbstractNum> getAbstractNums() {
return Collections.unmodifiableList(abstractNums);
}

/**
* @return all nums
*/
public List<XWPFNum> getNums() {
return Collections.unmodifiableList(nums);
}

}


+ 40
- 0
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java View File

@@ -26,6 +26,7 @@ import java.math.BigInteger;

import org.apache.poi.xwpf.XWPFTestDataSamples;
import org.junit.Test;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTNum;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTNumLvl;

@@ -64,6 +65,45 @@ public class TestXWPFNumbering {
assertEquals(abstractNumId, compareAbstractNum);
}

@Test
public void testAddAbstractNumIfAbstractNumNotEqualNull() throws IOException {
BigInteger abstractNumId = BigInteger.valueOf(1);
XWPFDocument docOut = new XWPFDocument();
XWPFNumbering numbering = docOut.createNumbering();

CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();
// must set the AbstractNumId, Otherwise fail
cTAbstractNum.setAbstractNumId(abstractNumId);
XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);
abstractNumId = numbering.addAbstractNum(abstractNum);
BigInteger numId = numbering.addNum(abstractNumId);

XWPFDocument docIn = XWPFTestDataSamples.writeOutAndReadBack(docOut);

numbering = docIn.getNumbering();
XWPFNum num = numbering.getNum(numId);
BigInteger compareAbstractNum = num.getCTNum().getAbstractNumId().getVal();
assertEquals(abstractNumId, compareAbstractNum);
}

@Test
public void testAddAbstractNumIfAbstractNumEqualNull() throws IOException {
XWPFDocument docOut = new XWPFDocument();
XWPFNumbering numbering = docOut.createNumbering();

XWPFAbstractNum abstractNum = new XWPFAbstractNum();
BigInteger abstractNumId = numbering.addAbstractNum(abstractNum);
BigInteger numId = numbering.addNum(abstractNumId);

XWPFDocument docIn = XWPFTestDataSamples.writeOutAndReadBack(docOut);

numbering = docIn.getNumbering();
XWPFNum num = numbering.getNum(numId);

BigInteger compareAbstractNum = num.getCTNum().getAbstractNumId().getVal();
assertEquals(abstractNumId, compareAbstractNum);
}

@Test
public void testGetNumIlvl() throws IOException {
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("Numbering.docx")) {

Loading…
Cancel
Save