01: /**
02: * MVEL (The MVFLEX Expression Language)
03: *
04: * Copyright (C) 2007 Christopher Brock, MVFLEX/Valhalla Project and the Codehaus
05: *
06: * Licensed under the Apache License, Version 2.0 (the "License");
07: * you may not use this file except in compliance with the License.
08: * You may obtain a copy of the License at
09: *
10: * http://www.apache.org/licenses/LICENSE-2.0
11: *
12: * Unless required by applicable law or agreed to in writing, software
13: * distributed under the License is distributed on an "AS IS" BASIS,
14: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15: * See the License for the specific language governing permissions and
16: * limitations under the License.
17: *
18: */package org.mvel.optimizers.impl.refl;
19:
20: import org.mvel.CompileException;
21: import org.mvel.compiler.AccessorNode;
22: import org.mvel.integration.VariableResolverFactory;
23:
24: public class VariableAccessor implements AccessorNode {
25: private AccessorNode nextNode;
26: private String property;
27:
28: public VariableAccessor(String property) {
29: this .property = property;
30: }
31:
32: public Object getValue(Object ctx, Object elCtx,
33: VariableResolverFactory vrf) {
34: if (vrf == null)
35: throw new CompileException(
36: "cannot access property in optimized accessor: "
37: + property);
38:
39: if (nextNode != null) {
40: return nextNode.getValue(vrf.getVariableResolver(property)
41: .getValue(), elCtx, vrf);
42: } else {
43: return vrf.getVariableResolver(property).getValue();
44: }
45: }
46:
47: public Object getProperty() {
48: return property;
49: }
50:
51: public void setProperty(String property) {
52: this .property = property;
53: }
54:
55: public AccessorNode getNextNode() {
56: return nextNode;
57: }
58:
59: public AccessorNode setNextNode(AccessorNode nextNode) {
60: return this .nextNode = nextNode;
61: }
62:
63: public Object setValue(Object ctx, Object elCtx,
64: VariableResolverFactory variableFactory, Object value) {
65: variableFactory.getVariableResolver(property).setValue(value);
66: return value;
67: }
68: }
|