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 2015/08/01 00:07:58 UTC

svn commit: r1693662 - in /poi/trunk/src/ooxml: java/org/apache/poi/xssf/streaming/ testcases/org/apache/poi/xssf/streaming/

Author: nick
Date: Fri Jul 31 22:07:58 2015
New Revision: 1693662

URL: http://svn.apache.org/r1693662
Log:
Start re-enabling some SXSSF formula evaluation tests, with required fixes #58200

Modified:
    poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java
    poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCreationHelper.java
    poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFFormulaEvaluator.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFCell.java

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java?rev=1693662&r1=1693661&r2=1693662&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java Fri Jul 31 22:07:58 2015
@@ -908,7 +908,9 @@ public class SXSSFCell implements Cell {
     }
     private String convertCellValueToString() {
         int cellType = getCellType();
-
+        return convertCellValueToString(cellType);
+    }
+    private String convertCellValueToString(int cellType) {
         switch (cellType) {
             case CELL_TYPE_BLANK:
                 return "";
@@ -922,6 +924,12 @@ public class SXSSFCell implements Cell {
                 byte errVal = getErrorCellValue();
                 return FormulaError.forInt(errVal).getString();
             case CELL_TYPE_FORMULA:
+                if (_value != null) {
+                    FormulaValue fv = (FormulaValue)_value;
+                    if (fv.getFormulaType() != CELL_TYPE_FORMULA) {
+                        return convertCellValueToString(fv.getFormulaType());
+                    }
+                }
                 return "";
             default:
                 throw new IllegalStateException("Unexpected cell type (" + cellType + ")");

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCreationHelper.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCreationHelper.java?rev=1693662&r1=1693661&r2=1693662&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCreationHelper.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCreationHelper.java Fri Jul 31 22:07:58 2015
@@ -17,6 +17,11 @@
 
 package org.apache.poi.xssf.streaming;
 
+import org.apache.poi.ss.usermodel.ClientAnchor;
+import org.apache.poi.ss.usermodel.CreationHelper;
+import org.apache.poi.ss.usermodel.DataFormat;
+import org.apache.poi.ss.usermodel.ExtendedColor;
+import org.apache.poi.ss.usermodel.Hyperlink;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
 import org.apache.poi.xssf.usermodel.XSSFCreationHelper;
@@ -27,13 +32,14 @@ import org.apache.poi.xssf.usermodel.XSS
  *  based on the Streaming Workbook, and some on the related
  *  regular XSSF Workbook
  */
-public class SXSSFCreationHelper extends XSSFCreationHelper {
+public class SXSSFCreationHelper implements CreationHelper {
     private static POILogger logger = POILogFactory.getLogger(SXSSFCreationHelper.class);
     
     private SXSSFWorkbook wb;
+    private XSSFCreationHelper helper;
     
     public SXSSFCreationHelper(SXSSFWorkbook workbook) {
-        super(workbook.getXSSFWorkbook());
+        this.helper = new XSSFCreationHelper(workbook.getXSSFWorkbook());
         this.wb = workbook;
     }
 
@@ -45,4 +51,18 @@ public class SXSSFCreationHelper extends
     public SXSSFFormulaEvaluator createFormulaEvaluator() {
         return new SXSSFFormulaEvaluator(wb);
     }
+
+    // Pass-through methods
+    public DataFormat createDataFormat() {
+        return helper.createDataFormat();
+    }
+    public Hyperlink createHyperlink(int type) {
+        return helper.createHyperlink(type);
+    }
+    public ExtendedColor createExtendedColor() {
+        return helper.createExtendedColor();
+    }
+    public ClientAnchor createClientAnchor() {
+        return helper.createClientAnchor();
+    }
 }

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFFormulaEvaluator.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFFormulaEvaluator.java?rev=1693662&r1=1693661&r2=1693662&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFFormulaEvaluator.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFFormulaEvaluator.java Fri Jul 31 22:07:58 2015
@@ -25,13 +25,13 @@ import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
-import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator;
+import org.apache.poi.xssf.usermodel.BaseXSSFFormulaEvaluator;
 
 /**
  * Streaming-specific Formula Evaluator, which is able to 
  *  lookup cells within the current Window.
  */
-public class SXSSFFormulaEvaluator extends XSSFFormulaEvaluator {
+public final class SXSSFFormulaEvaluator extends BaseXSSFFormulaEvaluator {
     private static POILogger logger = POILogFactory.getLogger(SXSSFFormulaEvaluator.class);
     
     private SXSSFWorkbook wb;
@@ -43,7 +43,7 @@ public class SXSSFFormulaEvaluator exten
         this(workbook, new WorkbookEvaluator(SXSSFEvaluationWorkbook.create(workbook), stabilityClassifier, udfFinder));
     }
     private SXSSFFormulaEvaluator(SXSSFWorkbook workbook, WorkbookEvaluator bookEvaluator) {
-        super(workbook.getXSSFWorkbook(), bookEvaluator);
+        super(bookEvaluator);
         this.wb = workbook;
     }
     
@@ -71,6 +71,26 @@ public class SXSSFFormulaEvaluator exten
     }
     
     /**
+     * If cell contains formula, it evaluates the formula, and
+     *  puts the formula result back into the cell, in place
+     *  of the old formula.
+     * Else if cell does not contain formula, this method leaves
+     *  the cell unchanged.
+     * Note that the same instance of SXSSFCell is returned to
+     * allow chained calls like:
+     * <pre>
+     * int evaluatedCellType = evaluator.evaluateInCell(cell).getCellType();
+     * </pre>
+     * Be aware that your cell value will be changed to hold the
+     *  result of the formula. If you simply want the formula
+     *  value computed for you, use {@link #evaluateFormulaCell(org.apache.poi.ss.usermodel.Cell)} }
+     */
+    public SXSSFCell evaluateInCell(Cell cell) {
+        doEvaluateInCell(cell);
+        return (SXSSFCell)cell;
+    }
+    
+    /**
      * For active worksheets only, will loop over rows and
      *  cells, evaluating formula cells there.
      * If formula cells are outside the window for that sheet,

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFCell.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFCell.java?rev=1693662&r1=1693661&r2=1693662&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFCell.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFCell.java Fri Jul 31 22:07:58 2015
@@ -30,7 +30,6 @@ import org.apache.poi.xssf.SXSSFITestDat
 import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.apache.xmlbeans.XmlCursor;
-import org.junit.Ignore;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
 
 /**
@@ -48,51 +47,6 @@ public class TestSXSSFCell extends BaseT
         SXSSFITestDataProvider.instance.cleanup();
     }
 
-    /**
-     * this test involves evaluation of formulas which isn't supported for SXSSF
-     */
-    @Override
-    public void testConvertStringFormulaCell() {
-        try {
-            super.testConvertStringFormulaCell();
-            fail("expected exception");
-        } catch (IllegalArgumentException e){
-            assertEquals(
-                    "Unexpected type of cell: class org.apache.poi.xssf.streaming.SXSSFCell. " +
-                    "Only XSSFCells can be evaluated.", e.getMessage());
-        } catch (ClassCastException e) {} // TODO Temporary workaround during #58200
-    }
-
-    /**
-     * this test involves evaluation of formulas which isn't supported for SXSSF
-     */
-    @Override
-    public void testSetTypeStringOnFormulaCell() {
-        try {
-            super.testSetTypeStringOnFormulaCell();
-            fail("expected exception");
-        } catch (IllegalArgumentException e){
-            assertEquals(
-                    "Unexpected type of cell: class org.apache.poi.xssf.streaming.SXSSFCell. " +
-                    "Only XSSFCells can be evaluated.", e.getMessage());
-        } catch (ClassCastException e) {} // TODO Temporary workaround during #58200
-    }
-    
-    /**
-     * this test involves evaluation of formulas which isn't supported for SXSSF
-     */
-    @Override
-    public void testGetErrorCellValueFromFormulaCell() {
-        try {
-            super.testConvertStringFormulaCell();
-            fail("expected exception");
-        } catch (IllegalArgumentException e){
-            assertEquals(
-                    "Unexpected type of cell: class org.apache.poi.xssf.streaming.SXSSFCell. " +
-                    "Only XSSFCells can be evaluated.", e.getMessage());
-        } catch (ClassCastException e) {} // TODO Temporary workaround during #58200
-    }
-
     public void testPreserveSpaces() throws IOException {
         String[] samplesWithSpaces = {
                 " POI",



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