You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2008/01/25 17:15:50 UTC

svn commit: r615255 - in /poi/trunk/src: documentation/content/xdocs/changes.xml documentation/content/xdocs/status.xml java/org/apache/poi/hssf/record/formula/AreaPtg.java testcases/org/apache/poi/hssf/record/formula/TestAreaPtg.java

Author: nick
Date: Fri Jan 25 08:15:49 2008
New Revision: 615255

URL: http://svn.apache.org/viewvc?rev=615255&view=rev
Log:
Don't swap AreaPtg references from relative to absolute, by correctly processing the fields. Patch from bug #44293

Added:
    poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/TestAreaPtg.java   (with props)
Modified:
    poi/trunk/src/documentation/content/xdocs/changes.xml
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java

Modified: poi/trunk/src/documentation/content/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/changes.xml?rev=615255&r1=615254&r2=615255&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/changes.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/changes.xml Fri Jan 25 08:15:49 2008
@@ -36,6 +36,7 @@
 
 		<!-- Don't forget to update status.xml too! -->
         <release version="3.0.2-FINAL" date="2008-??-??">
+            <action dev="POI-DEVELOPERS" type="fix">44293 - Avoid swapping AreaPtgs from relative to absolute</action>
             <action dev="POI-DEVELOPERS" type="fix">44292 - Correctly process the last paragraph in a word file</action>
             <action dev="POI-DEVELOPERS" type="fix">44254 - Avoid some unread byte warnings, and properly understand DVALRecord</action>
             <action dev="POI-DEVELOPERS" type="add">Add another formula evaluation method, evaluateFormulaCell(cell), which will re-calculate the value for a formula, without affecting the formula itself.</action>

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=615255&r1=615254&r2=615255&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Fri Jan 25 08:15:49 2008
@@ -33,6 +33,7 @@
 	<!-- Don't forget to update changes.xml too! -->
     <changes>
         <release version="3.0.2-FINAL" date="2008-??-??">
+            <action dev="POI-DEVELOPERS" type="fix">44293 - Avoid swapping AreaPtgs from relative to absolute</action>
             <action dev="POI-DEVELOPERS" type="fix">44292 - Correctly process the last paragraph in a word file</action>
             <action dev="POI-DEVELOPERS" type="fix">44254 - Avoid some unread byte warnings, and properly understand DVALRecord</action>
             <action dev="POI-DEVELOPERS" type="add">Add another formula evaluation method, evaluateFormulaCell(cell), which will re-calculate the value for a formula, without affecting the formula itself.</action>

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java?rev=615255&r1=615254&r2=615255&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java Fri Jan 25 08:15:49 2008
@@ -43,9 +43,9 @@
     private short             field_3_first_column;
     private short             field_4_last_column;
     
-    private BitField         rowRelative = BitFieldFactory.getInstance(0x8000);
-    private BitField         colRelative = BitFieldFactory.getInstance(0x4000);
-    private BitField         column      = BitFieldFactory.getInstance(0x3FFF);
+    private final static BitField   rowRelative = BitFieldFactory.getInstance(0x8000);
+    private final static BitField   colRelative = BitFieldFactory.getInstance(0x4000);
+    private final static BitField   columnMask      = BitFieldFactory.getInstance(0x3FFF);
 
     protected AreaPtg() {
       //Required for clone methods
@@ -157,7 +157,7 @@
      */
     public short getFirstColumn()
     {
-        return column.getShortValue(field_3_first_column);
+        return columnMask.getShortValue(field_3_first_column);
     }
 
     /**
@@ -204,7 +204,7 @@
      */
     public void setFirstColumn(short column)
     {
-        field_3_first_column = column;   // fixme
+    	field_3_first_column=columnMask.setShortValue(field_3_first_column, column);
     }
 
     /**
@@ -220,7 +220,7 @@
      */
     public short getLastColumn()
     {
-        return column.getShortValue(field_4_last_column);
+        return columnMask.getShortValue(field_4_last_column);
     }
 
     /**
@@ -269,7 +269,7 @@
      */
     public void setLastColumn(short column)
     {
-        field_4_last_column = column;   // fixme
+    	field_4_last_column=columnMask.setShortValue(field_4_last_column, column);
     }
 
     /**

Added: poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/TestAreaPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/TestAreaPtg.java?rev=615255&view=auto
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/TestAreaPtg.java (added)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/TestAreaPtg.java Fri Jan 25 08:15:49 2008
@@ -0,0 +1,114 @@
+        
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hssf.record.formula;
+
+import junit.framework.TestCase;
+
+import org.apache.poi.hssf.model.FormulaParser;
+
+/**
+ * Tests for {@link AreaPtg}.
+ *
+ * @author Dmitriy Kumshayev
+ */
+public class TestAreaPtg extends TestCase
+{
+
+	AreaPtg relative;
+	AreaPtg absolute;
+	
+	protected void setUp() throws Exception
+	{
+		super.setUp();
+		short firstRow=5;
+		short lastRow=13;
+		short firstCol=7;
+		short lastCol=17;
+		relative = new AreaPtg(firstRow,lastRow,firstCol,lastCol,true,true,true,true);
+		absolute = new AreaPtg(firstRow,lastRow,firstCol,lastCol,false,false,false,false);
+	}
+
+	public void testSetColumnsAbsolute()
+	{
+		resetColumns(absolute);
+		validateReference(true, absolute);
+	}
+	public void testSetColumnsRelative()
+	{
+		resetColumns(relative);
+		validateReference(false, relative);
+	}
+
+	private void validateReference(boolean abs, AreaPtg ref)
+	{
+		assertEquals("First column reference is not "+(abs?"absolute":"relative"),abs,!ref.isFirstColRelative());
+		assertEquals("Last column reference is not "+(abs?"absolute":"relative"),abs,!ref.isLastColRelative());
+		assertEquals("First row reference is not "+(abs?"absolute":"relative"),abs,!ref.isFirstRowRelative());
+		assertEquals("Last row reference is not "+(abs?"absolute":"relative"),abs,!ref.isLastRowRelative());
+	}
+
+
+	public void resetColumns(AreaPtg aptg)
+	{
+		short fc = aptg.getFirstColumn();
+		short lc = aptg.getLastColumn();
+		aptg.setFirstColumn(fc);
+		aptg.setLastColumn(lc);
+		assertEquals(fc , aptg.getFirstColumn() );
+		assertEquals(lc , aptg.getLastColumn() );
+	}
+	
+	public void testFormulaParser()
+	{
+		String formula1="SUM($E$5:$E$6)";
+		String expectedFormula1="SUM($F$5:$F$6)";
+		String newFormula1 = shiftAllColumnsBy1(formula1);
+		assertEquals("Absolute references changed", expectedFormula1, newFormula1);
+		
+		String formula2="SUM(E5:E6)";
+		String expectedFormula2="SUM(F5:F6)";
+		String newFormula2 = shiftAllColumnsBy1(formula2);
+		assertEquals("Relative references changed", expectedFormula2, newFormula2);
+	}
+	
+	private String shiftAllColumnsBy1(String  formula)
+	{
+		int letUsShiftColumn1By1Column=1;
+		
+		FormulaParser parser = new FormulaParser(formula,null);
+		parser.parse();
+
+		final Ptg[] ptgs = parser.getRPNPtg();
+		for(int i=0; i<ptgs.length; i++)
+		{
+			Ptg ptg = ptgs[i];
+			if (ptg instanceof AreaPtg )
+			{
+				AreaPtg aptg = (AreaPtg)ptg;
+				aptg.setFirstColumn((short)(aptg.getFirstColumn()+letUsShiftColumn1By1Column));
+				aptg.setLastColumn((short)(aptg.getLastColumn()+letUsShiftColumn1By1Column));
+			}
+		}
+		String newFormula = parser.toFormulaString(ptgs);
+		return newFormula;
+	}
+	
+	
+
+}

Propchange: poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/TestAreaPtg.java
------------------------------------------------------------------------------
    svn:eol-style = native



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