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 [EMAIL PROTECTED] 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to