Can call setters on primitive type properties beans
authorJaroslav Tulach <jtulach@netbeans.org>
Mon, 04 Aug 2014 06:51:19 +0200
branchbeans
changeset 804c9774f95da96
parent 803 3e33ca8c039b
child 805 9e9e0c10dff4
Can call setters on primitive type properties
json-beans/src/main/java/net/java/html/beans/JSONBeans.java
json-beans/src/test/java/net/java/html/beans/MapModelTest.java
json-beans/src/test/java/net/java/html/beans/Person.java
     1.1 --- a/json-beans/src/main/java/net/java/html/beans/JSONBeans.java	Mon Aug 04 06:21:37 2014 +0200
     1.2 +++ b/json-beans/src/main/java/net/java/html/beans/JSONBeans.java	Mon Aug 04 06:51:19 2014 +0200
     1.3 @@ -138,7 +138,7 @@
     1.4              try {
     1.5                  try {
     1.6                      final Method m = properties[index].getWriteMethod();
     1.7 -                    value = extractValue(m.getParameterTypes()[0], value);
     1.8 +                    value = extractValue(toBoxed(m.getParameterTypes()[0]), value);
     1.9                      m.invoke(model, value);
    1.10                  } catch (InvocationTargetException ex) {
    1.11                      throw ex.getCause();
    1.12 @@ -222,6 +222,36 @@
    1.13              }
    1.14              return p;
    1.15          }
    1.16 +        private static Class<?> toBoxed(Class<?> c) {
    1.17 +            if (!c.isPrimitive()) {
    1.18 +                return c;
    1.19 +            }
    1.20 +            if (c == Boolean.TYPE) {
    1.21 +                return Boolean.class;
    1.22 +            }
    1.23 +            if (c == Byte.TYPE) {
    1.24 +                return Byte.class;
    1.25 +            }
    1.26 +            if (c == Short.TYPE) {
    1.27 +                return Short.class;
    1.28 +            }
    1.29 +            if (c == Integer.TYPE) {
    1.30 +                return Integer.class;
    1.31 +            }
    1.32 +            if (c == Long.TYPE) {
    1.33 +                return Long.class;
    1.34 +            }
    1.35 +            if (c == Float.TYPE) {
    1.36 +                return Float.class;
    1.37 +            }
    1.38 +            if (c == Double.TYPE) {
    1.39 +                return Double.class;
    1.40 +            }
    1.41 +            if (c == Character.TYPE) {
    1.42 +                return Character.class;
    1.43 +            }
    1.44 +            return c;
    1.45 +        }
    1.46      }
    1.47      
    1.48      private static final class BeanRef 
     2.1 --- a/json-beans/src/test/java/net/java/html/beans/MapModelTest.java	Mon Aug 04 06:21:37 2014 +0200
     2.2 +++ b/json-beans/src/test/java/net/java/html/beans/MapModelTest.java	Mon Aug 04 06:51:19 2014 +0200
     2.3 @@ -142,6 +142,22 @@
     2.4          assertEquals(p.getSex(), Sex.FEMALE, "Changed to female");
     2.5      }
     2.6      
     2.7 +    @Test public void canSetBoolean() throws Exception {
     2.8 +        Person p = Models.bind(new Person(), c);
     2.9 +        p.setFirstName("Jirka");
    2.10 +        p.setGood(true);
    2.11 +        
    2.12 +        Map m = (Map)Models.toRaw(p);
    2.13 +        Object v = m.get("good");
    2.14 +        assertNotNull(v, "Value should be in the map");
    2.15 +        assertEquals(v.getClass(), One.class, "It is instance of One");
    2.16 +        One o = (One)v;
    2.17 +        
    2.18 +        o.set(false);
    2.19 +
    2.20 +        assertFalse(p.isGood(), "No longer good");
    2.21 +    }
    2.22 +    
    2.23      @Test public void derivedProperty() throws Exception {
    2.24          Person p = Models.bind(new Person(), c);
    2.25          
     3.1 --- a/json-beans/src/test/java/net/java/html/beans/Person.java	Mon Aug 04 06:21:37 2014 +0200
     3.2 +++ b/json-beans/src/test/java/net/java/html/beans/Person.java	Mon Aug 04 06:51:19 2014 +0200
     3.3 @@ -54,11 +54,13 @@
     3.4      private String firstName;
     3.5      private String lastName;
     3.6      private Sex sex;
     3.7 +    private boolean good;
     3.8  
     3.9      public static final String PROP_FIRSTNAME = "firstName";
    3.10      public static final String PROP_LASTNAME = "lastName";
    3.11      public static final String PROP_FULLNAME = "fullName";
    3.12      public static final String PROP_SEX = "sex";
    3.13 +    public static final String PROP_GOOD = "good";
    3.14  
    3.15      public Person() {
    3.16      }
    3.17 @@ -91,6 +93,16 @@
    3.18          }
    3.19      }
    3.20  
    3.21 +    public boolean isGood() {
    3.22 +        return good;
    3.23 +    }
    3.24 +
    3.25 +    public void setGood(boolean good) {
    3.26 +        boolean oldGood = this.good;
    3.27 +        this.good = good;
    3.28 +        propertyChangeSupport.firePropertyChange(PROP_GOOD, oldGood, good);
    3.29 +    }
    3.30 +
    3.31      public String getFirstName() {
    3.32          return firstName;
    3.33      }