You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2009/04/23 01:56:05 UTC
svn commit: r767730 - in /labs/magma/trunk/foundation-beans/src:
main/java/org/apache/magma/beans/ main/java/org/apache/magma/conversion/
test/java/org/apache/magma/beans/ test/java/org/apache/magma/conversion/
Author: simoneg
Date: Wed Apr 22 23:56:04 2009
New Revision: 767730
URL: http://svn.apache.org/viewvc?rev=767730&view=rev
Log:
LABS-351 : @Consider interface working
Modified:
labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/BeanHandler.java
labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/Consider.java
labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/PropertyInfo.java
labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/conversion/Converters.java
labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/BeanDataTest.java
labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/TestBean.java
labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/conversion/ConversionTestBean.java
labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/conversion/ConvertersOnBeanTest.java
Modified: labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/BeanHandler.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/BeanHandler.java?rev=767730&r1=767729&r2=767730&view=diff
==============================================================================
--- labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/BeanHandler.java (original)
+++ labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/BeanHandler.java Wed Apr 22 23:56:04 2009
@@ -110,6 +110,7 @@
Object val = null;
try {
val = PropertyUtils.getProperty(bean, field);
+ val = property.fromUnderlying(val);
} catch (Exception e) {
throw new MagmaException(e, "Error while fecthing property {0} from {1}", field, bean.getClass().getName());
}
@@ -132,6 +133,7 @@
Object val = null;
try {
val = PropertyUtils.getProperty(bean, name);
+ val = property.fromUnderlying(val);
} catch (Exception e) {
throw new MagmaException(e, "Error while fecthing property {0} from {1}", name, bean.getClass().getName());
}
@@ -151,7 +153,9 @@
PropertyInfo property = data.getProperty(name);
if (property.isWriteable()) {
try {
- PropertyUtils.setProperty(bean, name, values.get(name));
+ Object val = values.get(name);
+ val = property.toUnderlying(val);
+ PropertyUtils.setProperty(bean, name, val);
iterator.remove();
} catch (Exception e) {
throw new MagmaException(e, "Error while setting property {0} on {1}", name, bean.getClass().getName());
@@ -171,6 +175,7 @@
Object val = null;
try {
val = PropertyUtils.getProperty(bean, name);
+ val = property.fromUnderlying(val);
} catch (Exception e) {
throw new MagmaException(e, "Error while fecthing property {0} from {1}", name, bean.getClass().getName());
}
Modified: labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/Consider.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/Consider.java?rev=767730&r1=767729&r2=767730&view=diff
==============================================================================
--- labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/Consider.java (original)
+++ labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/Consider.java Wed Apr 22 23:56:04 2009
@@ -1,5 +1,12 @@
package org.apache.magma.beans;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
public @interface Consider {
Class<?> value();
Modified: labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/PropertyInfo.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/PropertyInfo.java?rev=767730&r1=767729&r2=767730&view=diff
==============================================================================
--- labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/PropertyInfo.java (original)
+++ labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/beans/PropertyInfo.java Wed Apr 22 23:56:04 2009
@@ -25,8 +25,11 @@
import java.util.List;
import java.util.Set;
+import org.apache.magma.basics.MagmaException;
import org.apache.magma.basics.utils.GenericClass;
import org.apache.magma.basics.utils.GenericClass.MethodDef;
+import org.apache.magma.conversion.Converters;
+import org.apache.magma.conversion.GenericConverter;
/**
* Holds informations about a property of a bean.
@@ -50,6 +53,16 @@
private Class type;
/**
+ * When {@link Consider} is used, this is the underlying type
+ */
+ private Class underlyingType;
+
+ /**
+ * When {@link Consider} is used, this is the underlying converter
+ */
+ private GenericConverter underlyingConverter;
+
+ /**
* Class of the bean this property is found on
*/
private Class beanClass;
@@ -148,14 +161,16 @@
if (readMethod != null) consider = readMethod.getAnnotation(Consider.class);
if (consider == null && writeMethod != null) consider = writeMethod.getAnnotation(Consider.class);
if (consider != null) {
-
+ this.underlyingType = descriptor.getPropertyType();
this.type = consider.value();
+ this.underlyingConverter = Converters.getConverterFor(this.type, this.underlyingType);
+ if (this.underlyingConverter == null) throw new MagmaException("Cannot find generic converter to convert {0} to and from {1}", this.type, this.underlyingType);
} else {
this.type = descriptor.getPropertyType();
}
- this.readable = descriptor.getReadMethod() != null;
- this.writeable = descriptor.getWriteMethod() != null;
+ this.readable = readMethod != null;
+ this.writeable = writeMethod != null;
if (this.type != null) {
this.isCollection = Collection.class.isAssignableFrom(this.type);
if (!this.isCollection) {
@@ -165,8 +180,8 @@
this.type.getName().startsWith("java.math") ||
Date.class.isAssignableFrom(this.type);
- } else if (descriptor.getReadMethod() != null) {
- GenericClass returnType = GenericClass.forReturnType(descriptor.getReadMethod());
+ } else if (readable) {
+ GenericClass returnType = GenericClass.forReturnType(readMethod);
// It must have an add method
List<MethodDef> methods = returnType.findMethods("add", new Class<?>[] {null});
// It must have a single parameter of the type of the collection
@@ -274,4 +289,26 @@
public String toUser(Object value) {
return toString(value);
}
+
+ /**
+ * Converts the given value to the underlying type when {@link Consider} is in place.
+ *
+ * @param value The value, it must be of the type specified in the {@link Consider} annotation.
+ * @return The value converted to the underlying real bean type if {@link Consider} is used, or the same unconverted value otherwise.
+ */
+ public Object toUnderlying(Object value) {
+ if (underlyingType == null) return value;
+ return underlyingConverter.to(value);
+ }
+
+ /**
+ * Converts the given value from the underlying type to the type specified in {@link Consider}, when it is used.
+ *
+ * @param value The value, it must be of the type defined in the bean, the real type.
+ * @return The value converted to the type specified in the {@link Consider} anotation, if used, or the same unconverted value otherwise.
+ */
+ public Object fromUnderlying(Object value) {
+ if (underlyingType == null) return value;
+ return underlyingConverter.from(value);
+ }
}
Modified: labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/conversion/Converters.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/conversion/Converters.java?rev=767730&r1=767729&r2=767730&view=diff
==============================================================================
--- labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/conversion/Converters.java (original)
+++ labs/magma/trunk/foundation-beans/src/main/java/org/apache/magma/conversion/Converters.java Wed Apr 22 23:56:04 2009
@@ -37,6 +37,19 @@
// if (converter.converts(simpletype)) return converter.build(type);
//}
return null;
+ }
+
+ public static GenericConverter getConverterFor(Class type, Class underlyingType) {
+ Class simpletype = MethodUtils.toNonPrimitiveClass(type);
+ Iterator providers = Service.providers(GenericConverter.class);
+ while (providers.hasNext()) {
+ GenericConverter converter = (GenericConverter) providers.next();
+ if (converter.converts(simpletype,underlyingType)) return converter.build(type, underlyingType);
+ }
+ if (underlyingType.equals(String.class)) {
+ return getConverterFor(type);
+ }
+ return null;
}
}
Modified: labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/BeanDataTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/BeanDataTest.java?rev=767730&r1=767729&r2=767730&view=diff
==============================================================================
--- labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/BeanDataTest.java (original)
+++ labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/BeanDataTest.java Wed Apr 22 23:56:04 2009
@@ -18,6 +18,7 @@
import static org.junit.Assert.*;
+import java.util.Date;
import java.util.Set;
import org.junit.Before;
@@ -45,7 +46,7 @@
assertTrue(propertyNames.contains("privString"));
assertTrue(propertyNames.contains("class"));
- assertEquals(5, propertyNames.size());
+ assertEquals(6, propertyNames.size());
}
@Test
@@ -70,4 +71,9 @@
assertEquals(String.class, property.getCollectionClass());
}
+ @Test
+ public void consider() throws Exception {
+ PropertyInfo property = bd.getProperty("maskedDate");
+ assertEquals(Date.class, property.getType());
+ }
}
Modified: labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/TestBean.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/TestBean.java?rev=767730&r1=767729&r2=767730&view=diff
==============================================================================
--- labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/TestBean.java (original)
+++ labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/beans/TestBean.java Wed Apr 22 23:56:04 2009
@@ -16,6 +16,7 @@
*/
package org.apache.magma.beans;
+import java.util.Date;
import java.util.List;
import org.junit.Ignore;
@@ -26,6 +27,7 @@
private String privString;
private List<String> aList;
+ private String maskedDate;
public String getPrivString() {
return privString;
@@ -47,4 +49,12 @@
aList = list;
}
+ @Consider(Date.class)
+ public String getMaskedDate() {
+ return maskedDate;
+ }
+ public void setMaskedDate(String maskedDate) {
+ this.maskedDate = maskedDate;
+ }
+
}
Modified: labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/conversion/ConversionTestBean.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/conversion/ConversionTestBean.java?rev=767730&r1=767729&r2=767730&view=diff
==============================================================================
--- labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/conversion/ConversionTestBean.java (original)
+++ labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/conversion/ConversionTestBean.java Wed Apr 22 23:56:04 2009
@@ -16,8 +16,11 @@
*/
package org.apache.magma.conversion;
+import java.util.Date;
+
import org.junit.Ignore;
+import org.apache.magma.beans.Consider;
import org.apache.magma.beans.MagmaBean;
@Ignore("This is not a test class")
@@ -29,6 +32,8 @@
private String stringField = "test";
private String nullField = null;
+ private String maskedDate = null;
+
public enum TestEnum {
VALA,
VALB,
@@ -68,4 +73,12 @@
this.enumField = enumField;
}
+ @Consider(Date.class)
+ public String getMaskedDate() {
+ return maskedDate;
+ }
+ public void setMaskedDate(String maskedDate) {
+ this.maskedDate = maskedDate;
+ }
+
}
Modified: labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/conversion/ConvertersOnBeanTest.java
URL: http://svn.apache.org/viewvc/labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/conversion/ConvertersOnBeanTest.java?rev=767730&r1=767729&r2=767730&view=diff
==============================================================================
--- labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/conversion/ConvertersOnBeanTest.java (original)
+++ labs/magma/trunk/foundation-beans/src/test/java/org/apache/magma/conversion/ConvertersOnBeanTest.java Wed Apr 22 23:56:04 2009
@@ -16,11 +16,13 @@
*/
package org.apache.magma.conversion;
+import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import org.apache.magma.beans.BeanData;
import org.apache.magma.beans.BeanHandler;
import org.apache.magma.beans.PropertyInfo;
import org.apache.magma.conversion.ConversionTestBean.TestEnum;
+import org.apache.magma.conversion.string.DateConverter;
import org.apache.magma.conversion.string.IntegerConverter;
import org.junit.Before;
@@ -48,6 +50,12 @@
}
@Test
+ public void consider() throws Exception {
+ PropertyInfo property = beanData.getProperty("maskedDate");
+ assertEquals(DateConverter.class.getName(), property.getConverter().getClass().getName());
+ }
+
+ @Test
public void handlingConversion() throws Exception {
BeanHandler handler = bean.handler();
assertEquals("0", handler.getStringValue("intField"));
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org