01: /*
02: * Copyright 2006, 2007 Odysseus Software GmbH
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16: package de.odysseus.el.tree.impl.ast;
17:
18: import javax.el.ELContext;
19:
20: import de.odysseus.el.misc.TypeConversions;
21: import de.odysseus.el.tree.Bindings;
22: import de.odysseus.el.tree.ExpressionNode;
23:
24: public abstract class AstNode implements ExpressionNode {
25: /**
26: * evaluate and return the (optionally coerced) result.
27: */
28: public final Object getValue(Bindings bindings, ELContext context,
29: Class<?> type) {
30: Object value = eval(bindings, context);
31: if (type != null) {
32: value = TypeConversions.coerceToType(value, type);
33: }
34: return value;
35: }
36:
37: public abstract void appendStructure(StringBuilder builder,
38: Bindings bindings);
39:
40: public abstract Object eval(Bindings bindings, ELContext context);
41:
42: public final String getStructuralId(Bindings bindings) {
43: StringBuilder builder = new StringBuilder();
44: appendStructure(builder, bindings);
45: return builder.toString();
46: }
47: }
|