diff options
| author | bjorn <bjorn@bringert.net> | 2008-09-15 14:39:25 +0000 |
|---|---|---|
| committer | bjorn <bjorn@bringert.net> | 2008-09-15 14:39:25 +0000 |
| commit | ce504588777f211bf870e2e49dcb09368b5513c4 (patch) | |
| tree | 851b8cdf8c4d4645d8997282501acdf28714c1c8 /src | |
| parent | 6edca9983a1972e6d56caee286297e38dd1c48a0 (diff) | |
GWT: only allow a single compeltion request at a time.
Diffstat (limited to 'src')
3 files changed, 40 insertions, 10 deletions
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<String> inputLangs; + private GFRequest gfRequest = null; + + public CompletionOracle (GF gf) { this.gf = gf; inputLangs = new ArrayList<String>(); @@ -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<CompletionSuggestion> suggestions = new ArrayList<CompletionSuggestion>(); 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<String> fromLangs, String cat, List<String> toLangs, + public GFRequest translate (String input, List<String> fromLangs, String cat, List<String> toLangs, final TranslateCallback callback) { List<Arg> args = new ArrayList<Arg>(); 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<String> fromLangs, String cat, int limit, final CompleteCallback callback) { + + public GFRequest complete (String input, List<String> fromLangs, String cat, int limit, final CompleteCallback callback) { List<Arg> args = new ArrayList<Arg>(); 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<Arg> vars, final JSONRequestCallback callback) { + private GFRequest sendRequest (String resource, List<Arg> 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 |
