1 /* 2 Copyright (C) 2004 Grid Systems, S.A. 3 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU General Public License, version 2, as 6 published by the Free Software Foundation. 7 8 This program is distributed in the hope that it will be useful, 9 but WITHOUT ANY WARRANTY; without even the implied warranty of 10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 GNU General Public License for more details. 12 13 You should have received a copy of the GNU General Public License 14 along with this program; if not, write to the Free Software 15 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 16 */ 17 package com.gridsystems.beanfilter; 18 19 import java.util.Collection; 20 21 /** 22 * Node that evaluates its internal node as if it is a boolean value. 23 * <p> 24 * This node allows the use of boolean fields in the expression, like: 25 * <p> 26 * <code>(field = True) ---> (field)</code> 27 * <p> 28 * The evaluation result depends on the internal node value type: 29 * <ul> 30 * <li>BOOLEAN: (value = True) 31 * <li>NUMBER: (value <> 0) 32 * <li>STRING: (value <> '') 33 * <li>COLLECTION: (value not empty) 34 * </ul> 35 * 36 * @author Rodrigo Ruiz 37 * @version 1.0 38 */ 39 public class BooleanNode extends EvalNode { 40 /** 41 * The value to evaluate as a boolean. 42 */ 43 private EvalValue value; 44 45 /** 46 * Creates a new instance. 47 * 48 * @param value The value to evaluate as a boolean 49 */ 50 public BooleanNode(EvalValue value) { 51 super(value.getLinePos(), value.getCharPos()); 52 this.value = value; 53 } 54 55 /** 56 * {@inheritDoc} 57 */ 58 @Override public boolean eval(Object src) throws EvalException { 59 Object val = value.getValue(src); 60 if (val instanceof Boolean) { 61 return ((Boolean)val).booleanValue(); 62 } else if (val instanceof Number) { 63 return ((Number)val).doubleValue() != 0.0; 64 } else if (val instanceof Collection) { 65 return ((Collection<?>)val).size() != 0; 66 } else if (val instanceof String) { 67 return ((String)val).length() != 0; 68 } else { 69 return false; 70 } 71 } 72 73 /** 74 * {@inheritDoc} 75 */ 76 @Override public String toString() { 77 return value.toString(); 78 } 79 }