1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Sun Apr 07 17:42:50 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 }