diff --git a/src/main/java/com/metaweb/gridworks/browsing/facets/ExpressionNominalRowGrouper.java b/src/main/java/com/metaweb/gridworks/browsing/facets/ExpressionNominalRowGrouper.java index 8988fb47e..593b22580 100644 --- a/src/main/java/com/metaweb/gridworks/browsing/facets/ExpressionNominalRowGrouper.java +++ b/src/main/java/com/metaweb/gridworks/browsing/facets/ExpressionNominalRowGrouper.java @@ -7,6 +7,7 @@ import java.util.Properties; import com.metaweb.gridworks.browsing.DecoratedValue; import com.metaweb.gridworks.browsing.RowVisitor; import com.metaweb.gridworks.expr.Evaluable; +import com.metaweb.gridworks.expr.ExpressionUtils; import com.metaweb.gridworks.model.Cell; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.model.Row; @@ -27,11 +28,8 @@ public class ExpressionNominalRowGrouper implements RowVisitor { if (_cellIndex < row.cells.size()) { Cell cell = row.cells.get(_cellIndex); if (cell != null) { - Properties bindings = new Properties(); - - bindings.put("project", project); - bindings.put("cell", cell); - bindings.put("value", cell.value); + Properties bindings = ExpressionUtils.createBindings(project); + ExpressionUtils.bind(bindings, row, cell); Object value = _evaluable.evaluate(bindings); if (value != null) { diff --git a/src/main/java/com/metaweb/gridworks/browsing/facets/ExpressionNumericRowBinner.java b/src/main/java/com/metaweb/gridworks/browsing/facets/ExpressionNumericRowBinner.java index c95e2cf8a..b0baaaae4 100644 --- a/src/main/java/com/metaweb/gridworks/browsing/facets/ExpressionNumericRowBinner.java +++ b/src/main/java/com/metaweb/gridworks/browsing/facets/ExpressionNumericRowBinner.java @@ -4,6 +4,7 @@ import java.util.Properties; import com.metaweb.gridworks.browsing.RowVisitor; import com.metaweb.gridworks.expr.Evaluable; +import com.metaweb.gridworks.expr.ExpressionUtils; import com.metaweb.gridworks.model.Cell; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.model.Row; @@ -27,11 +28,8 @@ public class ExpressionNumericRowBinner implements RowVisitor { if (_cellIndex < row.cells.size()) { Cell cell = row.cells.get(_cellIndex); if (cell != null) { - Properties bindings = new Properties(); - - bindings.put("project", project); - bindings.put("cell", cell); - bindings.put("value", cell.value); + Properties bindings = ExpressionUtils.createBindings(project); + ExpressionUtils.bind(bindings, row, cell); Object value = _evaluable.evaluate(bindings); if (value != null) { diff --git a/src/main/java/com/metaweb/gridworks/browsing/facets/NumericBinIndex.java b/src/main/java/com/metaweb/gridworks/browsing/facets/NumericBinIndex.java index b435d2ef9..f0c47b96a 100644 --- a/src/main/java/com/metaweb/gridworks/browsing/facets/NumericBinIndex.java +++ b/src/main/java/com/metaweb/gridworks/browsing/facets/NumericBinIndex.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Properties; import com.metaweb.gridworks.expr.Evaluable; +import com.metaweb.gridworks.expr.ExpressionUtils; import com.metaweb.gridworks.model.Cell; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.model.Row; @@ -16,7 +17,7 @@ public class NumericBinIndex { private int[] _bins; public NumericBinIndex(Project project, int cellIndex, Evaluable eval) { - Properties bindings = new Properties(); + Properties bindings = ExpressionUtils.createBindings(project); _min = Double.POSITIVE_INFINITY; _max = Double.NEGATIVE_INFINITY; @@ -28,9 +29,7 @@ public class NumericBinIndex { if (cellIndex < row.cells.size()) { Cell cell = row.cells.get(cellIndex); if (cell != null) { - bindings.put("project", project); - bindings.put("cell", cell); - bindings.put("value", cell.value); + ExpressionUtils.bind(bindings, row, cell); Object value = eval.evaluate(bindings); if (value != null) { diff --git a/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionEqualRowFilter.java b/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionEqualRowFilter.java index bc124b95f..7245072e3 100644 --- a/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionEqualRowFilter.java +++ b/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionEqualRowFilter.java @@ -3,6 +3,7 @@ package com.metaweb.gridworks.browsing.filters; import java.util.Properties; import com.metaweb.gridworks.expr.Evaluable; +import com.metaweb.gridworks.expr.ExpressionUtils; import com.metaweb.gridworks.model.Cell; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.model.Row; @@ -23,10 +24,8 @@ public class ExpressionEqualRowFilter implements RowFilter { if (_cellIndex < row.cells.size()) { Cell cell = row.cells.get(_cellIndex); if (cell != null) { - Properties bindings = new Properties(); - - bindings.put("cell", cell); - bindings.put("value", cell.value); + Properties bindings = ExpressionUtils.createBindings(project); + ExpressionUtils.bind(bindings, row, cell); Object value = _evaluable.evaluate(bindings); if (value != null) { diff --git a/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionNumberComparisonRowFilter.java b/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionNumberComparisonRowFilter.java index 2bb5253bb..2040b6bf6 100644 --- a/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionNumberComparisonRowFilter.java +++ b/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionNumberComparisonRowFilter.java @@ -3,6 +3,7 @@ package com.metaweb.gridworks.browsing.filters; import java.util.Properties; import com.metaweb.gridworks.expr.Evaluable; +import com.metaweb.gridworks.expr.ExpressionUtils; import com.metaweb.gridworks.model.Cell; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.model.Row; @@ -21,10 +22,8 @@ abstract public class ExpressionNumberComparisonRowFilter implements RowFilter { if (_cellIndex < row.cells.size()) { Cell cell = row.cells.get(_cellIndex); if (cell != null) { - Properties bindings = new Properties(); - - bindings.put("cell", cell); - bindings.put("value", cell.value); + Properties bindings = ExpressionUtils.createBindings(project); + ExpressionUtils.bind(bindings, row, cell); Object value = _evaluable.evaluate(bindings); if (value != null) { diff --git a/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionStringComparisonRowFilter.java b/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionStringComparisonRowFilter.java index 4c6bafd62..8d9a98e41 100644 --- a/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionStringComparisonRowFilter.java +++ b/src/main/java/com/metaweb/gridworks/browsing/filters/ExpressionStringComparisonRowFilter.java @@ -3,6 +3,7 @@ package com.metaweb.gridworks.browsing.filters; import java.util.Properties; import com.metaweb.gridworks.expr.Evaluable; +import com.metaweb.gridworks.expr.ExpressionUtils; import com.metaweb.gridworks.model.Cell; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.model.Row; @@ -21,10 +22,8 @@ abstract public class ExpressionStringComparisonRowFilter implements RowFilter { if (_cellIndex < row.cells.size()) { Cell cell = row.cells.get(_cellIndex); if (cell != null) { - Properties bindings = new Properties(); - - bindings.put("cell", cell); - bindings.put("value", cell.value); + Properties bindings = ExpressionUtils.createBindings(project); + ExpressionUtils.bind(bindings, row, cell); Object value = _evaluable.evaluate(bindings); if (value != null) { diff --git a/src/main/java/com/metaweb/gridworks/commands/edit/DoTextTransformCommand.java b/src/main/java/com/metaweb/gridworks/commands/edit/DoTextTransformCommand.java index 0ca28da0f..dc8d3d3ee 100644 --- a/src/main/java/com/metaweb/gridworks/commands/edit/DoTextTransformCommand.java +++ b/src/main/java/com/metaweb/gridworks/commands/edit/DoTextTransformCommand.java @@ -15,6 +15,7 @@ import com.metaweb.gridworks.browsing.FilteredRows; import com.metaweb.gridworks.browsing.RowVisitor; import com.metaweb.gridworks.commands.Command; import com.metaweb.gridworks.expr.Evaluable; +import com.metaweb.gridworks.expr.ExpressionUtils; import com.metaweb.gridworks.expr.Parser; import com.metaweb.gridworks.history.HistoryEntry; import com.metaweb.gridworks.model.Cell; @@ -46,8 +47,7 @@ public class DoTextTransformCommand extends Command { String expression = request.getParameter("expression"); Evaluable eval = new Parser(expression).getExpression(); - Properties bindings = new Properties(); - bindings.put("project", project); + Properties bindings = ExpressionUtils.createBindings(project); List cellChanges = new ArrayList(project.rows.size()); @@ -71,8 +71,7 @@ public class DoTextTransformCommand extends Command { if (cellIndex < row.cells.size()) { Cell cell = row.cells.get(cellIndex); if (cell.value != null) { - bindings.put("cell", cell); - bindings.put("value", cell.value); + ExpressionUtils.bind(bindings, row, cell); Cell newCell = new Cell(eval.evaluate(bindings), cell.recon); diff --git a/src/main/java/com/metaweb/gridworks/commands/util/PreviewExpressionCommand.java b/src/main/java/com/metaweb/gridworks/commands/util/PreviewExpressionCommand.java index 133ba6c02..41ea2021a 100644 --- a/src/main/java/com/metaweb/gridworks/commands/util/PreviewExpressionCommand.java +++ b/src/main/java/com/metaweb/gridworks/commands/util/PreviewExpressionCommand.java @@ -13,6 +13,7 @@ import org.json.JSONWriter; import com.metaweb.gridworks.commands.Command; import com.metaweb.gridworks.expr.Evaluable; +import com.metaweb.gridworks.expr.ExpressionUtils; import com.metaweb.gridworks.expr.Parser; import com.metaweb.gridworks.model.Cell; import com.metaweb.gridworks.model.Project; @@ -47,8 +48,7 @@ public class PreviewExpressionCommand extends Command { writer.key("code"); writer.value("ok"); writer.key("results"); writer.array(); - Properties bindings = new Properties(); - bindings.put("project", project); + Properties bindings = ExpressionUtils.createBindings(project); for (int i = 0; i < length; i++) { Object result = null; @@ -58,8 +58,7 @@ public class PreviewExpressionCommand extends Command { if (cellIndex < row.cells.size()) { Cell cell = row.cells.get(cellIndex); if (cell.value != null) { - bindings.put("cell", cell); - bindings.put("value", cell.value); + ExpressionUtils.bind(bindings, row, cell); try { result = eval.evaluate(bindings); diff --git a/src/main/java/com/metaweb/gridworks/expr/ExpressionUtils.java b/src/main/java/com/metaweb/gridworks/expr/ExpressionUtils.java new file mode 100644 index 000000000..8010b383b --- /dev/null +++ b/src/main/java/com/metaweb/gridworks/expr/ExpressionUtils.java @@ -0,0 +1,23 @@ +package com.metaweb.gridworks.expr; + +import java.util.Properties; + +import com.metaweb.gridworks.model.Cell; +import com.metaweb.gridworks.model.Project; +import com.metaweb.gridworks.model.Row; + +public class ExpressionUtils { + static public Properties createBindings(Project project) { + Properties bindings = new Properties(); + bindings.put("project", project); + return bindings; + } + + static public void bind(Properties bindings, Row row, Cell cell) { + bindings.put("row", row); + bindings.put("cells", row.getField("cells", bindings)); + + bindings.put("cell", cell); + bindings.put("value", cell.value); + } +}