]> source.dussan.org Git - poi.git/commitdiff
When throwing an exception during formula evaluation, if this is due to an unimplemen...
authorNick Burch <nick@apache.org>
Thu, 3 Jul 2014 11:20:32 +0000 (11:20 +0000)
committerNick Burch <nick@apache.org>
Thu, 3 Jul 2014 11:20:32 +0000 (11:20 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1607588 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/ss/formula/UserDefinedFunction.java
src/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java
src/java/org/apache/poi/ss/formula/eval/NotImplementedException.java
src/java/org/apache/poi/ss/formula/eval/NotImplementedFunctionException.java [new file with mode: 0644]
src/java/org/apache/poi/ss/formula/functions/NotImplementedFunction.java
src/java/org/apache/poi/ss/formula/functions/Subtotal.java

index c1b22ba9ba35b4488aa448df8e5ca70bf99fb131..ee3c19e4b9a76d2fd7c3ecf604647fcb68a8952d 100644 (file)
@@ -19,9 +19,9 @@ package org.apache.poi.ss.formula;
 
 import org.apache.poi.ss.formula.eval.NameEval;
 import org.apache.poi.ss.formula.eval.NameXEval;
+import org.apache.poi.ss.formula.eval.NotImplementedFunctionException;
 import org.apache.poi.ss.formula.eval.ValueEval;
 import org.apache.poi.ss.formula.functions.FreeRefFunction;
-import org.apache.poi.ss.formula.eval.NotImplementedException;
 /**
  *
  * Common entry point for all user-defined (non-built-in) functions (where
@@ -56,7 +56,7 @@ final class UserDefinedFunction implements FreeRefFunction {
                }
                FreeRefFunction targetFunc = ec.findUserDefinedFunction(functionName);
                if (targetFunc == null) {
-                       throw new NotImplementedException(functionName);
+                       throw new NotImplementedFunctionException(functionName);
                }
                int nOutGoingArgs = nIncomingArgs -1;
                ValueEval[] outGoingArgs = new ValueEval[nOutGoingArgs];
index d8d8bfad474ad4cb6771d53566ebfdd59abb1c07..ad9604d9c8ec61c737ffd4dd1d21e65271bb2c1c 100644 (file)
 
 package org.apache.poi.ss.formula.atp;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeSet;
+
 import org.apache.poi.ss.formula.OperationEvaluationContext;
-import org.apache.poi.ss.formula.eval.NotImplementedException;
+import org.apache.poi.ss.formula.eval.NotImplementedFunctionException;
 import org.apache.poi.ss.formula.eval.ValueEval;
 import org.apache.poi.ss.formula.function.FunctionMetadata;
 import org.apache.poi.ss.formula.function.FunctionMetadataRegistry;
-import org.apache.poi.ss.formula.functions.*;
+import org.apache.poi.ss.formula.functions.Bin2Dec;
+import org.apache.poi.ss.formula.functions.Complex;
+import org.apache.poi.ss.formula.functions.Countifs;
+import org.apache.poi.ss.formula.functions.Dec2Bin;
+import org.apache.poi.ss.formula.functions.Dec2Hex;
+import org.apache.poi.ss.formula.functions.Delta;
+import org.apache.poi.ss.formula.functions.EDate;
+import org.apache.poi.ss.formula.functions.FactDouble;
+import org.apache.poi.ss.formula.functions.FreeRefFunction;
+import org.apache.poi.ss.formula.functions.Hex2Dec;
+import org.apache.poi.ss.formula.functions.ImReal;
+import org.apache.poi.ss.formula.functions.Imaginary;
+import org.apache.poi.ss.formula.functions.Oct2Dec;
+import org.apache.poi.ss.formula.functions.Quotient;
+import org.apache.poi.ss.formula.functions.Sumifs;
+import org.apache.poi.ss.formula.functions.WeekNum;
 import org.apache.poi.ss.formula.udf.UDFFinder;
 
-import java.util.*;
-
 /**
  * Analysis Toolpack Function Definitions
  */
@@ -35,7 +54,7 @@ public final class AnalysisToolPak implements UDFFinder {
         }
 
         public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) {
-            throw new NotImplementedException(_functionName);
+            throw new NotImplementedFunctionException(_functionName);
         }
     }
 
index cad7f885828bba149728898a757d68c0b17e1ae1..9d81f8ce3607ccf032a641d99ed57cd6b1fc62bd 100644 (file)
@@ -20,14 +20,18 @@ package org.apache.poi.ss.formula.eval;
 import org.apache.poi.ss.usermodel.FormulaEvaluator;
 
 /**
- * An exception thrown by implementors of {@link FormulaEvaluator} when attempting to evaluate
- * a formula which requires features that POI does not (yet) support.
- *
- * @author Josh Micich
+ * An exception thrown by implementors of {@link FormulaEvaluator},
+ *  when attempting to evaluate a formula which requires features
+ *   that POI does not (yet) support.
+ * 
+ * <p>Where possible, a subclass of this should be thrown, to provide
+ *  more detail of what part of the formula couldn't be processed due
+ *  to a missing implementation
  */
-public final class NotImplementedException extends RuntimeException {
-
-       public NotImplementedException(String message) {
+public class NotImplementedException extends RuntimeException {
+    private static final long serialVersionUID = -5840703336495141301L;
+    
+    public NotImplementedException(String message) {
                super(message);
        }
        public NotImplementedException(String message, NotImplementedException cause) {
diff --git a/src/java/org/apache/poi/ss/formula/eval/NotImplementedFunctionException.java b/src/java/org/apache/poi/ss/formula/eval/NotImplementedFunctionException.java
new file mode 100644 (file)
index 0000000..182e53b
--- /dev/null
@@ -0,0 +1,44 @@
+/* ====================================================================
+   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.ss.formula.eval;
+
+import org.apache.poi.ss.usermodel.FormulaEvaluator;
+
+/**
+ * An exception thrown by implementors of {@link FormulaEvaluator} when 
+ *  attempting to evaluate a formula which requires a function that POI 
+ *  does not (yet) support.
+ */
+public final class NotImplementedFunctionException extends NotImplementedException {
+    private static final long serialVersionUID = 1208119411557559057L;
+    
+    private String functionName;
+    
+       public NotImplementedFunctionException(String functionName) {
+               super(functionName);
+               this.functionName = functionName;
+       }
+       public NotImplementedFunctionException(String functionName, NotImplementedException cause) {
+               super(functionName, cause);
+        this.functionName = functionName;
+       }
+       
+       public String getFunctionName() {
+           return functionName;
+       }
+}
index 86422273b00612927532cd7563f77715de96bc82..50e6237003ada2b37b4b8b454847d0202e54fb6b 100644 (file)
 
 package org.apache.poi.ss.formula.functions;
 
+import org.apache.poi.ss.formula.eval.NotImplementedFunctionException;
 import org.apache.poi.ss.formula.eval.ValueEval;
-import org.apache.poi.ss.formula.eval.NotImplementedException;
 
 /**
- *
- * @author Amol S. Deshmukh &lt; amolweb at ya hoo dot com &gt;
  * This is the default implementation of a Function class.
  * The default behaviour is to raise a POI internal error
- * ({@link NotImplementedException}). This error should alert
+ * ({@link NotImplementedFunctionException}). This error should alert
  * the user that the formula contained a function that is not
  * yet implemented.
  */
@@ -39,7 +37,7 @@ public final class NotImplementedFunction implements Function {
        }
 
        public ValueEval evaluate(ValueEval[] operands, int srcRow, int srcCol) {
-               throw new NotImplementedException(_functionName);
+               throw new NotImplementedFunctionException(_functionName);
        }
        public String getFunctionName() {
                return _functionName;
index 94258aab58d86768a344afd69e1266bc8f8ac430..fca55c502e8cd4fb173e5958ea3a27229fa591d6 100644 (file)
 
 package org.apache.poi.ss.formula.functions;
 
+import static org.apache.poi.ss.formula.functions.AggregateFunction.subtotalInstance;
+
 import org.apache.poi.ss.formula.eval.ErrorEval;
 import org.apache.poi.ss.formula.eval.EvaluationException;
+import org.apache.poi.ss.formula.eval.NotImplementedException;
+import org.apache.poi.ss.formula.eval.NotImplementedFunctionException;
 import org.apache.poi.ss.formula.eval.OperandResolver;
 import org.apache.poi.ss.formula.eval.ValueEval;
-import org.apache.poi.ss.formula.eval.NotImplementedException;
-import static org.apache.poi.ss.formula.functions.AggregateFunction.subtotalInstance;
 
 /**
  * Implementation for the Excel function SUBTOTAL<p>
@@ -68,10 +70,10 @@ public class Subtotal implements Function {
                        case 5: return subtotalInstance(AggregateFunction.MIN);
                        case 6: return subtotalInstance(AggregateFunction.PRODUCT);
                        case 7: return subtotalInstance(AggregateFunction.STDEV);
-                       case 8: throw new NotImplementedException("STDEVP");
+                       case 8: throw new NotImplementedFunctionException("STDEVP");
                        case 9: return subtotalInstance(AggregateFunction.SUM);
-                       case 10: throw new NotImplementedException("VAR");
-                       case 11: throw new NotImplementedException("VARP");
+                       case 10: throw new NotImplementedFunctionException("VAR");
+                       case 11: throw new NotImplementedFunctionException("VARP");
                }
                if (functionCode > 100 && functionCode < 112) {
                        throw new NotImplementedException("SUBTOTAL - with 'exclude hidden values' option");