poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ye...@apache.org
Subject svn commit: r1139533 - in /poi/trunk/src: documentation/content/xdocs/ java/org/apache/poi/hssf/model/ java/org/apache/poi/hssf/usermodel/ java/org/apache/poi/ss/usermodel/ ooxml/java/org/apache/poi/xssf/usermodel/ ooxml/testcases/org/apache/poi/xssf/u...
Date Sat, 25 Jun 2011 12:19:50 GMT
Author: yegor
Date: Sat Jun 25 12:19:49 2011
New Revision: 1139533

URL: http://svn.apache.org/viewvc?rev=1139533&view=rev
Log:
Bug 51431 - Avoid IndexOutOfBoundException when removing freeze panes in XSSF

Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/java/org/apache/poi/hssf/model/InternalSheet.java
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
    poi/trunk/src/java/org/apache/poi/ss/usermodel/Sheet.java
    poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
    poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java
    poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=1139533&r1=1139532&r2=1139533&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Sat Jun 25 12:19:49 2011
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta4" date="2011-??-??">
+           <action dev="poi-developers" type="fix">51431 - Avoid IndexOutOfBoundException
when removing freeze panes in XSSF </action>
            <action dev="poi-developers" type="fix">48877 - Fixed XSSFRichTextString
to respect leading and trailing line breaks </action>
            <action dev="poi-developers" type="fix">49564 - Fixed default behaviour
of XSSFCellStyle.getLocked() </action>
            <action dev="poi-developers" type="fix">48314 - Fixed setting column and
row breaks in XSSF</action>

Modified: poi/trunk/src/java/org/apache/poi/hssf/model/InternalSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/model/InternalSheet.java?rev=1139533&r1=1139532&r2=1139533&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/model/InternalSheet.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/model/InternalSheet.java Sat Jun 25 12:19:49 2011
@@ -1315,6 +1315,9 @@ public final class InternalSheet {
 
     /**
      * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
+     *
+     * <p>If both colSplit and rowSplit are zero then the existing freeze pane is removed</p>
+     *
      * @param colSplit      Horizonatal position of split.
      * @param rowSplit      Vertical position of split.
      * @param topRow        Top row visible in bottom pane
@@ -1325,6 +1328,15 @@ public final class InternalSheet {
         if (paneLoc != -1)
             _records.remove(paneLoc);
 
+        // If both colSplit and rowSplit are zero then the existing freeze pane is removed
+        if(colSplit == 0 && rowSplit == 0){
+            windowTwo.setFreezePanes(false);
+            windowTwo.setFreezePanesNoSplit(false);
+            SelectionRecord sel = (SelectionRecord) findFirstRecordBySid(SelectionRecord.sid);
+            sel.setPane(PaneInformation.PANE_UPPER_LEFT);
+            return;
+        }
+
         int loc = findFirstRecordLocBySid(WindowTwoRecord.sid);
         PaneRecord pane = new PaneRecord();
         pane.setX((short)colSplit);
@@ -1335,7 +1347,7 @@ public final class InternalSheet {
             pane.setTopRow((short)0);
             pane.setActivePane((short)1);
         } else if (colSplit == 0) {
-            pane.setLeftColumn((short)64);
+            pane.setLeftColumn((short)0);
             pane.setActivePane((short)2);
         } else {
             pane.setActivePane((short)0);

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java?rev=1139533&r1=1139532&r2=1139533&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java Sat Jun 25 12:19:49 2011
@@ -1409,6 +1409,11 @@ public final class HSSFSheet implements 
 
     /**
      * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
+     *
+     * <p>
+     *     If both colSplit and rowSplit are zero then the existing freeze pane is removed
+     * </p>
+     *
      * @param colSplit      Horizonatal position of split.
      * @param rowSplit      Vertical position of split.
      * @param leftmostColumn   Left column visible in right pane.
@@ -1424,6 +1429,11 @@ public final class HSSFSheet implements 
 
     /**
      * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
+     *
+     * <p>
+     *     If both colSplit and rowSplit are zero then the existing freeze pane is removed
+     * </p>
+     *
      * @param colSplit      Horizonatal position of split.
      * @param rowSplit      Vertical position of split.
      */

Modified: poi/trunk/src/java/org/apache/poi/ss/usermodel/Sheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/Sheet.java?rev=1139533&r1=1139532&r2=1139533&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/usermodel/Sheet.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/usermodel/Sheet.java Sat Jun 25 12:19:49 2011
@@ -594,6 +594,9 @@ public interface Sheet extends Iterable<
 
     /**
      * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
+     * <p>
+     *     If both colSplit and rowSplit are zero then the existing freeze pane is removed
+     * </p>
      * @param colSplit      Horizonatal position of split.
      * @param rowSplit      Vertical position of split.
      * @param leftmostColumn   Left column visible in right pane.
@@ -603,6 +606,9 @@ public interface Sheet extends Iterable<
 
     /**
      * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
+     * <p>
+     *     If both colSplit and rowSplit are zero then the existing freeze pane is removed
+     * </p>
      * @param colSplit      Horizonatal position of split.
      * @param rowSplit      Vertical position of split.
      */

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java?rev=1139533&r1=1139532&r2=1139533&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java Sat Jun 25 12:19:49
2011
@@ -491,22 +491,40 @@ public class XSSFSheet extends POIXMLDoc
 
     /**
      * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
+     *
+     * <p>
+     *     If both colSplit and rowSplit are zero then the existing freeze pane is removed
+     * </p>
+     *
      * @param colSplit      Horizonatal position of split.
      * @param rowSplit      Vertical position of split.
-     * @param topRow        Top row visible in bottom pane
      * @param leftmostColumn   Left column visible in right pane.
+     * @param topRow        Top row visible in bottom pane
      */
     public void createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow)
{
-        CTPane pane = getPane();
-        if (colSplit > 0) { 
+        CTSheetView ctView = getDefaultSheetView();
+
+        // If both colSplit and rowSplit are zero then the existing freeze pane is removed
+        if(colSplit == 0 && rowSplit == 0){
+            if(ctView.isSetPane()) ctView.unsetPane();
+            ctView.setSelectionArray(null);
+            return;
+        }
+
+        if (!ctView.isSetPane()) {
+            ctView.addNewPane();
+        }
+        CTPane pane = ctView.getPane();
+
+        if (colSplit > 0) {
            pane.setXSplit(colSplit);
         } else {
-           pane.unsetXSplit();
+           if(pane.isSetXSplit()) pane.unsetXSplit();
         }
         if (rowSplit > 0) {
            pane.setYSplit(rowSplit);
         } else {
-           pane.unsetYSplit();
+           if(pane.isSetYSplit()) pane.unsetYSplit();
         }
         
         pane.setState(STPaneState.FROZEN);
@@ -521,7 +539,6 @@ public class XSSFSheet extends POIXMLDoc
             pane.setActivePane(STPane.BOTTOM_RIGHT);
         }
 
-        CTSheetView ctView = getDefaultSheetView();
         ctView.setSelectionArray(null);
         CTSelection sel = ctView.addNewSelection();
         sel.setPane(pane.getActivePane());
@@ -976,11 +993,14 @@ public class XSSFSheet extends POIXMLDoc
      * @return null if no pane configured, or the pane information.
      */
     public PaneInformation getPaneInformation() {
-        CTPane pane = getPane();
+        CTPane pane = getDefaultSheetView().getPane();
+        // no pane configured
+        if(pane == null)  return null;
+
         CellReference cellRef = pane.isSetTopLeftCell() ? new CellReference(pane.getTopLeftCell())
: null;
         return new PaneInformation((short)pane.getXSplit(), (short)pane.getYSplit(),
                 (short)(cellRef == null ? 0 : cellRef.getRow()),(cellRef == null ? 0 : cellRef.getCol()),
-                (byte)pane.getActivePane().intValue(), pane.getState() == STPaneState.FROZEN);
+                (byte)(pane.getActivePane().intValue() - 1), pane.getState() == STPaneState.FROZEN);
     }
 
     /**

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java?rev=1139533&r1=1139532&r2=1139533&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java Sat Jun
25 12:19:49 2011
@@ -1020,64 +1020,7 @@ public final class TestXSSFBugs extends 
        assertEquals(true, ps2.getValidSettings());
        assertEquals(false, ps2.getLandscape());
     }
-    
-    /**
-     * CreateFreezePane column/row order check 
-     */
-    public void test49381() throws Exception {
-       Workbook[] wbs = new Workbook[] { new HSSFWorkbook(), new XSSFWorkbook() };
-       int colSplit = 1;
-       int rowSplit = 2;
-       int leftmostColumn = 3;
-       int topRow = 4;
 
-       for(Workbook wb : wbs) {
-          Sheet s = wb.createSheet();
-          
-          // Populate
-          for(int rn=0; rn<= topRow; rn++) {
-             Row r = s.createRow(rn);
-             for(int cn=0; cn<leftmostColumn; cn++) {
-                Cell c = r.createCell(cn, Cell.CELL_TYPE_NUMERIC);
-                c.setCellValue(100*rn + cn);
-             }
-          }
-          
-          // Create the Freeze Pane
-          s.createFreezePane(colSplit, rowSplit, leftmostColumn, topRow);
-          PaneInformation paneInfo = s.getPaneInformation();
-          
-          // Check it
-          assertEquals(colSplit,       paneInfo.getVerticalSplitPosition());
-          assertEquals(rowSplit,       paneInfo.getHorizontalSplitPosition());
-          assertEquals(leftmostColumn, paneInfo.getVerticalSplitLeftColumn());
-          assertEquals(topRow,         paneInfo.getHorizontalSplitTopRow());
-          
-          
-          // Now a row only freezepane
-          s.createFreezePane(0, 3);
-          paneInfo = s.getPaneInformation();
-          
-          assertEquals(0,  paneInfo.getVerticalSplitPosition());
-          assertEquals(3,  paneInfo.getHorizontalSplitPosition());
-          if(wb == wbs[0]) {
-             assertEquals(64, paneInfo.getVerticalSplitLeftColumn()); // HSSF
-          } else {
-             assertEquals(0,  paneInfo.getVerticalSplitLeftColumn()); // XSSF
-          }
-          assertEquals(3,  paneInfo.getHorizontalSplitTopRow());
-          
-          // Now a column only freezepane
-          s.createFreezePane(4, 0);
-          paneInfo = s.getPaneInformation();
-          
-          assertEquals(4,  paneInfo.getVerticalSplitPosition());
-          assertEquals(0,  paneInfo.getHorizontalSplitPosition());
-          assertEquals(4 , paneInfo.getVerticalSplitLeftColumn());
-          assertEquals(0,  paneInfo.getHorizontalSplitTopRow());
-       }
-    }
-    
     /**
      * Default Column style
      */

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java?rev=1139533&r1=1139532&r2=1139533&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java Sat Jun
25 12:19:49 2011
@@ -213,7 +213,7 @@ public final class TestXSSFSheet extends
 
     }
 
-    public void testCreateFreezePane() {
+    public void testCreateFreezePane_XSSF() {
         XSSFWorkbook workbook = new XSSFWorkbook();
         XSSFSheet sheet = workbook.createSheet();
         CTWorksheet ctWorksheet = sheet.getCTWorksheet();

Modified: poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java?rev=1139533&r1=1139532&r2=1139533&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java Sat Jun
25 12:19:49 2011
@@ -19,6 +19,7 @@ package org.apache.poi.ss.usermodel;
 
 import junit.framework.TestCase;
 
+import org.apache.poi.hssf.util.PaneInformation;
 import org.apache.poi.ss.ITestDataProvider;
 import org.apache.poi.ss.SpreadsheetVersion;
 import org.apache.poi.ss.util.CellRangeAddress;
@@ -326,4 +327,56 @@ public abstract class BaseTestBugzillaIs
         assertEquals(255*256, sheet.getColumnWidth(0)); // maximum column width is 255 characters
         sheet.setColumnWidth(0, sheet.getColumnWidth(0)); // Bug 506819 reports exception
at this point
     }
+
+    /**
+     * CreateFreezePane column/row order check
+     */
+    public void test49381() throws Exception {
+       Workbook wb = _testDataProvider.createWorkbook();
+       int colSplit = 1;
+       int rowSplit = 2;
+       int leftmostColumn = 3;
+       int topRow = 4;
+
+        Sheet s = wb.createSheet();
+
+        // Populate
+        for(int rn=0; rn<= topRow; rn++) {
+           Row r = s.createRow(rn);
+           for(int cn=0; cn<leftmostColumn; cn++) {
+              Cell c = r.createCell(cn, Cell.CELL_TYPE_NUMERIC);
+              c.setCellValue(100*rn + cn);
+           }
+        }
+
+        // Create the Freeze Pane
+        s.createFreezePane(colSplit, rowSplit, leftmostColumn, topRow);
+        PaneInformation paneInfo = s.getPaneInformation();
+
+        // Check it
+        assertEquals(colSplit,       paneInfo.getVerticalSplitPosition());
+        assertEquals(rowSplit,       paneInfo.getHorizontalSplitPosition());
+        assertEquals(leftmostColumn, paneInfo.getVerticalSplitLeftColumn());
+        assertEquals(topRow,         paneInfo.getHorizontalSplitTopRow());
+
+
+        // Now a row only freezepane
+        s.createFreezePane(0, 3);
+        paneInfo = s.getPaneInformation();
+
+        assertEquals(0,  paneInfo.getVerticalSplitPosition());
+        assertEquals(3,  paneInfo.getHorizontalSplitPosition());
+        assertEquals(0,  paneInfo.getVerticalSplitLeftColumn());
+        assertEquals(3,  paneInfo.getHorizontalSplitTopRow());
+
+        // Now a column only freezepane
+        s.createFreezePane(4, 0);
+        paneInfo = s.getPaneInformation();
+
+        assertEquals(4,  paneInfo.getVerticalSplitPosition());
+        assertEquals(0,  paneInfo.getHorizontalSplitPosition());
+        assertEquals(4 , paneInfo.getVerticalSplitLeftColumn());
+        assertEquals(0,  paneInfo.getHorizontalSplitTopRow());
+    }
+
 }

Modified: poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java?rev=1139533&r1=1139532&r2=1139533&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java Sat Jun 25 12:19:49
2011
@@ -21,6 +21,7 @@ import java.util.Iterator;
 
 import junit.framework.TestCase;
 
+import org.apache.poi.hssf.util.PaneInformation;
 import org.apache.poi.ss.ITestDataProvider;
 import org.apache.poi.ss.SpreadsheetVersion;
 import org.apache.poi.ss.util.CellRangeAddress;
@@ -653,5 +654,53 @@ public abstract class BaseTestSheet exte
 
     }
 
+    public void testCreateFreezePane() {
+        Workbook wb = _testDataProvider.createWorkbook();
+        // create a workbook
+        Sheet sheet = wb.createSheet();
+        assertNull(sheet.getPaneInformation());
+        sheet.createFreezePane(0, 0);
+        // still null
+        assertNull(sheet.getPaneInformation());
+
+        sheet.createFreezePane(2, 3);
+
+        PaneInformation info = sheet.getPaneInformation();
+
+
+        assertEquals(PaneInformation.PANE_LOWER_RIGHT, info.getActivePane());
+        assertEquals(3, info.getHorizontalSplitPosition());
+        assertEquals(3, info.getHorizontalSplitTopRow());
+        assertEquals(2, info.getVerticalSplitLeftColumn());
+        assertEquals(2, info.getVerticalSplitPosition());
+
+        sheet.createFreezePane(0, 0);
+        // If both colSplit and rowSplit are zero then the existing freeze pane is removed
+        assertNull(sheet.getPaneInformation());
+
+        sheet.createFreezePane(0, 3);
+
+        info = sheet.getPaneInformation();
+
+        assertEquals(PaneInformation.PANE_LOWER_LEFT, info.getActivePane());
+        assertEquals(3, info.getHorizontalSplitPosition());
+        assertEquals(3, info.getHorizontalSplitTopRow());
+        assertEquals(0, info.getVerticalSplitLeftColumn());
+        assertEquals(0, info.getVerticalSplitPosition());
+
+        sheet.createFreezePane(3, 0);
+
+        info = sheet.getPaneInformation();
+
+        assertEquals(PaneInformation.PANE_UPPER_RIGHT, info.getActivePane());
+        assertEquals(0, info.getHorizontalSplitPosition());
+        assertEquals(0, info.getHorizontalSplitTopRow());
+        assertEquals(3, info.getVerticalSplitLeftColumn());
+        assertEquals(3, info.getVerticalSplitPosition());
+
+        sheet.createFreezePane(0, 0);
+        // If both colSplit and rowSplit are zero then the existing freeze pane is removed
+        assertNull(sheet.getPaneInformation());
+    }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org


Mime
View raw message