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