1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.jexl3.jexl342;
18
19 import org.apache.commons.jexl3.JexlEngine;
20 import org.apache.commons.jexl3.JexlException;
21 import org.apache.commons.jexl3.introspection.JexlPropertySet;
22
23
24
25
26 public class ReferenceSetExecutor implements JexlPropertySet {
27
28
29 private final ReferenceUberspect.ReferenceHandler handler;
30
31
32 private final JexlPropertySet setter;
33
34
35
36
37
38
39
40 public ReferenceSetExecutor(final ReferenceUberspect.ReferenceHandler referenceHandler, final JexlPropertySet jexlSet) {
41 if (referenceHandler == null || jexlSet == null) {
42 throw new IllegalArgumentException("handler and setter cant be null");
43 }
44 this.handler = referenceHandler;
45 this.setter = jexlSet;
46 }
47
48
49
50
51
52
53
54 protected Object getReference(final Object opt) {
55 return handler.callGet(opt);
56 }
57
58 @Override
59 public Object invoke(final Object opt, final Object arg) throws Exception {
60 final Object obj = getReference(opt);
61 return setter.invoke(obj, arg);
62 }
63
64 @Override
65 public boolean isCacheable() {
66 return setter.isCacheable();
67 }
68
69 @Override
70 public boolean tryFailed(final Object rval) {
71 return setter.tryFailed(rval);
72 }
73
74 @Override
75 public Object tryInvoke(final Object opt, final Object key, final Object arg) throws JexlException.TryFailed {
76 final Object obj = getReference(opt);
77 return obj == opt? JexlEngine.TRY_FAILED : obj == null ? null : setter.tryInvoke(key, obj, arg);
78 }
79 }