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