1.1 --- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java Thu Dec 26 22:42:01 2013 +0100
1.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java Fri Jan 03 08:16:39 2014 +0100
1.3 @@ -183,6 +183,7 @@
1.4 models.put(e, className);
1.5 try {
1.6 StringWriter body = new StringWriter();
1.7 + StringBuilder onReceiveType = new StringBuilder();
1.8 List<String> propsGetSet = new ArrayList<String>();
1.9 List<String> functions = new ArrayList<String>();
1.10 Map<String, Collection<String>> propsDeps = new HashMap<String, Collection<String>>();
1.11 @@ -201,7 +202,7 @@
1.12 if (!generateFunctions(e, body, className, e.getEnclosedElements(), functions)) {
1.13 ok = false;
1.14 }
1.15 - if (!generateReceive(e, body, className, e.getEnclosedElements(), functions)) {
1.16 + if (!generateReceive(e, body, className, e.getEnclosedElements(), onReceiveType)) {
1.17 ok = false;
1.18 }
1.19 if (!generateOperation(e, body, className, e.getEnclosedElements())) {
1.20 @@ -372,6 +373,7 @@
1.21 w.append(" }\n");
1.22 w.append(" throw new UnsupportedOperationException();\n");
1.23 w.append(" }\n");
1.24 + w.append(onReceiveType);
1.25 w.append(" @Override public " + className + " read(net.java.html.BrwsrCtx c, Object json) { return new " + className + "(c, json); }\n");
1.26 w.append(" @Override public " + className + " cloneTo(Object o, net.java.html.BrwsrCtx c) { return ((" + className + ")o).clone(c); }\n");
1.27 w.append(" }\n");
1.28 @@ -930,8 +932,11 @@
1.29
1.30 private boolean generateReceive(
1.31 Element clazz, StringWriter body, String className,
1.32 - List<? extends Element> enclosedElements, List<String> functions
1.33 + List<? extends Element> enclosedElements, StringBuilder inType
1.34 ) {
1.35 + inType.append(" @Override public void onMessage(").append(className).append(" model, int index, int type, Object data) {\n");
1.36 + inType.append(" switch (index) {\n");
1.37 + int index = 0;
1.38 for (Element m : enclosedElements) {
1.39 if (m.getKind() != ElementKind.METHOD) {
1.40 continue;
1.41 @@ -979,7 +984,7 @@
1.42 simpleName = type.toString();
1.43 }
1.44 if (simpleName.toString().equals(className)) {
1.45 - args.add(className + ".this");
1.46 + args.add("model");
1.47 } else if (isModel(ve.asType())) {
1.48 modelType = ve.asType();
1.49 } else if (ve.asType().getKind() == TypeKind.ARRAY) {
1.50 @@ -1042,47 +1047,49 @@
1.51 body.append(") {\n");
1.52 boolean webSocket = onR.method().equals("WebSocket");
1.53 if (webSocket) {
1.54 - if (generateWSReceiveBody(body, onR, e, clazz, className, expectsList, modelClass, n, args, urlBefore, jsonpVarName, urlAfter, dataMirror)) {
1.55 - return false;
1.56 - }
1.57 +// if (generateWSReceiveBody(body, onR, e, clazz, className, expectsList, modelClass, n, args, urlBefore, jsonpVarName, urlAfter, dataMirror)) {
1.58 +// return false;
1.59 +// }
1.60 body.append(" }\n");
1.61 body.append(" private org.netbeans.html.json.impl.JSON.WS ws_" + e.getSimpleName() + ";\n");
1.62 } else {
1.63 - if (generateJSONReceiveBody(body, onR, e, clazz, className, expectsList, modelClass, n, args, urlBefore, jsonpVarName, urlAfter, dataMirror)) {
1.64 + if (generateJSONReceiveBody(index++, body, inType, onR, e, clazz, className, expectsList, modelClass, n, args, urlBefore, jsonpVarName, urlAfter, dataMirror)) {
1.65 return false;
1.66 }
1.67 body.append(" }\n");
1.68 }
1.69 }
1.70 + inType.append(" }\n");
1.71 + inType.append(" throw new UnsupportedOperationException(\"index: \" + index + \" type: \" + type);\n");
1.72 + inType.append(" }\n");
1.73 return true;
1.74 }
1.75
1.76 - private boolean generateJSONReceiveBody(StringWriter body, OnReceive onR, ExecutableElement e, Element clazz, String className, boolean expectsList, String modelClass, String n, List<String> args, StringBuilder urlBefore, String jsonpVarName, StringBuilder urlAfter, String dataMirror) {
1.77 + private boolean generateJSONReceiveBody(int index, StringWriter method, StringBuilder body, OnReceive onR, ExecutableElement e, Element clazz, String className, boolean expectsList, String modelClass, String n, List<String> args, StringBuilder urlBefore, String jsonpVarName, StringBuilder urlAfter, String dataMirror) {
1.78 body.append(
1.79 - " class ProcessResult extends org.netbeans.html.json.impl.RcvrJSON {\n" +
1.80 - " @Override\n" +
1.81 - " public void onError(org.netbeans.html.json.impl.RcvrJSON.MsgEvnt ev) {\n" +
1.82 - " Exception value = ev.getException();\n"
1.83 + " case " + index + ": {\n" +
1.84 + " if (type == 2) { /* on error */\n" +
1.85 + " Exception ex = (Exception)data;\n"
1.86 );
1.87 if (onR.onError().isEmpty()) {
1.88 body.append(
1.89 - " value.printStackTrace();\n"
1.90 + " ex.printStackTrace();\n"
1.91 );
1.92 } else {
1.93 if (!findOnError(e, ((TypeElement)clazz), onR.onError(), className)) {
1.94 return true;
1.95 }
1.96 body.append(" ").append(clazz.getSimpleName()).append(".").append(onR.onError()).append("(");
1.97 - body.append(className).append(".this, value);\n");
1.98 + body.append("model, ex);\n");
1.99 }
1.100 body.append(
1.101 - " }\n" +
1.102 - " @Override\n" +
1.103 - " public void onMessage(org.netbeans.html.json.impl.RcvrJSON.MsgEvnt ev) {\n"
1.104 + " return;\n" +
1.105 + " } else if (type == 1) {\n" +
1.106 + " Object[] ev = (Object[])data;\n"
1.107 );
1.108 if (expectsList) {
1.109 body.append(
1.110 - " " + modelClass + "[] arr = new " + modelClass + "[ev.dataSize()];\n"
1.111 + " " + modelClass + "[] arr = new " + modelClass + "[ev.length];\n"
1.112 );
1.113 } else {
1.114 body.append(
1.115 @@ -1090,8 +1097,8 @@
1.116 );
1.117 }
1.118 body.append(
1.119 - " ev.dataRead(proto.getContext(), " + modelClass + ".class, arr);\n"
1.120 - );
1.121 + " TYPE.copyJSON(model.proto.getContext(), ev, " + modelClass + ".class, arr);\n"
1.122 + );
1.123 {
1.124 body.append(" ").append(clazz.getSimpleName()).append(".").append(n).append("(");
1.125 String sep = "";
1.126 @@ -1103,28 +1110,28 @@
1.127 body.append(");\n");
1.128 }
1.129 body.append(
1.130 + " return;\n" +
1.131 " }\n" +
1.132 " }\n"
1.133 );
1.134 - body.append(" ProcessResult pr = new ProcessResult();\n");
1.135 - body.append(" org.netbeans.html.json.impl.JSON.loadJSON(proto.getContext(), pr,\n ");
1.136 - body.append(urlBefore).append(", ");
1.137 + method.append(" proto.loadJSON(" + index + ",\n ");
1.138 + method.append(urlBefore).append(", ");
1.139 if (jsonpVarName != null) {
1.140 - body.append(urlAfter);
1.141 + method.append(urlAfter);
1.142 } else {
1.143 - body.append("null");
1.144 + method.append("null");
1.145 }
1.146 if (!"GET".equals(onR.method()) || dataMirror != null) {
1.147 - body.append(", \"").append(onR.method()).append('"');
1.148 + method.append(", \"").append(onR.method()).append('"');
1.149 if (dataMirror != null) {
1.150 - body.append(", data");
1.151 + method.append(", data");
1.152 } else {
1.153 - body.append(", null");
1.154 + method.append(", null");
1.155 }
1.156 } else {
1.157 - body.append(", null, null");
1.158 + method.append(", null, null");
1.159 }
1.160 - body.append(");\n");
1.161 + method.append(");\n");
1.162 return false;
1.163 }
1.164