javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java
branchmodel
changeset 943 28aae214c202
parent 941 d1e482f73507
child 944 1e2b0dcc8326
     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  }