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 private final ReferenceUberspect.ReferenceHandler handler;
29
30 private final JexlPropertySet setter;
31
32
33
34
35
36
37
38 public ReferenceSetExecutor(final ReferenceUberspect.ReferenceHandler referenceHandler, final JexlPropertySet jexlSet) {
39 if (referenceHandler == null || jexlSet == null) {
40 throw new IllegalArgumentException("handler and setter cant be null");
41 }
42 this.handler = referenceHandler;
43 this.setter = jexlSet;
44 }
45
46
47
48
49
50
51
52 protected Object getReference(final Object opt) {
53 return handler.callGet(opt);
54 }
55
56 @Override
57 public Object invoke(final Object opt, final Object arg) throws Exception {
58 final Object obj = getReference(opt);
59 return setter.invoke(obj, arg);
60 }
61
62 @Override
63 public boolean isCacheable() {
64 return setter.isCacheable();
65 }
66
67 @Override
68 public boolean tryFailed(final Object rval) {
69 return setter.tryFailed(rval);
70 }
71
72 @Override
73 public Object tryInvoke(final Object opt, final Object key, final Object arg) throws JexlException.TryFailed {
74 final Object obj = getReference(opt);
75 return obj == opt? JexlEngine.TRY_FAILED : obj == null ? null : setter.tryInvoke(key, obj, arg);
76 }
77 }