diff --git a/src/main/java/com/metaweb/gridlock/browsing/ConjunctiveFilteredRows.java b/src/main/java/com/metaweb/gridlock/browsing/ConjunctiveFilteredRows.java index 1baef4a74..a4da69b81 100644 --- a/src/main/java/com/metaweb/gridlock/browsing/ConjunctiveFilteredRows.java +++ b/src/main/java/com/metaweb/gridlock/browsing/ConjunctiveFilteredRows.java @@ -21,14 +21,14 @@ public class ConjunctiveFilteredRows implements FilteredRows { boolean ok = true; for (RowFilter rowFilter : _rowFilters) { - if (!rowFilter.filterRow(row)) { + if (!rowFilter.filterRow(project, i, row)) { ok = false; break; } } if (ok) { - visitor.visit(i, row); + visitor.visit(project, i, row); } } } diff --git a/src/main/java/com/metaweb/gridlock/browsing/accessors/DecoratedValue.java b/src/main/java/com/metaweb/gridlock/browsing/DecoratedValue.java similarity index 85% rename from src/main/java/com/metaweb/gridlock/browsing/accessors/DecoratedValue.java rename to src/main/java/com/metaweb/gridlock/browsing/DecoratedValue.java index bfbb52738..5dc787842 100644 --- a/src/main/java/com/metaweb/gridlock/browsing/accessors/DecoratedValue.java +++ b/src/main/java/com/metaweb/gridlock/browsing/DecoratedValue.java @@ -1,4 +1,4 @@ -package com.metaweb.gridlock.browsing.accessors; +package com.metaweb.gridlock.browsing; import java.util.Properties; diff --git a/src/main/java/com/metaweb/gridlock/browsing/RowVisitor.java b/src/main/java/com/metaweb/gridlock/browsing/RowVisitor.java index 3e2d1a491..b2deb1d72 100644 --- a/src/main/java/com/metaweb/gridlock/browsing/RowVisitor.java +++ b/src/main/java/com/metaweb/gridlock/browsing/RowVisitor.java @@ -1,8 +1,9 @@ package com.metaweb.gridlock.browsing; +import com.metaweb.gridlock.model.Project; import com.metaweb.gridlock.model.Row; public interface RowVisitor { - public boolean visit(int rowIndex, Row row); + public boolean visit(Project project, int rowIndex, Row row); } diff --git a/src/main/java/com/metaweb/gridlock/browsing/accessors/CellAccessor.java b/src/main/java/com/metaweb/gridlock/browsing/accessors/CellAccessor.java deleted file mode 100644 index 8ada172b8..000000000 --- a/src/main/java/com/metaweb/gridlock/browsing/accessors/CellAccessor.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.metaweb.gridlock.browsing.accessors; - -import com.metaweb.gridlock.model.Cell; - -public interface CellAccessor { - public Object[] get(Cell cell, boolean decorated); -} diff --git a/src/main/java/com/metaweb/gridlock/browsing/accessors/ReconFeatureCellAccessor.java b/src/main/java/com/metaweb/gridlock/browsing/accessors/ReconFeatureCellAccessor.java deleted file mode 100644 index 6dd48bec1..000000000 --- a/src/main/java/com/metaweb/gridlock/browsing/accessors/ReconFeatureCellAccessor.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.metaweb.gridlock.browsing.accessors; - -import com.metaweb.gridlock.model.Cell; - -public class ReconFeatureCellAccessor implements CellAccessor { - final protected String _name; - - public ReconFeatureCellAccessor(String name) { - _name = name; - } - - @Override - public Object[] get(Cell cell, boolean decorated) { - if (cell.recon != null) { - return new Object[] { cell.recon.features.get(_name) }; - } - return null; - } -} diff --git a/src/main/java/com/metaweb/gridlock/browsing/accessors/ReconTypeAccessor.java b/src/main/java/com/metaweb/gridlock/browsing/accessors/ReconTypeAccessor.java deleted file mode 100644 index 962417de6..000000000 --- a/src/main/java/com/metaweb/gridlock/browsing/accessors/ReconTypeAccessor.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.metaweb.gridlock.browsing.accessors; - -import com.metaweb.gridlock.model.Cell; -import com.metaweb.gridlock.model.ReconCandidate; - -public class ReconTypeAccessor implements CellAccessor { - @Override - public Object[] get(Cell cell, boolean decorated) { - if (cell.recon != null && cell.recon.candidates.size() > 0) { - ReconCandidate c = cell.recon.candidates.get(0); - return c.typeIDs; - } - return null; - } -} diff --git a/src/main/java/com/metaweb/gridlock/browsing/accessors/ValueCellAccessor.java b/src/main/java/com/metaweb/gridlock/browsing/accessors/ValueCellAccessor.java deleted file mode 100644 index 977720350..000000000 --- a/src/main/java/com/metaweb/gridlock/browsing/accessors/ValueCellAccessor.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.metaweb.gridlock.browsing.accessors; - -import com.metaweb.gridlock.model.Cell; - -public class ValueCellAccessor implements CellAccessor { - @Override - public Object[] get(Cell cell, boolean decorated) { - if (cell.value != null) { - return new Object[] { cell.value }; - } - return null; - } -} diff --git a/src/main/java/com/metaweb/gridlock/browsing/facets/CellAccessorNominalRowGrouper.java b/src/main/java/com/metaweb/gridlock/browsing/facets/CellAccessorNominalRowGrouper.java deleted file mode 100644 index bd86cc5b5..000000000 --- a/src/main/java/com/metaweb/gridlock/browsing/facets/CellAccessorNominalRowGrouper.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.metaweb.gridlock.browsing.facets; - -import java.util.HashMap; -import java.util.Map; - -import com.metaweb.gridlock.browsing.RowVisitor; -import com.metaweb.gridlock.browsing.accessors.CellAccessor; -import com.metaweb.gridlock.browsing.accessors.DecoratedValue; -import com.metaweb.gridlock.model.Cell; -import com.metaweb.gridlock.model.Row; - -public class CellAccessorNominalRowGrouper implements RowVisitor { - final protected CellAccessor _accessor; - final protected int _cellIndex; - - final public Map choices = new HashMap(); - - public CellAccessorNominalRowGrouper(CellAccessor accessor, int cellIndex) { - _accessor = accessor; - _cellIndex = cellIndex; - } - - @Override - public boolean visit(int rowIndex, Row row) { - if (_cellIndex < row.cells.size()) { - Cell cell = row.cells.get(_cellIndex); - if (cell != null) { - Object[] values = _accessor.get(cell, true); - if (values != null && values.length > 0) { - for (Object value : values) { - if (value != null) { - DecoratedValue dValue = - value instanceof DecoratedValue ? - (DecoratedValue) value : - new DecoratedValue(value, value.toString()); - - Object v = dValue.value; - if (choices.containsKey(v)) { - choices.get(v).count++; - } else { - NominalFacetChoice choice = new NominalFacetChoice(dValue); - choice.count = 1; - - choices.put(v, choice); - } - } - } - } - } - } - return false; - } -} diff --git a/src/main/java/com/metaweb/gridlock/browsing/facets/ExpressionNominalRowGrouper.java b/src/main/java/com/metaweb/gridlock/browsing/facets/ExpressionNominalRowGrouper.java index 233aa851f..c146a3e2f 100644 --- a/src/main/java/com/metaweb/gridlock/browsing/facets/ExpressionNominalRowGrouper.java +++ b/src/main/java/com/metaweb/gridlock/browsing/facets/ExpressionNominalRowGrouper.java @@ -4,10 +4,11 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; +import com.metaweb.gridlock.browsing.DecoratedValue; import com.metaweb.gridlock.browsing.RowVisitor; -import com.metaweb.gridlock.browsing.accessors.DecoratedValue; import com.metaweb.gridlock.expr.Evaluable; import com.metaweb.gridlock.model.Cell; +import com.metaweb.gridlock.model.Project; import com.metaweb.gridlock.model.Row; public class ExpressionNominalRowGrouper implements RowVisitor { @@ -22,13 +23,14 @@ public class ExpressionNominalRowGrouper implements RowVisitor { } @Override - public boolean visit(int rowIndex, Row row) { + public boolean visit(Project project, int rowIndex, Row row) { if (_cellIndex < row.cells.size()) { Cell cell = row.cells.get(_cellIndex); if (cell != null) { Properties bindings = new Properties(); - bindings.put("this", cell); + bindings.put("project", project); + bindings.put("cell", cell); bindings.put("value", cell.value); Object value = _evaluable.evaluate(bindings); diff --git a/src/main/java/com/metaweb/gridlock/browsing/facets/ListFacet.java b/src/main/java/com/metaweb/gridlock/browsing/facets/ListFacet.java index a9f4cf05d..02f0ced3a 100644 --- a/src/main/java/com/metaweb/gridlock/browsing/facets/ListFacet.java +++ b/src/main/java/com/metaweb/gridlock/browsing/facets/ListFacet.java @@ -9,8 +9,8 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import com.metaweb.gridlock.browsing.DecoratedValue; import com.metaweb.gridlock.browsing.FilteredRows; -import com.metaweb.gridlock.browsing.accessors.DecoratedValue; import com.metaweb.gridlock.browsing.filters.ExpressionEqualRowFilter; import com.metaweb.gridlock.browsing.filters.RowFilter; import com.metaweb.gridlock.expr.Evaluable; diff --git a/src/main/java/com/metaweb/gridlock/browsing/facets/NominalFacetChoice.java b/src/main/java/com/metaweb/gridlock/browsing/facets/NominalFacetChoice.java index 5d56f6420..f043b4a74 100644 --- a/src/main/java/com/metaweb/gridlock/browsing/facets/NominalFacetChoice.java +++ b/src/main/java/com/metaweb/gridlock/browsing/facets/NominalFacetChoice.java @@ -5,7 +5,7 @@ import java.util.Properties; import org.json.JSONException; import org.json.JSONObject; -import com.metaweb.gridlock.browsing.accessors.DecoratedValue; +import com.metaweb.gridlock.browsing.DecoratedValue; public class NominalFacetChoice { final public DecoratedValue decoratedValue; diff --git a/src/main/java/com/metaweb/gridlock/browsing/filters/CellAccessorEqualRowFilter.java b/src/main/java/com/metaweb/gridlock/browsing/filters/CellAccessorEqualRowFilter.java deleted file mode 100644 index 5ba15ae5f..000000000 --- a/src/main/java/com/metaweb/gridlock/browsing/filters/CellAccessorEqualRowFilter.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.metaweb.gridlock.browsing.filters; - -import com.metaweb.gridlock.browsing.accessors.CellAccessor; -import com.metaweb.gridlock.model.Cell; -import com.metaweb.gridlock.model.Row; - -public class CellAccessorEqualRowFilter implements RowFilter { - final protected CellAccessor _accessor; - final protected int _cellIndex; - final protected Object[] _matches; - - public CellAccessorEqualRowFilter(CellAccessor accessor, int cellIndex, Object[] matches) { - _accessor = accessor; - _cellIndex = cellIndex; - _matches = matches; - } - - @Override - public boolean filterRow(Row row) { - if (_cellIndex < row.cells.size()) { - Cell cell = row.cells.get(_cellIndex); - if (cell != null) { - Object[] values = _accessor.get(cell, false); - if (values != null && values.length > 0) { - for (Object v : values) { - for (Object match : _matches) { - if (match.equals(v)) { - return true; - } - } - } - } - } - } - return false; - } -} diff --git a/src/main/java/com/metaweb/gridlock/browsing/filters/ExpressionEqualRowFilter.java b/src/main/java/com/metaweb/gridlock/browsing/filters/ExpressionEqualRowFilter.java index 2fddb248d..867cd3c01 100644 --- a/src/main/java/com/metaweb/gridlock/browsing/filters/ExpressionEqualRowFilter.java +++ b/src/main/java/com/metaweb/gridlock/browsing/filters/ExpressionEqualRowFilter.java @@ -4,6 +4,7 @@ import java.util.Properties; import com.metaweb.gridlock.expr.Evaluable; import com.metaweb.gridlock.model.Cell; +import com.metaweb.gridlock.model.Project; import com.metaweb.gridlock.model.Row; public class ExpressionEqualRowFilter implements RowFilter { @@ -18,13 +19,13 @@ public class ExpressionEqualRowFilter implements RowFilter { } @Override - public boolean filterRow(Row row) { + public boolean filterRow(Project project, int rowIndex, Row row) { if (_cellIndex < row.cells.size()) { Cell cell = row.cells.get(_cellIndex); if (cell != null) { Properties bindings = new Properties(); - bindings.put("this", cell); + bindings.put("cell", cell); bindings.put("value", cell.value); Object value = _evaluable.evaluate(bindings); diff --git a/src/main/java/com/metaweb/gridlock/browsing/filters/RowFilter.java b/src/main/java/com/metaweb/gridlock/browsing/filters/RowFilter.java index 762369ae2..6afa2e9d1 100644 --- a/src/main/java/com/metaweb/gridlock/browsing/filters/RowFilter.java +++ b/src/main/java/com/metaweb/gridlock/browsing/filters/RowFilter.java @@ -1,7 +1,8 @@ package com.metaweb.gridlock.browsing.filters; +import com.metaweb.gridlock.model.Project; import com.metaweb.gridlock.model.Row; public interface RowFilter { - public boolean filterRow(Row row); + public boolean filterRow(Project project, int rowIndex, Row row); } diff --git a/src/main/java/com/metaweb/gridlock/commands/DoTextTransformCommand.java b/src/main/java/com/metaweb/gridlock/commands/DoTextTransformCommand.java index 9b60d8dba..f46f445cf 100644 --- a/src/main/java/com/metaweb/gridlock/commands/DoTextTransformCommand.java +++ b/src/main/java/com/metaweb/gridlock/commands/DoTextTransformCommand.java @@ -44,6 +44,8 @@ public class DoTextTransformCommand extends Command { Evaluable eval = new Parser(expression).getExpression(); //System.out.println("--- " + eval.toString()); Properties bindings = new Properties(); + bindings.put("project", project); + List cellChanges = new ArrayList(project.rows.size()); for (int r = 0; r < project.rows.size(); r++) { @@ -54,7 +56,7 @@ public class DoTextTransformCommand extends Command { continue; } - bindings.put("this", cell); + bindings.put("cell", cell); bindings.put("value", cell.value); Cell newCell = new Cell(); diff --git a/src/main/java/com/metaweb/gridlock/commands/GetRowsCommand.java b/src/main/java/com/metaweb/gridlock/commands/GetRowsCommand.java index 20966447c..aa6b7a46e 100644 --- a/src/main/java/com/metaweb/gridlock/commands/GetRowsCommand.java +++ b/src/main/java/com/metaweb/gridlock/commands/GetRowsCommand.java @@ -87,7 +87,7 @@ public class GetRowsCommand extends Command { } @Override - public boolean visit(int rowIndex, Row row) { + public boolean visit(Project project, int rowIndex, Row row) { boolean r = false; if (total >= start && total < start + limit) { diff --git a/src/main/java/com/metaweb/gridlock/expr/FieldAccessorExpr.java b/src/main/java/com/metaweb/gridlock/expr/FieldAccessorExpr.java index e76520ba4..60599d03c 100644 --- a/src/main/java/com/metaweb/gridlock/expr/FieldAccessorExpr.java +++ b/src/main/java/com/metaweb/gridlock/expr/FieldAccessorExpr.java @@ -15,7 +15,7 @@ public class FieldAccessorExpr implements Evaluable { public Object evaluate(Properties bindings) { Object o = _inner.evaluate(bindings); if (o != null && o instanceof HasFields) { - return ((HasFields) o).getField(_fieldName); + return ((HasFields) o).getField(_fieldName, bindings); } return null; } diff --git a/src/main/java/com/metaweb/gridlock/expr/HasFields.java b/src/main/java/com/metaweb/gridlock/expr/HasFields.java index c9e503297..fbb9f41e8 100644 --- a/src/main/java/com/metaweb/gridlock/expr/HasFields.java +++ b/src/main/java/com/metaweb/gridlock/expr/HasFields.java @@ -1,5 +1,7 @@ package com.metaweb.gridlock.expr; +import java.util.Properties; + public interface HasFields { - public Object getField(String name); + public Object getField(String name, Properties bindings); } diff --git a/src/main/java/com/metaweb/gridlock/expr/Parser.java b/src/main/java/com/metaweb/gridlock/expr/Parser.java index 375e90feb..fd20e0156 100644 --- a/src/main/java/com/metaweb/gridlock/expr/Parser.java +++ b/src/main/java/com/metaweb/gridlock/expr/Parser.java @@ -8,7 +8,12 @@ import java.util.Map; import com.metaweb.gridlock.expr.Scanner.NumberToken; import com.metaweb.gridlock.expr.Scanner.Token; import com.metaweb.gridlock.expr.Scanner.TokenType; +import com.metaweb.gridlock.expr.functions.And; import com.metaweb.gridlock.expr.functions.Get; +import com.metaweb.gridlock.expr.functions.IsNotNull; +import com.metaweb.gridlock.expr.functions.IsNull; +import com.metaweb.gridlock.expr.functions.Not; +import com.metaweb.gridlock.expr.functions.Or; import com.metaweb.gridlock.expr.functions.Replace; import com.metaweb.gridlock.expr.functions.Slice; import com.metaweb.gridlock.expr.functions.Split; @@ -26,11 +31,18 @@ public class Parser { functionTable.put("toUppercase", new ToUppercase()); functionTable.put("toLowercase", new ToLowercase()); functionTable.put("toTitlecase", new ToTitlecase()); + + functionTable.put("get", new Get()); functionTable.put("slice", new Slice()); functionTable.put("substring", new Slice()); - functionTable.put("get", new Get()); functionTable.put("replace", new Replace()); functionTable.put("split", new Split()); + + functionTable.put("and", new And()); + functionTable.put("or", new Or()); + functionTable.put("not", new Not()); + functionTable.put("isNull", new IsNull()); + functionTable.put("isNotNull", new IsNotNull()); } public Parser(String s) throws Exception { diff --git a/src/main/java/com/metaweb/gridlock/expr/functions/And.java b/src/main/java/com/metaweb/gridlock/expr/functions/And.java new file mode 100644 index 000000000..aefb7a69c --- /dev/null +++ b/src/main/java/com/metaweb/gridlock/expr/functions/And.java @@ -0,0 +1,18 @@ +package com.metaweb.gridlock.expr.functions; + +import java.util.Properties; + +import com.metaweb.gridlock.expr.Function; + +public class And implements Function { + + @Override + public Object call(Properties bindings, Object[] args) { + for (Object o : args) { + if (!Not.objectToBoolean(o)) { + return false; + } + } + return true; + } +} diff --git a/src/main/java/com/metaweb/gridlock/expr/functions/IsNotNull.java b/src/main/java/com/metaweb/gridlock/expr/functions/IsNotNull.java new file mode 100644 index 000000000..5fe02ea06 --- /dev/null +++ b/src/main/java/com/metaweb/gridlock/expr/functions/IsNotNull.java @@ -0,0 +1,14 @@ +package com.metaweb.gridlock.expr.functions; + +import java.util.Properties; + +import com.metaweb.gridlock.expr.Function; + +public class IsNotNull implements Function { + + @Override + public Object call(Properties bindings, Object[] args) { + return args.length > 0 && args[0] != null; + } + +} diff --git a/src/main/java/com/metaweb/gridlock/expr/functions/IsNull.java b/src/main/java/com/metaweb/gridlock/expr/functions/IsNull.java new file mode 100644 index 000000000..b09e7e099 --- /dev/null +++ b/src/main/java/com/metaweb/gridlock/expr/functions/IsNull.java @@ -0,0 +1,14 @@ +package com.metaweb.gridlock.expr.functions; + +import java.util.Properties; + +import com.metaweb.gridlock.expr.Function; + +public class IsNull implements Function { + + @Override + public Object call(Properties bindings, Object[] args) { + return args.length == 0 || args[0] == null; + } + +} diff --git a/src/main/java/com/metaweb/gridlock/expr/functions/Not.java b/src/main/java/com/metaweb/gridlock/expr/functions/Not.java new file mode 100644 index 000000000..c100e263b --- /dev/null +++ b/src/main/java/com/metaweb/gridlock/expr/functions/Not.java @@ -0,0 +1,21 @@ +package com.metaweb.gridlock.expr.functions; + +import java.util.Properties; + +import com.metaweb.gridlock.expr.Function; + +public class Not implements Function { + + @Override + public Object call(Properties bindings, Object[] args) { + if (args.length > 0) { + return !objectToBoolean(args[0]); + } + return true; + } + + public static boolean objectToBoolean(Object o) { + return o == null ? false : ( + (o instanceof Boolean) ? ((Boolean) o).booleanValue() : Boolean.parseBoolean(o.toString())); + } +} diff --git a/src/main/java/com/metaweb/gridlock/expr/functions/Or.java b/src/main/java/com/metaweb/gridlock/expr/functions/Or.java new file mode 100644 index 000000000..2ae35e313 --- /dev/null +++ b/src/main/java/com/metaweb/gridlock/expr/functions/Or.java @@ -0,0 +1,18 @@ +package com.metaweb.gridlock.expr.functions; + +import java.util.Properties; + +import com.metaweb.gridlock.expr.Function; + +public class Or implements Function { + + @Override + public Object call(Properties bindings, Object[] args) { + for (Object o : args) { + if (Not.objectToBoolean(o)) { + return true; + } + } + return false; + } +} diff --git a/src/main/java/com/metaweb/gridlock/model/Cell.java b/src/main/java/com/metaweb/gridlock/model/Cell.java index 556d04dc7..6e0d41d4f 100644 --- a/src/main/java/com/metaweb/gridlock/model/Cell.java +++ b/src/main/java/com/metaweb/gridlock/model/Cell.java @@ -26,9 +26,11 @@ public class Cell implements Serializable, HasFields { } @Override - public Object getField(String name) { + public Object getField(String name, Properties bindings) { if ("value".equals(name)) { return value; + } else if ("recon".equals(name)) { + return recon; } return null; } diff --git a/src/main/java/com/metaweb/gridlock/model/ColumnModel.java b/src/main/java/com/metaweb/gridlock/model/ColumnModel.java index ed69f1679..6ea7d8cd2 100644 --- a/src/main/java/com/metaweb/gridlock/model/ColumnModel.java +++ b/src/main/java/com/metaweb/gridlock/model/ColumnModel.java @@ -4,6 +4,7 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Properties; import org.json.JSONException; @@ -14,6 +15,8 @@ public class ColumnModel implements Serializable { public List columns = new LinkedList(); + transient protected Map _nameToColumn; + public JSONObject getJSON(Properties options) throws JSONException { JSONObject o = new JSONObject(); @@ -25,4 +28,13 @@ public class ColumnModel implements Serializable { return o; } + + public Column getColumnByName(String name) { + if (_nameToColumn == null) { + for (Column column : columns) { + _nameToColumn.put(column.headerLabel, column); + } + } + return _nameToColumn.get(name); + } } diff --git a/src/main/java/com/metaweb/gridlock/model/Recon.java b/src/main/java/com/metaweb/gridlock/model/Recon.java index 60d9ef4f5..23d26b938 100644 --- a/src/main/java/com/metaweb/gridlock/model/Recon.java +++ b/src/main/java/com/metaweb/gridlock/model/Recon.java @@ -10,7 +10,9 @@ import java.util.Properties; import org.json.JSONException; import org.json.JSONObject; -public class Recon implements Serializable { +import com.metaweb.gridlock.expr.HasFields; + +public class Recon implements Serializable, HasFields { private static final long serialVersionUID = 8906257833709315762L; static public enum Judgment { @@ -22,18 +24,45 @@ public class Recon implements Serializable { public Map features = new HashMap(); public List candidates = new LinkedList(); public Judgment judgment = Judgment.None; + public ReconCandidate match = null; public JSONObject getJSON(Properties options) throws JSONException { JSONObject o = new JSONObject(); - - if (judgment == Judgment.None) { - o.put("j", "none"); - } else if (judgment == Judgment.Approve) { - o.put("j", "approve"); - } else if (judgment == Judgment.New) { - o.put("j", "new"); - } + o.put("j", judgmentToString()); return o; } + + @Override + public Object getField(String name, Properties bindings) { + if ("best".equals(name)) { + return candidates.size() > 0 ? candidates.get(0) : null; + } else if ("judgment".equals(name) || "judgement".equals(name)) { + return judgmentToString(); + } else if ("approved".equals(name)) { + return judgment == Judgment.Approve; + } else if ("new".equals(name)) { + return judgment == Judgment.New; + } else if ("match".equals(name)) { + return match; + } + return null; + } + + protected String judgmentToString() { + if (judgment == Judgment.Approve) { + return "approve"; + } else if (judgment == Judgment.New) { + return "new"; + } else { + return "none"; + } + } + + public class Features implements HasFields { + @Override + public Object getField(String name, Properties bindings) { + return features.get(name); + } + } } diff --git a/src/main/java/com/metaweb/gridlock/model/ReconCandidate.java b/src/main/java/com/metaweb/gridlock/model/ReconCandidate.java index 16390f6cd..fd44795a9 100644 --- a/src/main/java/com/metaweb/gridlock/model/ReconCandidate.java +++ b/src/main/java/com/metaweb/gridlock/model/ReconCandidate.java @@ -6,13 +6,16 @@ import java.util.Properties; import org.json.JSONException; import org.json.JSONObject; -public class ReconCandidate implements Serializable { +import com.metaweb.gridlock.expr.HasFields; + +public class ReconCandidate implements Serializable, HasFields { private static final long serialVersionUID = -8013997214978715606L; public String topicID; public String topicGUID; public String topicName; public String[] typeIDs; + public double score; public JSONObject getJSON(Properties options) throws JSONException { JSONObject o = new JSONObject(); @@ -21,7 +24,24 @@ public class ReconCandidate implements Serializable { o.put("guid", topicGUID); o.put("name", topicName); o.put("types", typeIDs); + o.put("score", score); return o; } + + @Override + public Object getField(String name, Properties bindings) { + if ("id".equals(name)) { + return topicName; + } else if ("guid".equals(name)) { + return topicGUID; + } else if ("name".equals(name)) { + return topicName; + } else if ("type".equals(name)) { + return typeIDs; + } else if ("score".equals(name)) { + return score; + } + return null; + } } diff --git a/src/main/java/com/metaweb/gridlock/model/Row.java b/src/main/java/com/metaweb/gridlock/model/Row.java index 3a702a127..9dea2f0b1 100644 --- a/src/main/java/com/metaweb/gridlock/model/Row.java +++ b/src/main/java/com/metaweb/gridlock/model/Row.java @@ -8,7 +8,9 @@ import java.util.Properties; import org.json.JSONException; import org.json.JSONObject; -public class Row implements Serializable { +import com.metaweb.gridlock.expr.HasFields; + +public class Row implements Serializable, HasFields { private static final long serialVersionUID = -689264211730915507L; public boolean flagged; @@ -32,4 +34,31 @@ public class Row implements Serializable { return o; } + + @Override + public Object getField(String name, Properties bindings) { + if ("flagged".equals(name)) { + return flagged; + } else if ("starred".equals(name)) { + return starred; + } else if ("cells".equals(name)) { + return new Cells(); + } + return null; + } + + public class Cells implements HasFields { + private Cells() {}; + + @Override + public Object getField(String name, Properties bindings) { + Project project = (Project) bindings.get("project"); + Column column = project.columnModel.getColumnByName(name); + if (column != null) { + return cells.get(column.cellIndex); + } + return null; + } + + } }