]> source.dussan.org Git - poi.git/commitdiff
Patch from akhikhl from github pull #4 - Expose from XWPFParagraph the number level...
authorNick Burch <nick@apache.org>
Wed, 12 Jun 2013 18:04:16 +0000 (18:04 +0000)
committerNick Burch <nick@apache.org>
Wed, 12 Jun 2013 18:04:16 +0000 (18:04 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1492312 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java

index 383fa13e68754c6056d1f0b4f653ddf6ce5312f0..ff2ef8818197cb1b64c55269884573da7455b21f 100644 (file)
@@ -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
+}
index 8c114e209ef92b67f31a41b2afd6d6eb48496468..fce9d18e089147cd6dffe07f9b13df102043d758 100644 (file)
@@ -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());
+  }
 }