1 61 62 package org.jaxen.expr; 63 64 import java.util.ArrayList ; 65 import java.util.Iterator ; 66 import java.util.List ; 67 68 import org.jaxen.Context; 69 import org.jaxen.Function; 70 import org.jaxen.JaxenException; 71 72 public class DefaultFunctionCallExpr extends DefaultExpr implements FunctionCallExpr 73 { 74 private String prefix; 75 private String functionName; 76 private List parameters; 77 78 public DefaultFunctionCallExpr(String prefix, String functionName) 79 { 80 this.prefix = prefix; 81 this.functionName = functionName; 82 this.parameters = new ArrayList (); 83 } 84 85 public void addParameter(Expr parameter) 86 { 87 this.parameters.add(parameter); 88 } 89 90 91 public List getParameters() 92 { 93 return this.parameters; 94 } 95 96 public String getPrefix() 97 { 98 return this.prefix; 99 } 100 101 public String getFunctionName() 102 { 103 return this.functionName; 104 } 105 106 107 public String getText() 108 { 109 StringBuffer buf = new StringBuffer (); 110 String prefix = getPrefix(); 111 112 if (prefix != null && 113 prefix.length() > 0) 114 { 115 buf.append(prefix); 116 buf.append(":"); 117 } 118 119 buf.append(getFunctionName()); 120 buf.append("("); 121 122 Iterator paramIter = getParameters().iterator(); 123 124 while (paramIter.hasNext()) { 125 Expr eachParam = (Expr) paramIter.next(); 126 127 buf.append(eachParam.getText()); 128 129 if (paramIter.hasNext()) 130 { 131 buf.append(", "); 132 } 133 } 134 135 buf.append(")"); 136 137 return buf.toString(); 138 } 139 140 public Expr simplify() 141 { 142 List paramExprs = getParameters(); 143 int paramSize = paramExprs.size(); 144 145 List newParams = new ArrayList (paramSize); 146 147 for (int i = 0; i < paramSize; ++i) 148 { 149 Expr eachParam = (Expr) paramExprs.get(i); 150 151 newParams.add(eachParam.simplify()); 152 } 153 154 this.parameters = newParams; 155 156 return this; 157 } 158 159 160 public String toString() 161 { 162 String prefix = getPrefix(); 163 164 if (prefix == null) 165 { 166 return "[(DefaultFunctionCallExpr): " + getFunctionName() + "(" + getParameters() + ") ]"; 167 } 168 169 return "[(DefaultFunctionCallExpr): " + getPrefix() + ":" + getFunctionName() + "(" + getParameters() + ") ]"; 170 } 171 172 public Object evaluate(Context context) throws JaxenException 173 { 174 String namespaceURI = 175 context.translateNamespacePrefixToUri(getPrefix()); 176 177 Function func = context.getFunction(namespaceURI, 178 getPrefix(), 179 getFunctionName()); 180 List paramValues = evaluateParams(context); 181 182 return func.call(context, paramValues); 183 } 184 185 public List evaluateParams(Context context) throws JaxenException 186 { 187 List paramExprs = getParameters(); 188 int paramSize = paramExprs.size(); 189 190 List paramValues = new ArrayList (paramSize); 191 192 for (int i = 0; i < paramSize; ++i) 193 { 194 Expr eachParam = (Expr) paramExprs.get(i); 195 196 Object eachValue = eachParam.evaluate(context); 197 198 paramValues.add(eachValue); 199 } 200 return paramValues; 201 } 202 203 public void accept(Visitor visitor) 204 { 205 visitor.visit(this); 206 } 207 } 208 209 | Popular Tags |