diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/BrowsePanel.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/BrowsePanel.java index ea7e0aca8..715bdf0a2 100644 --- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/BrowsePanel.java +++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/BrowsePanel.java @@ -13,13 +13,15 @@ import com.google.gwt.event.logical.shared.*; public class BrowsePanel extends Composite { private PGFWrapper pgf; + private StatusPopup statusPopup; private HTML sourceView; private SuggestBox searchBox; private CompletionOracle oracle; private List identifiers = null; - public BrowsePanel(PGFWrapper pgf) { + public BrowsePanel(PGFWrapper pgf, StatusPopup statusPopup) { this.pgf = pgf; + this.statusPopup = statusPopup; oracle = new CompletionOracle(); @@ -79,8 +81,8 @@ public class BrowsePanel extends Composite { sourceView.setHTML(response.getText()); } - public void onError(Request request, java.lang.Throwable exception) { - // errorHandler.onError(e); + public void onError(Request request, java.lang.Throwable e) { + statusPopup.showError("Cannot load the page", e); } }); } diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/CompletionOracle.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/CompletionOracle.java index 1ff3f5d16..504c13879 100644 --- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/CompletionOracle.java +++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/CompletionOracle.java @@ -118,7 +118,7 @@ public class CompletionOracle extends SuggestOracle { jsonRequest = pgf.complete(request.getQuery(), LIMIT_SCALE_FACTOR * request.getLimit(), new PGF.CompleteCallback() { - public void onResult(PGF.Completions completions) { + public void onResult(IterableJsArray completions) { jsonRequest = null; List suggestions = new ArrayList(); for (PGF.Completion completion : completions.iterable()) { diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/EditorApp.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/EditorApp.java index 775ad74af..12bb0438b 100644 --- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/EditorApp.java +++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/EditorApp.java @@ -57,7 +57,7 @@ public class EditorApp implements EntryPoint { outputPanel.addStyleDependentName("working"); translateRequest = pgf.translate(textPanel.getText(), new PGF.TranslateCallback() { - public void onResult (PGF.Translations translations) { + public void onResult (IterableJsArray translations) { translateRequest = null; outputPanel.clear(); @@ -66,8 +66,8 @@ public class EditorApp implements EntryPoint { textPanel.renderBracketedString(tr.getBracketedString()); if (tr.getTranslations() != null) - for (PGF.Translation t : tr.getTranslations().iterable()) { - LinearizationsPanel lin = new LinearizationsPanel(pgf, t.getTree(), t.getLinearizations()); + for (PGF.Linearizations lins : tr.getTranslations().iterable()) { + LinearizationsPanel lin = new LinearizationsPanel(pgf, lins); lin.setWidth("100%"); outputPanel.add(lin); } @@ -89,7 +89,7 @@ public class EditorApp implements EntryPoint { public void onError (Throwable e) { translateRequest = null; - showError("Translation failed", e); + statusPopup.showError("Translation failed", e); } }); } @@ -155,7 +155,7 @@ public class EditorApp implements EntryPoint { bagPanel.clear(); completeRequest = pgf.complete(query, LIMIT_SCALE_FACTOR * maxMagnets, new PGF.CompleteCallback() { - public void onResult(PGF.Completions completions) { + public void onResult(IterableJsArray completions) { completeRequest = null; cachedPrefix = query; @@ -188,28 +188,11 @@ public class EditorApp implements EntryPoint { public void onError(Throwable e) { completeRequest = null; - showError("Getting completions failed", e); + statusPopup.showError("Getting completions failed", e); } }); } - - // - // Status stuff - // - - protected void setStatus(String msg) { - statusPopup.setStatus(msg); - } - - protected void showError(String msg, Throwable e) { - statusPopup.showError(msg, e); - } - - protected void clearStatus() { - statusPopup.clearStatus(); - } - // // GUI // @@ -313,11 +296,11 @@ public class EditorApp implements EntryPoint { } protected BrowsePanel createBrowsePanel() { - return new BrowsePanel(pgf); + return new BrowsePanel(pgf, statusPopup); } protected QueryPanel createQueryPanel() { - return new QueryPanel(pgf); + return new QueryPanel(pgf, statusPopup); } protected DocumentsPanel createDocumentsPanel() { @@ -435,7 +418,7 @@ public class EditorApp implements EntryPoint { update(); } public void onSettingsError(String msg, Throwable e) { - showError(msg,e); + statusPopup.showError(msg,e); } } diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/FridgeApp.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/FridgeApp.java index c9d1bcfcd..564ae35cc 100644 --- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/FridgeApp.java +++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/FridgeApp.java @@ -52,7 +52,7 @@ public class FridgeApp implements EntryPoint { int limit = updatePrefixes ? 0 : maxMagnets; completeRequest = pgf.complete(text + " " + prefix, limit, new PGF.CompleteCallback() { - public void onResult(PGF.Completions completions) { + public void onResult(IterableJsArray completions) { List magnets = new ArrayList(); for (PGF.Completion completion : completions.iterable()) { for (String word : completion.getCompletions()) { @@ -105,11 +105,11 @@ public class FridgeApp implements EntryPoint { } translateRequest = pgf.translate(getText(), new PGF.TranslateCallback() { - public void onResult (PGF.Translations translations) { + public void onResult (IterableJsArray translations) { outputPanel.removeStyleDependentName("working"); for (PGF.TranslationResult tr : translations.iterable()) { if (tr.getTranslations() != null) - for (PGF.Translation t : tr.getTranslations().iterable()) { + for (PGF.Linearizations t : tr.getTranslations().iterable()) { for (PGF.Linearization l : t.getLinearizations().iterable()) { outputPanel.add(createTranslation(l.getTo(), l.getText())); } diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/LinearizationsPanel.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/LinearizationsPanel.java index 2a916db29..04aa5d5d7 100644 --- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/LinearizationsPanel.java +++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/LinearizationsPanel.java @@ -13,7 +13,7 @@ public class LinearizationsPanel extends Composite { protected PGFWrapper pgf; - public LinearizationsPanel(PGFWrapper pgf, String tree, PGF.Linearizations lins) { + public LinearizationsPanel(PGFWrapper pgf, PGF.Linearizations lins) { this.pgf = pgf; HorizontalPanel hPanel = new HorizontalPanel(); @@ -23,13 +23,13 @@ public class LinearizationsPanel extends Composite { HorizontalPanel btnPanel = new HorizontalPanel(); btnPanel.addStyleName("my-translation-btns"); btnPanel.setSpacing(4); - btnPanel.add(createAbsTreeButton(tree)); - btnPanel.add(createAlignButton(tree)); + btnPanel.add(createAbsTreeButton(lins.getTree())); + btnPanel.add(createAlignButton(lins.getTree())); hPanel.add(btnPanel); hPanel.setCellHorizontalAlignment(btnPanel,HasHorizontalAlignment.ALIGN_RIGHT); - for (PGF.Linearization l : lins.iterable()) { - linsPanel.add(createTranslation(l.getTo(), tree, l.getText())); + for (PGF.Linearization l : lins.getLinearizations().iterable()) { + linsPanel.add(createTranslation(l.getTo(), lins.getTree(), l.getText())); } initWidget(hPanel); diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/PGF.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/PGF.java index a80347483..17eef12bb 100644 --- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/PGF.java +++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/PGF.java @@ -52,26 +52,22 @@ public class PGF { return sendGrammarRequest(pgfURL, "translate", args, callback); } - public interface TranslateCallback extends JSONCallback { } - - public static class Translations extends IterableJsArray { - protected Translations() { } - } + public interface TranslateCallback extends JSONCallback> { } public static class TranslationResult extends JavaScriptObject { protected TranslationResult() { } public final native String getFrom() /*-{ return this.from; }-*/; public final native BracketedString getBracketedString() /*-{ return this.brackets; }-*/; - public final native IterableJsArray getTranslations() /*-{ return this.translations; }-*/; + public final native IterableJsArray getTranslations() /*-{ return this.translations; }-*/; public final native TcError[] getTypeErrors() /*-{ return this.typeErrors; }-*/; } - public static class Translation extends JavaScriptObject { - protected Translation() { } + public static class Linearizations extends JavaScriptObject { + protected Linearizations() { } public final native String getTree() /*-{ return this.tree; }-*/; - public final native Linearizations getLinearizations() /*-{ return this.linearizations; }-*/; + public final native IterableJsArray getLinearizations() /*-{ return this.linearizations; }-*/; } /* Completion */ @@ -92,11 +88,7 @@ public class PGF { return sendGrammarRequest(pgfURL, "complete", args, callback); } - public interface CompleteCallback extends JSONCallback { } - - public static class Completions extends IterableJsArray { - protected Completions() { } - } + public interface CompleteCallback extends JSONCallback> { } public static class Completion extends JavaScriptObject { protected Completion() { } @@ -117,11 +109,7 @@ public class PGF { return sendGrammarRequest(pgfURL, "parse", args, callback); } - public interface ParseCallback extends JSONCallback { } - - public static class ParseResults extends IterableJsArray { - protected ParseResults() { } - } + public interface ParseCallback extends JSONCallback> { } public static class ParseResult extends JavaScriptObject { protected ParseResult() { } @@ -174,11 +162,7 @@ public class PGF { return sendGrammarRequest(pgfURL, "linearize", args, callback); } - public interface LinearizeCallback extends JSONCallback { } - - public static class Linearizations extends IterableJsArray { - protected Linearizations() { } - } + public interface LinearizeCallback extends JSONCallback> { } public static class Linearization extends JavaScriptObject { protected Linearization() { } @@ -229,20 +213,26 @@ public class PGF { return request; } - public JSONRequest query(String pgfURL, String query, QueryCallback callback) { + public JSONRequest generateAll(String pgfURL, String cat, int depth, int limit, String toLang, GenerationCallback callback) { List args = new ArrayList(); - args.add(new Arg("cat", query)); - return sendGrammarRequest(pgfURL, "query", args, callback); + args.add(new Arg("cat", cat)); + args.add(new Arg("depth", depth)); + args.add(new Arg("limit", limit)); + args.add(new Arg("to", toLang)); + return sendGrammarRequest(pgfURL, "generate", args, callback); } - - public interface QueryCallback extends JSONCallback {} - public static class QueryResult extends JavaScriptObject { - protected QueryResult() { } - - public final native String[] getRows() /*-{ return this.rows; }-*/; + public JSONRequest generateRandom(String pgfURL, String cat, int depth, int limit, String toLang, GenerationCallback callback) { + List args = new ArrayList(); + args.add(new Arg("cat", cat)); + args.add(new Arg("depth", depth)); + args.add(new Arg("limit", limit)); + args.add(new Arg("to", toLang)); + return sendGrammarRequest(pgfURL, "random", args, callback); } + public interface GenerationCallback extends JSONCallback> {} + public JSONRequest sendGrammarRequest(String pgfURL, String resource, List args, final JSONCallback callback) { args.add(new Arg("command", resource)); return JSONRequestBuilder.sendRequest(pgfURL, args, callback); diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/PGFWrapper.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/PGFWrapper.java index b1dfcf278..2c85a4704 100644 --- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/PGFWrapper.java +++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/PGFWrapper.java @@ -158,8 +158,12 @@ public class PGFWrapper { return pgf.browse(grammarURL, id, href, cssClass, callback); } - public JSONRequest query(String query, PGF.QueryCallback callback) { - return pgf.query(grammarURL, query, callback); + public JSONRequest generateAll(String cat, int depth, int limit, PGF.GenerationCallback callback) { + return pgf.generateAll(grammarURL, cat, depth, limit, outputLanguage, callback); + } + + public JSONRequest generateRandom(String cat, int depth, int limit, PGF.GenerationCallback callback) { + return pgf.generateRandom(grammarURL, cat, depth, limit, outputLanguage, callback); } // diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/QueryPanel.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/QueryPanel.java index 6f732dbe2..7f1396542 100644 --- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/QueryPanel.java +++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/QueryPanel.java @@ -8,9 +8,14 @@ import com.google.gwt.user.client.ui.*; public class QueryPanel extends Composite { private PGFWrapper pgf; + private StatusPopup statusPopup; + private TextArea queryBox; + private VerticalPanel outputPanel; + private JSONRequest executeRequest = null; - public QueryPanel(PGFWrapper pgf) { + public QueryPanel(PGFWrapper pgf, StatusPopup statusPopup) { this.pgf = pgf; + this.statusPopup = statusPopup; VerticalPanel vPanel = new VerticalPanel(); vPanel.add(createQueryPanel()); @@ -18,61 +23,46 @@ public class QueryPanel extends Composite { initWidget(vPanel); setStylePrimaryName("my-QueryPanel"); - pgf.addSettingsListener(new MySettingsListener(pgf)); + pgf.addSettingsListener(new MySettingsListener()); } protected Widget createQueryPanel() { - final TextArea queryBox = new TextArea(); + queryBox = new TextArea(); queryBox.setStylePrimaryName("my-QueryBox"); + queryBox.setTitle("Goal category"); + + HorizontalPanel boxPanel = new HorizontalPanel(); + boxPanel.setVerticalAlignment(HorizontalPanel.ALIGN_MIDDLE); + boxPanel.setSpacing(5); - final Grid resultGrid = new Grid(0, 1); - resultGrid.setStylePrimaryName("my-ResultGrid"); - resultGrid.setBorderWidth(3); + final TextBox limitBox = new TextBox(); + limitBox.setTitle("Upper limit of the number of examples generated"); + limitBox.setWidth("5em"); + limitBox.setText("10"); + boxPanel.add(new Label("limit:")); + boxPanel.add(limitBox); + + boxPanel.add(new HTML("")); + + final TextBox depthBox = new TextBox(); + depthBox.setTitle("Maximal depth for every example"); + depthBox.setWidth("5em"); + depthBox.setText("4"); + boxPanel.add(new Label("depth:")); + boxPanel.add(depthBox); + boxPanel.add(new HTML("")); + + final CheckBox randomBox = new CheckBox(); + randomBox.setTitle("random/exhaustive generation"); + randomBox.setText("random"); + boxPanel.add(randomBox); + + outputPanel = new VerticalPanel(); + outputPanel.addStyleName("my-translations"); + outputPanel.addStyleDependentName("working"); + Button execButton = new Button("Execute"); - execButton.addClickListener(new ClickListener() { - public void onClick(Widget sender) { - pgf.query(queryBox.getText(), new PGF.QueryCallback() { - public void onResult(PGF.QueryResult result) { - while (resultGrid.getRowCount() > 0) { - resultGrid.removeRow(resultGrid.getRowCount() - 1); - } - - ClickListener labelClickListener = new ClickListener() { - public void onClick(Widget sender) { - final Label label = (Label) sender; - pgf.linearize(label.getText(), new PGF.LinearizeCallback() { - public void onResult(PGF.Linearizations result) { - final PopupPanel popup = new PopupPanel(true); - popup.setWidget(new LinearizationsPanel(pgf, label.getText(), result)); - popup.setPopupPosition(label.getAbsoluteLeft(), - label.getAbsoluteTop()+label.getOffsetHeight()); - popup.show(); - } - - public void onError(Throwable e) { - - } - }); - } - }; - - int row = 0; - for (String tree : result.getRows()) { - Label label = new Label(tree); - label.addClickListener(labelClickListener); - resultGrid.insertRow(row); - resultGrid.setWidget(row, 0, label); - row++; - } - } - - public void onError(Throwable e) { - - } - }); - } - }); DecoratorPanel queryDecorator = new DecoratorPanel(); VerticalPanel vPanel = new VerticalPanel(); @@ -81,26 +71,70 @@ public class QueryPanel extends Composite { hPanel.add(queryBox); hPanel.add(execButton); vPanel.add(hPanel); + vPanel.add(boxPanel); queryDecorator.add(vPanel); VerticalPanel queryPanel = new VerticalPanel(); queryPanel.setHorizontalAlignment(VerticalPanel.ALIGN_CENTER); queryPanel.add(queryDecorator); - queryPanel.add(resultGrid); + queryPanel.add(outputPanel); + + execButton.addClickListener(new ClickListener() { + public void onClick(Widget sender) { + if (executeRequest != null) { + executeRequest.cancel(); + } + + PGF.GenerationCallback callback = new PGF.GenerationCallback() { + public void onResult(IterableJsArray result) { + executeRequest = null; + + outputPanel.clear(); + outputPanel.removeStyleDependentName("working"); + + for (PGF.Linearizations lins : result.iterable()) { + LinearizationsPanel lin = new LinearizationsPanel(pgf, lins); + lin.setWidth("100%"); + outputPanel.add(lin); + } + } + + public void onError(Throwable e) { + executeRequest = null; + statusPopup.showError("The execution failed", e); + } + }; + + int depth, limit; + try { + depth = Integer.parseInt(depthBox.getText()); + limit = Integer.parseInt(limitBox.getText()); + } catch (NumberFormatException e) { + return; + } + + if (randomBox.getValue()) + executeRequest = pgf.generateRandom(queryBox.getText(), depth, limit, callback); + else + executeRequest = pgf.generateAll(queryBox.getText(), depth, limit, callback); + } + }); return queryPanel; } protected class MySettingsListener implements PGFWrapper.SettingsListener { - private PGFWrapper pgf; - - public MySettingsListener(PGFWrapper pgf) { - this.pgf = pgf; + public MySettingsListener() { } public void onAvailableGrammarsChanged() { } - public void onSelectedGrammarChanged() { } + + public void onSelectedGrammarChanged() { + queryBox.setText(""); + outputPanel.clear(); + } + public void onInputLanguageChanged() { } public void onOutputLanguageChanged() { } public void onStartCategoryChanged() { } diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/TranslateApp.java b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/TranslateApp.java index ffb98cf72..ae7e73f4a 100644 --- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/TranslateApp.java +++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/client/TranslateApp.java @@ -38,31 +38,15 @@ public class TranslateApp implements EntryPoint { outputPanel.addStyleDependentName("working"); pgf.translate(getText(), new PGF.TranslateCallback() { - public void onResult (PGF.Translations translations) { + public void onResult (IterableJsArray translations) { outputPanel.clear(); outputPanel.removeStyleDependentName("working"); for (PGF.TranslationResult tr : translations.iterable()) { - if (tr.getTranslations() != null) - for (PGF.Translation t : tr.getTranslations().iterable()) { - HorizontalPanel hPanel = new HorizontalPanel(); - hPanel.addStyleName("my-translation-frame"); - VerticalPanel linsPanel = new VerticalPanel(); - linsPanel.addStyleName("my-translation-bar"); - hPanel.add(linsPanel); - HorizontalPanel btnPanel = new HorizontalPanel(); - btnPanel.addStyleName("my-translation-btns"); - btnPanel.setSpacing(4); - btnPanel.add(createAbsTreeButton(t.getTree())); - btnPanel.add(createAlignButton(t.getTree())); - hPanel.add(btnPanel); - hPanel.setCellHorizontalAlignment(btnPanel, - HasHorizontalAlignment.ALIGN_RIGHT); - outputPanel.add(hPanel); - - for (PGF.Linearization l : t.getLinearizations().iterable()) { - linsPanel.add(createTranslation(l.getTo(), t.getTree(), l.getText())); - } + if (tr.getTranslations() != null) { + for (PGF.Linearizations t : tr.getTranslations().iterable()) { + outputPanel.add(new LinearizationsPanel(pgf, t)); } + } if (tr.getTypeErrors() != null && tr.getTypeErrors().length > 0) { for (PGF.TcError error : tr.getTypeErrors()) { diff --git a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/public/Editor.css b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/public/Editor.css index 377365f87..073f0a14b 100644 --- a/src/ui/gwt/src/org/grammaticalframework/ui/gwt/public/Editor.css +++ b/src/ui/gwt/src/org/grammaticalframework/ui/gwt/public/Editor.css @@ -200,10 +200,6 @@ min-height: 94px; } -.my-ResultGrid { - margin: 1em; -} - .my-translations { margin-top: 1em; }