Added commands Move Column to Beginning, Move Column to End, Move Column Left, Move Column Right.
git-svn-id: http://google-refine.googlecode.com/svn/trunk@1142 7d457c2a-affb-35e4-300a-418c747d4874
This commit is contained in:
parent
f0eae04c0c
commit
0500d7aa10
@ -78,6 +78,7 @@ public class GridworksServlet extends Butterfly {
|
||||
{"add-column", "com.google.gridworks.commands.column.AddColumnCommand"},
|
||||
{"remove-column", "com.google.gridworks.commands.column.RemoveColumnCommand"},
|
||||
{"rename-column", "com.google.gridworks.commands.column.RenameColumnCommand"},
|
||||
{"move-column", "com.google.gridworks.commands.column.MoveColumnCommand"},
|
||||
{"split-column", "com.google.gridworks.commands.column.SplitColumnCommand"},
|
||||
{"extend-data", "com.google.gridworks.commands.column.ExtendDataCommand"},
|
||||
|
||||
|
@ -0,0 +1,35 @@
|
||||
package com.google.gridworks.commands.column;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import com.google.gridworks.commands.Command;
|
||||
import com.google.gridworks.model.AbstractOperation;
|
||||
import com.google.gridworks.model.Project;
|
||||
import com.google.gridworks.operations.column.ColumnMoveOperation;
|
||||
import com.google.gridworks.process.Process;
|
||||
|
||||
public class MoveColumnCommand extends Command {
|
||||
@Override
|
||||
public void doPost(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
|
||||
try {
|
||||
Project project = getProject(request);
|
||||
|
||||
String columnName = request.getParameter("columnName");
|
||||
int index = Integer.parseInt(request.getParameter("index"));
|
||||
|
||||
AbstractOperation op = new ColumnMoveOperation(columnName, index);
|
||||
Process process = op.createProcess(project, new Properties());
|
||||
|
||||
performProcessAndRespond(request, response, project, process);
|
||||
} catch (Exception e) {
|
||||
respondException(response, e);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
package com.google.gridworks.model.changes;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.LineNumberReader;
|
||||
import java.io.Writer;
|
||||
import java.util.Properties;
|
||||
|
||||
import com.google.gridworks.history.Change;
|
||||
import com.google.gridworks.model.Column;
|
||||
import com.google.gridworks.model.Project;
|
||||
import com.google.gridworks.util.Pool;
|
||||
|
||||
public class ColumnMoveChange extends ColumnChange {
|
||||
final protected String _columnName;
|
||||
final protected int _newColumnIndex;
|
||||
protected int _oldColumnIndex;
|
||||
|
||||
public ColumnMoveChange(String columnName, int index) {
|
||||
_columnName = columnName;
|
||||
_newColumnIndex = index;
|
||||
}
|
||||
|
||||
public void apply(Project project) {
|
||||
synchronized (project) {
|
||||
_oldColumnIndex = project.columnModel.getColumnIndexByName(_columnName);
|
||||
|
||||
Column column = project.columnModel.columns.remove(_oldColumnIndex);
|
||||
project.columnModel.columns.add(_newColumnIndex, column);
|
||||
|
||||
project.update();
|
||||
}
|
||||
}
|
||||
|
||||
public void revert(Project project) {
|
||||
synchronized (project) {
|
||||
Column column = project.columnModel.columns.remove(_newColumnIndex);
|
||||
project.columnModel.columns.add(_oldColumnIndex, column);
|
||||
|
||||
project.update();
|
||||
}
|
||||
}
|
||||
|
||||
public void save(Writer writer, Properties options) throws IOException {
|
||||
writer.write("columnName="); writer.write(_columnName); writer.write('\n');
|
||||
writer.write("oldColumnIndex="); writer.write(Integer.toString(_oldColumnIndex)); writer.write('\n');
|
||||
writer.write("newColumnIndex="); writer.write(Integer.toString(_newColumnIndex)); writer.write('\n');
|
||||
writer.write("/ec/\n"); // end of change marker
|
||||
}
|
||||
|
||||
static public Change load(LineNumberReader reader, Pool pool) throws Exception {
|
||||
String columnName = null;
|
||||
int oldColumnIndex = -1;
|
||||
int newColumnIndex = -1;
|
||||
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null && !"/ec/".equals(line)) {
|
||||
int equal = line.indexOf('=');
|
||||
CharSequence field = line.subSequence(0, equal);
|
||||
|
||||
String value = line.substring(equal + 1);
|
||||
if ("oldColumnIndex".equals(field)) {
|
||||
oldColumnIndex = Integer.parseInt(value);
|
||||
} else if ("newColumnIndex".equals(field)) {
|
||||
newColumnIndex = Integer.parseInt(value);
|
||||
} else if ("columnName".equals(field)) {
|
||||
columnName = value;
|
||||
}
|
||||
}
|
||||
|
||||
ColumnMoveChange change = new ColumnMoveChange(columnName, newColumnIndex);
|
||||
change._oldColumnIndex = oldColumnIndex;
|
||||
|
||||
return change;
|
||||
}
|
||||
}
|
@ -15,6 +15,7 @@ import com.google.gridworks.operations.cell.MultiValuedCellSplitOperation;
|
||||
import com.google.gridworks.operations.cell.TextTransformOperation;
|
||||
import com.google.gridworks.operations.cell.TransposeColumnsIntoRowsOperation;
|
||||
import com.google.gridworks.operations.column.ColumnAdditionOperation;
|
||||
import com.google.gridworks.operations.column.ColumnMoveOperation;
|
||||
import com.google.gridworks.operations.column.ColumnRemovalOperation;
|
||||
import com.google.gridworks.operations.column.ColumnRenameOperation;
|
||||
import com.google.gridworks.operations.column.ColumnSplitOperation;
|
||||
@ -57,6 +58,7 @@ public abstract class OperationRegistry {
|
||||
register("column-addition", ColumnAdditionOperation.class);
|
||||
register("column-removal", ColumnRemovalOperation.class);
|
||||
register("column-rename", ColumnRenameOperation.class);
|
||||
register("column-move", ColumnMoveOperation.class);
|
||||
register("column-split", ColumnSplitOperation.class);
|
||||
register("extend-data", ExtendDataOperation.class);
|
||||
|
||||
|
@ -0,0 +1,60 @@
|
||||
package com.google.gridworks.operations.column;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.json.JSONWriter;
|
||||
|
||||
import com.google.gridworks.history.Change;
|
||||
import com.google.gridworks.history.HistoryEntry;
|
||||
import com.google.gridworks.model.AbstractOperation;
|
||||
import com.google.gridworks.model.Project;
|
||||
import com.google.gridworks.model.changes.ColumnMoveChange;
|
||||
import com.google.gridworks.operations.OperationRegistry;
|
||||
|
||||
public class ColumnMoveOperation extends AbstractOperation {
|
||||
final protected String _columnName;
|
||||
final protected int _index;
|
||||
|
||||
static public AbstractOperation reconstruct(Project project, JSONObject obj) throws Exception {
|
||||
return new ColumnMoveOperation(
|
||||
obj.getString("columnName"),
|
||||
obj.getInt("index")
|
||||
);
|
||||
}
|
||||
|
||||
public ColumnMoveOperation(
|
||||
String columnName,
|
||||
int index
|
||||
) {
|
||||
_columnName = columnName;
|
||||
_index = index;
|
||||
}
|
||||
|
||||
public void write(JSONWriter writer, Properties options)
|
||||
throws JSONException {
|
||||
|
||||
writer.object();
|
||||
writer.key("op"); writer.value(OperationRegistry.s_opClassToName.get(this.getClass()));
|
||||
writer.key("description"); writer.value("Move column " + _columnName + " to position " + _index);
|
||||
writer.key("columnName"); writer.value(_columnName);
|
||||
writer.key("index"); writer.value(_index);
|
||||
writer.endObject();
|
||||
}
|
||||
|
||||
|
||||
protected String getBriefDescription(Project project) {
|
||||
return "Move column " + _columnName + " to position " + _index;
|
||||
}
|
||||
|
||||
protected HistoryEntry createHistoryEntry(Project project, long historyEntryID) throws Exception {
|
||||
if (project.columnModel.getColumnByName(_columnName) == null) {
|
||||
throw new Exception("No column named " + _columnName);
|
||||
}
|
||||
|
||||
Change change = new ColumnMoveChange(_columnName, _index);
|
||||
|
||||
return new HistoryEntry(historyEntryID, project, getBriefDescription(null), ColumnMoveOperation.this, change);
|
||||
}
|
||||
}
|
@ -322,6 +322,16 @@ Gridworks.columnNameToColumn = function(columnName) {
|
||||
}
|
||||
return null;
|
||||
};
|
||||
Gridworks.columnNameToColumnIndex = function(columnName) {
|
||||
var columns = theProject.columnModel.columns;
|
||||
for (var i = 0; i < columns.length; i++) {
|
||||
var column = columns[i];
|
||||
if (column.name == columnName) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
};
|
||||
|
||||
Gridworks.preparePool = function(pool) {
|
||||
for (var id in pool.recons) {
|
||||
|
@ -326,6 +326,23 @@ DataTableColumnHeaderUI.prototype._createMenuForColumnHeader = function(elmt) {
|
||||
{
|
||||
label: "Remove This Column",
|
||||
click: function() { self._doRemoveColumn(); }
|
||||
},
|
||||
{},
|
||||
{
|
||||
label: "Move Column to Beginning",
|
||||
click: function() { self._doMoveColumnTo(0); }
|
||||
},
|
||||
{
|
||||
label: "Move Column to End",
|
||||
click: function() { self._doMoveColumnTo(theProject.columnModel.columns.length - 1); }
|
||||
},
|
||||
{
|
||||
label: "Move Column Left",
|
||||
click: function() { self._doMoveColumnBy(-1); }
|
||||
},
|
||||
{
|
||||
label: "Move Column Right",
|
||||
click: function() { self._doMoveColumnBy(1); }
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -934,6 +951,30 @@ DataTableColumnHeaderUI.prototype._doRenameColumn = function() {
|
||||
}
|
||||
};
|
||||
|
||||
DataTableColumnHeaderUI.prototype._doMoveColumnTo = function(index) {
|
||||
Gridworks.postProcess(
|
||||
"move-column",
|
||||
{
|
||||
columnName: this._column.name,
|
||||
index: index
|
||||
},
|
||||
null,
|
||||
{ modelsChanged: true }
|
||||
);
|
||||
};
|
||||
|
||||
DataTableColumnHeaderUI.prototype._doMoveColumnBy = function(change) {
|
||||
Gridworks.postProcess(
|
||||
"move-column",
|
||||
{
|
||||
columnName: this._column.name,
|
||||
index: Gridworks.columnNameToColumnIndex(this._column.name) + change
|
||||
},
|
||||
null,
|
||||
{ modelsChanged: true }
|
||||
);
|
||||
};
|
||||
|
||||
DataTableColumnHeaderUI.prototype._doFillDown = function() {
|
||||
Gridworks.postProcess(
|
||||
"fill-down",
|
||||
|
Loading…
Reference in New Issue
Block a user