1.1 --- a/json/src/main/java/org/apidesign/html/json/impl/JSON.java Sun Aug 25 15:43:30 2013 +0200
1.2 +++ b/json/src/main/java/org/apidesign/html/json/impl/JSON.java Sun Aug 25 17:41:21 2013 +0200
1.3 @@ -151,7 +151,7 @@
1.4 String urlBefore, String urlAfter, String method,
1.5 Object data
1.6 ) {
1.7 - JSONCall call = PropertyBindingAccessor.createCall(callback, urlBefore, urlAfter, method, data);
1.8 + JSONCall call = PropertyBindingAccessor.createCall(c, callback, urlBefore, urlAfter, method, data);
1.9 Transfer t = findTransfer(c);
1.10 t.loadJSON(call);
1.11 }
1.12 @@ -159,7 +159,7 @@
1.13 BrwsrCtx c, RcvrJSON r, String url, Object data
1.14 ) {
1.15 WS ws = WSImpl.create(findWSTransfer(c), r);
1.16 - ws.send(url, data);
1.17 + ws.send(c, url, data);
1.18 return ws;
1.19 }
1.20
1.21 @@ -167,7 +167,7 @@
1.22 private WS() {
1.23 }
1.24
1.25 - public abstract void send(String url, Object model);
1.26 + public abstract void send(BrwsrCtx ctx, String url, Object model);
1.27 }
1.28
1.29 private static final class WSImpl<Socket> extends WS {
1.30 @@ -187,13 +187,13 @@
1.31 }
1.32
1.33 @Override
1.34 - public void send(String url, Object data) {
1.35 + public void send(BrwsrCtx ctx, String url, Object data) {
1.36 Socket s = socket;
1.37 if (s == null) {
1.38 if (data != null) {
1.39 throw new IllegalStateException("WebSocket is not opened yet. Call with null data, was: " + data);
1.40 }
1.41 - JSONCall call = PropertyBindingAccessor.createCall(rcvr, url, null, "WebSocket", null);
1.42 + JSONCall call = PropertyBindingAccessor.createCall(ctx, rcvr, url, null, "WebSocket", null);
1.43 socket = trans.open(url, call);
1.44 prevURL = url;
1.45 return;
1.46 @@ -209,7 +209,7 @@
1.47 + " Close the socket by calling it will null data first!"
1.48 );
1.49 }
1.50 - JSONCall call = PropertyBindingAccessor.createCall(rcvr, prevURL, null, "WebSocket", data);
1.51 + JSONCall call = PropertyBindingAccessor.createCall(ctx, rcvr, prevURL, null, "WebSocket", data);
1.52 trans.send(s, call);
1.53 }
1.54
2.1 --- a/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java Sun Aug 25 15:43:30 2013 +0200
2.2 +++ b/json/src/main/java/org/apidesign/html/json/impl/ModelProcessor.java Sun Aug 25 17:41:21 2013 +0200
2.3 @@ -1155,7 +1155,7 @@
2.4 body.append("= org.apidesign.html.json.impl.JSON.openWS(context, pr,\n ");
2.5 body.append(urlBefore).append(", data);\n");
2.6 body.append(" } else {\n");
2.7 - body.append(" this.ws_").append(e.getSimpleName()).append(".send(").append(urlBefore).append(", data);\n");
2.8 + body.append(" this.ws_").append(e.getSimpleName()).append(".send(context, ").append(urlBefore).append(", data);\n");
2.9 body.append(" }\n");
2.10 return false;
2.11 }
3.1 --- a/json/src/main/java/org/apidesign/html/json/impl/PropertyBindingAccessor.java Sun Aug 25 15:43:30 2013 +0200
3.2 +++ b/json/src/main/java/org/apidesign/html/json/impl/PropertyBindingAccessor.java Sun Aug 25 17:41:21 2013 +0200
3.3 @@ -20,6 +20,7 @@
3.4 */
3.5 package org.apidesign.html.json.impl;
3.6
3.7 +import net.java.html.BrwsrCtx;
3.8 import org.apidesign.html.json.spi.FunctionBinding;
3.9 import org.apidesign.html.json.spi.JSONCall;
3.10 import org.apidesign.html.json.spi.PropertyBinding;
3.11 @@ -43,7 +44,9 @@
3.12 protected abstract <M> PropertyBinding newBinding(PBData<M> d);
3.13 protected abstract <M> FunctionBinding newFunction(FBData<M> d);
3.14 protected abstract JSONCall newCall(
3.15 - RcvrJSON callback, String urlBefore, String urlAfter, String method, Object data);
3.16 + BrwsrCtx ctx, RcvrJSON callback, String urlBefore, String urlAfter,
3.17 + String method, Object data
3.18 + );
3.19
3.20
3.21 static <M> PropertyBinding create(PBData<M> d) {
3.22 @@ -53,8 +56,10 @@
3.23 return DEFAULT.newFunction(d);
3.24 }
3.25 static JSONCall createCall(
3.26 - RcvrJSON callback, String urlBefore, String urlAfter, String method, Object data) {
3.27 - return DEFAULT.newCall(callback, urlBefore, urlAfter, method, data);
3.28 + BrwsrCtx ctx, RcvrJSON callback, String urlBefore, String urlAfter,
3.29 + String method, Object data
3.30 + ) {
3.31 + return DEFAULT.newCall(ctx, callback, urlBefore, urlAfter, method, data);
3.32 }
3.33
3.34 public static final class PBData<M> {
4.1 --- a/json/src/main/java/org/apidesign/html/json/impl/RcvrJSON.java Sun Aug 25 15:43:30 2013 +0200
4.2 +++ b/json/src/main/java/org/apidesign/html/json/impl/RcvrJSON.java Sun Aug 25 17:41:21 2013 +0200
4.3 @@ -57,7 +57,7 @@
4.4
4.5 public <Data> void dataRead(BrwsrCtx ctx, Class<? extends Data> type, Data[] fillTheArray) {
4.6 }
4.7 -
4.8 +
4.9 public abstract void dispatch(RcvrJSON r);
4.10
4.11 public static MsgEvnt createError(final Throwable t) {
5.1 --- a/json/src/main/java/org/apidesign/html/json/spi/JSONCall.java Sun Aug 25 15:43:30 2013 +0200
5.2 +++ b/json/src/main/java/org/apidesign/html/json/spi/JSONCall.java Sun Aug 25 17:41:21 2013 +0200
5.3 @@ -23,6 +23,7 @@
5.4
5.5 import java.io.IOException;
5.6 import java.io.OutputStream;
5.7 +import net.java.html.BrwsrCtx;
5.8 import org.apidesign.html.json.impl.JSON;
5.9 import org.apidesign.html.json.impl.RcvrJSON;
5.10
5.11 @@ -37,8 +38,10 @@
5.12 private final String urlAfter;
5.13 private final String method;
5.14 private final Object data;
5.15 + private final BrwsrCtx ctx;
5.16
5.17 - JSONCall(RcvrJSON whenDone, String urlBefore, String urlAfter, String method, Object data) {
5.18 + JSONCall(BrwsrCtx ctx, RcvrJSON whenDone, String urlBefore, String urlAfter, String method, Object data) {
5.19 + this.ctx = ctx;
5.20 this.whenDone = whenDone;
5.21 this.urlBefore = urlBefore;
5.22 this.urlAfter = urlAfter;
5.23 @@ -84,19 +87,28 @@
5.24
5.25 public void notifySuccess(Object result) {
5.26 if (result == null) {
5.27 - RcvrJSON.MsgEvnt.createOpen().dispatch(whenDone);
5.28 + dispatch(RcvrJSON.MsgEvnt.createOpen());
5.29 } else {
5.30 - RcvrJSON.MsgEvnt.createMessage(result).dispatch(whenDone);
5.31 + dispatch(RcvrJSON.MsgEvnt.createMessage(result));
5.32 }
5.33 }
5.34
5.35 public void notifyError(Throwable error) {
5.36 if (error == null) {
5.37 - RcvrJSON.MsgEvnt.createClose().dispatch(whenDone);
5.38 + dispatch(RcvrJSON.MsgEvnt.createClose());
5.39 } else {
5.40 - RcvrJSON.MsgEvnt.createError(error).dispatch(whenDone);
5.41 + dispatch(RcvrJSON.MsgEvnt.createError(error));
5.42 }
5.43 }
5.44 +
5.45 + private void dispatch(final RcvrJSON.MsgEvnt ev) {
5.46 + JSON.runInBrowser(ctx, new Runnable() {
5.47 + @Override
5.48 + public void run() {
5.49 + ev.dispatch(whenDone);
5.50 + }
5.51 + });
5.52 + }
5.53
5.54 public String getMessage() {
5.55 return this.data.toString();
6.1 --- a/json/src/main/java/org/apidesign/html/json/spi/PropertyBinding.java Sun Aug 25 15:43:30 2013 +0200
6.2 +++ b/json/src/main/java/org/apidesign/html/json/spi/PropertyBinding.java Sun Aug 25 17:41:21 2013 +0200
6.3 @@ -20,6 +20,7 @@
6.4 */
6.5 package org.apidesign.html.json.spi;
6.6
6.7 +import net.java.html.BrwsrCtx;
6.8 import org.apidesign.html.json.impl.PropertyBindingAccessor;
6.9 import org.apidesign.html.json.impl.PropertyBindingAccessor.PBData;
6.10 import org.apidesign.html.json.impl.RcvrJSON;
6.11 @@ -50,8 +51,8 @@
6.12 }
6.13
6.14 @Override
6.15 - protected JSONCall newCall(RcvrJSON callback, String urlBefore, String urlAfter, String method, Object data) {
6.16 - return new JSONCall(callback, urlBefore, urlAfter, method, data);
6.17 + protected JSONCall newCall(BrwsrCtx ctx, RcvrJSON callback, String urlBefore, String urlAfter, String method, Object data) {
6.18 + return new JSONCall(ctx, callback, urlBefore, urlAfter, method, data);
6.19 }
6.20 };
6.21 }
7.1 --- a/ko-fx/src/main/java/org/apidesign/html/kofx/FXContext.java Sun Aug 25 15:43:30 2013 +0200
7.2 +++ b/ko-fx/src/main/java/org/apidesign/html/kofx/FXContext.java Sun Aug 25 17:41:21 2013 +0200
7.3 @@ -134,7 +134,11 @@
7.4
7.5 @Override
7.6 public void runSafe(Runnable r) {
7.7 - Platform.runLater(r);
7.8 + if (Platform.isFxApplicationThread()) {
7.9 + r.run();
7.10 + } else {
7.11 + Platform.runLater(r);
7.12 + }
7.13 }
7.14
7.15 @Override
8.1 --- a/ko-ws-tyrus/src/main/java/org/apidesign/html/wstyrus/TyrusContext.java Sun Aug 25 15:43:30 2013 +0200
8.2 +++ b/ko-ws-tyrus/src/main/java/org/apidesign/html/wstyrus/TyrusContext.java Sun Aug 25 17:41:21 2013 +0200
8.3 @@ -24,7 +24,6 @@
8.4 import java.net.URI;
8.5 import java.net.URISyntaxException;
8.6 import java.util.Iterator;
8.7 -import javafx.application.Platform;
8.8 import javax.websocket.ClientEndpoint;
8.9 import javax.websocket.ContainerProvider;
8.10 import javax.websocket.DeploymentException;
8.11 @@ -109,24 +108,16 @@
8.12
8.13 @OnMessage
8.14 public void message(final String orig, Session s) {
8.15 - class R implements Runnable {
8.16 - Object json;
8.17 - public R() {
8.18 - String data = orig.trim();
8.19 - try {
8.20 - JSONTokener tok = new JSONTokener(data);
8.21 - Object obj = data.startsWith("[") ? new JSONArray(tok) : new JSONObject(tok);
8.22 - json = convertToArray(obj);
8.23 - } catch (JSONException ex) {
8.24 - json = data;
8.25 - }
8.26 - }
8.27 - @Override
8.28 - public void run() {
8.29 - callback.notifySuccess(json);
8.30 - }
8.31 + Object json;
8.32 + String data = orig.trim();
8.33 + try {
8.34 + JSONTokener tok = new JSONTokener(data);
8.35 + Object obj = data.startsWith("[") ? new JSONArray(tok) : new JSONObject(tok);
8.36 + json = convertToArray(obj);
8.37 + } catch (JSONException ex) {
8.38 + json = data;
8.39 }
8.40 - Platform.runLater(new R());
8.41 + callback.notifySuccess(json);
8.42 }
8.43
8.44 @OnError