1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Sun Apr 07 19:28:00 2013 +0200
1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Sun Apr 07 19:29:55 2013 +0200
1.3 @@ -162,7 +162,8 @@
1.4 w.append(" ").append(className).append("(Object json) {\n");
1.5 int values = 0;
1.6 for (int i = 0; i < propsGetSet.size(); i += 4) {
1.7 - if (propsGetSet.get(i + 2) == null) {
1.8 + Property p = findProperty(m.properties(), propsGetSet.get(i));
1.9 + if (p == null) {
1.10 continue;
1.11 }
1.12 values++;
1.13 @@ -170,36 +171,45 @@
1.14 w.append(" Object[] ret = new Object[" + values + "];\n");
1.15 w.append(" org.apidesign.bck2brwsr.htmlpage.ConvertTypes.extractJSON(json, new String[] {\n");
1.16 for (int i = 0; i < propsGetSet.size(); i += 4) {
1.17 - if (propsGetSet.get(i + 2) == null) {
1.18 + Property p = findProperty(m.properties(), propsGetSet.get(i));
1.19 + if (p == null) {
1.20 continue;
1.21 }
1.22 w.append(" \"").append(propsGetSet.get(i)).append("\",\n");
1.23 }
1.24 w.append(" }, ret);\n");
1.25 for (int i = 0, cnt = 0, prop = 0; i < propsGetSet.size(); i += 4) {
1.26 - if (propsGetSet.get(i + 2) == null) {
1.27 + final String pn = propsGetSet.get(i);
1.28 + Property p = findProperty(m.properties(), pn);
1.29 + if (p == null) {
1.30 continue;
1.31 }
1.32 boolean[] isModel = { false };
1.33 boolean[] isEnum = { false };
1.34 String type = checkType(m.properties()[prop++], isModel, isEnum);
1.35 - w.append(" this.prop_").append(propsGetSet.get(i)).append(" = ");
1.36 - boolean close = false;
1.37 if (isEnum[0]) {
1.38 // w.append(type).append(".valueOf((String)");
1.39 // close = true;
1.40 - w.append("null;\n");
1.41 - continue;
1.42 + w.append(" this.prop_").append(pn);
1.43 + w.append(" = null;\n");
1.44 + } else if (p.array()) {
1.45 + w.append("if (ret[" + cnt + "] instanceof Object[]) {\n");
1.46 + w.append(" for (Object e : ((Object[])ret[" + cnt + "])) {\n");
1.47 + if (isModel[0]) {
1.48 + w.append(" this.prop_").append(pn).append(".add(new ");
1.49 + w.append(type).append("(e));\n");
1.50 + } else {
1.51 + w.append(" this.prop_").append(pn).append(".add((");
1.52 + w.append(type).append(")e);\n");
1.53 + }
1.54 + w.append(" }\n");
1.55 + w.append("}\n");
1.56 } else {
1.57 - w.append('(').append(type).append(')');
1.58 + w.append(" this.prop_").append(pn);
1.59 + w.append(" = (").append(type).append(')');
1.60 + w.append("ret[" + cnt + "];\n");
1.61 }
1.62 - w.append("ret[" + cnt++ + "]");
1.63 - if (close) {
1.64 - w.append(");\n");
1.65 - } else {
1.66 - w.append(";\n");
1.67 - }
1.68 -
1.69 + cnt++;
1.70 }
1.71 w.append(" intKnckt();\n");
1.72 w.append(" };\n");
1.73 @@ -1038,4 +1048,13 @@
1.74 pos = close + 1;
1.75 }
1.76 }
1.77 +
1.78 + private static Property findProperty(Property[] properties, String propName) {
1.79 + for (Property p : properties) {
1.80 + if (propName.equals(p.name())) {
1.81 + return p;
1.82 + }
1.83 + }
1.84 + return null;
1.85 + }
1.86 }
2.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Sun Apr 07 19:28:00 2013 +0200
2.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Sun Apr 07 19:29:55 2013 +0200
2.3 @@ -137,6 +137,12 @@
2.4 throw new IllegalStateException("Got in array him: " + Arrays.asList(p));
2.5 }
2.6
2.7 + @OnReceive(url="/{url}")
2.8 + static void fetchPeople(People p, JSONik model) {
2.9 + model.setFetchedCount(p.getInfo().size());
2.10 + model.setFetched(p.getInfo().get(0));
2.11 + }
2.12 +
2.13 @Http(@Http.Resource(
2.14 content = "{'firstName': 'Sitar', 'sex': 'MALE'}",
2.15 path="/person.json",
2.16 @@ -207,6 +213,32 @@
2.17 }
2.18
2.19 @Http(@Http.Resource(
2.20 + content = "{'info':[{'firstName': 'Gitar', 'sex': 'FEMALE'}]}",
2.21 + path="/people.json",
2.22 + mimeType = "application/json"
2.23 + ))
2.24 + @BrwsrTest public void loadAndParseArrayInPeople() throws InterruptedException {
2.25 + if (js == null) {
2.26 + js = new JSONik();
2.27 + js.applyBindings();
2.28 +
2.29 + js.fetchPeople("people.json");
2.30 + }
2.31 +
2.32 + if (0 == js.getFetchedCount()) {
2.33 + throw new InterruptedException();
2.34 + }
2.35 +
2.36 + assert js.getFetchedCount() == 1 : "One person loaded: " + js.getFetchedCount();
2.37 +
2.38 + Person p = js.getFetched();
2.39 +
2.40 + assert p != null : "We should get our person back: " + p;
2.41 + assert "Gitar".equals(p.getFirstName()) : "Expecting Gitar: " + p.getFirstName();
2.42 +// assert Sex.MALE.equals(p.getSex()) : "Expecting MALE: " + p.getSex();
2.43 + }
2.44 +
2.45 + @Http(@Http.Resource(
2.46 content = "[{'firstName': 'Gitar', 'sex': 'FEMALE'},"
2.47 + "{'firstName': 'Peter', 'sex': 'MALE'}"
2.48 + "]",