From ca9b011b272b9d7b1b7dbe7a607915c6837b94aa Mon Sep 17 00:00:00 2001 From: bjorn Date: Mon, 15 Sep 2008 14:39:25 +0000 Subject: [PATCH] GWT: only allow a single compeltion request at a time. --- .../client/CompletionOracle.java | 10 ++++++++- .../cs/gf/gwt_translate/client/GF.java | 21 +++++++++++-------- .../cs/gf/gwt_translate/client/GFRequest.java | 19 +++++++++++++++++ 3 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/GFRequest.java diff --git a/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/CompletionOracle.java b/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/CompletionOracle.java index 53059aea4..d3f31e67d 100644 --- a/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/CompletionOracle.java +++ b/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/CompletionOracle.java @@ -10,6 +10,9 @@ public class CompletionOracle extends SuggestOracle { private List inputLangs; + private GFRequest gfRequest = null; + + public CompletionOracle (GF gf) { this.gf = gf; inputLangs = new ArrayList(); @@ -39,7 +42,12 @@ public class CompletionOracle extends SuggestOracle { } public void requestSuggestions(final SuggestOracle.Request request, final SuggestOracle.Callback callback) { - gf.complete(request.getQuery(), getInputLangs(), null, request.getLimit(), + + // only allow a single completion request at a time + if (gfRequest != null) + gfRequest.cancel(); + + gfRequest = gf.complete(request.getQuery(), getInputLangs(), null, request.getLimit(), new GF.CompleteCallback() { public void onCompleteDone(GF.Completions completions) { Collection suggestions = new ArrayList(); diff --git a/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/GF.java b/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/GF.java index a18ea4703..78b7c926f 100644 --- a/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/GF.java +++ b/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/GF.java @@ -23,8 +23,8 @@ public class GF { /* Languages */ - public void languages (final LanguagesCallback callback) { - sendRequest("languages", null, new JSONRequestCallback() { + public GFRequest languages (final LanguagesCallback callback) { + return sendRequest("languages", null, new JSONRequestCallback() { public void onJSONReceived(JSONValue json) { callback.onLanguagesDone((Languages)json.isArray().getJavaScriptObject().cast()); } @@ -50,7 +50,7 @@ public class GF { /* Translation */ - public void translate (String input, List fromLangs, String cat, List toLangs, + public GFRequest translate (String input, List fromLangs, String cat, List toLangs, final TranslateCallback callback) { List args = new ArrayList(); args.add(new Arg("input", input)); @@ -65,7 +65,7 @@ public class GF { args.add(new Arg("to", to)); } } - sendRequest("translate", args, new JSONRequestCallback() { + return sendRequest("translate", args, new JSONRequestCallback() { public void onJSONReceived(JSONValue json) { callback.onTranslateDone((Translations)json.isArray().getJavaScriptObject().cast()); } @@ -89,8 +89,8 @@ public class GF { } /* Completion */ - - public void complete (String input, List fromLangs, String cat, int limit, final CompleteCallback callback) { + + public GFRequest complete (String input, List fromLangs, String cat, int limit, final CompleteCallback callback) { List args = new ArrayList(); args.add(new Arg("input", input)); if (fromLangs != null) { @@ -100,7 +100,7 @@ public class GF { } args.add(new Arg("cat", cat)); args.add(new Arg("limit", limit)); - sendRequest("complete", args, new JSONRequestCallback() { + return sendRequest("complete", args, new JSONRequestCallback() { public void onJSONReceived(JSONValue json) { callback.onCompleteDone((Completions)json.isArray().getJavaScriptObject().cast()); } @@ -129,12 +129,13 @@ public class GF { public void onJSONReceived(JSONValue json); } - private void sendRequest (String resource, List vars, final JSONRequestCallback callback) { + private GFRequest sendRequest (String resource, List vars, final JSONRequestCallback callback) { String url = baseURL + "/" + resource + "?" + buildQueryString(vars); RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); + Request request = null; try { - Request request = builder.sendRequest(null, new RequestCallback() { + request = builder.sendRequest(null, new RequestCallback() { public void onError(Request request, Throwable e) { GWT.log("onError called", e); } @@ -150,6 +151,8 @@ public class GF { } catch (RequestException e) { GWT.log("Failed to send request", e); } + + return new GFRequest(request); } private static class Arg { diff --git a/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/GFRequest.java b/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/GFRequest.java new file mode 100644 index 000000000..1f2d32086 --- /dev/null +++ b/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/GFRequest.java @@ -0,0 +1,19 @@ +package se.chalmers.cs.gf.gwt_translate.client; + +import com.google.gwt.http.client.*; + +public class GFRequest { + + private Request httpRequest; + + GFRequest (Request httpRequest) { + this.httpRequest = httpRequest; + } + + public void cancel() { + if (httpRequest != null) { + httpRequest.cancel(); + } + } + +} \ No newline at end of file