# HG changeset patch # User Jaroslav Tulach # Date 1361186776 -3600 # Node ID 4bd6f3bc6c64819788561c14b8d2a02f50192ec6 # Parent 41e1dc88a399ab8a5bf0b509a5b0c582025e42bc Generate List for arrays diff -r 41e1dc88a399 -r 4bd6f3bc6c64 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Sun Feb 17 17:58:34 2013 +0100 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Mon Feb 18 12:26:16 2013 +0100 @@ -317,26 +317,34 @@ ) throws IOException { for (Property p : properties) { final String tn = typeName(p); - String[] gs = toGetSet(p.name(), tn); + String[] gs = toGetSet(p.name(), tn, p.array()); - w.write("private " + tn + " prop_" + p.name() + ";\n"); - w.write("public " + tn + " " + gs[0] + "() {\n"); - w.write(" if (locked) throw new IllegalStateException();\n"); - w.write(" return prop_" + p.name() + ";\n"); - w.write("}\n"); - w.write("public void " + gs[1] + "(" + tn + " v) {\n"); - w.write(" if (locked) throw new IllegalStateException();\n"); - w.write(" prop_" + p.name() + " = v;\n"); - w.write(" if (ko != null) {\n"); - w.write(" ko.valueHasMutated(\"" + p.name() + "\");\n"); - final Collection dependants = deps.get(p.name()); - if (dependants != null) { - for (String depProp : dependants) { - w.write(" ko.valueHasMutated(\"" + depProp + "\");\n"); + if (p.array()) { + w.write("private java.util.List<" + tn + "> prop_" + p.name() + " = new java.util.ArrayList<" + tn + ">();\n"); + w.write("public java.util.List<" + tn + "> " + gs[0] + "() {\n"); + w.write(" if (locked) throw new IllegalStateException();\n"); + w.write(" return prop_" + p.name() + ";\n"); + w.write("}\n"); + } else { + w.write("private " + tn + " prop_" + p.name() + ";\n"); + w.write("public " + tn + " " + gs[0] + "() {\n"); + w.write(" if (locked) throw new IllegalStateException();\n"); + w.write(" return prop_" + p.name() + ";\n"); + w.write("}\n"); + w.write("public void " + gs[1] + "(" + tn + " v) {\n"); + w.write(" if (locked) throw new IllegalStateException();\n"); + w.write(" prop_" + p.name() + " = v;\n"); + w.write(" if (ko != null) {\n"); + w.write(" ko.valueHasMutated(\"" + p.name() + "\");\n"); + final Collection dependants = deps.get(p.name()); + if (dependants != null) { + for (String depProp : dependants) { + w.write(" ko.valueHasMutated(\"" + depProp + "\");\n"); + } } + w.write(" }\n"); + w.write("}\n"); } - w.write(" }\n"); - w.write("}\n"); props.add(p.name()); props.add(gs[2]); @@ -359,7 +367,7 @@ ExecutableElement ee = (ExecutableElement)e; final String tn = ee.getReturnType().toString(); final String sn = ee.getSimpleName().toString(); - String[] gs = toGetSet(sn, tn); + String[] gs = toGetSet(sn, tn, false); w.write("public " + tn + " " + gs[0] + "() {\n"); w.write(" if (locked) throw new IllegalStateException();\n"); @@ -367,7 +375,7 @@ for (VariableElement pe : ee.getParameters()) { final String dn = pe.getSimpleName().toString(); final String dt = pe.asType().toString(); - String[] call = toGetSet(dn, dt); + String[] call = toGetSet(dn, dt, false); w.write(" " + dt + " arg" + (++arg) + " = "); w.write(call[0] + "();\n"); @@ -402,7 +410,7 @@ return true; } - private static String[] toGetSet(String name, String type) { + private static String[] toGetSet(String name, String type, boolean array) { String n = Character.toUpperCase(name.charAt(0)) + name.substring(1); String bck2brwsrType = "L" + type.replace('.', '_') + "_2"; if ("int".equals(type)) { @@ -417,6 +425,14 @@ bck2brwsrType = "Z"; } final String nu = n.replace('.', '_'); + if (array) { + return new String[] { + "get" + n, + null, + "get" + nu + "___3" + bck2brwsrType, + null + }; + } return new String[]{ pref + n, "set" + n, diff -r 41e1dc88a399 -r 4bd6f3bc6c64 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Property.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Property.java Sun Feb 17 17:58:34 2013 +0100 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Property.java Mon Feb 18 12:26:16 2013 +0100 @@ -31,4 +31,5 @@ public @interface Property { String name(); Class type(); + boolean array() default false; } diff -r 41e1dc88a399 -r 4bd6f3bc6c64 javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ModelTest.java --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ModelTest.java Sun Feb 17 17:58:34 2013 +0100 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ModelTest.java Mon Feb 18 12:26:16 2013 +0100 @@ -32,7 +32,8 @@ */ @Page(xhtml = "Empty.html", className = "Model", properties = { @Property(name = "value", type = int.class), - @Property(name = "unrelated", type = long.class) + @Property(name = "unrelated", type = long.class), + @Property(name = "names", type = String.class, array = true) }) public class ModelTest { private Model model; @@ -53,6 +54,12 @@ assertEquals(16, model.getPowerValue()); } + @Test public void arrayIsMutable() { + assertEquals(model.getNames().size(), 0, "Is empty"); + model.getNames().add("Jarda"); + assertEquals(model.getNames().size(), 1, "One element"); + } + @Test public void derivedPropertiesAreNotified() { MockKnockout my = new MockKnockout(); MockKnockout.next = my;