# HG changeset patch # User Jaroslav Tulach # Date 1365363717 -7200 # Node ID 1e2b0dcc8326a8f51548e3ec6256dd42ebba924d # Parent 28aae214c2028235fb15437e032201c49bf40d45 Can fetch JSON numbers in an array diff -r 28aae214c202 -r 1e2b0dcc8326 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Sun Apr 07 19:29:55 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Sun Apr 07 21:41:57 2013 +0200 @@ -199,8 +199,13 @@ w.append(" this.prop_").append(pn).append(".add(new "); w.append(type).append("(e));\n"); } else { - w.append(" this.prop_").append(pn).append(".add(("); - w.append(type).append(")e);\n"); + if (isPrimitive(type)) { + w.append(" this.prop_").append(pn).append(".add(((Number)e)."); + w.append(type).append("Value());\n"); + } else { + w.append(" this.prop_").append(pn).append(".add(("); + w.append(type).append(")e);\n"); + } } w.append(" }\n"); w.append("}\n"); @@ -1057,4 +1062,14 @@ } return null; } + + private boolean isPrimitive(String type) { + return + "int".equals(type) || + "double".equals(type) || + "long".equals(type) || + "short".equals(type) || + "byte".equals(type) || + "float".equals(type); + } } diff -r 28aae214c202 -r 1e2b0dcc8326 javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Sun Apr 07 19:29:55 2013 +0200 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/JSONTest.java Sun Apr 07 21:41:57 2013 +0200 @@ -127,14 +127,12 @@ @OnReceive(url="/{url}") static void fetch(Person p, JSONik model) { model.setFetched(p); - throw new IllegalStateException("Got him: " + p); } @OnReceive(url="/{url}") static void fetchArray(Person[] p, JSONik model) { model.setFetchedCount(p.length); model.setFetched(p[0]); - throw new IllegalStateException("Got in array him: " + Arrays.asList(p)); } @OnReceive(url="/{url}") @@ -142,6 +140,15 @@ model.setFetchedCount(p.getInfo().size()); model.setFetched(p.getInfo().get(0)); } + + @OnReceive(url="/{url}") + static void fetchPeopleAge(People p, JSONik model) { + int sum = 0; + for (int a : p.getAge()) { + sum += a; + } + model.setFetchedCount(sum); + } @Http(@Http.Resource( content = "{'firstName': 'Sitar', 'sex': 'MALE'}", @@ -161,7 +168,6 @@ throw new InterruptedException(); } - assert p != null : "We should get our person back: " + p; assert "Sitar".equals(p.getFirstName()) : "Expecting Sitar: " + p.getFirstName(); // assert Sex.MALE.equals(p.getSex()) : "Expecting MALE: " + p.getSex(); } @@ -239,6 +245,26 @@ } @Http(@Http.Resource( + content = "{'age':[1, 2, 3]}", + path="/people.json", + mimeType = "application/json" + )) + @BrwsrTest public void loadAndParseArrayOfIntegers() throws InterruptedException { + if (js == null) { + js = new JSONik(); + js.applyBindings(); + + js.fetchPeopleAge("people.json"); + } + + if (0 == js.getFetchedCount()) { + throw new InterruptedException(); + } + + assert js.getFetchedCount() == 6 : "1 + 2 + 3 is " + js.getFetchedCount(); + } + + @Http(@Http.Resource( content = "[{'firstName': 'Gitar', 'sex': 'FEMALE'}," + "{'firstName': 'Peter', 'sex': 'MALE'}" + "]",