From commits-return-2767-apmail-poi-commits-archive=poi.apache.org@poi.apache.org Sat Jun 25 12:20:12 2011 Return-Path: X-Original-To: apmail-poi-commits-archive@minotaur.apache.org Delivered-To: apmail-poi-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D6B994C86 for ; Sat, 25 Jun 2011 12:20:12 +0000 (UTC) Received: (qmail 68971 invoked by uid 500); 25 Jun 2011 12:20:12 -0000 Delivered-To: apmail-poi-commits-archive@poi.apache.org Received: (qmail 68936 invoked by uid 500); 25 Jun 2011 12:20:12 -0000 Mailing-List: contact commits-help@poi.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@poi.apache.org Delivered-To: mailing list commits@poi.apache.org Received: (qmail 68929 invoked by uid 99); 25 Jun 2011 12:20:12 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 25 Jun 2011 12:20:12 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 25 Jun 2011 12:20:10 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 4C9CE23888BD for ; Sat, 25 Jun 2011 12:19:50 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit 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 -0000 To: commits@poi.apache.org From: yegor@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110625121950.4C9CE23888BD@eris.apache.org> 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 @@ + 51431 - Avoid IndexOutOfBoundException when removing freeze panes in XSSF 48877 - Fixed XSSFRichTextString to respect leading and trailing line breaks 49564 - Fixed default behaviour of XSSFCellStyle.getLocked() 48314 - Fixed setting column and row breaks in XSSF 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. + * + *

If both colSplit and rowSplit are zero then the existing freeze pane is removed

+ * * @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. + * + *

+ * If both colSplit and rowSplit are zero then the existing freeze pane is removed + *

+ * * @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. + * + *

+ * If both colSplit and rowSplit are zero then the existing freeze pane is removed + *

+ * * @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. + *

+ * If both colSplit and rowSplit are zero then the existing freeze pane is removed + *

* @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. + *

+ * If both colSplit and rowSplit are zero then the existing freeze pane is removed + *

* @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. + * + *

+ * If both colSplit and rowSplit are zero then the existing freeze pane is removed + *

+ * * @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