01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17: /*
18: * Created on May 15, 2005
19: *
20: */
21: package org.apache.poi.hssf.record.formula.functions;
22:
23: import org.apache.poi.hssf.record.formula.eval.AreaEval;
24: import org.apache.poi.hssf.record.formula.eval.BlankEval;
25: import org.apache.poi.hssf.record.formula.eval.BoolEval;
26: import org.apache.poi.hssf.record.formula.eval.ErrorEval;
27: import org.apache.poi.hssf.record.formula.eval.Eval;
28: import org.apache.poi.hssf.record.formula.eval.RefEval;
29: import org.apache.poi.hssf.record.formula.eval.ValueEval;
30:
31: /**
32: * @author Amol S. Deshmukh < amolweb at ya hoo dot com >
33: *
34: */
35: public class Isblank implements Function {
36:
37: public Eval evaluate(Eval[] operands, int srcCellRow,
38: short srcCellCol) {
39: ValueEval retval = null;
40: boolean b = false;
41:
42: switch (operands.length) {
43: default:
44: retval = ErrorEval.VALUE_INVALID;
45: break;
46: case 1:
47: if (operands[0] instanceof BlankEval) {
48: b = true;
49: } else if (operands[0] instanceof AreaEval) {
50: AreaEval ae = (AreaEval) operands[0];
51: if (ae.contains(srcCellRow, srcCellCol)) { // circular ref!
52: retval = ErrorEval.CIRCULAR_REF_ERROR;
53: } else if (ae.isRow()) {
54: if (ae.containsColumn(srcCellCol)) {
55: ValueEval ve = ae.getValueAt(ae.getFirstRow(),
56: srcCellCol);
57: b = (ve instanceof BlankEval);
58: } else {
59: b = false;
60: }
61: } else if (ae.isColumn()) {
62: if (ae.containsRow(srcCellRow)) {
63: ValueEval ve = ae.getValueAt(srcCellRow, ae
64: .getFirstColumn());
65: b = (ve instanceof BlankEval);
66: } else {
67: b = false;
68: }
69: } else {
70: b = false;
71: }
72: } else if (operands[0] instanceof RefEval) {
73: RefEval re = (RefEval) operands[0];
74: b = (!re.isEvaluated())
75: && re.getInnerValueEval() instanceof BlankEval;
76: } else {
77: b = false;
78: }
79: }
80:
81: if (retval == null) {
82: retval = b ? BoolEval.TRUE : BoolEval.FALSE;
83: }
84: return retval;
85: }
86: }
|