From 0ecaa1ae58e97d0a501f11d5aa8ac63b37894e2c Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 12 Jun 2013 18:04:16 +0000 Subject: [PATCH] Patch from akhikhl from github pull #4 - Expose from XWPFParagraph the number level and format, if applied git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1492312 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xwpf/usermodel/XWPFParagraph.java | 48 ++++++++++++++++++- .../poi/xwpf/usermodel/TestXWPFNumbering.java | 18 +++++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java index 383fa13e6..ff2ef8818 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java @@ -25,11 +25,13 @@ 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.CTAbstractNum; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBorder; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFtnEdnRef; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTInd; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPBdr; @@ -216,6 +218,50 @@ public class XWPFParagraph implements IBodyElement { return null; } + /** + * Returns Ilvl of the numeric style for this paragraph. + * Returns null if this paragraph does not have numeric style. + * @return Ilvl as BigInteger + */ + public BigInteger getNumIlvl() { + if(paragraph.getPPr()!=null){ + if(paragraph.getPPr().getNumPr()!=null){ + if(paragraph.getPPr().getNumPr().getIlvl()!=null) + return paragraph.getPPr().getNumPr().getIlvl().getVal(); + } + } + return null; + } + + /** + * Returns numbering format for this paragraph, eg bullet or + * lowerLetter. + * Returns null if this paragraph does not have numeric style. + */ + public String getNumFmt() { + BigInteger numID = getNumID(); + XWPFNumbering numbering = document.getNumbering(); + if(numID != null && numbering != null) { + XWPFNum num = numbering.getNum(numID); + if(num != null) { + BigInteger ilvl = getNumIlvl(); + BigInteger abstractNumId = num.getCTNum().getAbstractNumId().getVal(); + CTAbstractNum anum = numbering.getAbstractNum(abstractNumId).getAbstractNum(); + CTLvl level = null; + for(int i = 0; i < anum.sizeOfLvlArray(); i++) { + CTLvl lvl = anum.getLvlArray(i); + if(lvl.getIlvl().equals(ilvl)) { + level = lvl; + break; + } + } + if(level != null) + return level.getNumFmt().getVal().toString(); + } + } + return null; + } + /** * setNumID of Paragraph * @param numPos @@ -1300,4 +1346,4 @@ public class XWPFParagraph implements IBodyElement { return null; } -}//end class \ No newline at end of file +} diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java index 8c114e209..fce9d18e0 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java @@ -56,4 +56,22 @@ public class TestXWPFNumbering extends TestCase { assertEquals(abstractNumId, compareAbstractNum); } + public void testGetNumIlvl() throws IOException{ + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("Numbering.docx"); + BigInteger numIlvl = BigInteger.valueOf(0); + assertEquals(numIlvl, doc.getParagraphs().get(0).getNumIlvl()); + numIlvl = BigInteger.valueOf(1); + assertEquals(numIlvl, doc.getParagraphs().get(5).getNumIlvl()); + } + + public void testGetNumFmt() throws IOException{ + XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("Numbering.docx"); + assertEquals("bullet", doc.getParagraphs().get(0).getNumFmt()); + assertEquals("bullet", doc.getParagraphs().get(1).getNumFmt()); + assertEquals("bullet", doc.getParagraphs().get(2).getNumFmt()); + assertEquals("bullet", doc.getParagraphs().get(3).getNumFmt()); + assertEquals("decimal", doc.getParagraphs().get(4).getNumFmt()); + assertEquals("lowerLetter", doc.getParagraphs().get(5).getNumFmt()); + assertEquals("lowerRoman", doc.getParagraphs().get(6).getNumFmt()); + } }