1 61 62 63 64 package org.jaxen.expr; 65 66 import java.util.ArrayList ; 67 import java.util.List ; 68 import org.jaxen.Context; 69 import org.jaxen.JaxenException; 70 71 public class DefaultFilterExpr extends DefaultExpr implements FilterExpr, Predicated 72 { 73 private Expr expr; 74 private PredicateSet predicates; 75 76 public DefaultFilterExpr(PredicateSet predicateSet) 77 { 78 this.predicates = predicateSet; 79 } 80 81 public DefaultFilterExpr(Expr expr, PredicateSet predicateSet) 82 { 83 this.expr = expr; 84 this.predicates = predicateSet; 85 } 86 87 public void addPredicate(Predicate predicate) 88 { 89 this.predicates.addPredicate( predicate ); 90 } 91 92 public List getPredicates() 93 { 94 return this.predicates.getPredicates(); 95 } 96 97 public PredicateSet getPredicateSet() 98 { 99 return this.predicates; 100 } 101 102 public Expr getExpr() 103 { 104 return this.expr; 105 } 106 107 public String toString() 108 { 109 return "[(DefaultFilterExpr): expr: " + expr + " predicates: " + predicates + " ]"; 110 } 111 112 public String getText() 113 { 114 String text = ""; 115 if ( this.expr != null ) 116 { 117 text = this.expr.getText(); 118 } 119 text += predicates.getText(); 120 return text; 121 } 122 123 public Expr simplify() 124 { 125 this.predicates.simplify(); 126 127 if ( this.expr != null ) 128 { 129 this.expr = this.expr.simplify(); 130 } 131 132 if ( this.predicates.getPredicates().size() == 0 ) 133 { 134 return getExpr(); 135 } 136 137 return this; 138 } 139 140 142 public boolean asBoolean(Context context) throws JaxenException 143 { 144 Object results = null; 145 if ( expr != null ) 146 { 147 results = expr.evaluate( context ); 148 } 149 else 150 { 151 List nodeSet = context.getNodeSet(); 152 ArrayList list = new ArrayList (nodeSet.size()); 153 list.addAll( nodeSet ); 154 results = list; 155 } 156 157 if ( results instanceof Boolean ) 158 { 159 Boolean b = (Boolean ) results; 160 return b.booleanValue(); 161 } 162 if ( results instanceof List ) 163 { 164 return getPredicateSet().evaluateAsBoolean( 165 (List ) results, context.getContextSupport() 166 ); 167 } 168 169 return false; 170 } 171 172 public Object evaluate(Context context) throws JaxenException 173 { 174 Object results = getExpr().evaluate( context ); 175 176 if ( results instanceof List ) 177 { 178 List newresults = getPredicateSet().evaluatePredicates( (List ) results, 179 context.getContextSupport() ); 180 results = newresults; 181 } 182 183 return results; 184 } 185 public void accept(Visitor visitor) 186 { 187 visitor.visit(this); 188 } 189 } 190 | Popular Tags |