You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2016/06/07 23:15:40 UTC

svn commit: r1747326 - in /poi/trunk/src: java/org/apache/poi/ss/formula/eval/forked/ ooxml/testcases/org/apache/poi/xssf/usermodel/ testcases/org/apache/poi/ss/formula/eval/forked/

Author: kiwiwings
Date: Tue Jun  7 23:15:40 2016
New Revision: 1747326

URL: http://svn.apache.org/viewvc?rev=1747326&view=rev
Log:
Add XSSF support to ForkedEvaluator

Added:
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFForkedEvaluator.java
Modified:
    poi/trunk/src/java/org/apache/poi/ss/formula/eval/forked/ForkedEvaluator.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java
    poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/forked/TestForkedEvaluator.java

Modified: poi/trunk/src/java/org/apache/poi/ss/formula/eval/forked/ForkedEvaluator.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/eval/forked/ForkedEvaluator.java?rev=1747326&r1=1747325&r2=1747326&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/eval/forked/ForkedEvaluator.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/eval/forked/ForkedEvaluator.java Tue Jun  7 23:15:40 2016
@@ -23,6 +23,9 @@ import org.apache.poi.ss.formula.eval.Nu
 import org.apache.poi.ss.formula.eval.StringEval;
 import org.apache.poi.ss.formula.eval.ValueEval;
 import org.apache.poi.ss.formula.udf.UDFFinder;
+
+import java.lang.reflect.Method;
+
 import org.apache.poi.hssf.usermodel.HSSFEvaluationWorkbook;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.formula.CollaboratingWorkbooksEnvironment;
@@ -40,8 +43,6 @@ import org.apache.poi.ss.usermodel.Workb
  * This class enables a 'master workbook' to be loaded just once and shared between many evaluation
  * clients.  Each evaluation client creates its own {@link ForkedEvaluator} and can set cell values
  * that will be used for local evaluations (and don't disturb evaluations on other evaluators).
- *
- * @author Josh Micich
  */
 public final class ForkedEvaluator {
 
@@ -55,19 +56,19 @@ public final class ForkedEvaluator {
 	private static EvaluationWorkbook createEvaluationWorkbook(Workbook wb) {
 		if (wb instanceof HSSFWorkbook) {
 			return HSSFEvaluationWorkbook.create((HSSFWorkbook) wb);
+		} else {
+		    try {
+		        // TODO: check if this is Java 9 compatible ...
+		        Class<?> evalWB = Class.forName("org.apache.poi.xssf.usermodel.XSSFEvaluationWorkbook");
+		        Class<?> xssfWB = Class.forName("org.apache.poi.xssf.usermodel.XSSFWorkbook");
+		        Method createM = evalWB.getDeclaredMethod("create", xssfWB);
+		        return (EvaluationWorkbook)createM.invoke(null, wb);
+		    } catch (Exception e) {
+		        throw new IllegalArgumentException("Unexpected workbook type (" + wb.getClass().getName() + ") - check for poi-ooxml and poi-ooxml schemas jar in the classpath", e);
+		    }
 		}
-// TODO rearrange POI build to allow this
-//		if (wb instanceof XSSFWorkbook) {
-//			return XSSFEvaluationWorkbook.create((XSSFWorkbook) wb);
-//		}
-		throw new IllegalArgumentException("Unexpected workbook type (" + wb.getClass().getName() + ")");
-	}
-	/**
-	 * @deprecated (Sep 2009) (reduce overloading) use {@link #create(Workbook, IStabilityClassifier, UDFFinder)}
-	 */
-	public static ForkedEvaluator create(Workbook wb, IStabilityClassifier stabilityClassifier) {
-		return create(wb, stabilityClassifier, null);
 	}
+
 	/**
 	 * @param udfFinder pass <code>null</code> for default (AnalysisToolPak only)
 	 */

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java?rev=1747326&r1=1747325&r2=1747326&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/AllXSSFUsermodelTests.java Tue Jun  7 23:15:40 2016
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xssf.usermodel;
 
+import org.apache.poi.ss.formula.eval.forked.TestForkedEvaluator;
 import org.apache.poi.xssf.usermodel.extensions.TestXSSFBorder;
 import org.apache.poi.xssf.usermodel.extensions.TestXSSFCellFill;
 import org.apache.poi.xssf.usermodel.extensions.TestXSSFSheetComments;
@@ -58,7 +59,8 @@ import org.junit.runners.Suite;
     TestXSSFSheetComments.class,
     TestColumnHelper.class,
     TestHeaderFooterHelper.class,
-    TestXSSFPivotTable.class
+    TestXSSFPivotTable.class,
+    TestForkedEvaluator.class
 })
 public final class AllXSSFUsermodelTests {
 }

Added: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFForkedEvaluator.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFForkedEvaluator.java?rev=1747326&view=auto
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFForkedEvaluator.java (added)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFForkedEvaluator.java Tue Jun  7 23:15:40 2016
@@ -0,0 +1,28 @@
+/* ====================================================================
+   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.xssf.usermodel;
+
+import org.apache.poi.ss.formula.eval.forked.TestForkedEvaluator;
+import org.apache.poi.ss.usermodel.Workbook;
+
+public class TestXSSFForkedEvaluator extends TestForkedEvaluator {
+    
+    protected Workbook newWorkbook() {
+        return new XSSFWorkbook();
+    }
+}

Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/forked/TestForkedEvaluator.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/forked/TestForkedEvaluator.java?rev=1747326&r1=1747325&r2=1747326&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/forked/TestForkedEvaluator.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/eval/forked/TestForkedEvaluator.java Tue Jun  7 23:15:40 2016
@@ -21,29 +21,34 @@ import static org.junit.Assert.assertEqu
 
 import java.io.IOException;
 
-import org.apache.poi.hssf.usermodel.HSSFRow;
-import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.formula.IStabilityClassifier;
 import org.apache.poi.ss.formula.eval.NumberEval;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 
-public final class TestForkedEvaluator {
+public class TestForkedEvaluator {
     
     @Rule
     public ExpectedException expectedEx = ExpectedException.none();
     
+    protected Workbook newWorkbook() {
+        return new HSSFWorkbook();
+    }
+    
 	/**
 	 * set up a calculation workbook with input cells nicely segregated on a
 	 * sheet called "Inputs"
 	 */
-	private static HSSFWorkbook createWorkbook() {
-		HSSFWorkbook wb = new HSSFWorkbook();
-		HSSFSheet sheet1 = wb.createSheet("Inputs");
-		HSSFSheet sheet2 = wb.createSheet("Calculations");
-		HSSFRow row;
+	protected Workbook createWorkbook() {
+		Workbook wb = newWorkbook();
+		Sheet sheet1 = wb.createSheet("Inputs");
+		Sheet sheet2 = wb.createSheet("Calculations");
+		Row row;
 		row = sheet2.createRow(0);
 		row.createCell(0).setCellFormula("B1*Inputs!A1-Inputs!B1");
 		row.createCell(1).setCellValue(5.0); // Calculations!B1
@@ -60,7 +65,7 @@ public final class TestForkedEvaluator {
 	 */
 	@Test
 	public void testBasic() throws IOException {
-		HSSFWorkbook wb = createWorkbook();
+		Workbook wb = createWorkbook();
 
 		// The stability classifier is useful to reduce memory consumption of caching logic
 		IStabilityClassifier stabilityClassifier = new IStabilityClassifier() {
@@ -99,11 +104,11 @@ public final class TestForkedEvaluator {
 	 * <i>read-only</i> with respect to the ForkedEvaluator.
 	 */
 	@Test
-	public void testMissingInputCell() throws IOException {
+	public void testMissingInputCellH() throws IOException {
 	    expectedEx.expect(UnsupportedOperationException.class);
 	    expectedEx.expectMessage("Underlying cell 'A2' is missing in master sheet.");
 	    
-		HSSFWorkbook wb = createWorkbook();
+		Workbook wb = createWorkbook();
 
 		try {
     		ForkedEvaluator fe = ForkedEvaluator.create(wb, null, null);



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