Implemented a meta parser that looks for a language prefix and picks the right parser.
git-svn-id: http://google-refine.googlecode.com/svn/trunk@159 7d457c2a-affb-35e4-300a-418c747d4874
This commit is contained in:
parent
acfa19a683
commit
bc9bc54d30
@ -14,7 +14,7 @@ import com.metaweb.gridworks.browsing.FilteredRows;
|
|||||||
import com.metaweb.gridworks.browsing.filters.ExpressionEqualRowFilter;
|
import com.metaweb.gridworks.browsing.filters.ExpressionEqualRowFilter;
|
||||||
import com.metaweb.gridworks.browsing.filters.RowFilter;
|
import com.metaweb.gridworks.browsing.filters.RowFilter;
|
||||||
import com.metaweb.gridworks.expr.Evaluable;
|
import com.metaweb.gridworks.expr.Evaluable;
|
||||||
import com.metaweb.gridworks.gel.Parser;
|
import com.metaweb.gridworks.expr.MetaParser;
|
||||||
import com.metaweb.gridworks.model.Project;
|
import com.metaweb.gridworks.model.Project;
|
||||||
|
|
||||||
public class ListFacet implements Facet {
|
public class ListFacet implements Facet {
|
||||||
@ -74,7 +74,7 @@ public class ListFacet implements Facet {
|
|||||||
_columnName = o.getString("columnName");
|
_columnName = o.getString("columnName");
|
||||||
_cellIndex = project.columnModel.getColumnByName(_columnName).getCellIndex();
|
_cellIndex = project.columnModel.getColumnByName(_columnName).getCellIndex();
|
||||||
|
|
||||||
_eval = new Parser(_expression).getExpression();
|
_eval = MetaParser.parse(_expression);
|
||||||
_selection.clear();
|
_selection.clear();
|
||||||
|
|
||||||
JSONArray a = o.getJSONArray("selection");
|
JSONArray a = o.getJSONArray("selection");
|
||||||
|
@ -10,7 +10,7 @@ import com.metaweb.gridworks.browsing.FilteredRows;
|
|||||||
import com.metaweb.gridworks.browsing.filters.ExpressionNumberComparisonRowFilter;
|
import com.metaweb.gridworks.browsing.filters.ExpressionNumberComparisonRowFilter;
|
||||||
import com.metaweb.gridworks.browsing.filters.RowFilter;
|
import com.metaweb.gridworks.browsing.filters.RowFilter;
|
||||||
import com.metaweb.gridworks.expr.Evaluable;
|
import com.metaweb.gridworks.expr.Evaluable;
|
||||||
import com.metaweb.gridworks.gel.Parser;
|
import com.metaweb.gridworks.expr.MetaParser;
|
||||||
import com.metaweb.gridworks.model.Column;
|
import com.metaweb.gridworks.model.Column;
|
||||||
import com.metaweb.gridworks.model.Project;
|
import com.metaweb.gridworks.model.Project;
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ public class RangeFacet implements Facet {
|
|||||||
_columnName = o.getString("columnName");
|
_columnName = o.getString("columnName");
|
||||||
_cellIndex = project.columnModel.getColumnByName(_columnName).getCellIndex();
|
_cellIndex = project.columnModel.getColumnByName(_columnName).getCellIndex();
|
||||||
|
|
||||||
_eval = new Parser(_expression).getExpression();
|
_eval = MetaParser.parse(_expression);
|
||||||
|
|
||||||
_mode = o.getString("mode");
|
_mode = o.getString("mode");
|
||||||
if ("min".equals(_mode)) {
|
if ("min".equals(_mode)) {
|
||||||
|
@ -16,8 +16,8 @@ import com.metaweb.gridworks.expr.EvalError;
|
|||||||
import com.metaweb.gridworks.expr.Evaluable;
|
import com.metaweb.gridworks.expr.Evaluable;
|
||||||
import com.metaweb.gridworks.expr.ExpressionUtils;
|
import com.metaweb.gridworks.expr.ExpressionUtils;
|
||||||
import com.metaweb.gridworks.expr.HasFields;
|
import com.metaweb.gridworks.expr.HasFields;
|
||||||
|
import com.metaweb.gridworks.expr.MetaParser;
|
||||||
import com.metaweb.gridworks.expr.ParsingException;
|
import com.metaweb.gridworks.expr.ParsingException;
|
||||||
import com.metaweb.gridworks.gel.Parser;
|
|
||||||
import com.metaweb.gridworks.model.Cell;
|
import com.metaweb.gridworks.model.Cell;
|
||||||
import com.metaweb.gridworks.model.Project;
|
import com.metaweb.gridworks.model.Project;
|
||||||
import com.metaweb.gridworks.model.Row;
|
import com.metaweb.gridworks.model.Row;
|
||||||
@ -50,7 +50,7 @@ public class PreviewExpressionCommand extends Command {
|
|||||||
writer.object();
|
writer.object();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Evaluable eval = new Parser(expression).getExpression();
|
Evaluable eval = MetaParser.parse(expression);
|
||||||
|
|
||||||
writer.key("code"); writer.value("ok");
|
writer.key("code"); writer.value("ok");
|
||||||
writer.key("results"); writer.array();
|
writer.key("results"); writer.array();
|
||||||
|
69
src/main/java/com/metaweb/gridworks/expr/MetaParser.java
Normal file
69
src/main/java/com/metaweb/gridworks/expr/MetaParser.java
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
package com.metaweb.gridworks.expr;
|
||||||
|
|
||||||
|
import com.metaweb.gridworks.gel.Parser;
|
||||||
|
|
||||||
|
abstract public class MetaParser {
|
||||||
|
static public Evaluable parse(String s) throws ParsingException {
|
||||||
|
String language = "gel";
|
||||||
|
|
||||||
|
int colon = s.indexOf(':');
|
||||||
|
if (colon >= 0) {
|
||||||
|
language = s.substring(0, colon);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("jython".equalsIgnoreCase(language)) {
|
||||||
|
return parseJython(s.substring(colon + 1));
|
||||||
|
} else if ("clojure".equalsIgnoreCase(language)) {
|
||||||
|
return parseClojure(s.substring(colon + 1));
|
||||||
|
} else if ("gel".equalsIgnoreCase(language)) {
|
||||||
|
return parseGEL(s.substring(colon + 1));
|
||||||
|
} else {
|
||||||
|
return parseGEL(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static protected Evaluable parseGEL(String s) throws ParsingException {
|
||||||
|
Parser parser = new Parser(s);
|
||||||
|
|
||||||
|
return parser.getExpression();
|
||||||
|
}
|
||||||
|
|
||||||
|
static protected Evaluable parseJython(String s) throws ParsingException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
static protected Evaluable parseClojure(String s) throws ParsingException {
|
||||||
|
|
||||||
|
/*
|
||||||
|
try {
|
||||||
|
IFn fn = (IFn) clojure.lang.Compiler.load(new StringReader(
|
||||||
|
"(fn [value row cells] " + s + ")"
|
||||||
|
));
|
||||||
|
|
||||||
|
return new Evaluable() {
|
||||||
|
final private IFn _fn;
|
||||||
|
|
||||||
|
public Evaluable init(IFn fn) {
|
||||||
|
_fn = fn;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object evaluate(Properties bindings) {
|
||||||
|
try {
|
||||||
|
return _fn.invoke(
|
||||||
|
bindings.get("value"),
|
||||||
|
bindings.get("row"),
|
||||||
|
bindings.get("cells")
|
||||||
|
);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return new EvalError(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.init(fn);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return new ParsingException(e);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -13,7 +13,7 @@ import com.metaweb.gridworks.browsing.FilteredRows;
|
|||||||
import com.metaweb.gridworks.browsing.RowVisitor;
|
import com.metaweb.gridworks.browsing.RowVisitor;
|
||||||
import com.metaweb.gridworks.expr.Evaluable;
|
import com.metaweb.gridworks.expr.Evaluable;
|
||||||
import com.metaweb.gridworks.expr.ExpressionUtils;
|
import com.metaweb.gridworks.expr.ExpressionUtils;
|
||||||
import com.metaweb.gridworks.gel.Parser;
|
import com.metaweb.gridworks.expr.MetaParser;
|
||||||
import com.metaweb.gridworks.history.Change;
|
import com.metaweb.gridworks.history.Change;
|
||||||
import com.metaweb.gridworks.history.HistoryEntry;
|
import com.metaweb.gridworks.history.HistoryEntry;
|
||||||
import com.metaweb.gridworks.model.AbstractOperation;
|
import com.metaweb.gridworks.model.AbstractOperation;
|
||||||
@ -113,7 +113,7 @@ public class ColumnAdditionOperation extends EngineDependentOperation {
|
|||||||
protected RowVisitor createRowVisitor(Project project, List<CellAtRow> cellsAtRows) throws Exception {
|
protected RowVisitor createRowVisitor(Project project, List<CellAtRow> cellsAtRows) throws Exception {
|
||||||
Column column = project.columnModel.getColumnByName(_baseColumnName);
|
Column column = project.columnModel.getColumnByName(_baseColumnName);
|
||||||
|
|
||||||
Evaluable eval = new Parser(_expression).getExpression();
|
Evaluable eval = MetaParser.parse(_expression);
|
||||||
Properties bindings = ExpressionUtils.createBindings(project);
|
Properties bindings = ExpressionUtils.createBindings(project);
|
||||||
|
|
||||||
return new RowVisitor() {
|
return new RowVisitor() {
|
||||||
|
@ -10,7 +10,7 @@ import org.json.JSONWriter;
|
|||||||
import com.metaweb.gridworks.browsing.RowVisitor;
|
import com.metaweb.gridworks.browsing.RowVisitor;
|
||||||
import com.metaweb.gridworks.expr.Evaluable;
|
import com.metaweb.gridworks.expr.Evaluable;
|
||||||
import com.metaweb.gridworks.expr.ExpressionUtils;
|
import com.metaweb.gridworks.expr.ExpressionUtils;
|
||||||
import com.metaweb.gridworks.gel.Parser;
|
import com.metaweb.gridworks.expr.MetaParser;
|
||||||
import com.metaweb.gridworks.model.AbstractOperation;
|
import com.metaweb.gridworks.model.AbstractOperation;
|
||||||
import com.metaweb.gridworks.model.Cell;
|
import com.metaweb.gridworks.model.Cell;
|
||||||
import com.metaweb.gridworks.model.Column;
|
import com.metaweb.gridworks.model.Column;
|
||||||
@ -64,7 +64,7 @@ public class TextTransformOperation extends EngineDependentMassCellOperation {
|
|||||||
protected RowVisitor createRowVisitor(Project project, List<CellChange> cellChanges) throws Exception {
|
protected RowVisitor createRowVisitor(Project project, List<CellChange> cellChanges) throws Exception {
|
||||||
Column column = project.columnModel.getColumnByName(_columnName);
|
Column column = project.columnModel.getColumnByName(_columnName);
|
||||||
|
|
||||||
Evaluable eval = new Parser(_expression).getExpression();
|
Evaluable eval = MetaParser.parse(_expression);
|
||||||
Properties bindings = ExpressionUtils.createBindings(project);
|
Properties bindings = ExpressionUtils.createBindings(project);
|
||||||
|
|
||||||
return new RowVisitor() {
|
return new RowVisitor() {
|
||||||
|
Loading…
Reference in New Issue
Block a user