From d178bb9dc1ff52643c571b73146dfdab76cd422b Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Sun, 22 May 2022 08:28:44 +0000 Subject: [PATCH] [bug-66080] XWPFNumbering.addAbstractNum uses abstract numberings count as id git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1901110 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xwpf/usermodel/XWPFNumbering.java | 11 ++++++++++- .../apache/poi/xwpf/usermodel/TestXWPFBugs.java | 11 +++++++++++ .../poi/xwpf/usermodel/TestXWPFNumbering.java | 12 ++++++++++++ .../document/NumberingWithOutOfOrderId.docx | Bin 0 -> 12978 bytes 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 test-data/document/NumberingWithOutOfOrderId.docx diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java index 62131cafd5..c4317eccc7 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFNumbering.java @@ -223,13 +223,22 @@ public class XWPFNumbering extends POIXMLDocumentPart { 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 * diff --git a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java index dd241c14d3..9b312603bd 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java +++ b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFBugs.java @@ -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()); + } } } diff --git a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java index c1806c946a..09d31dbf13 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java +++ b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFNumbering.java @@ -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); + } + } } diff --git a/test-data/document/NumberingWithOutOfOrderId.docx b/test-data/document/NumberingWithOutOfOrderId.docx new file mode 100644 index 0000000000000000000000000000000000000000..6c471c43bd17fb57c51929d1408d3070be9d92bc GIT binary patch literal 12978 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 literal 0 HcmV?d00001