Clover coverage report - groovy - 1.0-beta-7
Coverage timestamp: Wed Sep 29 2004 16:55:52 BST
file stats: LOC: 113   Methods: 7
NCLOC: 42   Classes: 1
30 day Evaluation Version distributed via the Maven Jar Repository. Clover is not free. You have 30 days to evaluate it. Please visit http://www.thecortex.net/clover to obtain a licensed version of Clover
 
 Source file Conditionals Statements Methods TOTAL
MetaBeanProperty.java 0% 0% 0% 0%
coverage
 1   
 /*
 2   
  * $Id: MetaBeanProperty.java,v 1.2 2004/07/23 19:28:14 jstump Exp $
 3   
  *
 4   
  * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
 5   
  *
 6   
  * Redistribution and use of this software and associated documentation
 7   
  * ("Software"), with or without modification, are permitted provided that the
 8   
  * following conditions are met:
 9   
  *  1. Redistributions of source code must retain copyright statements and
 10   
  * notices. Redistributions must also contain a copy of this document.
 11   
  *  2. Redistributions in binary form must reproduce the above copyright
 12   
  * notice, this list of conditions and the following disclaimer in the
 13   
  * documentation and/or other materials provided with the distribution.
 14   
  *  3. The name "groovy" must not be used to endorse or promote products
 15   
  * derived from this Software without prior written permission of The Codehaus.
 16   
  * For written permission, please contact info@codehaus.org.
 17   
  *  4. Products derived from this Software may not be called "groovy" nor may
 18   
  * "groovy" appear in their names without prior written permission of The
 19   
  * Codehaus. "groovy" is a registered trademark of The Codehaus.
 20   
  *  5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
 21   
  *
 22   
  * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``AS IS'' AND ANY
 23   
  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 24   
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 25   
  * DISCLAIMED. IN NO EVENT SHALL THE CODEHAUS OR ITS CONTRIBUTORS BE LIABLE FOR
 26   
  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 27   
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 28   
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 29   
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 30   
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 31   
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
 32   
  * DAMAGE.
 33   
  *
 34   
  */
 35   
 package groovy.lang;
 36   
 
 37   
 /**
 38   
  * Represents a property on a bean which may have a getter and/or a setter
 39   
  * 
 40   
  * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
 41   
  * @version $Revision: 1.2 $
 42   
  */
 43   
 public class MetaBeanProperty extends MetaProperty {
 44   
 
 45   
     private MetaMethod getter;
 46   
     private MetaMethod setter;
 47   
 
 48  0
     public MetaBeanProperty(String name, Class type, MetaMethod getter, MetaMethod setter) {
 49  0
         super(name, type);
 50  0
         this.getter = getter;
 51  0
         this.setter = setter;
 52   
     }
 53   
 
 54   
     /**
 55   
      * @return the property of the given object
 56   
      * @throws Exception if the property could not be evaluated
 57   
      */
 58  0
     public Object getProperty(Object object) throws Exception {
 59  0
         if (getter == null) {
 60   
             //@todo we probably need a WriteOnlyException class
 61  0
             throw new GroovyRuntimeException("Cannot read write-only property: " + name);
 62   
         }
 63  0
         return getter.invoke(object, MetaClass.EMPTY_ARRAY);
 64   
     }
 65   
 
 66   
     /**
 67   
      * Sets the property on the given object to the new value
 68   
      * 
 69   
      * @param object on which to set the property
 70   
      * @param newValue the new value of the property
 71   
      * @throws Exception if the property could not be set
 72   
      */
 73  0
     public void setProperty(Object object, Object newValue) {
 74  0
         if(setter == null) {
 75  0
             throw new GroovyRuntimeException("Cannot set read-only property: " + name);
 76   
         }
 77   
 
 78  0
         try {
 79   
             // we'll convert a GString to String if needed
 80  0
             if(getType() == String.class && !(newValue instanceof String))
 81  0
                 newValue = newValue.toString();
 82   
 
 83  0
             setter.invoke(object, new Object[] { newValue });
 84   
         }
 85   
         catch(Exception e) {
 86  0
             throw new GroovyRuntimeException("Cannot set property: " + name +
 87   
                 " reason: " + e.getMessage(), e);
 88   
         }
 89   
     }
 90   
 
 91  0
     public MetaMethod getGetter() {
 92  0
         return getter;
 93   
     }
 94   
 
 95  0
     public MetaMethod getSetter() {
 96  0
         return setter;
 97   
     }
 98   
     
 99   
     /**
 100   
      * this is for MetaClass to patch up the object later when looking for get*() methods
 101   
      */
 102  0
     void setGetter(MetaMethod getter) {
 103  0
         this.getter = getter;
 104   
     }
 105   
     
 106   
     /**
 107   
      * this is for MetaClass to patch up the object later when looking for set*() methods
 108   
      */
 109  0
     void setSetter(MetaMethod setter) {
 110  0
         this.setter = setter;
 111   
     }
 112   
 }
 113