1 35 package groovy.lang; 36 37 44 public class MetaBeanProperty extends MetaProperty { 45 46 private MetaMethod getter; 47 private MetaMethod setter; 48 49 public MetaBeanProperty(String name, Class type, MetaMethod getter, MetaMethod setter) { 50 super(name, type); 51 this.getter = getter; 52 this.setter = setter; 53 } 54 55 59 public Object getProperty(Object object) throws Exception { 60 if (getter == null) { 61 throw new GroovyRuntimeException("Cannot read write-only property: " + name); 63 } 64 return getter.invoke(object, MetaClass.EMPTY_ARRAY); 65 } 66 67 74 public void setProperty(Object object, Object newValue) { 75 if(setter == null) { 76 throw new GroovyRuntimeException("Cannot set read-only property: " + name); 77 } 78 79 try { 80 if(getType() == String .class && !(newValue instanceof String )) 82 newValue = newValue.toString(); 83 84 if (newValue instanceof java.math.BigDecimal ) { 86 if (getType() == Double .class) 87 newValue = new Double (((java.math.BigDecimal ) newValue).doubleValue()); 88 else if (getType() == Float .class) 89 newValue = new Float (((java.math.BigDecimal ) newValue).floatValue()); 90 else if (getType() == Long .class) 91 newValue = new Long (((java.math.BigDecimal ) newValue).longValue()); 92 else if (getType() == Integer .class) 93 newValue = new Integer (((java.math.BigDecimal ) newValue).intValue()); 94 else if (getType() == Short .class) 95 newValue = new Short ((short) ((java.math.BigDecimal ) newValue).intValue()); 96 else if (getType() == Byte .class) 97 newValue = new Byte ((byte) ((java.math.BigDecimal ) newValue).intValue()); 98 else if (getType() == Character .class) 99 newValue = new Character ((char) ((java.math.BigDecimal ) newValue).intValue()); 100 } 101 else if (newValue instanceof java.math.BigInteger ) { 102 if (getType() == Long .class) 103 newValue = new Long (((java.math.BigInteger ) newValue).longValue()); 104 else if (getType() == Integer .class) 105 newValue = new Integer (((java.math.BigInteger ) newValue).intValue()); 106 else if (getType() == Short .class) 107 newValue = new Short ((short) ((java.math.BigInteger ) newValue).intValue()); 108 else if (getType() == Byte .class) 109 newValue = new Byte ((byte) ((java.math.BigInteger ) newValue).intValue()); 110 else if (getType() == Character .class) 111 newValue = new Character ((char) ((java.math.BigInteger ) newValue).intValue()); 112 } 113 else if (newValue instanceof java.lang.Long ) { 114 if (getType() == Integer .class) 115 newValue = new Integer (((Long ) newValue).intValue()); 116 else if (getType() == Short .class) 117 newValue = new Short (((Long ) newValue).shortValue()); 118 else if (getType() == Byte .class) 119 newValue = new Byte (((Long ) newValue).byteValue()); 120 else if (getType() == Character .class) 121 newValue = new Character ((char) ((Long ) newValue).intValue()); 122 } 123 else if (newValue instanceof java.lang.Integer ) { 124 if (getType() == Short .class) 125 newValue = new Short (((Integer ) newValue).shortValue()); 126 else if (getType() == Byte .class) 127 newValue = new Byte (((Integer ) newValue).byteValue()); 128 else if (getType() == Character .class) 129 newValue = new Character ((char) ((Integer ) newValue).intValue()); 130 } 131 132 setter.invoke(object, new Object [] { newValue }); 133 } 134 catch(Exception e) { 135 throw new GroovyRuntimeException("Cannot set property: " + name + 136 " reason: " + e.getMessage(), e); 137 } 138 } 139 140 public MetaMethod getGetter() { 141 return getter; 142 } 143 144 public MetaMethod getSetter() { 145 return setter; 146 } 147 148 151 void setGetter(MetaMethod getter) { 152 this.getter = getter; 153 } 154 155 158 void setSetter(MetaMethod setter) { 159 this.setter = setter; 160 } 161 } 162 | Popular Tags |