
git-svn-id: http://google-refine.googlecode.com/svn/trunk@14 7d457c2a-affb-35e4-300a-418c747d4874
85 lines
2.6 KiB
Java
85 lines
2.6 KiB
Java
package com.metaweb.gridlock.commands;
|
|
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Properties;
|
|
|
|
import javax.servlet.ServletException;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
import com.metaweb.gridlock.expr.Evaluable;
|
|
import com.metaweb.gridlock.expr.Parser;
|
|
import com.metaweb.gridlock.history.CellChange;
|
|
import com.metaweb.gridlock.history.HistoryEntry;
|
|
import com.metaweb.gridlock.history.MassCellChange;
|
|
import com.metaweb.gridlock.model.Cell;
|
|
import com.metaweb.gridlock.model.Column;
|
|
import com.metaweb.gridlock.model.Project;
|
|
import com.metaweb.gridlock.model.Row;
|
|
import com.metaweb.gridlock.process.QuickHistoryEntryProcess;
|
|
|
|
public class DoTextTransformCommand extends Command {
|
|
|
|
@Override
|
|
public void doPost(HttpServletRequest request, HttpServletResponse response)
|
|
throws ServletException, IOException {
|
|
|
|
Project project = getProject(request);
|
|
int cellIndex = Integer.parseInt(request.getParameter("cell"));
|
|
|
|
String columnName = null;
|
|
for (Column column : project.columnModel.columns) {
|
|
if (column.cellIndex == cellIndex) {
|
|
columnName = column.headerLabel;
|
|
break;
|
|
}
|
|
}
|
|
|
|
String expression = request.getParameter("expression");
|
|
|
|
try {
|
|
Evaluable eval = new Parser(expression).getExpression();
|
|
//System.out.println("--- " + eval.toString());
|
|
Properties bindings = new Properties();
|
|
bindings.put("project", project);
|
|
|
|
List<CellChange> cellChanges = new ArrayList<CellChange>(project.rows.size());
|
|
|
|
for (int r = 0; r < project.rows.size(); r++) {
|
|
Row row = project.rows.get(r);
|
|
if (cellIndex < row.cells.size()) {
|
|
Cell cell = row.cells.get(cellIndex);
|
|
if (cell.value == null) {
|
|
continue;
|
|
}
|
|
|
|
bindings.put("cell", cell);
|
|
bindings.put("value", cell.value);
|
|
|
|
Cell newCell = new Cell();
|
|
newCell.value = eval.evaluate(bindings);
|
|
newCell.recon = cell.recon;
|
|
|
|
CellChange cellChange = new CellChange(r, cellIndex, cell, newCell);
|
|
cellChanges.add(cellChange);
|
|
}
|
|
}
|
|
|
|
MassCellChange massCellChange = new MassCellChange(cellChanges);
|
|
HistoryEntry historyEntry = new HistoryEntry(
|
|
project, "Text transform on " + columnName + ": " + expression, massCellChange);
|
|
|
|
boolean done = project.processManager.queueProcess(
|
|
new QuickHistoryEntryProcess(project, historyEntry));
|
|
|
|
respond(response, "{ \"code\" : " + (done ? "\"ok\"" : "\"pending\"") + " }");
|
|
|
|
} catch (Exception e) {
|
|
respondException(response, e);
|
|
}
|
|
}
|
|
}
|