001: /*
002: * Copyright 2006 John G. Wilson
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: *
016: */
017:
018: package org.codehaus.groovy.runtime.wrappers;
019:
020: //import java.lang.reflect.Constructor;
021: //import java.lang.reflect.Method;
022: //import java.util.List;
023: //import java.util.Map;
024: //
025: //import org.codehaus.groovy.ast.ClassNode;
026:
027: import groovy.lang.GroovyObject;
028: import groovy.lang.MetaClass;
029:
030: //import groovy.lang.MetaMethod;
031:
032: /**
033: * @author John Wilson
034: *
035: */
036:
037: public abstract class Wrapper implements GroovyObject {
038: protected MetaClass delegatingMetaClass;
039:
040: // protected MetaClass delegatingMetaClass = new MetaClass(Object.class) {
041: // /**
042: // * @param obj
043: // * @see java.lang.Object#equals(java.lang.Object)
044: // */
045: // public boolean equals(Object obj) {
046: // return Wrapper.this.getDelegatedMetaClass().equals(obj);
047: // }
048: //
049: // /**
050: // * @param object
051: // * @param attribute
052: // * @see groovy.lang.MetaClass#getAttribute(java.lang.Object, java.lang.String)
053: // */
054: // public Object getAttribute(Object object, String attribute) {
055: // return Wrapper.this.getDelegatedMetaClass().getAttribute(Wrapper.this.getWrapped(), attribute);
056: // }
057: //
058: // /**
059: // * @see groovy.lang.MetaClass#getClassNode()
060: // */
061: // public ClassNode getClassNode() {
062: // return Wrapper.this.getDelegatedMetaClass().getClassNode();
063: // }
064: //
065: // /**
066: // * @see groovy.lang.MetaClass#getMetaMethods()
067: // */
068: // public List getMetaMethods() {
069: // return Wrapper.this.getDelegatedMetaClass().getMetaMethods();
070: // }
071: //
072: // /**
073: // * @see groovy.lang.MetaClass#getMethods()
074: // */
075: // public List getMethods() {
076: // return Wrapper.this.getDelegatedMetaClass().getMethods();
077: // }
078: //
079: // /**
080: // * @see groovy.lang.MetaClass#getProperties()
081: // */
082: // public List getProperties() {
083: // return Wrapper.this.getDelegatedMetaClass().getProperties();
084: // }
085: //
086: // /**
087: // * @param object
088: // * @param property
089: // * @see groovy.lang.MetaClass#getProperty(java.lang.Object, java.lang.String)
090: // */
091: // public Object getProperty(Object object, String property) {
092: // return Wrapper.this.getDelegatedMetaClass().getProperty(Wrapper.this.getWrapped(), property);
093: // }
094: //
095: // /**
096: // * @see java.lang.Object#hashCode()
097: // */
098: // public int hashCode() {
099: // return Wrapper.this.getDelegatedMetaClass().hashCode();
100: // }
101: //
102: // /**
103: // * @param arguments
104: // * @see groovy.lang.MetaClass#invokeConstructor(java.lang.Object[])
105: // */
106: // public Object invokeConstructor(Object[] arguments) {
107: // return Wrapper.this.getDelegatedMetaClass().invokeConstructor(arguments);
108: // }
109: //
110: // /**
111: // * @param at
112: // * @param arguments
113: // * @see groovy.lang.MetaClass#invokeConstructorAt(java.lang.Class, java.lang.Object[])
114: // */
115: // public Object invokeConstructorAt(Class at, Object[] arguments) {
116: // return Wrapper.this.getDelegatedMetaClass().invokeConstructorAt(at, arguments);
117: // }
118: //
119: // /**
120: // * @param object
121: // * @param methodName
122: // * @param arguments
123: // * @see groovy.lang.MetaClass#invokeMethod(java.lang.Object, java.lang.String, java.lang.Object)
124: // */
125: // public Object invokeMethod(Object object, String methodName, Object arguments) {
126: // return Wrapper.this.getDelegatedMetaClass().invokeMethod(Wrapper.this.getWrapped(), methodName, arguments);
127: // }
128: //
129: // /**
130: // * @param object
131: // * @param methodName
132: // * @param arguments
133: // * @see groovy.lang.MetaClass#invokeMethod(java.lang.Object, java.lang.String, java.lang.Object[])
134: // */
135: // public Object invokeMethod(Object object, String methodName, Object[] arguments) {
136: // return Wrapper.this.getDelegatedMetaClass().invokeMethod(Wrapper.this.getWrapped(), methodName, arguments);
137: // }
138: //
139: // /**
140: // * @param object
141: // * @param methodName
142: // * @param arguments
143: // * @see groovy.lang.MetaClass#invokeStaticMethod(java.lang.Object, java.lang.String, java.lang.Object[])
144: // */
145: // public Object invokeStaticMethod(Object object, String methodName, Object[] arguments) {
146: // return Wrapper.this.getDelegatedMetaClass().invokeStaticMethod(Wrapper.this.getWrapped(), methodName, arguments);
147: // }
148: //
149: // /**
150: // * @param arguments
151: // * @see groovy.lang.MetaClass#retrieveConstructor(java.lang.Class[])
152: // */
153: // public Constructor retrieveConstructor(Class[] arguments) {
154: // return Wrapper.this.getDelegatedMetaClass().retrieveConstructor(arguments);
155: // }
156: //
157: // /**
158: // * @param owner
159: // * @param methodName
160: // * @param arguments
161: // * @see groovy.lang.MetaClass#retrieveMethod(java.lang.Object, java.lang.String, java.lang.Object[])
162: // */
163: // public MetaMethod retrieveMethod(Object owner, String methodName, Object[] arguments) {
164: // return Wrapper.this.getDelegatedMetaClass().retrieveMethod(owner, methodName, arguments);
165: // }
166: //
167: // /**
168: // * @param methodName
169: // * @param arguments
170: // * @see groovy.lang.MetaClass#retrieveMethod(java.lang.String, java.lang.Class[])
171: // */
172: // public MetaMethod retrieveMethod(String methodName, Class[] arguments) {
173: // return Wrapper.this.getDelegatedMetaClass().retrieveMethod(methodName, arguments);
174: // }
175: //
176: // /**
177: // * @param methodName
178: // * @param arguments
179: // * @see groovy.lang.MetaClass#retrieveStaticMethod(java.lang.String, java.lang.Class[])
180: // */
181: // public MetaMethod retrieveStaticMethod(String methodName, Class[] arguments) {
182: // return Wrapper.this.getDelegatedMetaClass().retrieveStaticMethod(methodName, arguments);
183: // }
184: //
185: // /**
186: // * @param object
187: // * @param attribute
188: // * @param newValue
189: // * @see groovy.lang.MetaClass#setAttribute(java.lang.Object, java.lang.String, java.lang.Object)
190: // */
191: // public void setAttribute(Object object, String attribute, Object newValue) {
192: // Wrapper.this.getDelegatedMetaClass().setAttribute(Wrapper.this.getWrapped(), attribute, newValue);
193: // }
194: //
195: // /**
196: // * @param bean
197: // * @param map
198: // * @see groovy.lang.MetaClass#setProperties(java.lang.Object, java.util.Map)
199: // */
200: // public void setProperties(Object bean, Map map) {
201: // Wrapper.this.getDelegatedMetaClass().setProperties(Wrapper.this.getWrapped(), map);
202: // }
203: //
204: // /**
205: // * @param object
206: // * @param property
207: // * @param newValue
208: // * @see groovy.lang.MetaClass#setProperty(java.lang.Object, java.lang.String, java.lang.Object)
209: // */
210: // public void setProperty(Object object, String property, Object newValue) {
211: // Wrapper.this.getDelegatedMetaClass().setProperty(Wrapper.this.getWrapped(), property, newValue);
212: // }
213: //
214: // /**
215: // * @see java.lang.Object#toString()
216: // */
217: // public String toString() {
218: // return Wrapper.this.getDelegatedMetaClass().toString();
219: // }
220: //
221: // /* (non-Javadoc)
222: // * @see groovy.lang.MetaClass#addNewInstanceMethod(java.lang.reflect.Method)
223: // */
224: // public void addNewInstanceMethod(Method method) {
225: // Wrapper.this.getDelegatedMetaClass().addNewInstanceMethod(method);
226: // }
227: //
228: // /* (non-Javadoc)
229: // * @see groovy.lang.MetaClass#addNewStaticMethod(java.lang.reflect.Method)
230: // */
231: // public void addNewStaticMethod(Method method) {
232: // Wrapper.this.getDelegatedMetaClass().addNewStaticMethod(method);
233: // }
234: //
235: // /* (non-Javadoc)
236: // * @see groovy.lang.MetaClass#checkInitialised()
237: // */
238: // public void checkInitialised() {
239: // Wrapper.this.getDelegatedMetaClass().checkInitialised();
240: // }
241: //
242: // /* (non-Javadoc)
243: // * @see groovy.lang.MetaClass#pickMethod(java.lang.Object, java.lang.String, java.lang.Object[])
244: // */
245: // public MetaMethod pickMethod(Object object, String methodName, Object[] arguments) {
246: // return Wrapper.this.getDelegatedMetaClass().pickMethod(object, methodName, arguments);
247: // }
248: //
249: // /* (non-Javadoc)
250: // * @see groovy.lang.MetaClass#pickMethod(java.lang.String, java.lang.Class[])
251: // */
252: // public MetaMethod pickMethod(String methodName, Class[] arguments) {
253: // return Wrapper.this.getDelegatedMetaClass().pickMethod(methodName, arguments);
254: // }
255: // };
256:
257: protected final Class constrainedType;
258:
259: public Wrapper(final Class constrainedType) {
260: this .constrainedType = constrainedType;
261: }
262:
263: /* (non-Javadoc)
264: * @see groovy.lang.GroovyObject#getMetaClass()
265: *
266: * This will only be useful post 1.0
267: */
268: public MetaClass getMetaClass() {
269: return this .delegatingMetaClass;
270: }
271:
272: public abstract Object unwrap();
273:
274: public Class getType() {
275: return this .constrainedType;
276: }
277:
278: protected abstract Object getWrapped();
279:
280: protected abstract MetaClass getDelegatedMetaClass();
281: }
|