1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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