From: Javen O'Neal Date: Mon, 20 Jun 2016 03:40:32 +0000 (+0000) Subject: bug 59730: promote XSSFSheet#removeMergedRegions to Sheet interface X-Git-Tag: REL_3_15_BETA2~35 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=80eac0c70e6f9ce389d0315daebbb3c05d89ba3b;p=poi.git bug 59730: promote XSSFSheet#removeMergedRegions to Sheet interface git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1749258 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java index a87312b546..9b10b70afd 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java @@ -19,10 +19,12 @@ package org.apache.poi.hssf.usermodel; import java.io.PrintWriter; import java.util.ArrayList; +import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.TreeMap; +import java.util.TreeSet; import org.apache.poi.ddf.EscherRecord; import org.apache.poi.hssf.model.DrawingManager2; @@ -901,11 +903,22 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet { * * @param index of the region to unmerge */ - @Override public void removeMergedRegion(int index) { _sheet.removeMergedRegion(index); } + + /** + * Removes a number of merged regions of cells (hence letting them free) + * + * @param indices A set of the regions to unmerge + */ + @Override + public void removeMergedRegions(Collection indices) { + for (int i : (new TreeSet(indices)).descendingSet()) { + _sheet.removeMergedRegion(i); + } + } /** * returns the number of merged regions diff --git a/src/java/org/apache/poi/ss/usermodel/Sheet.java b/src/java/org/apache/poi/ss/usermodel/Sheet.java index 283628de34..d477f5b448 100644 --- a/src/java/org/apache/poi/ss/usermodel/Sheet.java +++ b/src/java/org/apache/poi/ss/usermodel/Sheet.java @@ -17,6 +17,7 @@ package org.apache.poi.ss.usermodel; +import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -331,6 +332,13 @@ public interface Sheet extends Iterable { * @param index of the region to unmerge */ void removeMergedRegion(int index); + + /** + * Removes a number of merged regions of cells (hence letting them free) + * + * @param indices A set of the regions to unmerge + */ + void removeMergedRegions(Collection indices); /** * Returns the number of merged regions diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java index 7d0b6fc746..1ca6a5f147 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java @@ -463,6 +463,17 @@ public class SXSSFSheet implements Sheet, Cloneable { _sh.removeMergedRegion(index); } + + /** + * Removes a merged region of cells (hence letting them free) + * + * @param indices of the regions to unmerge + */ + @Override + public void removeMergedRegions(Collection indices) + { + _sh.removeMergedRegions(indices); + } /** * Returns the number of merged regions diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index edc8000a4e..f8be5b0efb 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -1867,6 +1867,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { * * @param indices A set of the regions to unmerge */ + @Override public void removeMergedRegions(Collection indices) { if (!worksheet.isSetMergeCells()) return; diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java index b1bff95a3f..9bfabf2ea4 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java @@ -27,10 +27,17 @@ import static org.junit.Assert.fail; import static org.junit.Assume.assumeTrue; import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import org.apache.poi.hssf.util.PaneInformation; import org.apache.poi.ss.ITestDataProvider; @@ -418,6 +425,36 @@ public abstract class BaseTestSheet { wb.close(); } + + /** + * Remove multiple merged regions + */ + @Test + public void removeMergedRegions() throws IOException { + Workbook wb = _testDataProvider.createWorkbook(); + Sheet sheet = wb.createSheet(); + + Map mergedRegions = new HashMap(); + for (int r=0; r<10; r++) { + CellRangeAddress region = new CellRangeAddress(r, r, 0, 1); + mergedRegions.put(r, region); + sheet.addMergedRegion(region); + } + assertCollectionEquals(mergedRegions.values(), sheet.getMergedRegions()); + + Collection removed = Arrays.asList(0, 2, 3, 6, 8); + mergedRegions.keySet().removeAll(removed); + sheet.removeMergedRegions(removed); + assertCollectionEquals(mergedRegions.values(), sheet.getMergedRegions()); + + wb.close(); + } + + private static void assertCollectionEquals(Collection expected, Collection actual) { + Set e = new HashSet(expected); + Set a = new HashSet(actual); + assertEquals(e, a); + } @Test public void shiftMerged() throws IOException {