1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Fri Apr 05 15:17:54 2013 +0200
1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/PageProcessor.java Fri Apr 05 17:55:23 2013 +0200
1.3 @@ -46,6 +46,8 @@
1.4 import javax.lang.model.element.PackageElement;
1.5 import javax.lang.model.element.TypeElement;
1.6 import javax.lang.model.element.VariableElement;
1.7 +import javax.lang.model.type.ArrayType;
1.8 +import javax.lang.model.type.DeclaredType;
1.9 import javax.lang.model.type.MirroredTypeException;
1.10 import javax.lang.model.type.TypeKind;
1.11 import javax.lang.model.type.TypeMirror;
1.12 @@ -752,21 +754,36 @@
1.13 return false;
1.14 }
1.15 String modelClass = null;
1.16 + boolean expectsList = false;
1.17 List<String> args = new ArrayList<>();
1.18 {
1.19 for (VariableElement ve : e.getParameters()) {
1.20 + TypeMirror modelType = null;
1.21 if (ve.asType().toString().equals(className)) {
1.22 args.add(className + ".this");
1.23 } else if (isModel(ve.asType())) {
1.24 + modelType = ve.asType();
1.25 + } else if (ve.asType().getKind() == TypeKind.ARRAY) {
1.26 + modelType = ((ArrayType)ve.asType()).getComponentType();
1.27 + expectsList = true;
1.28 + }
1.29 + if (modelType != null) {
1.30 if (modelClass != null) {
1.31 err().printMessage(Diagnostic.Kind.ERROR, "There can be only one model class among arguments", e);
1.32 } else {
1.33 - modelClass = ve.asType().toString();
1.34 - args.add("new " + modelClass + "(value)");
1.35 + modelClass = modelType.toString();
1.36 + if (expectsList) {
1.37 + args.add("arr");
1.38 + } else {
1.39 + args.add("arr[0]");
1.40 + }
1.41 }
1.42 }
1.43 }
1.44 }
1.45 + if (modelClass == null) {
1.46 + err().printMessage(Diagnostic.Kind.ERROR, "The method needs to have one @Model class as parameter", e);
1.47 + }
1.48 String n = e.getSimpleName().toString();
1.49 body.append("public void ").append(n).append("(");
1.50 StringBuilder assembleURL = new StringBuilder();
1.51 @@ -784,10 +801,21 @@
1.52 " class ProcessResult implements Runnable {\n" +
1.53 " @Override\n" +
1.54 " public void run() {\n" +
1.55 - " Object value = result[0];\n" +
1.56 + " Object value = result[0];\n");
1.57 + body.append(
1.58 + " " + modelClass + "[] arr;\n");
1.59 + body.append(
1.60 " if (value instanceof Object[]) {\n" +
1.61 - " value = ((Object[])value)[0];\n" +
1.62 - " } ");
1.63 + " Object[] data = ((Object[])value);\n" +
1.64 + " arr = new " + modelClass + "[data.length];\n" +
1.65 + " for (int i = 0; i < data.length; i++) {\n" +
1.66 + " arr[i] = new " + modelClass + "(value);\n" +
1.67 + " }\n" +
1.68 + " } else {\n" +
1.69 + " arr = new " + modelClass + "[1];\n" +
1.70 + " arr[0] = new " + modelClass + "(value);\n" +
1.71 + " }\n"
1.72 + );
1.73 {
1.74 body.append(clazz.getSimpleName()).append(".").append(n).append("(");
1.75 String sep = "";