package edu.isi.karma.controller.command.worksheet; import java.io.PrintWriter; import org.json.JSONArray; import org.json.JSONObject; import edu.isi.karma.controller.command.CommandException; import edu.isi.karma.controller.command.CommandType; import edu.isi.karma.controller.command.WorksheetCommand; import edu.isi.karma.controller.command.selection.SuperSelectionManager; import edu.isi.karma.controller.update.AbstractUpdate; import edu.isi.karma.controller.update.UpdateContainer; import edu.isi.karma.controller.update.WorksheetUpdateFactory; import edu.isi.karma.rep.Workspace; import edu.isi.karma.view.VWorksheet; import edu.isi.karma.view.VWorkspace; import edu.isi.karma.view.VWorkspaceRegistry; public class OrganizeColumnsCommand extends WorksheetCommand { private JSONArray prevOrderedColumns; private JSONArray orderedColumns; protected OrganizeColumnsCommand(String id, String model, String workspaceId, String worksheetId, org.json.JSONArray orderedColumns) { super(id, model, worksheetId); this.orderedColumns = orderedColumns; addTag(CommandTag.Transformation); addTag(CommandTag.IgnoreInBatch); } @Override public String getCommandName() { return OrganizeColumnsCommand.class.getSimpleName(); } @Override public String getTitle() { return "Organize Columns"; } @Override public String getDescription() { return null; } @Override public CommandType getCommandType() { return CommandType.undoable; } @Override public UpdateContainer doIt(Workspace workspace) throws CommandException { orderColumns(workspace.getId(), orderedColumns); UpdateContainer c = new UpdateContainer(); c.append(WorksheetUpdateFactory.createWorksheetHierarchicalUpdates(worksheetId, SuperSelectionManager.DEFAULT_SELECTION, workspace.getContextId())); c.append(computeAlignmentAndSemanticTypesAndCreateUpdates(workspace)); return c; } @Override public UpdateContainer undoIt(Workspace workspace) { if(prevOrderedColumns != null) orderColumns(workspace.getId(), prevOrderedColumns); UpdateContainer c = new UpdateContainer(); c.append(WorksheetUpdateFactory.createWorksheetHierarchicalUpdates(worksheetId, SuperSelectionManager.DEFAULT_SELECTION, workspace.getContextId())); c.append(computeAlignmentAndSemanticTypesAndCreateUpdates(workspace)); return c; } private void orderColumns(String workspaceId, JSONArray columns) { VWorkspace vWorkspace = VWorkspaceRegistry.getInstance().getVWorkspace(workspaceId); if (vWorkspace != null) { vWorkspace.createVWorksheetsForAllWorksheets(); VWorksheet viewWorksheet = vWorkspace.getViewFactory().getVWorksheetByWorksheetId(worksheetId); prevOrderedColumns = viewWorksheet.getHeaderViewNodesJSON(); viewWorksheet.organizeColumns(columns); updateOrderedColumns(viewWorksheet); } } private void updateOrderedColumns(VWorksheet viewWorksheet) { orderedColumns = viewWorksheet.getHeaderViewNodesJSON(); JSONArray inputParams = new JSONArray(getInputParameterJson()); for(int i=0; i<inputParams.length(); i++) { JSONObject param = inputParams.getJSONObject(i); if(param.getString("name").equals("orderedColumns")) { param.put("value", orderedColumns); inputParams.put(i, param); break; } } setInputParameterJson(inputParams.toString()); } }