]> source.dussan.org Git - poi.git/commitdiff
bug 59730: promote XSSFSheet#removeMergedRegions to Sheet interface
authorJaven O'Neal <onealj@apache.org>
Mon, 20 Jun 2016 03:40:32 +0000 (03:40 +0000)
committerJaven O'Neal <onealj@apache.org>
Mon, 20 Jun 2016 03:40:32 +0000 (03:40 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1749258 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
src/java/org/apache/poi/ss/usermodel/Sheet.java
src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java

index a87312b5469e3b020681c87cc8a392415271e2fd..9b10b70afdfc809a204ea98eb97114d7ed5a7c59 100644 (file)
@@ -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<Integer> indices) {
+        for (int i : (new TreeSet<Integer>(indices)).descendingSet()) {
+            _sheet.removeMergedRegion(i);
+        }
+    }
 
     /**
      * returns the number of merged regions
index 283628de345a7baeb4974cccc723adb448f1168a..d477f5b44883a389aba04433144caffbe276c2d5 100644 (file)
@@ -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<Row> {
      * @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<Integer> indices);
 
     /**
      * Returns the number of merged regions
index 7d0b6fc74668802b5c3d274bfdcb874c257d596d..1ca6a5f147a2738979c738e6f272cfb51754fb52 100644 (file)
@@ -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<Integer> indices)
+    {
+        _sh.removeMergedRegions(indices);
+    }
 
     /**
      * Returns the number of merged regions
index edc8000a4eda024850ff7ef24a1c1d38dea14217..f8be5b0efb9d82e7c30d57840e9424204f220029 100644 (file)
@@ -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<Integer> indices) {
         if (!worksheet.isSetMergeCells()) return;
         
index b1bff95a3fa72f315e2f9052b7b364a16df74bd8..9bfabf2ea404388c1083092cb46f3292929b2330 100644 (file)
@@ -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<Integer, CellRangeAddress> mergedRegions = new HashMap<Integer, CellRangeAddress>();
+        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<Integer> 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<? extends Object> expected, Collection<? extends Object> actual) {
+        Set<Object> e = new HashSet<Object>(expected);
+        Set<Object> a = new HashSet<Object>(actual);
+        assertEquals(e, a);
+    }
 
     @Test
     public void shiftMerged() throws IOException {