the grammars are now recognized by extension i.e. .pgf is grammar just like .php is a PHP script

This commit is contained in:
krasimir
2009-01-25 22:06:20 +00:00
parent 7dfc17cd98
commit 92bb971ea3
9 changed files with 78 additions and 67 deletions

View File

@@ -34,19 +34,12 @@ main = do stderrToFile logFile
cgiMain :: Cache PGF -> CGI CGIResult cgiMain :: Cache PGF -> CGI CGIResult
cgiMain cache = cgiMain cache =
do path <- pathInfo do path <- getVarWithDefault "SCRIPT_FILENAME" ""
jsonp <- serveResource cache $ filter (not . null) $ splitBy (=='/') path pgf <- liftIO $ readCache cache path
command <- liftM (maybe "grammar" (urlDecodeUnicode . UTF8.decodeString)) (getInput "command")
jsonp <- pgfMain pgf command
outputJSONP jsonp 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 -> String -> CGI JSValue
pgfMain pgf command = pgfMain pgf command =
case command of case command of

View File

@@ -2,6 +2,7 @@
<!-- Inherit the core Web Toolkit stuff. --> <!-- Inherit the core Web Toolkit stuff. -->
<inherits name="com.google.gwt.user.User" /> <inherits name="com.google.gwt.user.User" />
<inherits name="com.google.gwt.xml.XML" />
<inherits name="se.chalmers.cs.gf.gwt.PGF" /> <inherits name="se.chalmers.cs.gf.gwt.PGF" />

View File

@@ -2,6 +2,7 @@
<!-- Inherit the core Web Toolkit stuff. --> <!-- Inherit the core Web Toolkit stuff. -->
<inherits name="com.google.gwt.user.User" /> <inherits name="com.google.gwt.user.User" />
<inherits name="com.google.gwt.xml.XML" />
<inherits name="se.chalmers.cs.gf.gwt.PGF" /> <inherits name="se.chalmers.cs.gf.gwt.PGF" />

View File

@@ -21,7 +21,7 @@ import com.google.gwt.user.client.ui.Widget;
public class FridgeApp implements EntryPoint { public class FridgeApp implements EntryPoint {
protected static final String pgfBaseURL = "/pgf"; protected static final String pgfBaseURL = "/grammars";
protected PGFWrapper pgf; protected PGFWrapper pgf;
@@ -274,7 +274,7 @@ public class FridgeApp implements EntryPoint {
public void onModuleLoad() { public void onModuleLoad() {
statusPopup = new StatusPopup(); statusPopup = new StatusPopup();
pgf = new PGFWrapper(new PGF(pgfBaseURL)); pgf = new PGFWrapper(pgfBaseURL);
RootPanel.get().add(createUI()); RootPanel.get().add(createUI());
pgf.addSettingsListener(new MySettingsListener()); pgf.addSettingsListener(new MySettingsListener());
History.addHistoryListener(new MyHistoryListener()); History.addHistoryListener(new MyHistoryListener());

View File

@@ -9,34 +9,13 @@ import java.util.ArrayList;
public class PGF { public class PGF {
private String baseURL; public PGF () {
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<GrammarNames> { }
public static class GrammarNames extends IterableJsArray<GrammarName> {
protected GrammarNames() { }
} }
public static class GrammarName extends JavaScriptObject {
protected GrammarName() { }
public final native String getName() /*-{ return this.name; }-*/;
}
/* Grammar */ /* Grammar */
public JSONRequest grammar (String pgfName, final GrammarCallback callback) { public JSONRequest grammar (String pgfURL, final GrammarCallback callback) {
return sendGrammarRequest(pgfName, "grammar", null, callback); return sendGrammarRequest(pgfURL, "grammar", new ArrayList<Arg>(), callback);
} }
public interface GrammarCallback extends JSONCallback<Grammar> { } public interface GrammarCallback extends JSONCallback<Grammar> { }
@@ -61,14 +40,14 @@ public class PGF {
/* Translation */ /* 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) { final TranslateCallback callback) {
List<Arg> args = new ArrayList<Arg>(); List<Arg> args = new ArrayList<Arg>();
args.add(new Arg("input", input)); args.add(new Arg("input", input));
args.add(new Arg("from", fromLang)); args.add(new Arg("from", fromLang));
args.add(new Arg("cat", cat)); args.add(new Arg("cat", cat));
args.add(new Arg("to", toLang)); args.add(new Arg("to", toLang));
return sendGrammarRequest(pgfName, "translate", args, callback); return sendGrammarRequest(pgfURL, "translate", args, callback);
} }
public interface TranslateCallback extends JSONCallback<Translations> { } public interface TranslateCallback extends JSONCallback<Translations> { }
@@ -92,7 +71,7 @@ public class PGF {
* @param limit The number of suggestions to get. * @param limit The number of suggestions to get.
* If -1 is passed, all available suggestions are retrieved. * 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<Arg> args = new ArrayList<Arg>(); List<Arg> args = new ArrayList<Arg>();
args.add(new Arg("input", input)); args.add(new Arg("input", input));
args.add(new Arg("from", fromLang)); args.add(new Arg("from", fromLang));
@@ -100,7 +79,7 @@ public class PGF {
if (limit > 0) { if (limit > 0) {
args.add(new Arg("limit", limit)); args.add(new Arg("limit", limit));
} }
return sendGrammarRequest(pgfName, "complete", args, callback); return sendGrammarRequest(pgfURL, "complete", args, callback);
} }
public interface CompleteCallback extends JSONCallback<Completions> { } public interface CompleteCallback extends JSONCallback<Completions> { }
@@ -118,12 +97,12 @@ public class PGF {
/* Parsing */ /* 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<Arg> args = new ArrayList<Arg>(); List<Arg> args = new ArrayList<Arg>();
args.add(new Arg("input", input)); args.add(new Arg("input", input));
args.add(new Arg("from", fromLang)); args.add(new Arg("from", fromLang));
args.add(new Arg("cat", cat)); args.add(new Arg("cat", cat));
return sendGrammarRequest(pgfName, "parse", args, callback); return sendGrammarRequest(pgfURL, "parse", args, callback);
} }
public interface ParseCallback extends JSONCallback<ParseResults> { } public interface ParseCallback extends JSONCallback<ParseResults> { }
@@ -141,8 +120,9 @@ public class PGF {
/* Common */ /* Common */
public <T extends JavaScriptObject> JSONRequest sendGrammarRequest(String pgfName, String resource, List<Arg> args, final JSONCallback<T> callback) { public <T extends JavaScriptObject> JSONRequest sendGrammarRequest(String pgfURL, String resource, List<Arg> args, final JSONCallback<T> callback) {
return JSONRequestBuilder.sendRequest(baseURL + "/" + pgfName + "/" + resource, args, callback); args.add(new Arg("command", resource));
return JSONRequestBuilder.sendRequest(pgfURL, args, callback);
} }
} }

View File

@@ -5,10 +5,13 @@ import java.util.Collection;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import com.google.gwt.http.client.*;
import com.google.gwt.xml.client.*;
public class PGFWrapper { public class PGFWrapper {
private String baseURL;
private PGF pgf; private PGF pgf;
private String pgfName = null; private String pgfName = null;
@@ -36,28 +39,61 @@ public class PGFWrapper {
private List<SettingsListener> listeners = new LinkedList<SettingsListener>(); private List<SettingsListener> listeners = new LinkedList<SettingsListener>();
public PGFWrapper(PGF pgf) {
this.pgf = pgf; public PGFWrapper(String baseURL) {
this.baseURL = baseURL;
this.pgf = new PGF();
} }
public void updateAvailableGrammars() { public void updateAvailableGrammars() {
pgf.listGrammars(new PGF.GrammarNamesCallback() { String url = baseURL+"/grammars.xml";
public void onResult(PGF.GrammarNames grammarNames) { RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, URL.encode(url));
grammars = new ArrayList<String>(); try
for (PGF.GrammarName grammarName : grammarNames.iterable()) { {
grammars.add(grammarName.getName()); Request request = builder.sendRequest(null, new RequestCallback() {
public void onResponseReceived(Request request, Response response)
{
if (200 == response.getStatusCode())
{
grammars = new ArrayList<String>();
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(Request request, Throwable e)
public void onError (Throwable e) { {
fireSettingsError("Error getting grammar list", e); fireSettingsError("Error getting grammar list", e);
} }
}); });
}
catch (RequestException e)
{
fireSettingsError("Couldn't connect to server", e);
}
} }
protected void updateSelectedGrammar () { protected void updateSelectedGrammar () {
clearCachedInfo(); clearCachedInfo();
pgf.grammar(pgfName, new PGF.GrammarCallback() { pgf.grammar(baseURL+"/"+pgfName, new PGF.GrammarCallback() {
public void onResult(PGF.Grammar grammar) { public void onResult(PGF.Grammar grammar) {
userLanguage = grammar.getUserLanguage(); userLanguage = grammar.getUserLanguage();
languages = new LinkedHashMap<String,PGF.Language>(); languages = new LinkedHashMap<String,PGF.Language>();
@@ -83,15 +119,15 @@ public class PGFWrapper {
// //
public JSONRequest translate (String input, final PGF.TranslateCallback callback) { 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) { 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) { 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);
} }
// //

View File

@@ -14,7 +14,7 @@ import com.google.gwt.user.client.ui.Widget;
public class TranslateApp implements EntryPoint { public class TranslateApp implements EntryPoint {
protected static final String pgfBaseURL = "/pgf"; protected static final String pgfBaseURL = "/grammars";
protected PGFWrapper pgf; protected PGFWrapper pgf;
@@ -197,7 +197,7 @@ public class TranslateApp implements EntryPoint {
public void onModuleLoad() { public void onModuleLoad() {
statusPopup = new StatusPopup(); statusPopup = new StatusPopup();
pgf = new PGFWrapper(new PGF(pgfBaseURL)); pgf = new PGFWrapper(pgfBaseURL);
RootPanel.get().add(createUI()); RootPanel.get().add(createUI());
pgf.addSettingsListener(new MySettingsListener()); pgf.addSettingsListener(new MySettingsListener());
History.addHistoryListener(new MyHistoryListener()); History.addHistoryListener(new MyHistoryListener());

View File

@@ -47,7 +47,7 @@ $HTTP["host"] =~ "^(.*)$" {
} }
fastcgi.debug = 0 fastcgi.debug = 0
fastcgi.server = ( "/pgf" => fastcgi.server = ( ".pgf" =>
(( ((
"socket" => basedir + "/" + var.PID + "-pgf.socket", "socket" => basedir + "/" + var.PID + "-pgf.socket",
"bin-path" => basedir + "/pgf.fcgi", "bin-path" => basedir + "/pgf.fcgi",

View File

@@ -6,7 +6,7 @@ license: GPL
license-file: LICENSE license-file: LICENSE
synopsis: FastCGI Server for Grammatical Framework synopsis: FastCGI Server for Grammatical Framework
executable pgf.fcgi executable pgf-server
build-depends: base, build-depends: base,
old-time, old-time,
directory, directory,