From fe74414462e7315a22d456284bb909ac26e150a2 Mon Sep 17 00:00:00 2001 From: krasimir Date: Sun, 25 Jan 2009 22:06:20 +0000 Subject: [PATCH] the grammars are now recognized by extension i.e. .pgf is grammar just like .php is a PHP script --- src/server/PGFService.hs | 15 ++-- .../se/chalmers/cs/gf/gwt/FridgeApp.gwt.xml | 1 + .../chalmers/cs/gf/gwt/TranslateApp.gwt.xml | 1 + .../chalmers/cs/gf/gwt/client/FridgeApp.java | 4 +- .../src/se/chalmers/cs/gf/gwt/client/PGF.java | 44 ++++-------- .../chalmers/cs/gf/gwt/client/PGFWrapper.java | 72 ++++++++++++++----- .../cs/gf/gwt/client/TranslateApp.java | 4 +- src/server/lighttpd.conf | 2 +- src/server/pgf-server.cabal | 2 +- 9 files changed, 78 insertions(+), 67 deletions(-) diff --git a/src/server/PGFService.hs b/src/server/PGFService.hs index 070f83b49..576ba7a30 100644 --- a/src/server/PGFService.hs +++ b/src/server/PGFService.hs @@ -34,19 +34,12 @@ main = do stderrToFile logFile cgiMain :: Cache PGF -> CGI CGIResult cgiMain cache = - do path <- pathInfo - jsonp <- serveResource cache $ filter (not . null) $ splitBy (=='/') path + do path <- getVarWithDefault "SCRIPT_FILENAME" "" + pgf <- liftIO $ readCache cache path + command <- liftM (maybe "grammar" (urlDecodeUnicode . UTF8.decodeString)) (getInput "command") + jsonp <- pgfMain pgf command outputJSONP jsonp -serveResource :: Cache PGF -> [String] -> CGI JSValue -serveResource cache resource = - case resource of - [] -> liftIO doListGrammars - [file] -> serveResource cache [file,"grammar"] - [file,command] -> do pgf <- liftIO $ readCache cache $ cleanFilePath file - pgfMain pgf command - _ -> throwCGIError 400 "Unknown resource" ["Unknown resource: " ++ show resource] - pgfMain :: PGF -> String -> CGI JSValue pgfMain pgf command = case command of diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/FridgeApp.gwt.xml b/src/server/gwt/src/se/chalmers/cs/gf/gwt/FridgeApp.gwt.xml index c1a7fbf0e..6039c318f 100644 --- a/src/server/gwt/src/se/chalmers/cs/gf/gwt/FridgeApp.gwt.xml +++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/FridgeApp.gwt.xml @@ -2,6 +2,7 @@ + diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/TranslateApp.gwt.xml b/src/server/gwt/src/se/chalmers/cs/gf/gwt/TranslateApp.gwt.xml index 3f35d1bef..80dce7a5d 100644 --- a/src/server/gwt/src/se/chalmers/cs/gf/gwt/TranslateApp.gwt.xml +++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/TranslateApp.gwt.xml @@ -2,6 +2,7 @@ + diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/FridgeApp.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/FridgeApp.java index 0d511e921..6938fae49 100644 --- a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/FridgeApp.java +++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/FridgeApp.java @@ -21,7 +21,7 @@ import com.google.gwt.user.client.ui.Widget; public class FridgeApp implements EntryPoint { - protected static final String pgfBaseURL = "/pgf"; + protected static final String pgfBaseURL = "/grammars"; protected PGFWrapper pgf; @@ -274,7 +274,7 @@ public class FridgeApp implements EntryPoint { public void onModuleLoad() { statusPopup = new StatusPopup(); - pgf = new PGFWrapper(new PGF(pgfBaseURL)); + pgf = new PGFWrapper(pgfBaseURL); RootPanel.get().add(createUI()); pgf.addSettingsListener(new MySettingsListener()); History.addHistoryListener(new MyHistoryListener()); 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 159f41b89..9d62c2ea7 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 @@ -9,34 +9,13 @@ import java.util.ArrayList; public class PGF { - private String baseURL; - - public PGF (String baseURL) { - this.baseURL = baseURL; - } - - /* List grammars */ - - public JSONRequest listGrammars (final GrammarNamesCallback callback) { - return JSONRequestBuilder.sendRequest(baseURL + "/", null, callback); - } - - public interface GrammarNamesCallback extends JSONCallback { } - - public static class GrammarNames extends IterableJsArray { - protected GrammarNames() { } + public PGF () { } - public static class GrammarName extends JavaScriptObject { - protected GrammarName() { } - - public final native String getName() /*-{ return this.name; }-*/; - } - /* Grammar */ - public JSONRequest grammar (String pgfName, final GrammarCallback callback) { - return sendGrammarRequest(pgfName, "grammar", null, callback); + public JSONRequest grammar (String pgfURL, final GrammarCallback callback) { + return sendGrammarRequest(pgfURL, "grammar", new ArrayList(), callback); } public interface GrammarCallback extends JSONCallback { } @@ -61,14 +40,14 @@ public class PGF { /* Translation */ - public JSONRequest translate (String pgfName, String input, String fromLang, String cat, String toLang, + public JSONRequest translate (String pgfURL, String input, String fromLang, String cat, String toLang, final TranslateCallback callback) { List args = new ArrayList(); args.add(new Arg("input", input)); args.add(new Arg("from", fromLang)); args.add(new Arg("cat", cat)); args.add(new Arg("to", toLang)); - return sendGrammarRequest(pgfName, "translate", args, callback); + return sendGrammarRequest(pgfURL, "translate", args, callback); } public interface TranslateCallback extends JSONCallback { } @@ -92,7 +71,7 @@ public class PGF { * @param limit The number of suggestions to get. * If -1 is passed, all available suggestions are retrieved. */ - public JSONRequest complete (String pgfName, String input, String fromLang, String cat, int limit, final CompleteCallback callback) { + public JSONRequest complete (String pgfURL, String input, String fromLang, String cat, int limit, final CompleteCallback callback) { List args = new ArrayList(); args.add(new Arg("input", input)); args.add(new Arg("from", fromLang)); @@ -100,7 +79,7 @@ public class PGF { if (limit > 0) { args.add(new Arg("limit", limit)); } - return sendGrammarRequest(pgfName, "complete", args, callback); + return sendGrammarRequest(pgfURL, "complete", args, callback); } public interface CompleteCallback extends JSONCallback { } @@ -118,12 +97,12 @@ public class PGF { /* Parsing */ - public JSONRequest parse (String pgfName, String input, String fromLang, String cat, final ParseCallback callback) { + public JSONRequest parse (String pgfURL, String input, String fromLang, String cat, final ParseCallback callback) { List args = new ArrayList(); args.add(new Arg("input", input)); args.add(new Arg("from", fromLang)); args.add(new Arg("cat", cat)); - return sendGrammarRequest(pgfName, "parse", args, callback); + return sendGrammarRequest(pgfURL, "parse", args, callback); } public interface ParseCallback extends JSONCallback { } @@ -141,8 +120,9 @@ public class PGF { /* Common */ - public JSONRequest sendGrammarRequest(String pgfName, String resource, List args, final JSONCallback callback) { - return JSONRequestBuilder.sendRequest(baseURL + "/" + pgfName + "/" + resource, args, callback); + public JSONRequest sendGrammarRequest(String pgfURL, String resource, List args, final JSONCallback callback) { + args.add(new Arg("command", resource)); + return JSONRequestBuilder.sendRequest(pgfURL, args, callback); } } \ No newline at end of file diff --git a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/PGFWrapper.java b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/PGFWrapper.java index 9f63c21f3..40d766c10 100644 --- a/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/PGFWrapper.java +++ b/src/server/gwt/src/se/chalmers/cs/gf/gwt/client/PGFWrapper.java @@ -5,10 +5,13 @@ import java.util.Collection; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; - +import com.google.gwt.http.client.*; +import com.google.gwt.xml.client.*; public class PGFWrapper { + private String baseURL; + private PGF pgf; private String pgfName = null; @@ -36,28 +39,61 @@ public class PGFWrapper { private List listeners = new LinkedList(); - public PGFWrapper(PGF pgf) { - this.pgf = pgf; + + public PGFWrapper(String baseURL) { + this.baseURL = baseURL; + this.pgf = new PGF(); } public void updateAvailableGrammars() { - pgf.listGrammars(new PGF.GrammarNamesCallback() { - public void onResult(PGF.GrammarNames grammarNames) { - grammars = new ArrayList(); - for (PGF.GrammarName grammarName : grammarNames.iterable()) { - grammars.add(grammarName.getName()); + String url = baseURL+"/grammars.xml"; + RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(url)); + try + { + Request request = builder.sendRequest(null, new RequestCallback() { + public void onResponseReceived(Request request, Response response) + { + if (200 == response.getStatusCode()) + { + grammars = new ArrayList(); + try + { + Document grammarsDoc = XMLParser.parse(response.getText()); + + NodeList grammarsList = grammarsDoc.getElementsByTagName("grammar"); + for (int i = 0; i < grammarsList.getLength(); i++) + { + Node grammarNode = grammarsList.item(i); + grammars.add(((Element)grammarNode).getAttribute("name")); + } + } + catch (DOMException e) + { + fireSettingsError("Could not parse XML document.", e); + } + fireAvailableGrammarsChanged(); + } + else + { + fireSettingsError("Error getting grammar list", null); + } } - fireAvailableGrammarsChanged(); - } - public void onError (Throwable e) { - fireSettingsError("Error getting grammar list", e); - } - }); + + public void onError(Request request, Throwable e) + { + fireSettingsError("Error getting grammar list", e); + } + }); + } + catch (RequestException e) + { + fireSettingsError("Couldn't connect to server", e); + } } protected void updateSelectedGrammar () { clearCachedInfo(); - pgf.grammar(pgfName, new PGF.GrammarCallback() { + pgf.grammar(baseURL+"/"+pgfName, new PGF.GrammarCallback() { public void onResult(PGF.Grammar grammar) { userLanguage = grammar.getUserLanguage(); languages = new LinkedHashMap(); @@ -83,15 +119,15 @@ public class PGFWrapper { // public JSONRequest translate (String input, final PGF.TranslateCallback callback) { - return pgf.translate(pgfName, input, inputLanguage, cat, outputLanguage, callback); + return pgf.translate(baseURL+"/"+pgfName, input, inputLanguage, cat, outputLanguage, callback); } public JSONRequest complete (String input, int limit, final PGF.CompleteCallback callback) { - return pgf.complete(pgfName, input, inputLanguage, cat, limit, callback); + return pgf.complete(baseURL+"/"+pgfName, input, inputLanguage, cat, limit, callback); } public JSONRequest parse (String input, final PGF.ParseCallback callback) { - return pgf.parse(pgfName, input, inputLanguage, cat, callback); + return pgf.parse(baseURL+"/"+pgfName, input, inputLanguage, cat, callback); } // 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 8052f727b..2370d484c 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 @@ -14,7 +14,7 @@ import com.google.gwt.user.client.ui.Widget; public class TranslateApp implements EntryPoint { - protected static final String pgfBaseURL = "/pgf"; + protected static final String pgfBaseURL = "/grammars"; protected PGFWrapper pgf; @@ -197,7 +197,7 @@ public class TranslateApp implements EntryPoint { public void onModuleLoad() { statusPopup = new StatusPopup(); - pgf = new PGFWrapper(new PGF(pgfBaseURL)); + pgf = new PGFWrapper(pgfBaseURL); RootPanel.get().add(createUI()); pgf.addSettingsListener(new MySettingsListener()); History.addHistoryListener(new MyHistoryListener()); diff --git a/src/server/lighttpd.conf b/src/server/lighttpd.conf index 0c58df805..09f73f102 100644 --- a/src/server/lighttpd.conf +++ b/src/server/lighttpd.conf @@ -47,7 +47,7 @@ $HTTP["host"] =~ "^(.*)$" { } fastcgi.debug = 0 -fastcgi.server = ( "/pgf" => +fastcgi.server = ( ".pgf" => (( "socket" => basedir + "/" + var.PID + "-pgf.socket", "bin-path" => basedir + "/pgf.fcgi", diff --git a/src/server/pgf-server.cabal b/src/server/pgf-server.cabal index 5e6301338..076a198b1 100644 --- a/src/server/pgf-server.cabal +++ b/src/server/pgf-server.cabal @@ -6,7 +6,7 @@ license: GPL license-file: LICENSE synopsis: FastCGI Server for Grammatical Framework -executable pgf.fcgi +executable pgf-server build-depends: base, old-time, directory,