Repository: incubator-juneau
Updated Branches:
  refs/heads/master 7a416ffa9 -> f27bfcb46


DynaBeans - checkpoint

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/f27bfcb4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/f27bfcb4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/f27bfcb4

Branch: refs/heads/master
Commit: f27bfcb46d1b12ea87d2a5bab64610add728e07d
Parents: 7a416ff
Author: JamesBognar <[email protected]>
Authored: Wed May 3 15:54:05 2017 -0400
Committer: JamesBognar <[email protected]>
Committed: Wed May 3 15:54:05 2017 -0400

----------------------------------------------------------------------
 .../org/apache/juneau/BeanPropertyMeta.java     | 154 +++++--------------
 1 file changed, 40 insertions(+), 114 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/f27bfcb4/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java 
b/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index 871df7f..eb3efc6 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -414,15 +414,7 @@ public class BeanPropertyMeta {
                        if (bean == null)
                                return m.propertyCache.get(name);
 
-                       Object o = null;
-
-                       if (getter == null && field == null)
-                               throw new BeanRuntimeException(beanMeta.c, 
"Getter or public field not defined on property ''{0}''", name);
-
-                       if (getter != null)
-                               o = invokeGetter(bean, pName);
-                       else if (field != null)
-                               o = invokeGetField(bean, pName);
+                       Object o = invokeGetter(bean, pName);
 
                        return toSerializedForm(m.getBeanSession(), o);
 
@@ -514,14 +506,8 @@ public class BeanPropertyMeta {
                                Class<?> propertyClass = 
rawTypeMeta.getInnerClass();
 
                                if (value == null && (isMap || isCollection)) {
-                                       if (setter != null) {
-                                               invokeSetter(bean, pName, null);
-                                               return r;
-                                       } else if (field != null) {
-                                               invokeSetField(bean, pName, 
null);
-                                               return r;
-                                       }
-                                       throw new 
BeanRuntimeException(beanMeta.c, "Cannot set property ''{0}'' to null because 
no setter or public field is defined", name);
+                                       invokeSetter(bean, pName, null);
+                                       return r;
                                }
 
                                if (isMap) {
@@ -552,10 +538,7 @@ public class BeanPropertyMeta {
                                                                                
        throw new BeanRuntimeException(beanMeta.c, "Cannot set property ''{0}'' 
of type ''{1}'' to object of type ''{2}'' because the value types in the 
assigned map do not match the specified ''elementClass'' attribute on the 
property, and the property value is currently null", name, 
propertyClass.getName(), findClassName(value));
                                                                        }
                                                                }
-                                                               if (setter != 
null)
-                                                                       
invokeSetter(bean, pName, valueMap);
-                                                               else
-                                                                       
invokeSetField(bean, pName, valueMap);
+                                                               
invokeSetter(bean, pName, valueMap);
                                                                return r;
                                                        }
                                                        throw new 
BeanRuntimeException(beanMeta.c, "Cannot set property ''{0}'' of type ''{2}'' 
to object of type ''{2}'' because the assigned map cannot be converted to the 
specified type because the property type is abstract, and the property value is 
currently null", name, propertyClass.getName(), findClassName(value));
@@ -563,12 +546,7 @@ public class BeanPropertyMeta {
                                        } else {
                                                if (propMap == null) {
                                                        propMap = 
(Map)propertyClass.newInstance();
-                                                       if (setter != null)
-                                                               
invokeSetter(bean, pName, propMap);
-                                                       else if (field != null)
-                                                               
invokeSetField(bean, pName, propMap);
-                                                       else
-                                                               throw new 
BeanRuntimeException(beanMeta.c, "Cannot set property ''{0}'' of type ''{1}'' 
to object of type ''{2}'' because no setter or public field is defined on this 
property, and the existing property value is null", name, 
propertyClass.getName(), findClassName(value));
+                                                       invokeSetter(bean, 
pName, propMap);
                                                } else {
                                                        propMap.clear();
                                                }
@@ -614,10 +592,7 @@ public class BeanPropertyMeta {
                                                                                
}
                                                                                
valueList = l;
                                                                        }
-                                                               if (setter != 
null)
-                                                                       
invokeSetter(bean, pName, valueList);
-                                                               else
-                                                                       
invokeSetField(bean, pName, valueList);
+                                                               
invokeSetter(bean, pName, valueList);
                                                                return r;
                                                        }
                                                        throw new 
BeanRuntimeException(beanMeta.c, "Cannot set property ''{0}'' of type ''{1}'' 
to object of type ''{2}'' because the assigned map cannot be converted to the 
specified type because the property type is abstract, and the property value is 
currently null", name, propertyClass.getName(), findClassName(value));
@@ -626,12 +601,7 @@ public class BeanPropertyMeta {
                                        } else {
                                                if (propList == null) {
                                                        propList = 
(Collection)propertyClass.newInstance();
-                                                       if (setter != null)
-                                                               
invokeSetter(bean, pName, propList);
-                                                       else if (field != null)
-                                                               
invokeSetField(bean, pName, propList);
-                                                       else
-                                                               throw new 
BeanRuntimeException(beanMeta.c, "Cannot set property ''{0}'' of type ''{1}'' 
to object of type ''{2}'' because no setter is defined on this property, and 
the existing property value is null", name, propertyClass.getName(), 
findClassName(value));
+                                                       invokeSetter(bean, 
pName, propList);
                                                } else {
                                                        propList.clear();
                                                }
@@ -650,10 +620,7 @@ public class BeanPropertyMeta {
                                        } else {
                                                value = 
session.convertToType(value, rawTypeMeta);
                                        }
-                                       if (setter != null)
-                                               invokeSetter(bean, pName, 
value);
-                                       else if (field != null)
-                                               invokeSetField(bean, pName, 
value);
+                                       invokeSetter(bean, pName, value);
                                }
 
                                return r;
@@ -676,34 +643,40 @@ public class BeanPropertyMeta {
 
        private Object invokeGetter(Object bean, String pName) throws 
IllegalArgumentException, IllegalAccessException, InvocationTargetException {
                if (isDyna) {
-                       Map m = (Map)getter.invoke(bean);
+                       Map m = null;
+                       if (getter != null)
+                               m = (Map)getter.invoke(bean);
+                       else if (field != null)
+                               m = (Map)field.get(bean);
+                       else
+                               throw new BeanRuntimeException(beanMeta.c, 
"Getter or public field not defined on property ''{0}''", name);
                        return (m == null ? null : m.get(pName));
                }
-               return getter.invoke(bean);
+               if (getter != null)
+                       return getter.invoke(bean);
+               if (field != null)
+                       return field.get(bean);
+               throw new BeanRuntimeException(beanMeta.c, "Getter or public 
field not defined on property ''{0}''", name);
        }
 
        private Object invokeSetter(Object bean, String pName, Object val) 
throws IllegalArgumentException, IllegalAccessException, 
InvocationTargetException {
-               if (isDyna)
-                       return setter.invoke(bean, pName, val);
-               return setter.invoke(bean, val);
-       }
-
-       private Object invokeGetField(Object bean, String pName) throws 
IllegalArgumentException, IllegalAccessException {
                if (isDyna) {
-                       Map m = (Map)field.get(bean);
+                       if (setter != null)
+                               return setter.invoke(bean, pName, val);
+                       Map m = null;
+                       if (field != null)
+                               m = (Map<String,Object>)field.get(bean);
+                       else
+                               throw new BeanRuntimeException(beanMeta.c, 
"Cannot set property ''{0}'' of type ''{1}'' to object of type ''{2}'' because 
no setter is defined on this property, and the existing property value is 
null", name, this.getClassMeta().getInnerClass().getName(), findClassName(val));
                        return (m == null ? null : m.get(pName));
                }
-               return field.get(bean);
-       }
-
-       private void invokeSetField(Object bean, String pName, Object val) 
throws IllegalArgumentException, IllegalAccessException {
-               if (isDyna) {
-                       Map m = (Map)field.get(bean);
-                       if (m != null)
-                               m.put(pName, val);
-               } else {
+               if (setter != null)
+                       return setter.invoke(bean, val);
+               if (field != null) {
                        field.set(bean, val);
+                       return null;
                }
+               throw new BeanRuntimeException(beanMeta.c, "Cannot set property 
''{0}'' of type ''{1}'' to object of type ''{2}'' because no setter is defined 
on this property, and the existing property value is null", name, 
this.getClassMeta().getInnerClass().getName(), findClassName(val));
        }
 
        /**
@@ -737,12 +710,7 @@ public class BeanPropertyMeta {
         */
        protected void setArray(Object bean, List l) throws 
IllegalArgumentException, IllegalAccessException, InvocationTargetException {
                Object array = ArrayUtils.toArray(l, 
this.rawTypeMeta.getElementType().getInnerClass());
-               if (setter != null)
-                       invokeSetter(bean, name, array);
-               else if (field != null)
-                       invokeSetField(bean, name, array);
-               else
-                       throw new BeanRuntimeException(beanMeta.c, "Attempt to 
initialize array property ''{0}'', but no setter or field defined.", name);
+               invokeSetter(bean, name, array);
        }
 
        /**
@@ -781,14 +749,7 @@ public class BeanPropertyMeta {
                        Object v = session.convertToType(value, elementType);
 
                        if (isCollection) {
-                               Collection c = null;
-                               if (getter != null) {
-                                       c = (Collection)invokeGetter(bean, 
pName);
-                               } else if (field != null) {
-                                       c = (Collection)invokeGetField(bean, 
pName);
-                               } else {
-                                       throw new 
BeanRuntimeException(beanMeta.c, "Attempt to append to collection property 
''{0}'', but no getter or field defined.", name);
-                               }
+                               Collection c = (Collection)invokeGetter(bean, 
pName);
 
                                if (c != null) {
                                        c.add(v);
@@ -802,12 +763,7 @@ public class BeanPropertyMeta {
 
                                c.add(v);
 
-                               if (setter != null)
-                                       invokeSetter(bean, pName, c);
-                               else if (field != null)
-                                       invokeSetField(bean, pName, c);
-                               else
-                                       throw new 
BeanRuntimeException(beanMeta.c, "Attempt to initialize collection property 
''{0}'', but no setter or field defined.", name);
+                               invokeSetter(bean, pName, c);
 
                        } else /* isArray() */ {
 
@@ -820,13 +776,7 @@ public class BeanPropertyMeta {
                                        m.arrayPropertyCache.put(name, l);
 
                                        // Copy any existing array values into 
the temporary list.
-                                       Object oldArray;
-                               if (getter != null)
-                                       oldArray = invokeGetter(bean, pName);
-                               else if (field != null)
-                                       oldArray = invokeGetField(bean, pName);
-                               else
-                                       throw new 
BeanRuntimeException(beanMeta.c, "Attempt to append to array property ''{0}'', 
but no getter or field defined.", name);
+                                       Object oldArray = invokeGetter(bean, 
pName);
                                        ArrayUtils.copyToList(oldArray, l);
                                }
 
@@ -876,14 +826,7 @@ public class BeanPropertyMeta {
                        Object v = session.convertToType(value, elementType);
 
                        if (isMap) {
-                               Map map = null;
-                               if (getter != null) {
-                                       map = (Map)invokeGetter(bean, pName);
-                               } else if (field != null) {
-                                       map = (Map)invokeGetField(bean, pName);
-                               } else {
-                                       throw new 
BeanRuntimeException(beanMeta.c, "Attempt to append to map property ''{0}'', 
but no getter or field defined.", name);
-                               }
+                               Map map = (Map)invokeGetter(bean, pName);
 
                                if (map != null) {
                                        map.put(key, v);
@@ -897,23 +840,11 @@ public class BeanPropertyMeta {
 
                                map.put(key, v);
 
-                               if (setter != null)
-                                       invokeSetter(bean, pName, map);
-                               else if (field != null)
-                                       invokeSetField(bean, pName, map);
-                               else
-                                       throw new 
BeanRuntimeException(beanMeta.c, "Attempt to initialize map property ''{0}'', 
but no setter or field defined.", name);
+                               invokeSetter(bean, pName, map);
 
                        } else /* isBean() */ {
 
-                               Object b = null;
-                               if (getter != null) {
-                                       b = invokeGetter(bean, pName);
-                               } else if (field != null) {
-                                       b = invokeGetField(bean, pName);
-                               } else {
-                                       throw new 
BeanRuntimeException(beanMeta.c, "Attempt to append to bean property ''{0}'', 
but no getter or field defined.", name);
-                               }
+                               Object b = invokeGetter(bean, pName);
 
                                if (b != null) {
                                        BeanMap bm = session.toBeanMap(b);
@@ -927,12 +858,7 @@ public class BeanPropertyMeta {
                                        bm.put(key, v);
                                }
 
-                               if (setter != null)
-                                       invokeSetter(bean, pName, b);
-                               else if (field != null)
-                                       invokeSetField(bean, pName, b);
-                               else
-                                       throw new 
BeanRuntimeException(beanMeta.c, "Attempt to initialize bean property ''{0}'', 
but no setter or field defined.", name);
+                               invokeSetter(bean, pName, b);
                        }
 
                } catch (BeanRuntimeException e) {

Reply via email to