1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.codehaus.groovy.runtime.wrappers;
19
20 import java.lang.reflect.Constructor;
21 import java.lang.reflect.Method;
22 import java.util.List;
23 import java.util.Map;
24
25 import org.codehaus.groovy.ast.ClassNode;
26
27 import groovy.lang.GroovyObject;
28 import groovy.lang.MetaClass;
29 import groovy.lang.MetaMethod;
30
31 /***
32 * @author John Wilson
33 *
34 */
35
36 public abstract class Wrapper implements GroovyObject {
37 protected MetaClass delegatingMetaClass = new MetaClass(Object.class) {
38 /***
39 * @param obj
40 * @return
41 * @see java.lang.Object#equals(java.lang.Object)
42 */
43 public boolean equals(Object obj) {
44 return Wrapper.this.getDelegatedMetaClass().equals(obj);
45 }
46
47 /***
48 * @param object
49 * @param attribute
50 * @return
51 * @see groovy.lang.MetaClass#getAttribute(java.lang.Object, java.lang.String)
52 */
53 public Object getAttribute(Object object, String attribute) {
54 return Wrapper.this.getDelegatedMetaClass().getAttribute(Wrapper.this.getWrapped(), attribute);
55 }
56
57 /***
58 * @return
59 * @see groovy.lang.MetaClass#getClassNode()
60 */
61 public ClassNode getClassNode() {
62 return Wrapper.this.getDelegatedMetaClass().getClassNode();
63 }
64
65 /***
66 * @return
67 * @see groovy.lang.MetaClass#getMetaMethods()
68 */
69 public List getMetaMethods() {
70 return Wrapper.this.getDelegatedMetaClass().getMetaMethods();
71 }
72
73 /***
74 * @return
75 * @see groovy.lang.MetaClass#getMethods()
76 */
77 public List getMethods() {
78 return Wrapper.this.getDelegatedMetaClass().getMethods();
79 }
80
81 /***
82 * @return
83 * @see groovy.lang.MetaClass#getProperties()
84 */
85 public List getProperties() {
86 return Wrapper.this.getDelegatedMetaClass().getProperties();
87 }
88
89 /***
90 * @param object
91 * @param property
92 * @return
93 * @see groovy.lang.MetaClass#getProperty(java.lang.Object, java.lang.String)
94 */
95 public Object getProperty(Object object, String property) {
96 return Wrapper.this.getDelegatedMetaClass().getProperty(Wrapper.this.getWrapped(), property);
97 }
98
99 /***
100 * @return
101 * @see java.lang.Object#hashCode()
102 */
103 public int hashCode() {
104 return Wrapper.this.getDelegatedMetaClass().hashCode();
105 }
106
107 /***
108 * @param arguments
109 * @return
110 * @see groovy.lang.MetaClass#invokeConstructor(java.lang.Object[])
111 */
112 public Object invokeConstructor(Object[] arguments) {
113 return Wrapper.this.getDelegatedMetaClass().invokeConstructor(arguments);
114 }
115
116 /***
117 * @param at
118 * @param arguments
119 * @return
120 * @see groovy.lang.MetaClass#invokeConstructorAt(java.lang.Class, java.lang.Object[])
121 */
122 public Object invokeConstructorAt(Class at, Object[] arguments) {
123 return Wrapper.this.getDelegatedMetaClass().invokeConstructorAt(at, arguments);
124 }
125
126 /***
127 * @param object
128 * @param methodName
129 * @param arguments
130 * @return
131 * @see groovy.lang.MetaClass#invokeMethod(java.lang.Object, java.lang.String, java.lang.Object)
132 */
133 public Object invokeMethod(Object object, String methodName, Object arguments) {
134 return Wrapper.this.getDelegatedMetaClass().invokeMethod(Wrapper.this.getWrapped(), methodName, arguments);
135 }
136
137 /***
138 * @param object
139 * @param methodName
140 * @param arguments
141 * @return
142 * @see groovy.lang.MetaClass#invokeMethod(java.lang.Object, java.lang.String, java.lang.Object[])
143 */
144 public Object invokeMethod(Object object, String methodName, Object[] arguments) {
145 return Wrapper.this.getDelegatedMetaClass().invokeMethod(Wrapper.this.getWrapped(), methodName, arguments);
146 }
147
148 /***
149 * @param object
150 * @param methodName
151 * @param arguments
152 * @return
153 * @see groovy.lang.MetaClass#invokeStaticMethod(java.lang.Object, java.lang.String, java.lang.Object[])
154 */
155 public Object invokeStaticMethod(Object object, String methodName, Object[] arguments) {
156 return Wrapper.this.getDelegatedMetaClass().invokeStaticMethod(Wrapper.this.getWrapped(), methodName, arguments);
157 }
158
159 /***
160 * @param arguments
161 * @return
162 * @see groovy.lang.MetaClass#retrieveConstructor(java.lang.Class[])
163 */
164 public Constructor retrieveConstructor(Class[] arguments) {
165 return Wrapper.this.getDelegatedMetaClass().retrieveConstructor(arguments);
166 }
167
168 /***
169 * @param owner
170 * @param methodName
171 * @param arguments
172 * @return
173 * @see groovy.lang.MetaClass#retrieveMethod(java.lang.Object, java.lang.String, java.lang.Object[])
174 */
175 public MetaMethod retrieveMethod(Object owner, String methodName, Object[] arguments) {
176 return Wrapper.this.getDelegatedMetaClass().retrieveMethod(owner, methodName, arguments);
177 }
178
179 /***
180 * @param methodName
181 * @param arguments
182 * @return
183 * @see groovy.lang.MetaClass#retrieveMethod(java.lang.String, java.lang.Class[])
184 */
185 public MetaMethod retrieveMethod(String methodName, Class[] arguments) {
186 return Wrapper.this.getDelegatedMetaClass().retrieveMethod(methodName, arguments);
187 }
188
189 /***
190 * @param methodName
191 * @param arguments
192 * @return
193 * @see groovy.lang.MetaClass#retrieveStaticMethod(java.lang.String, java.lang.Class[])
194 */
195 public MetaMethod retrieveStaticMethod(String methodName, Class[] arguments) {
196 return Wrapper.this.getDelegatedMetaClass().retrieveStaticMethod(methodName, arguments);
197 }
198
199 /***
200 * @param object
201 * @param attribute
202 * @param newValue
203 * @see groovy.lang.MetaClass#setAttribute(java.lang.Object, java.lang.String, java.lang.Object)
204 */
205 public void setAttribute(Object object, String attribute, Object newValue) {
206 Wrapper.this.getDelegatedMetaClass().setAttribute(Wrapper.this.getWrapped(), attribute, newValue);
207 }
208
209 /***
210 * @param bean
211 * @param map
212 * @see groovy.lang.MetaClass#setProperties(java.lang.Object, java.util.Map)
213 */
214 public void setProperties(Object bean, Map map) {
215 Wrapper.this.getDelegatedMetaClass().setProperties(Wrapper.this.getWrapped(), map);
216 }
217
218 /***
219 * @param object
220 * @param property
221 * @param newValue
222 * @see groovy.lang.MetaClass#setProperty(java.lang.Object, java.lang.String, java.lang.Object)
223 */
224 public void setProperty(Object object, String property, Object newValue) {
225 Wrapper.this.getDelegatedMetaClass().setProperty(Wrapper.this.getWrapped(), property, newValue);
226 }
227
228 /***
229 * @return
230 * @see java.lang.Object#toString()
231 */
232 public String toString() {
233 return Wrapper.this.getDelegatedMetaClass().toString();
234 }
235
236
237
238
239 public void addNewInstanceMethod(Method method) {
240 Wrapper.this.getDelegatedMetaClass().addNewInstanceMethod(method);
241 }
242
243
244
245
246 public void addNewStaticMethod(Method method) {
247 Wrapper.this.getDelegatedMetaClass().addNewStaticMethod(method);
248 }
249
250
251
252
253 public void checkInitialised() {
254 Wrapper.this.getDelegatedMetaClass().checkInitialised();
255 }
256
257
258
259
260 public MetaMethod pickMethod(Object object, String methodName, Object[] arguments) {
261 return Wrapper.this.getDelegatedMetaClass().pickMethod(object, methodName, arguments);
262 }
263
264
265
266
267 public MetaMethod pickMethod(String methodName, Class[] arguments) {
268 return Wrapper.this.getDelegatedMetaClass().pickMethod(methodName, arguments);
269 }
270 };
271
272 protected final Class constrainedType;
273
274 public Wrapper(final Class constrainedType) {
275 this.constrainedType = constrainedType;
276 }
277
278
279
280
281
282
283 public MetaClass getMetaClass() {
284 return this.delegatingMetaClass;
285 }
286
287 public abstract Object unwrap();
288
289 public Class getType() {
290 return this.constrainedType;
291 }
292
293 protected abstract Object getWrapped();
294 protected abstract MetaClass getDelegatedMetaClass();
295 }