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 groovy.lang.MetaClass;
021
022
023 /**
024 * @author John Wilson
025 *
026 */
027
028 public class PojoWrapper extends Wrapper {
029 protected MetaClass delegate;
030 protected final Object wrapped;
031
032 public PojoWrapper(final Object wrapped, final Class constrainedType) {
033 super(constrainedType);
034 this.wrapped = wrapped;
035
036 /*
037 * This check is temporary - remove before 1.0 release
038 */
039 // if (wrapped instanceof GroovyObject) {
040 // throw new RuntimeException("trying to wrap the groovyObject "
041 // + wrapped.getClass().getName()
042 // + " in a PojoWrapper");
043 // }
044 }
045
046 public Object unwrap() {
047 return this.wrapped;
048 }
049
050 /**
051 * Note the rest of these method will only be used post 1.0
052 */
053
054 /* (non-Javadoc)
055 * @see groovy.lang.GroovyObject#getProperty(java.lang.String)
056 */
057 public Object getProperty(final String property) {
058 return this.delegate.getProperty(this.wrapped, property);
059 }
060
061 /* (non-Javadoc)
062 * @see groovy.lang.GroovyObject#invokeMethod(java.lang.String, java.lang.Object)
063 */
064 public Object invokeMethod(final String methodName, final Object arguments) {
065 return this.delegate.invokeMethod(this.wrapped, methodName, arguments);
066 }
067
068 /* (non-Javadoc)
069 * @see groovy.lang.GroovyObject#setMetaClass(groovy.lang.MetaClass)
070 */
071 public void setMetaClass(final MetaClass metaClass) {
072 this.delegate = metaClass;
073 }
074
075 /* (non-Javadoc)
076 * @see groovy.lang.GroovyObject#setProperty(java.lang.String, java.lang.Object)
077 */
078 public void setProperty(final String property, final Object newValue) {
079 this.delegate.setProperty(this.wrapped, property, newValue);
080 }
081
082 protected Object getWrapped() {
083 return this.wrapped;
084 }
085
086 protected MetaClass getDelegatedMetaClass() {
087 return this.delegate;
088 }
089 }