Author: fanningpj
Date: Sun May 22 08:28:44 2022
New Revision: 1901110
URL: http://svn.apache.org/viewvc?rev=1901110&view=rev
Log:
[bug-66080] XWPFNumbering.addAbstractNum uses abstract numberings count as id
Added:
poi/trunk/test-data/document/NumberingWithOutOfOrderId.docx (with props)
Modified:
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java
Modified:
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java?rev=1901110&r1=1901109&r2=1901110&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java
(original)
+++
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java
Sun May 22 08:28:44 2022
@@ -223,13 +223,22 @@ public class XWPFNumbering extends POIXM
ctNumbering.addNewAbstractNum().set(abstractNum.getAbstractNum());
} else {
abstractNum.setCtAbstractNum(ctNumbering.addNewAbstractNum());
-
abstractNum.getAbstractNum().setAbstractNumId(BigInteger.valueOf(pos));
+ BigInteger id = findNextAbstractNumberingId();
+ abstractNum.getAbstractNum().setAbstractNumId(id);
ctNumbering.setAbstractNumArray(pos, abstractNum.getAbstractNum());
}
abstractNums.add(abstractNum);
return abstractNum.getCTAbstractNum().getAbstractNumId();
}
+ private BigInteger findNextAbstractNumberingId() {
+ long maxId = 0;
+ for (XWPFAbstractNum num : abstractNums) {
+ maxId = Math.max(maxId,
num.getAbstractNum().getAbstractNumId().longValue());
+ }
+ return BigInteger.valueOf(maxId + 1);
+ }
+
/**
* remove an existing abstractNum
*
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java?rev=1901110&r1=1901109&r2=1901110&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java
(original)
+++
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java
Sun May 22 08:28:44 2022
@@ -196,6 +196,9 @@ class TestXWPFBugs {
//attempt to remove item with numId 2
assertTrue(numbering.removeAbstractNum(BigInteger.valueOf(2)));
+ //adding one level to numbering with id 1
+
numbering.getAbstractNum(BigInteger.valueOf(1)).getCTAbstractNum().addNewLvl();
+
XWPFDocument docReloaded = writeOutAndReadBack(doc);
XWPFNumbering numberingReloaded = docReloaded.getNumbering();
@@ -208,6 +211,14 @@ class TestXWPFBugs {
} else {
assertNotNull(abstractNum, "Failed for " + id);
assertEquals(id,
abstractNum.getAbstractNum().getAbstractNumId().longValue());
+
+ // we added one level for numbering with id "1"
+ if (id == 1) {
+ //TODO remaining issue from
https://bz.apache.org/bugzilla/show_bug.cgi?id=66079
+ //assertEquals(1,
abstractNum.getAbstractNum().getLvlList().size());
+ } else {
+ assertEquals(0,
abstractNum.getAbstractNum().getLvlList().size());
+ }
}
}
Modified:
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java?rev=1901110&r1=1901109&r2=1901110&view=diff
==============================================================================
---
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java
(original)
+++
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java
Sun May 22 08:28:44 2022
@@ -153,4 +153,16 @@ class TestXWPFNumbering {
assertEquals("upperLetter",
ctNumLvl.getLvl().getNumFmt().getVal().toString());
}
}
+
+ @Test
+ void testAddAbstractNum() throws IOException {
+ try (XWPFDocument doc =
XWPFTestDataSamples.openSampleDocument("NumberingWithOutOfOrderId.docx")) {
+ doc.getNumbering().addAbstractNum(new XWPFAbstractNum());
+ long count = doc.getNumbering()
+ .getAbstractNums().stream()
+ .map(e ->
e.getCTAbstractNum().getAbstractNumId().intValue())
+ .distinct().count();
+ assertEquals(doc.getNumbering().getAbstractNums().size(), count);
+ }
+ }
}
Added: poi/trunk/test-data/document/NumberingWithOutOfOrderId.docx
URL:
http://svn.apache.org/viewvc/poi/trunk/test-data/document/NumberingWithOutOfOrderId.docx?rev=1901110&view=auto
==============================================================================
Binary file - no diff available.
Propchange: poi/trunk/test-data/document/NumberingWithOutOfOrderId.docx
------------------------------------------------------------------------------
--- svn:mime-type (added)
+++ svn:mime-type Sun May 22 08:28:44 2022
@@ -0,0 +1 @@
+application/vnd.openxmlformats-officedocument.wordprocessingml.document
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]