summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/CompletionOracle.java27
-rw-r--r--src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/GF.java147
-rw-r--r--src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/Translate.java90
3 files changed, 215 insertions, 49 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 2e496eb7b..6f1b4d342 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
@@ -8,8 +8,19 @@ public class CompletionOracle extends SuggestOracle {
private GF gf;
- public CompletionOracle (String gfBaseURL) {
- gf = new GF(gfBaseURL);
+ private List<String> inputLangs;
+
+ public CompletionOracle (GF gf) {
+ this.gf = gf;
+ inputLangs = new ArrayList<String>();
+ }
+
+ public void setInputLangs(List<String> inputLangs) {
+ this.inputLangs = inputLangs;
+ }
+
+ public List<String> getInputLangs() {
+ return inputLangs;
}
public static class CompletionSuggestion implements SuggestOracle.Suggestion {
@@ -28,15 +39,13 @@ public class CompletionOracle extends SuggestOracle {
}
public void requestSuggestions(final SuggestOracle.Request request, final SuggestOracle.Callback callback) {
- gf.complete(request.getQuery(), request.getLimit(), new GF.CompleteCallback() {
+ gf.complete(request.getQuery(), getInputLangs(), null, request.getLimit(),
+ new GF.CompleteCallback() {
public void onCompleteDone(GF.Completions completions) {
Collection<CompletionSuggestion> suggestions = new ArrayList<CompletionSuggestion>();
- for (String lang : completions.getCompletionLanguages()) {
- int c = completions.countCompletions(lang);
- for (int i = 0; i < c; i++) {
- String text = request.getQuery() + " " + completions.getCompletion(lang,i);
- suggestions.add(new CompletionSuggestion(text));
- }
+ for (int i = 0; i < completions.length(); i++) {
+ String text = request.getQuery() + " " + completions.get(i).getText();
+ suggestions.add(new CompletionSuggestion(text));
}
callback.onSuggestionsReady(request, new SuggestOracle.Response(suggestions));
}
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 99fb2e275..a18ea4703 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
@@ -2,14 +2,16 @@ package se.chalmers.cs.gf.gwt_translate.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.Map;
-import java.util.HashMap;
+import java.util.List;
+import java.util.ArrayList;
public class GF {
@@ -19,38 +21,101 @@ public class GF {
this.baseURL = baseURL;
}
+ /* Languages */
+
+ public void languages (final LanguagesCallback callback) {
+ sendRequest("languages", null, new JSONRequestCallback() {
+ public void onJSONReceived(JSONValue json) {
+ callback.onLanguagesDone((Languages)json.isArray().getJavaScriptObject().cast());
+ }
+ });
+ }
+
+ public static class Languages extends JsArray<Language> {
+ protected Languages() { }
+ }
+
+ 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; }-*/;
+ }
+
+
+ public interface LanguagesCallback {
+ public void onLanguagesDone (Languages languages);
+ }
+
/* Translation */
+ public void 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));
+ }
+ }
+ sendRequest("translate", args, new JSONRequestCallback() {
+ public void onJSONReceived(JSONValue json) {
+ callback.onTranslateDone((Translations)json.isArray().getJavaScriptObject().cast());
+ }
+ });
+ }
+
+ public static class Translations extends JsArray<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; }-*/;
+ }
+
+ public interface TranslateCallback {
+ public void onTranslateDone (Translations translations);
+ }
/* Completion */
- public void complete (String text, int count, final CompleteCallback callback) {
- Map<String,String> args = new HashMap<String,String>();
- args.put("input",text);
- // args.put("from",);
- // args.put("cat",);
- // args.put("count",);
+ public void 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));
+ }
+ }
+ args.add(new Arg("cat", cat));
+ args.add(new Arg("limit", limit));
sendRequest("complete", args, new JSONRequestCallback() {
public void onJSONReceived(JSONValue json) {
- callback.onCompleteDone(new Completions(json));
+ callback.onCompleteDone((Completions)json.isArray().getJavaScriptObject().cast());
}
});
}
- public static final class Completions {
- private final JSONObject completions;
- public Completions (JSONValue json) {
- this.completions = json.isObject();
- }
- public final Set<String> getCompletionLanguages() { return completions.keySet(); }
- public final int countCompletions(String lang) {
- JSONValue cs = completions.get(lang);
- return cs == null ? 0 : cs.isArray().size();
- }
- public final String getCompletion(String lang, int i) {
- JSONValue cs = completions.get(lang);
- return cs == null ? null : cs.isArray().get(i).isString().stringValue();
- }
+ public static class Completions extends JsArray<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; }-*/;
}
public interface CompleteCallback {
@@ -64,7 +129,7 @@ public class GF {
public void onJSONReceived(JSONValue json);
}
- private void sendRequest (String resource, Map<String,String> vars, final JSONRequestCallback callback) {
+ private void sendRequest (String resource, List<Arg> vars, final JSONRequestCallback callback) {
String url = baseURL + "/" + resource + "?" + buildQueryString(vars);
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
@@ -78,7 +143,7 @@ public class GF {
if (200 == response.getStatusCode()) {
callback.onJSONReceived(JSONParser.parse(response.getText()));
} else {
- GWT.log("Response not OK: " + response.getStatusCode(), null);
+ GWT.log("Response not OK: " + response.getStatusCode() + ". " + response.getText(), null);
}
}
});
@@ -87,16 +152,32 @@ public class GF {
}
}
- private static String buildQueryString(Map<String,String> vars) {
+ 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 Arg (String name, int value) {
+ this(name, Integer.toString(value));
+ }
+ }
+
+ private static String buildQueryString(List<Arg> args) {
StringBuffer sb = new StringBuffer();
- for (Map.Entry<String,String> e : vars.entrySet()) {
- if (sb.length() > 0) {
- sb.append("&");
+ 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));
+ }
}
- sb.append(URL.encodeComponent(e.getKey()));
- sb.append("=");
- sb.append(URL.encodeComponent(e.getValue()));
- }
+ }
return sb.toString();
}
diff --git a/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/Translate.java b/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/Translate.java
index 71eaf422d..f2ada71e5 100644
--- a/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/Translate.java
+++ b/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/Translate.java
@@ -2,10 +2,14 @@ package se.chalmers.cs.gf.gwt_translate.client;
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.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.RootPanel;
import com.google.gwt.user.client.ui.SuggestBox;
import com.google.gwt.user.client.ui.VerticalPanel;
@@ -14,22 +18,56 @@ import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
import com.google.gwt.user.client.Window;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
public class Translate implements EntryPoint {
+ private static final String gfBaseURL = "http://localhost/~bringert/gf-server/gf.fcgi";
+
+ private GF gf;
+
+ private CompletionOracle oracle;
private SuggestBox suggest;
+ private List<String> fromLangs;
+ private List<String> toLangs;
private Grid outputTable;
private void translate() {
- outputTable.resizeRows(3);
- outputTable.setText(0, 1, suggest.getText());
- outputTable.setText(1, 1, suggest.getText());
- outputTable.setText(2, 1, suggest.getText());
+ gf.translate(suggest.getText(), fromLangs, null, toLangs, new GF.TranslateCallback() {
+ public void onTranslateDone (GF.Translations translations) {
+ outputTable.resizeRows(translations.length());
+ for (int i = 0; i < translations.length(); i++) {
+ GF.Translation t = translations.get(i);
+ outputTable.setText(i, 0, t.getFrom());
+ outputTable.setText(i, 1, t.getTo());
+ outputTable.setText(i, 2, t.getText());
+ }
+ }
+ });
+ }
+
+ private List<String> listBoxSelection(ListBox box) {
+ int c = box.getItemCount();
+ List<String> l = new ArrayList<String>();
+ for (int i = 0; i < c; i++) {
+ if (box.isItemSelected(i)) {
+ l.add(box.getValue(i));
+ }
+ }
+ return l;
}
public void onModuleLoad() {
- suggest = new SuggestBox(new CompletionOracle("http://localhost/~bringert/gf-server/gf.fcgi"));
+ gf = new GF(gfBaseURL);
+
+ oracle = new CompletionOracle(gf);
+
+ suggest = new SuggestBox(oracle);
suggest.setWidth("50em");
+ suggest.setText("this cheese is warm");
suggest.addKeyboardListener(new KeyboardListenerAdapter() {
public void onKeyUp (Widget sender, char keyCode, int modifiers) {
if (keyCode == KEY_ENTER) {
@@ -38,6 +76,25 @@ public class Translate implements EntryPoint {
}
});
+ final ListBox fromLangBox = new ListBox();
+ fromLangBox.addItem("Any language", "");
+ fromLangBox.addChangeListener(new ChangeListener() {
+ public void onChange(Widget sender) {
+ fromLangs = listBoxSelection(fromLangBox);
+ oracle.setInputLangs(fromLangs);
+ translate();
+ }
+ });
+
+ final ListBox toLangBox = new ListBox();
+ toLangBox.addItem("All languages", "");
+ toLangBox.addChangeListener(new ChangeListener() {
+ public void onChange(Widget sender) {
+ toLangs = listBoxSelection(toLangBox);
+ translate();
+ }
+ });
+
Button translateButton = new Button("Translate");
translateButton.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
@@ -45,16 +102,35 @@ public class Translate implements EntryPoint {
}
});
- outputTable = new Grid(0, 2);
+ HorizontalPanel hPanel = new HorizontalPanel();
+ hPanel.add(new Label("From:"));
+ hPanel.add(fromLangBox);
+ hPanel.add(new Label("To:"));
+ hPanel.add(toLangBox);
+ hPanel.add(translateButton);
+
+ outputTable = new Grid(0, 3);
VerticalPanel vPanel = new VerticalPanel();
vPanel.setWidth("100%");
vPanel.setHorizontalAlignment(VerticalPanel.ALIGN_CENTER);
vPanel.add(suggest);
- vPanel.add(translateButton);
+ vPanel.add(hPanel);
vPanel.add(outputTable);
RootPanel.get().add(vPanel);
+ gf.languages(new GF.LanguagesCallback() {
+ public void onLanguagesDone(GF.Languages languages) {
+ for (int i = 0; i < languages.length(); i++) {
+ GF.Language l = languages.get(i);
+ if (l.canParse()) {
+ fromLangBox.addItem(l.getName());
+ }
+ toLangBox.addItem(l.getName());
+ }
+ }
+ });
+
}
}