    1   /*
    2    * Copyright 2005 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 gls.ch06.s05.testClasses;
    19
    20
    21  import org.codehaus.groovy.runtime.InvokerHelper;
    22
    23  import groovy.lang.GroovyInterceptable;
    24  import groovy.lang.GroovyObject;
    25  import groovy.lang.MetaClass;
    26
    27  /***
    28   * @author John Wilson
    29   *
    30   */
    31
    32  public class Tt1gi extends Tt1 implements GroovyObject, GroovyInterceptable {
    33
    34    private MetaClass metaClass = InvokerHelper.getMetaClass(this);
    35
    36    public MetaClass getMetaClass() {
    37      return this.metaClass;
    38    }
    39
    40    public Object getProperty(final String property) {
    41      if ("x".equals(property)) {
    42        return "dynamic property";
    43      } else {
    44        return this.metaClass.getProperty(this, property);
    45      }
    46    }
    47
    48    public Object invokeMethod(final String name, final Object args) {
    49      if ("x".equals(name)) {
    50        return "dynamic method";
    51      } else {
    52        return this.metaClass.invokeMethod(this, name, args);
    53      }
    54    }
    55
    56    public void setMetaClass(final MetaClass metaClass) {
    57      this.metaClass = metaClass;
    58    }
    59
    60    public void setProperty(final String property, final Object newValue) {
    61      this.metaClass.setProperty(this, property, newValue);
    62    }
    63  }