View Javadoc

    1   /*
    2    * Copyright 2006 John G. Wilson
    3    *
    4    * Licensed under the Apache License, Version 2.0 (the "License");
    5    * you may not use this file except in compliance with the License.
    6    * You may obtain a copy of the License at
    7    *
    8    *     http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    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;
    38
    39  //  protected MetaClass delegatingMetaClass = new MetaClass(Object.class) {
    40  //    /***
    41  //     * @param obj
    42  //     * @see java.lang.Object#equals(java.lang.Object)
    43  //     */
    44  //    public boolean equals(Object obj) {
    45  //      return Wrapper.this.getDelegatedMetaClass().equals(obj);
    46  //    }
    47  //
    48  //    /***
    49  //     * @param object
    50  //     * @param attribute
    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  //     * @see groovy.lang.MetaClass#getClassNode()
    59  //     */
    60  //    public ClassNode getClassNode() {
    61  //      return Wrapper.this.getDelegatedMetaClass().getClassNode();
    62  //    }
    63  //
    64  //    /***
    65  //     * @see groovy.lang.MetaClass#getMetaMethods()
    66  //     */
    67  //    public List getMetaMethods() {
    68  //      return Wrapper.this.getDelegatedMetaClass().getMetaMethods();
    69  //    }
    70  //
    71  //    /***
    72  //     * @see groovy.lang.MetaClass#getMethods()
    73  //     */
    74  //    public List getMethods() {
    75  //      return Wrapper.this.getDelegatedMetaClass().getMethods();
    76  //    }
    77  //
    78  //    /***
    79  //     * @see groovy.lang.MetaClass#getProperties()
    80  //     */
    81  //    public List getProperties() {
    82  //      return Wrapper.this.getDelegatedMetaClass().getProperties();
    83  //    }
    84  //
    85  //    /***
    86  //     * @param object
    87  //     * @param property
    88  //     * @see groovy.lang.MetaClass#getProperty(java.lang.Object, java.lang.String)
    89  //     */
    90  //    public Object getProperty(Object object, String property) {
    91  //      return Wrapper.this.getDelegatedMetaClass().getProperty(Wrapper.this.getWrapped(), property);
    92  //    }
    93  //
    94  //    /***
    95  //     * @see java.lang.Object#hashCode()
    96  //     */
    97  //    public int hashCode() {
    98  //      return Wrapper.this.getDelegatedMetaClass().hashCode();
    99  //    }
    100 //
    101 //    /***
    102 //     * @param arguments
    103 //     * @see groovy.lang.MetaClass#invokeConstructor(java.lang.Object[])
    104 //     */
    105 //    public Object invokeConstructor(Object[] arguments) {
    106 //      return Wrapper.this.getDelegatedMetaClass().invokeConstructor(arguments);
    107 //    }
    108 //
    109 //    /***
    110 //     * @param at
    111 //     * @param arguments
    112 //     * @see groovy.lang.MetaClass#invokeConstructorAt(java.lang.Class, java.lang.Object[])
    113 //     */
    114 //    public Object invokeConstructorAt(Class at, Object[] arguments) {
    115 //      return Wrapper.this.getDelegatedMetaClass().invokeConstructorAt(at, arguments);
    116 //    }
    117 //
    118 //    /***
    119 //     * @param object
    120 //     * @param methodName
    121 //     * @param arguments
    122 //     * @see groovy.lang.MetaClass#invokeMethod(java.lang.Object, java.lang.String, java.lang.Object)
    123 //     */
    124 //    public Object invokeMethod(Object object, String methodName, Object arguments) {
    125 //      return Wrapper.this.getDelegatedMetaClass().invokeMethod(Wrapper.this.getWrapped(), methodName, arguments);
    126 //    }
    127 //
    128 //    /***
    129 //     * @param object
    130 //     * @param methodName
    131 //     * @param arguments
    132 //     * @see groovy.lang.MetaClass#invokeMethod(java.lang.Object, java.lang.String, java.lang.Object[])
    133 //     */
    134 //    public Object invokeMethod(Object object, String methodName, Object[] arguments) {
    135 //      return Wrapper.this.getDelegatedMetaClass().invokeMethod(Wrapper.this.getWrapped(), methodName, arguments);
    136 //    }
    137 //
    138 //    /***
    139 //     * @param object
    140 //     * @param methodName
    141 //     * @param arguments
    142 //     * @see groovy.lang.MetaClass#invokeStaticMethod(java.lang.Object, java.lang.String, java.lang.Object[])
    143 //     */
    144 //    public Object invokeStaticMethod(Object object, String methodName, Object[] arguments) {
    145 //      return Wrapper.this.getDelegatedMetaClass().invokeStaticMethod(Wrapper.this.getWrapped(), methodName, arguments);
    146 //    }
    147 //
    148 //    /***
    149 //     * @param arguments
    150 //     * @see groovy.lang.MetaClass#retrieveConstructor(java.lang.Class[])
    151 //     */
    152 //    public Constructor retrieveConstructor(Class[] arguments) {
    153 //      return Wrapper.this.getDelegatedMetaClass().retrieveConstructor(arguments);
    154 //    }
    155 //
    156 //    /***
    157 //     * @param owner
    158 //     * @param methodName
    159 //     * @param arguments
    160 //     * @see groovy.lang.MetaClass#retrieveMethod(java.lang.Object, java.lang.String, java.lang.Object[])
    161 //     */
    162 //    public MetaMethod retrieveMethod(Object owner, String methodName, Object[] arguments) {
    163 //      return Wrapper.this.getDelegatedMetaClass().retrieveMethod(owner, methodName, arguments);
    164 //    }
    165 //
    166 //    /***
    167 //     * @param methodName
    168 //     * @param arguments
    169 //     * @see groovy.lang.MetaClass#retrieveMethod(java.lang.String, java.lang.Class[])
    170 //     */
    171 //    public MetaMethod retrieveMethod(String methodName, Class[] arguments) {
    172 //      return Wrapper.this.getDelegatedMetaClass().retrieveMethod(methodName, arguments);
    173 //    }
    174 //
    175 //    /***
    176 //     * @param methodName
    177 //     * @param arguments
    178 //     * @see groovy.lang.MetaClass#retrieveStaticMethod(java.lang.String, java.lang.Class[])
    179 //     */
    180 //    public MetaMethod retrieveStaticMethod(String methodName, Class[] arguments) {
    181 //      return Wrapper.this.getDelegatedMetaClass().retrieveStaticMethod(methodName, arguments);
    182 //    }
    183 //
    184 //    /***
    185 //     * @param object
    186 //     * @param attribute
    187 //     * @param newValue
    188 //     * @see groovy.lang.MetaClass#setAttribute(java.lang.Object, java.lang.String, java.lang.Object)
    189 //     */
    190 //    public void setAttribute(Object object, String attribute, Object newValue) {
    191 //      Wrapper.this.getDelegatedMetaClass().setAttribute(Wrapper.this.getWrapped(), attribute, newValue);
    192 //    }
    193 //
    194 //    /***
    195 //     * @param bean
    196 //     * @param map
    197 //     * @see groovy.lang.MetaClass#setProperties(java.lang.Object, java.util.Map)
    198 //     */
    199 //    public void setProperties(Object bean, Map map) {
    200 //      Wrapper.this.getDelegatedMetaClass().setProperties(Wrapper.this.getWrapped(), map);
    201 //    }
    202 //
    203 //    /***
    204 //     * @param object
    205 //     * @param property
    206 //     * @param newValue
    207 //     * @see groovy.lang.MetaClass#setProperty(java.lang.Object, java.lang.String, java.lang.Object)
    208 //     */
    209 //    public void setProperty(Object object, String property, Object newValue) {
    210 //      Wrapper.this.getDelegatedMetaClass().setProperty(Wrapper.this.getWrapped(), property, newValue);
    211 //    }
    212 //
    213 //    /***
    214 //     * @see java.lang.Object#toString()
    215 //     */
    216 //    public String toString() {
    217 //      return Wrapper.this.getDelegatedMetaClass().toString();
    218 //    }
    219 //
    220 //    /* (non-Javadoc)
    221 //     * @see groovy.lang.MetaClass#addNewInstanceMethod(java.lang.reflect.Method)
    222 //     */
    223 //    public void addNewInstanceMethod(Method method) {
    224 //      Wrapper.this.getDelegatedMetaClass().addNewInstanceMethod(method);
    225 //    }
    226 //
    227 //    /* (non-Javadoc)
    228 //     * @see groovy.lang.MetaClass#addNewStaticMethod(java.lang.reflect.Method)
    229 //     */
    230 //    public void addNewStaticMethod(Method method) {
    231 //      Wrapper.this.getDelegatedMetaClass().addNewStaticMethod(method);
    232 //    }
    233 //
    234 //    /* (non-Javadoc)
    235 //     * @see groovy.lang.MetaClass#checkInitialised()
    236 //     */
    237 //    public void checkInitialised() {
    238 //      Wrapper.this.getDelegatedMetaClass().checkInitialised();
    239 //    }
    240 //
    241 //    /* (non-Javadoc)
    242 //     * @see groovy.lang.MetaClass#pickMethod(java.lang.Object, java.lang.String, java.lang.Object[])
    243 //     */
    244 //    public MetaMethod pickMethod(Object object, String methodName, Object[] arguments) {
    245 //      return Wrapper.this.getDelegatedMetaClass().pickMethod(object, methodName, arguments);
    246 //    }
    247 //
    248 //    /* (non-Javadoc)
    249 //     * @see groovy.lang.MetaClass#pickMethod(java.lang.String, java.lang.Class[])
    250 //     */
    251 //    public MetaMethod pickMethod(String methodName, Class[] arguments) {
    252 //      return Wrapper.this.getDelegatedMetaClass().pickMethod(methodName, arguments);
    253 //    }
    254 //  };
    255
    256   protected final Class constrainedType;
    257
    258   public Wrapper(final Class constrainedType) {
    259     this.constrainedType = constrainedType;
    260   }
    261
    262   /* (non-Javadoc)
    263    * @see groovy.lang.GroovyObject#getMetaClass()
    264    *
    265    * This will only be useful post 1.0
    266    */
    267   public MetaClass getMetaClass() {
    268     return this.delegatingMetaClass;
    269   }
    270
    271   public abstract Object unwrap();
    272
    273   public Class getType() {
    274     return this.constrainedType;
    275   }
    276
    277   protected abstract Object getWrapped();
    278   protected abstract MetaClass getDelegatedMetaClass();
    279 }