Can assign string to enum property
authorJaroslav Tulach <jtulach@netbeans.org>
Fri, 25 Jul 2014 10:33:25 +0200
changeset 755d396bc480560
parent 754 ce30cad0ed95
child 756 888067154d74
child 757 0b8d2a328dcb
Can assign string to enum property
json/src/main/java/org/apidesign/html/json/spi/Proto.java
json/src/test/java/net/java/html/json/MapModelTest.java
     1.1 --- a/json/src/main/java/org/apidesign/html/json/spi/Proto.java	Fri Jul 25 08:34:50 2014 +0200
     1.2 +++ b/json/src/main/java/org/apidesign/html/json/spi/Proto.java	Fri Jul 25 10:33:25 2014 +0200
     1.3 @@ -757,6 +757,9 @@
     1.4              if (Float.class == type) {
     1.5                  val = val instanceof Number ? ((Number) val).floatValue() : Float.NaN;
     1.6              }
     1.7 +            if (type.isEnum() && val instanceof String) {
     1.8 +                val = Enum.valueOf(type.asSubclass(Enum.class), (String)val);
     1.9 +            }
    1.10              return type.cast(val);
    1.11          }
    1.12  
     2.1 --- a/json/src/test/java/net/java/html/json/MapModelTest.java	Fri Jul 25 08:34:50 2014 +0200
     2.2 +++ b/json/src/test/java/net/java/html/json/MapModelTest.java	Fri Jul 25 10:33:25 2014 +0200
     2.3 @@ -119,6 +119,22 @@
     2.4          assertEquals(o.changes, 2, "Snd change");
     2.5      }
     2.6      
     2.7 +    @Test public void canSetEnumAsString() throws Exception {
     2.8 +        Person p = Models.bind(new Person(), c);
     2.9 +        p.setFirstName("Jirka");
    2.10 +        p.setSex(Sex.MALE);
    2.11 +        
    2.12 +        Map m = (Map)Models.toRaw(p);
    2.13 +        Object v = m.get("sex");
    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("FEMALE");
    2.19 +
    2.20 +        assertEquals(p.getSex(), Sex.FEMALE, "Changed to female");
    2.21 +    }
    2.22 +    
    2.23      @Test public void derivedProperty() throws Exception {
    2.24          Person p = Models.bind(new Person(), c);
    2.25