summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbjorn <bjorn@bringert.net>2008-10-23 11:51:52 +0000
committerbjorn <bjorn@bringert.net>2008-10-23 11:51:52 +0000
commitedaf2063832c1ef4be256054e43580b50f7d4328 (patch)
tree4286b2d508e1de9c6133d0b5b0ccc41c8114cf40
parent8872b0b0102bef4e2980d56dbf634bc181718ffa (diff)
Added Eclipse project stuff for the GWT library. Some refactoring of the GWT code.
-rw-r--r--src/server/Makefile3
-rw-r--r--src/server/gwt/.classpath8
-rw-r--r--src/server/gwt/.project15
-rw-r--r--src/server/gwt/TranslateApp.launch16
-rw-r--r--src/server/gwt/src/se/chalmers/cs/gf/gwt/client/Arg.java13
-rw-r--r--src/server/gwt/src/se/chalmers/cs/gf/gwt/client/CompletionOracle.java100
-rw-r--r--src/server/gwt/src/se/chalmers/cs/gf/gwt/client/IterableJsArray.java35
-rw-r--r--src/server/gwt/src/se/chalmers/cs/gf/gwt/client/JSONCallback.java8
-rw-r--r--src/server/gwt/src/se/chalmers/cs/gf/gwt/client/JSONRequest.java19
-rw-r--r--src/server/gwt/src/se/chalmers/cs/gf/gwt/client/JSONRequestBuilder.java65
-rw-r--r--src/server/gwt/src/se/chalmers/cs/gf/gwt/client/PGF.java331
-rw-r--r--src/server/gwt/src/se/chalmers/cs/gf/gwt/client/PGFRequest.java19
-rw-r--r--src/server/gwt/src/se/chalmers/cs/gf/gwt/client/TranslateApp.java12
13 files changed, 347 insertions, 297 deletions
diff --git a/src/server/Makefile b/src/server/Makefile
index 1df20398e..884e95360 100644
--- a/src/server/Makefile
+++ b/src/server/Makefile
@@ -10,7 +10,10 @@ gwt:
gwt/Translate-compile
gf-gwt.jar:
+ mkdir -p gwt/bin/se/chalmers/cs/gf/gwt/client
+ javac -classpath $(GWT_CLASSPATH) -sourcepath gwt/src -d gwt/bin gwt/src/se/chalmers/cs/gf/gwt/client/*.java
jar -cf $@ -C gwt/src se
+ jar -uf $@ -C gwt/bin se
cp $@ ../../lib/java
food.pgf:
diff --git a/src/server/gwt/.classpath b/src/server/gwt/.classpath
new file mode 100644
index 000000000..9885b1f85
--- /dev/null
+++ b/src/server/gwt/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="test"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="lib" path="/Users/bringert/src/gwt-mac-1.5.3/gwt-user.jar"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/src/server/gwt/.project b/src/server/gwt/.project
new file mode 100644
index 000000000..dc1b7042a
--- /dev/null
+++ b/src/server/gwt/.project
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<projectDescription>
+ <name>GF-GWT</name>
+ <comment>GF-GWT project</comment>
+ <projects/>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments/>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/src/server/gwt/TranslateApp.launch b/src/server/gwt/TranslateApp.launch
new file mode 100644
index 000000000..400ecca5c
--- /dev/null
+++ b/src/server/gwt/TranslateApp.launch
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.GWTShell"/>
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER&quot; javaProject=&quot;GF-GWT&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#13;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/GF-GWT/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#13;&#10;&lt;memento project=&quot;GF-GWT&quot;/&gt;&#13;&#10;&lt;/runtimeClasspathEntry&gt;&#13;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry externalArchive=&quot;/Users/bringert/src/gwt-mac-1.5.3/gwt-dev-mac.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;"/>
+
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-XstartOnFirstThread -Xmx256M"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-out www -noserver http://localhost:41296/gwt/www/se.chalmers.cs.gf.gwt.TranslateApp/Translate.html"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="GF-GWT"/>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+</launchConfiguration>
diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/Arg.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/Arg.java
new file mode 100644
index 000000000..0e5a9c2ef
--- /dev/null
+++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/Arg.java
@@ -0,0 +1,13 @@
+package se.chalmers.cs.gf.gwt.client;
+
+public class Arg {
+ public final String name;
+ public final String value;
+ public Arg (String name, String value) {
+ this.name = name;
+ this.value = value;
+ }
+ public Arg (String name, int value) {
+ this(name, Integer.toString(value));
+ }
+} \ No newline at end of file
diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/CompletionOracle.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/CompletionOracle.java
index 1073eed67..fbeceb483 100644
--- a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/CompletionOracle.java
+++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/CompletionOracle.java
@@ -2,83 +2,81 @@ package se.chalmers.cs.gf.gwt.client;
import com.google.gwt.user.client.ui.SuggestOracle;
-import com.google.gwt.core.client.GWT;
-
import java.util.*;
public class CompletionOracle extends SuggestOracle {
- private PGF pgf;
-
- private ErrorHandler errorHandler;
-
- private List<String> inputLangs = null;
+ private PGF pgf;
- private PGFRequest pgfRequest = null;
+ private ErrorHandler errorHandler;
+ private List<String> inputLangs = null;
- public CompletionOracle (PGF pgf) {
- this(pgf, null);
- }
+ private JSONRequest JSONRequest = null;
- public CompletionOracle (PGF pgf, ErrorHandler errorHandler) {
- this.pgf = pgf;
- this.errorHandler = errorHandler;
- }
- public void setInputLangs(List<String> inputLangs) {
- this.inputLangs = inputLangs;
- }
+ public CompletionOracle (PGF pgf) {
+ this(pgf, null);
+ }
- public List<String> getInputLangs() {
- return inputLangs;
- }
+ public CompletionOracle (PGF pgf, ErrorHandler errorHandler) {
+ this.pgf = pgf;
+ this.errorHandler = errorHandler;
+ }
- public void setErrorHandler(ErrorHandler errorHandler) {
- this.errorHandler = errorHandler;
- }
+ public void setInputLangs(List<String> inputLangs) {
+ this.inputLangs = inputLangs;
+ }
- public static interface ErrorHandler {
- public void onError(Throwable e);
- }
+ public List<String> getInputLangs() {
+ return inputLangs;
+ }
- public static class CompletionSuggestion implements SuggestOracle.Suggestion {
- private String string;
- public CompletionSuggestion(String string) {
- this.string = string;
+ public void setErrorHandler(ErrorHandler errorHandler) {
+ this.errorHandler = errorHandler;
}
- public String getDisplayString() {
- return string;
+ public static interface ErrorHandler {
+ public void onError(Throwable e);
}
- public String getReplacementString() {
- return string;
+ public static class CompletionSuggestion implements SuggestOracle.Suggestion {
+ private String string;
+ public CompletionSuggestion(String string) {
+ this.string = string;
+ }
+
+ public String getDisplayString() {
+ return string;
+ }
+
+ public String getReplacementString() {
+ return string;
+ }
}
- }
- public void requestSuggestions(final SuggestOracle.Request request, final SuggestOracle.Callback callback) {
+ public void requestSuggestions(final SuggestOracle.Request request, final SuggestOracle.Callback callback) {
- // only allow a single completion request at a time
- if (pgfRequest != null)
- pgfRequest.cancel();
+ // only allow a single completion request at a time
+ if (JSONRequest != null)
+ JSONRequest.cancel();
- pgfRequest = pgf.complete(request.getQuery(), getInputLangs(), null, request.getLimit(),
- new PGF.CompleteCallback() {
+ JSONRequest = pgf.complete(request.getQuery(), getInputLangs(), null, request.getLimit(),
+ new PGF.CompleteCallback() {
public void onResult(PGF.Completions completions) {
- Collection<CompletionSuggestion> suggestions = new ArrayList<CompletionSuggestion>();
- for (int i = 0; i < completions.length(); i++) {
- String text = completions.get(i).getText();
- suggestions.add(new CompletionSuggestion(text));
- }
- callback.onSuggestionsReady(request, new SuggestOracle.Response(suggestions));
+ Collection<CompletionSuggestion> suggestions = new ArrayList<CompletionSuggestion>();
+ for (int i = 0; i < completions.length(); i++) {
+ String text = completions.get(i).getText();
+ suggestions.add(new CompletionSuggestion(text));
+ }
+ callback.onSuggestionsReady(request, new SuggestOracle.Response(suggestions));
}
public void onError(Throwable e) {
- errorHandler.onError(e);
+ errorHandler.onError(e);
}
- });
- }
+ });
+ }
}
diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/IterableJsArray.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/IterableJsArray.java
new file mode 100644
index 000000000..59f6df2da
--- /dev/null
+++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/IterableJsArray.java
@@ -0,0 +1,35 @@
+package se.chalmers.cs.gf.gwt.client;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.core.client.JsArray;
+
+public class IterableJsArray<T extends JavaScriptObject> extends JsArray<T> {
+
+ protected IterableJsArray() {}
+
+ public final Iterable<T> iterable() {
+ return new Iterable<T>() {
+ public Iterator<T> iterator() {
+ return new Iterator<T>() {
+ private int i = 0;
+ public boolean hasNext() {
+ return i < length();
+ }
+ public T next() {
+ if (!hasNext()) {
+ throw new NoSuchElementException();
+ }
+ return get(i++);
+ }
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+ };
+ }
+
+}
diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/JSONCallback.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/JSONCallback.java
new file mode 100644
index 000000000..a9c1aaeb4
--- /dev/null
+++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/JSONCallback.java
@@ -0,0 +1,8 @@
+package se.chalmers.cs.gf.gwt.client;
+
+import com.google.gwt.core.client.JavaScriptObject;
+
+public interface JSONCallback<T extends JavaScriptObject> {
+ public void onResult (T result) ;
+ public void onError (Throwable e) ;
+}
diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/JSONRequest.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/JSONRequest.java
new file mode 100644
index 000000000..393443b7e
--- /dev/null
+++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/JSONRequest.java
@@ -0,0 +1,19 @@
+package se.chalmers.cs.gf.gwt.client;
+
+import com.google.gwt.http.client.*;
+
+public class JSONRequest {
+
+ private Request httpRequest;
+
+ JSONRequest (Request httpRequest) {
+ this.httpRequest = httpRequest;
+ }
+
+ public void cancel() {
+ if (httpRequest != null) {
+ httpRequest.cancel();
+ }
+ }
+
+} \ No newline at end of file
diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/JSONRequestBuilder.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/JSONRequestBuilder.java
new file mode 100644
index 000000000..8af6f0494
--- /dev/null
+++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/JSONRequestBuilder.java
@@ -0,0 +1,65 @@
+package se.chalmers.cs.gf.gwt.client;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.http.client.Request;
+import com.google.gwt.http.client.RequestBuilder;
+import com.google.gwt.http.client.RequestCallback;
+import com.google.gwt.http.client.RequestException;
+import com.google.gwt.http.client.Response;
+import com.google.gwt.http.client.URL;
+
+import java.util.List;
+
+public class JSONRequestBuilder {
+
+ public static <T extends JavaScriptObject> JSONRequest sendRequest (String base, List<Arg> vars, final JSONCallback<T> callback) {
+ String url = base + "?" + buildQueryString(vars);
+ RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
+ builder.setTimeoutMillis(30000);
+ builder.setHeader("Accept","text/plain, text/html;q=0.5, */*;q=0.1");
+ Request request = null;
+
+ try {
+ request = builder.sendRequest(null, new RequestCallback() {
+ public void onError(Request request, Throwable e) {
+ callback.onError(e);
+ }
+
+ public void onResponseReceived(Request request, Response response) {
+ if (200 == response.getStatusCode()) {
+ callback.onResult((T)eval(response.getText()).cast());
+ } else {
+ RequestException e = new RequestException("Response not OK: " + response.getStatusCode() + ". " + response.getText());
+ callback.onError(e);
+ }
+ }
+ });
+ } catch (RequestException e) {
+ callback.onError(e);
+ }
+
+ return new JSONRequest(request);
+ }
+
+ private static native JavaScriptObject eval(String json) /*-{
+ return eval('(' + json + ')');
+ }-*/;
+
+ private static String buildQueryString(List<Arg> args) {
+ StringBuffer sb = new StringBuffer();
+ if (args != null) {
+ for (Arg arg : args) {
+ if (arg.value != null) {
+ if (sb.length() > 0) {
+ sb.append("&");
+ }
+ sb.append(URL.encodeComponent(arg.name));
+ sb.append("=");
+ sb.append(URL.encodeComponent(arg.value));
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+}
diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/PGF.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/PGF.java
index a47977747..24e8fafc5 100644
--- a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/PGF.java
+++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/PGF.java
@@ -1,248 +1,149 @@
package se.chalmers.cs.gf.gwt.client;
-import com.google.gwt.http.client.*;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.core.client.JsArray;
import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.json.client.JSONValue;
-import com.google.gwt.json.client.JSONObject;
-import com.google.gwt.json.client.JSONParser;
-
-import java.util.Set;
-import java.util.Iterator;
import java.util.List;
-import java.util.NoSuchElementException;
import java.util.ArrayList;
public class PGF {
- private String baseURL;
- private String pgfName;
-
- public PGF (String baseURL, String pgfName) {
- this.baseURL = baseURL;
- this.pgfName = pgfName;
- }
-
- public static interface GFCallback<T extends JavaScriptObject> {
- public void onResult (T result) ;
- public void onError (Throwable e) ;
- }
-
- public static class IterableJsArray<T extends JavaScriptObject> extends JsArray<T> {
- protected IterableJsArray() {}
-
- public final Iterable<T> iterable() {
- return new Iterable<T>() {
- public Iterator<T> iterator() {
- return new Iterator<T>() {
- private int i = 0;
- public boolean hasNext() {
- return i < length();
- }
- public T next() {
- if (!hasNext()) {
- throw new NoSuchElementException();
- }
- return get(i++);
- }
- public void remove() {
- throw new UnsupportedOperationException();
- }
- };
- }
- };
+ private String baseURL;
+ private String pgfName;
+
+ public PGF (String baseURL, String pgfName) {
+ this.baseURL = baseURL;
+ this.pgfName = pgfName;
}
- }
- /* Grammar */
+ /* Grammar */
- public PGFRequest grammar (final GrammarCallback callback) {
- return sendRequest("grammar", null, callback);
- }
+ public JSONRequest grammar (final GrammarCallback callback) {
+ return sendRequest("grammar", null, callback);
+ }
- public interface GrammarCallback extends GFCallback<Grammar> { }
+ public interface GrammarCallback extends JSONCallback<Grammar> { }
- public static class Grammar extends JavaScriptObject {
- protected Grammar() { }
+ public static class Grammar extends JavaScriptObject {
+ protected Grammar() { }
- public final native String getName() /*-{ return this.name; }-*/;
+ public final native String getName() /*-{ return this.name; }-*/;
- public final native String getUserLanguage() /*-{ return this.userLanguage; }-*/;
+ public final native String getUserLanguage() /*-{ return this.userLanguage; }-*/;
- public final native IterableJsArray<Language> getLanguages() /*-{ return this.languages; }-*/;
+ public final native IterableJsArray<Language> getLanguages() /*-{ return this.languages; }-*/;
- public final Language getLanguage(String name) {
- int c = getLanguages().length();
- for (int i = 0; i < c; i++) {
- Language l = getLanguages().get(i);
- if (l.getName().equals(name))
- return l;
- }
- return null;
+ public final Language getLanguage(String name) {
+ int c = getLanguages().length();
+ for (int i = 0; i < c; i++) {
+ Language l = getLanguages().get(i);
+ if (l.getName().equals(name))
+ return l;
+ }
+ return null;
+ }
}
- }
-
- public static class Language extends JavaScriptObject {
- protected Language() { }
-
- public final native String getName() /*-{ return this.name; }-*/;
- public final native String getLanguageCode() /*-{ return this.languageCode; }-*/;
- public final native boolean canParse() /*-{ return this.canParse; }-*/;
- }
-
- /* Translation */
-
- public PGFRequest 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));
- if (fromLangs != null) {
- for (String from : fromLangs) {
- args.add(new Arg("from", from));
- }
+
+ public static class Language extends JavaScriptObject {
+ protected Language() { }
+
+ public final native String getName() /*-{ return this.name; }-*/;
+ public final native String getLanguageCode() /*-{ return this.languageCode; }-*/;
+ public final native boolean canParse() /*-{ return this.canParse; }-*/;
}
- args.add(new Arg("cat", cat));
- if (toLangs != null) {
- for (String to : toLangs) {
- args.add(new Arg("to", to));
- }
+
+ /* Translation */
+
+ public JSONRequest 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));
+ if (fromLangs != null) {
+ for (String from : fromLangs) {
+ args.add(new Arg("from", from));
+ }
+ }
+ args.add(new Arg("cat", cat));
+ if (toLangs != null) {
+ for (String to : toLangs) {
+ args.add(new Arg("to", to));
+ }
+ }
+ return sendRequest("translate", args, callback);
}
- return sendRequest("translate", args, callback);
- }
-
- public interface TranslateCallback extends GFCallback<Translations> { }
-
- public static class Translations extends IterableJsArray<Translation> {
- protected Translations() { }
- }
-
- public static class Translation extends JavaScriptObject {
- protected Translation() { }
-
- public final native String getFrom() /*-{ return this.from; }-*/;
- public final native String getTo() /*-{ return this.to; }-*/;
- public final native String getText() /*-{ return this.text; }-*/;
- }
-
- /* Completion */
-
- public PGFRequest 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) {
- for (String from : fromLangs) {
- args.add(new Arg("from", from));
- }
+
+ public interface TranslateCallback extends JSONCallback<Translations> { }
+
+ public static class Translations extends IterableJsArray<Translation> {
+ protected Translations() { }
}
- args.add(new Arg("cat", cat));
- args.add(new Arg("limit", limit));
- return sendRequest("complete", args, callback);
- }
-
- public interface CompleteCallback extends GFCallback<Completions> { }
-
- public static class Completions extends IterableJsArray<Translation> {
- protected Completions() { }
- }
-
- public static class Completion extends JavaScriptObject {
- protected Completion() { }
-
- public final native String getFrom() /*-{ return this.from; }-*/;
- public final native String getText() /*-{ return this.text; }-*/;
- }
-
- /* Parsing */
-
- public PGFRequest parse (String input, List<String> fromLangs, String cat, final ParseCallback callback) {
- List<Arg> args = new ArrayList<Arg>();
- args.add(new Arg("input", input));
- if (fromLangs != null) {
- for (String from : fromLangs) {
- args.add(new Arg("from", from));
- }
+
+ public static class Translation extends JavaScriptObject {
+ protected Translation() { }
+
+ public final native String getFrom() /*-{ return this.from; }-*/;
+ public final native String getTo() /*-{ return this.to; }-*/;
+ public final native String getText() /*-{ return this.text; }-*/;
}
- args.add(new Arg("cat", cat));
- return sendRequest("parse", args, callback);
- }
-
- public interface ParseCallback extends GFCallback<ParseResults> { }
-
- public static class ParseResults extends IterableJsArray<ParseResult> {
- protected ParseResults() { }
- }
-
- public static class ParseResult extends JavaScriptObject {
- protected ParseResult() { }
-
- public final native String getFrom() /*-{ return this.from; }-*/;
- public final native String getTree() /*-{ return this.tree; }-*/;
- }
-
- /* Utilities */
-
- private <T extends JavaScriptObject> PGFRequest sendRequest (String resource, List<Arg> vars, final GFCallback<T> callback) {
- String url = baseURL + "/" + pgfName + "/" + resource + "?" + buildQueryString(vars);
- RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
- builder.setTimeoutMillis(30000);
- builder.setHeader("Accept","text/plain, text/html;q=0.5, */*;q=0.1");
- Request request = null;
-
- try {
- request = builder.sendRequest(null, new RequestCallback() {
- public void onError(Request request, Throwable e) {
- callback.onError(e);
- }
-
- public void onResponseReceived(Request request, Response response) {
- if (200 == response.getStatusCode()) {
- callback.onResult((T)eval(response.getText()).cast());
- } else {
- RequestException e = new RequestException("Response not OK: " + response.getStatusCode() + ". " + response.getText());
- callback.onError(e);
+
+ /* Completion */
+
+ public JSONRequest 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) {
+ for (String from : fromLangs) {
+ args.add(new Arg("from", from));
}
- }
- });
- } catch (RequestException e) {
- callback.onError(e);
+ }
+ args.add(new Arg("cat", cat));
+ args.add(new Arg("limit", limit));
+ return sendRequest("complete", args, callback);
}
- return new PGFRequest(request);
- }
-
- private static native JavaScriptObject eval(String json) /*-{
- return eval('(' + json + ')');
- }-*/;
+ public interface CompleteCallback extends JSONCallback<Completions> { }
- private static class Arg {
- public final String name;
- public final String value;
- public Arg (String name, String value) {
- this.name = name;
- this.value = value;
+ public static class Completions extends IterableJsArray<Translation> {
+ protected Completions() { }
}
- public Arg (String name, int value) {
- this(name, Integer.toString(value));
+
+ public static class Completion extends JavaScriptObject {
+ protected Completion() { }
+
+ public final native String getFrom() /*-{ return this.from; }-*/;
+ public final native String getText() /*-{ return this.text; }-*/;
}
- }
-
- private static String buildQueryString(List<Arg> args) {
- StringBuffer sb = new StringBuffer();
- if (args != null) {
- for (Arg arg : args) {
- if (arg.value != null) {
- if (sb.length() > 0) {
- sb.append("&");
- }
- sb.append(URL.encodeComponent(arg.name));
- sb.append("=");
- sb.append(URL.encodeComponent(arg.value));
+
+ /* Parsing */
+
+ public JSONRequest parse (String input, List<String> fromLangs, String cat, final ParseCallback callback) {
+ List<Arg> args = new ArrayList<Arg>();
+ args.add(new Arg("input", input));
+ if (fromLangs != null) {
+ for (String from : fromLangs) {
+ args.add(new Arg("from", from));
+ }
}
- }
+ args.add(new Arg("cat", cat));
+ return sendRequest("parse", args, callback);
+ }
+
+ public interface ParseCallback extends JSONCallback<ParseResults> { }
+
+ public static class ParseResults extends IterableJsArray<ParseResult> {
+ protected ParseResults() { }
+ }
+
+ public static class ParseResult extends JavaScriptObject {
+ protected ParseResult() { }
+
+ public final native String getFrom() /*-{ return this.from; }-*/;
+ public final native String getTree() /*-{ return this.tree; }-*/;
+ }
+
+ /* Common */
+
+ public <T extends JavaScriptObject> JSONRequest sendRequest(String resource, List<Arg> args, final JSONCallback<T> callback) {
+ return JSONRequestBuilder.sendRequest(baseURL + "/" + pgfName + "/" + resource, args, callback);
}
- return sb.toString();
- }
} \ No newline at end of file
diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/PGFRequest.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/PGFRequest.java
deleted file mode 100644
index b46ad9382..000000000
--- a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/PGFRequest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package se.chalmers.cs.gf.gwt.client;
-
-import com.google.gwt.http.client.*;
-
-public class PGFRequest {
-
- private Request httpRequest;
-
- PGFRequest (Request httpRequest) {
- this.httpRequest = httpRequest;
- }
-
- public void cancel() {
- if (httpRequest != null) {
- httpRequest.cancel();
- }
- }
-
-} \ No newline at end of file
diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/TranslateApp.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/TranslateApp.java
index 54a65fa20..406ebba4b 100644
--- a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/TranslateApp.java
+++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/TranslateApp.java
@@ -4,13 +4,8 @@ import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ChangeListener;
import com.google.gwt.user.client.ui.ClickListener;
-import com.google.gwt.user.client.ui.DockPanel;
-import com.google.gwt.user.client.ui.DialogBox;
-import com.google.gwt.user.client.ui.Grid;
-import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
-import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.SuggestBox;
@@ -20,13 +15,6 @@ import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.Window;
-
-import com.google.gwt.i18n.client.LocaleInfo;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
public class TranslateApp implements EntryPoint {