1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Sun Feb 17 17:58:34 2013 +0100
1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Mon Feb 18 12:26:16 2013 +0100
1.3 @@ -317,26 +317,34 @@
1.4 ) throws IOException {
1.5 for (Property p : properties) {
1.6 final String tn = typeName(p);
1.7 - String[] gs = toGetSet(p.name(), tn);
1.8 + String[] gs = toGetSet(p.name(), tn, p.array());
1.9
1.10 - w.write("private " + tn + " prop_" + p.name() + ";\n");
1.11 - w.write("public " + tn + " " + gs[0] + "() {\n");
1.12 - w.write(" if (locked) throw new IllegalStateException();\n");
1.13 - w.write(" return prop_" + p.name() + ";\n");
1.14 - w.write("}\n");
1.15 - w.write("public void " + gs[1] + "(" + tn + " v) {\n");
1.16 - w.write(" if (locked) throw new IllegalStateException();\n");
1.17 - w.write(" prop_" + p.name() + " = v;\n");
1.18 - w.write(" if (ko != null) {\n");
1.19 - w.write(" ko.valueHasMutated(\"" + p.name() + "\");\n");
1.20 - final Collection<String> dependants = deps.get(p.name());
1.21 - if (dependants != null) {
1.22 - for (String depProp : dependants) {
1.23 - w.write(" ko.valueHasMutated(\"" + depProp + "\");\n");
1.24 + if (p.array()) {
1.25 + w.write("private java.util.List<" + tn + "> prop_" + p.name() + " = new java.util.ArrayList<" + tn + ">();\n");
1.26 + w.write("public java.util.List<" + tn + "> " + gs[0] + "() {\n");
1.27 + w.write(" if (locked) throw new IllegalStateException();\n");
1.28 + w.write(" return prop_" + p.name() + ";\n");
1.29 + w.write("}\n");
1.30 + } else {
1.31 + w.write("private " + tn + " prop_" + p.name() + ";\n");
1.32 + w.write("public " + tn + " " + gs[0] + "() {\n");
1.33 + w.write(" if (locked) throw new IllegalStateException();\n");
1.34 + w.write(" return prop_" + p.name() + ";\n");
1.35 + w.write("}\n");
1.36 + w.write("public void " + gs[1] + "(" + tn + " v) {\n");
1.37 + w.write(" if (locked) throw new IllegalStateException();\n");
1.38 + w.write(" prop_" + p.name() + " = v;\n");
1.39 + w.write(" if (ko != null) {\n");
1.40 + w.write(" ko.valueHasMutated(\"" + p.name() + "\");\n");
1.41 + final Collection<String> dependants = deps.get(p.name());
1.42 + if (dependants != null) {
1.43 + for (String depProp : dependants) {
1.44 + w.write(" ko.valueHasMutated(\"" + depProp + "\");\n");
1.45 + }
1.46 }
1.47 + w.write(" }\n");
1.48 + w.write("}\n");
1.49 }
1.50 - w.write(" }\n");
1.51 - w.write("}\n");
1.52
1.53 props.add(p.name());
1.54 props.add(gs[2]);
1.55 @@ -359,7 +367,7 @@
1.56 ExecutableElement ee = (ExecutableElement)e;
1.57 final String tn = ee.getReturnType().toString();
1.58 final String sn = ee.getSimpleName().toString();
1.59 - String[] gs = toGetSet(sn, tn);
1.60 + String[] gs = toGetSet(sn, tn, false);
1.61
1.62 w.write("public " + tn + " " + gs[0] + "() {\n");
1.63 w.write(" if (locked) throw new IllegalStateException();\n");
1.64 @@ -367,7 +375,7 @@
1.65 for (VariableElement pe : ee.getParameters()) {
1.66 final String dn = pe.getSimpleName().toString();
1.67 final String dt = pe.asType().toString();
1.68 - String[] call = toGetSet(dn, dt);
1.69 + String[] call = toGetSet(dn, dt, false);
1.70 w.write(" " + dt + " arg" + (++arg) + " = ");
1.71 w.write(call[0] + "();\n");
1.72
1.73 @@ -402,7 +410,7 @@
1.74 return true;
1.75 }
1.76
1.77 - private static String[] toGetSet(String name, String type) {
1.78 + private static String[] toGetSet(String name, String type, boolean array) {
1.79 String n = Character.toUpperCase(name.charAt(0)) + name.substring(1);
1.80 String bck2brwsrType = "L" + type.replace('.', '_') + "_2";
1.81 if ("int".equals(type)) {
1.82 @@ -417,6 +425,14 @@
1.83 bck2brwsrType = "Z";
1.84 }
1.85 final String nu = n.replace('.', '_');
1.86 + if (array) {
1.87 + return new String[] {
1.88 + "get" + n,
1.89 + null,
1.90 + "get" + nu + "___3" + bck2brwsrType,
1.91 + null
1.92 + };
1.93 + }
1.94 return new String[]{
1.95 pref + n,
1.96 "set" + n,
2.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Property.java Sun Feb 17 17:58:34 2013 +0100
2.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Property.java Mon Feb 18 12:26:16 2013 +0100
2.3 @@ -31,4 +31,5 @@
2.4 public @interface Property {
2.5 String name();
2.6 Class<?> type();
2.7 + boolean array() default false;
2.8 }
3.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ModelTest.java Sun Feb 17 17:58:34 2013 +0100
3.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ModelTest.java Mon Feb 18 12:26:16 2013 +0100
3.3 @@ -32,7 +32,8 @@
3.4 */
3.5 @Page(xhtml = "Empty.html", className = "Model", properties = {
3.6 @Property(name = "value", type = int.class),
3.7 - @Property(name = "unrelated", type = long.class)
3.8 + @Property(name = "unrelated", type = long.class),
3.9 + @Property(name = "names", type = String.class, array = true)
3.10 })
3.11 public class ModelTest {
3.12 private Model model;
3.13 @@ -53,6 +54,12 @@
3.14 assertEquals(16, model.getPowerValue());
3.15 }
3.16
3.17 + @Test public void arrayIsMutable() {
3.18 + assertEquals(model.getNames().size(), 0, "Is empty");
3.19 + model.getNames().add("Jarda");
3.20 + assertEquals(model.getNames().size(), 1, "One element");
3.21 + }
3.22 +
3.23 @Test public void derivedPropertiesAreNotified() {
3.24 MockKnockout my = new MockKnockout();
3.25 MockKnockout.next = my;