@Override public Pair<ICommand, Object> consolidateCommand(List<ICommand> commands, ICommand newCommand, Workspace workspace) { if (newCommand instanceof SubmitPythonTransformationCommand) { String model = newCommand.getModel(); Iterator<ICommand> itr = commands.iterator(); while(itr.hasNext()) { ICommand tmp = itr.next(); if (((Command)tmp).getOutputColumns().equals(((Command)newCommand).getOutputColumns()) && tmp.getModel().equals(model) && (tmp instanceof AddColumnCommand)) { SubmitPythonTransformationCommand py = ((SubmitPythonTransformationCommand)newCommand); JSONArray inputJSON = new JSONArray(py.getInputParameterJson()); JSONArray tmpInputJSON = new JSONArray(tmp.getInputParameterJson()); String hNodeId = HistoryJsonUtil.getStringValue("hNodeId", tmpInputJSON); HistoryJsonUtil.setArgumentValue("hNodeId", hNodeId, inputJSON); py.setInputParameterJson(inputJSON.toString()); return new ImmutablePair<>(tmp, (Object)py); } } } return null; }
private void writeHistoryPerWorksheet(Workspace workspace, IHistorySaver historySaver) throws Exception { String workspaceId = workspace.getId(); Map<String, JSONArray> comMap = new HashMap<>(); for(ICommand command : _getHistory()) { if(command.isSavedInHistory() && (command.hasTag(CommandTag.Modeling) || command.hasTag(CommandTag.Transformation) || command.hasTag(CommandTag.Selection) || command.hasTag(CommandTag.SemanticType) )) { JSONArray json = new JSONArray(command.getInputParameterJson()); String worksheetId = HistoryJsonUtil.getStringValue(HistoryArguments.worksheetId.name(), json); if(workspace.getWorksheet(worksheetId) != null) { try { if(comMap.get(worksheetId) == null) comMap.put(worksheetId, new JSONArray()); comMap.get(worksheetId).put(getCommandJSON(workspace, command)); } catch(Exception e) { logger.error("Error serializing command {} to history, Input:{}", command.getCommandName(), command.getInputParameterJson()); } } } } for(Map.Entry<String, JSONArray> stringJSONArrayEntry : comMap.entrySet()) { JSONArray comms = stringJSONArrayEntry.getValue(); historySaver.saveHistory(workspaceId, stringJSONArrayEntry.getKey(), comms); } }
public JSONObject getCommandJSON(Workspace workspace, ICommand comm) { JSONObject commObj = new JSONObject(); commObj.put(HistoryArguments.commandName.name(), comm.getCommandName()); commObj.put(HistoryArguments.model.name(), comm.getModel()); for (CommandTag tag : comm.getTags()) tagsArr.put(tag.name()); commObj.put(HistoryArguments.tags.name(), tagsArr); JSONArray inputArr = new JSONArray(comm.getInputParameterJson() == null ? "[]" : comm.getInputParameterJson()); for (int i = 0; i < inputArr.length(); i++) { JSONObject inpP = inputArr.getJSONObject(i);
Pair<ICommand, Object> pair = currentCommand.getConsolidatedCommand(); if (pair == null) { container.append(currentCommand.getCommand().undoIt(workspace)); worksheetCommandHistory.removeCommandFromHistory(Arrays.asList(currentCommand.getCommand())); } else { if (pair.getLeft().getCommandName().equals("SubmitPythonTransformationCommand")) { pair.getLeft().setInputParameterJson(pair.getRight().toString()); try { Method method = pair.getLeft().getClass().getMethod("setTransformationCode", String.class); method.invoke(pair.getLeft(), HistoryJsonUtil.getStringValue("transformationCode", (JSONArray)pair.getRight())); container.append(pair.getLeft().doIt(workspace)); } catch (Exception e) { logger.warn("Method invocation failure", e); else if (pair.getLeft().getCommandName().equals("SetSemanticTypeCommand") || pair.getLeft().getCommandName().equals("SetMetaPropertyCommand")) { container.append(pair.getLeft().doIt(workspace)); worksheetCommandHistory.insertCommandToHistory(pair.getLeft());
@Override public Pair<ICommand, Object> consolidateCommand(List<ICommand> commands, ICommand newCommand, Workspace workspace) { if (newCommand instanceof UnassignSemanticTypeCommand) { String model = newCommand.getModel(); Iterator<ICommand> itr = commands.iterator(); while(itr.hasNext()) { ICommand tmp = itr.next(); if (tmp.getModel().equals(model) && ((Command)tmp).getOutputColumns().equals(((Command)newCommand).getOutputColumns()) && (tmp instanceof SetSemanticTypeCommand || tmp instanceof SetMetaPropertyCommand)) { return new ImmutablePair<>(tmp, (Object)newCommand); } } } return null; }
@Override public UpdateContainer doIt(Workspace workspace) throws CommandException { HNode columnNode = workspace.getFactory().getHNode(hNodeId); oldColumnName = columnNode.getColumnName(); // Change the column name columnNode.setColumnName(newColumnName); newColumnAbsoluteName = columnNode.getAbsoluteColumnName(workspace.getFactory()); CommandHistory history = workspace.getCommandHistory(); List<ICommand> allCommands = history._getHistory(); for(ICommand command : allCommands) { String json = command.getInputParameterJson(); if(json != null && json.length() > 0) { JSONArray inputs = new JSONArray(json); for(int i=0; i<inputs.length(); i++) { JSONObject input = inputs.getJSONObject(i); replaceColumnName(input); } command.setInputParameterJson(inputs.toString()); } } // Prepare the output to be sent UpdateContainer c = WorksheetUpdateFactory.createRegenerateWorksheetUpdates(worksheetId, SuperSelectionManager.DEFAULT_SELECTION, workspace.getContextId()); c.append(computeAlignmentAndSemanticTypesAndCreateUpdates(workspace)); return c; }
effects.append(((ICommand) consolidatedCommand.getRight()).doIt(workspace)); effects.append(((ICommand) consolidatedCommand.getRight()).doIt(workspace)); worksheetCommandHistory.replaceCommandFromHistory(consolidatedCommand.getKey(), (ICommand)consolidatedCommand.getRight()); effects.append(((ICommand) consolidatedCommand.getRight()).doIt(workspace)); effects.append(((ICommand) consolidatedCommand.getRight()).doIt(workspace)); ICommand runCommand = ((ICommand) consolidatedCommand.getRight()); worksheetCommandHistory.insertCommandToHistory(runCommand); effects.append(runCommand.doIt(workspace));
command.generateJson(prefix, pw, vWorkspace, Command.HistoryType.lastRun); command.generateJson(prefix, pw, vWorkspace, Command.HistoryType.lastRun); command.generateJson(prefix, pw, vWorkspace, Command.HistoryType.normal); pw.println(prefix + ","); redoCommandObject.getCommand().generateJson(prefix, pw, vWorkspace, Command.HistoryType.redo);
Set<String> outputs = ((Command)cmd).getOutputColumns(); Set<String> inputs = ((Command)cmd).getInputColumns(); String commandId = "Command-" + cmd.getId(); historyInputOutputGraph.addVertex(commandId); for(String input : inputs) {
@Override public Pair<ICommand, Object> consolidateCommand(List<ICommand> commands, ICommand newCommand, Workspace workspace) { if (newCommand instanceof OrganizeColumnsCommand) { String model = newCommand.getModel(); Iterator<ICommand> itr = commands.iterator(); while(itr.hasNext()) { ICommand tmp = itr.next(); if (tmp.getModel().equals(model) && ((Command)tmp).getOutputColumns().equals(((Command)newCommand).getOutputColumns()) && (tmp instanceof OrganizeColumnsCommand)) { return new ImmutablePair<>(tmp, (Object)newCommand); } } } return null; } }
@Override public UpdateContainer undoIt(Workspace workspace) { for (Node node : affectedNodes) { HNode hNode = workspace.getFactory().getHNode(node.getHNodeId()); hNode.removeNestedTable(); node.setNestedTable(null, workspace.getFactory()); node.clearValue(NodeStatus.original); } affectedNodes.clear(); try { if(previousPythonTransformationCommand instanceof SubmitPythonTransformationCommand) { SubmitPythonTransformationCommand prevCommand = (SubmitPythonTransformationCommand)previousPythonTransformationCommand; //Previous python command exists, lets reset the values, and then start again prevCommand.resetColumnValues(workspace); } UpdateContainer uc = previousPythonTransformationCommand.doIt(workspace); return uc; } catch (CommandException e) { return new UpdateContainer(new ErrorUpdate("Error occured while applying previous Python transformation to the column.")); } }
ICommand newCommand, Workspace workspace) { if (newCommand instanceof AddLinkCommand) { String model = newCommand.getModel(); JSONArray inputParams = new JSONArray(newCommand.getInputParameterJson()); JSONObject newEdge = HistoryJsonUtil.getJSONObjectWithName( Arguments.edge.name(), inputParams).getJSONObject("value"); while(itr.hasNext()) { ICommand tmp = itr.next(); if (tmp.getModel().equals(model) && (tmp instanceof AddLinkCommand)) { JSONArray tmpParams = new JSONArray(tmp.getInputParameterJson()); JSONObject tmpEdge = HistoryJsonUtil.getJSONObjectWithName( Arguments.edge.name(), tmpParams).getJSONObject("value");
@Override public Pair<ICommand, Object> consolidateCommand(List<ICommand> commands, ICommand newCommand, Workspace workspace) { if (newCommand instanceof SetSemanticTypeCommand || newCommand instanceof SetMetaPropertyCommand) { String model = newCommand.getModel(); Iterator<ICommand> itr = commands.iterator(); while(itr.hasNext()) { ICommand tmp = itr.next(); if (tmp.getModel().equals(model) && ((Command)tmp).getOutputColumns().equals(((Command)newCommand).getOutputColumns()) && (tmp instanceof SetSemanticTypeCommand)) { return new ImmutablePair<>(tmp, (Object)newCommand); } } } return null; } }
UpdateContainer uc = previousPythonTransformationCommand.doIt(workspace); return uc; } catch (CommandException e) {
ICommand newCommand, Workspace workspace) { if (newCommand instanceof DeleteLinkCommand) { String model = newCommand.getModel(); JSONArray inputParams = new JSONArray(newCommand.getInputParameterJson()); JSONObject newEdge = HistoryJsonUtil.getJSONObjectWithName( Arguments.edge.name(), inputParams).getJSONObject("value"); while(itr.hasNext()) { ICommand tmp = itr.next(); if (tmp.getModel().equals(model) && (tmp instanceof AddLinkCommand)) { JSONArray tmpParams = new JSONArray(tmp.getInputParameterJson()); JSONObject tmpEdge = HistoryJsonUtil.getJSONObjectWithName( Arguments.edge.name(), tmpParams).getJSONObject("value");
@Override public Pair<ICommand, Object> consolidateCommand(List<ICommand> commands, ICommand newCommand, Workspace workspace) { if (newCommand instanceof AddLiteralNodeCommand) { String nodeId = ((AddLiteralNodeCommand)newCommand).getNodeId(); if(nodeId != null) { String model = newCommand.getModel(); Iterator<ICommand> itr = commands.iterator(); while(itr.hasNext()) { ICommand tmp = itr.next(); if (tmp.getModel().equals(model) && ((Command)tmp).getOutputColumns().equals(((Command)newCommand).getOutputColumns()) && (tmp instanceof AddLiteralNodeCommand)) { String tmpNodeId = ((AddLiteralNodeCommand)tmp).getNodeId(); if(tmpNodeId != null && tmpNodeId.equals(nodeId)) return new ImmutablePair<>(tmp, (Object)newCommand); } } } } return null; }
@Override public Pair<ICommand, Object> consolidateCommand(List<ICommand> commands, ICommand newCommand, Workspace workspace) { if (newCommand instanceof DeleteNodeCommand) { String model = newCommand.getModel(); String nodeId = ((DeleteNodeCommand)newCommand).getNodeId(); if(nodeId != null) { Iterator<ICommand> itr = commands.iterator(); while(itr.hasNext()) { ICommand tmp = itr.next(); if (tmp.getModel().equals(model) && ((Command)tmp).getOutputColumns().equals(((Command)newCommand).getOutputColumns()) && (tmp instanceof AddLiteralNodeCommand || tmp instanceof AddNodeCommand)) { String tmpNodeId; if(tmp instanceof AddLiteralNodeCommand) { tmpNodeId = ((AddLiteralNodeCommand)tmp).getNodeId(); } else { tmpNodeId = ((AddNodeCommand)tmp).getNodeId(); } if(tmpNodeId != null && tmpNodeId.equals(nodeId)) return new ImmutablePair<>(tmp, (Object)newCommand); } } } } return null; }
@Override public Pair<ICommand, Object> consolidateCommand(List<ICommand> commands, ICommand newCommand, Workspace workspace) { if (newCommand instanceof SubmitEditPythonTransformationCommand) { Iterator<ICommand> itr = commands.iterator(); String model = newCommand.getModel(); while(itr.hasNext()) { ICommand tmp = itr.next(); if (((Command)tmp).getOutputColumns().equals(((Command)newCommand).getOutputColumns()) && tmp instanceof SubmitPythonTransformationCommand && !(tmp instanceof SubmitEditPythonTransformationCommand) && model.equals(tmp.getModel())) { SubmitPythonTransformationCommand py = (SubmitPythonTransformationCommand)tmp; SubmitPythonTransformationCommand edit = (SubmitPythonTransformationCommand)newCommand; JSONArray inputJSON = new JSONArray(py.getInputParameterJson()); JSONArray oldInputJSON = new JSONArray(py.getInputParameterJson()); HistoryJsonUtil.setArgumentValue("transformationCode", edit.getTransformationCode(), inputJSON); py.setInputParameterJson(inputJSON.toString()); py.setTransformationCode(edit.getTransformationCode()); return new ImmutablePair<>(tmp, (Object)oldInputJSON); } } } return null; }