package edu.isi.karma.controller.command.transformation;
import org.json.JSONArray;
import org.json.JSONException;
import edu.isi.karma.controller.command.CommandException;
import edu.isi.karma.controller.command.CommandType;
import edu.isi.karma.controller.command.worksheet.MultipleValueEditColumnCommand;
import edu.isi.karma.controller.command.worksheet.MultipleValueEditColumnCommandFactory;
import edu.isi.karma.controller.history.HistoryJsonUtil.ParameterType;
import edu.isi.karma.controller.update.UpdateContainer;
import edu.isi.karma.controller.update.WorksheetUpdateFactory;
import edu.isi.karma.er.helper.PythonRepository;
import edu.isi.karma.er.helper.PythonRepositoryRegistry;
import edu.isi.karma.rep.Worksheet;
import edu.isi.karma.rep.Workspace;
import edu.isi.karma.util.CommandInputJSONUtil;
import edu.isi.karma.webserver.ContextParametersRegistry;
import edu.isi.karma.webserver.ServletContextParameterMap;
import edu.isi.karma.webserver.ServletContextParameterMap.ContextParameter;
public class RepeatPythonTransformationCommand extends PythonTransformationCommand {
public RepeatPythonTransformationCommand(String id, String model, String worksheetId,
String hNodeId, String transformCode, String selectionId) {
super(id, model, transformCode, worksheetId, hNodeId, "error", selectionId);
}
@Override
public String getCommandName() {
return this.getClass().getSimpleName();
}
@Override
public String getTitle() {
return "Repeat Python Transformation";
}
@Override
public String getDescription() {
return hNodeId;
}
@Override
public CommandType getCommandType() {
return CommandType.notInHistory;
}
@Override
public UpdateContainer doIt(Workspace workspace) throws CommandException {
final ServletContextParameterMap contextParameters = ContextParametersRegistry.getInstance().getContextParameters(workspace.getContextId());
Worksheet worksheet = workspace.getWorksheet(worksheetId);
JSONArray transformedRows = new JSONArray();
JSONArray errorValues = new JSONArray();
PythonRepository repo = PythonRepositoryRegistry.getInstance().getPythonRepository(contextParameters.getParameterValue(ContextParameter.USER_PYTHON_SCRIPTS_DIRECTORY));
repo.resetLibrary();
boolean isError = false;
try {
generateTransformedValues(workspace,
worksheet, workspace.getFactory(), workspace.getFactory().getHNode(hNodeId), transformedRows, errorValues, null);
if (errorValues.length() > 0) {
isError = true;
}
JSONArray multiCellEditInput = getMultiCellValueEditInputJSON(transformedRows, hNodeId);
MultipleValueEditColumnCommandFactory mfc = new MultipleValueEditColumnCommandFactory();
MultipleValueEditColumnCommand mvecc = (MultipleValueEditColumnCommand) mfc.createCommand(multiCellEditInput, model, workspace);
mvecc.doIt(workspace);
}catch(Exception e) {
isError = true;
}
worksheet.getMetadataContainer().getColumnMetadata().addColumnOnError(hNodeId, isError);
UpdateContainer c = new UpdateContainer();
c.append(WorksheetUpdateFactory.createRegenerateWorksheetUpdates(worksheetId, getSuperSelection(worksheet), workspace.getContextId()));
c.append(computeAlignmentAndSemanticTypesAndCreateUpdates(workspace));
return c;
}
@Override
public UpdateContainer undoIt(Workspace workspace) {
return null;
}
private JSONArray getMultiCellValueEditInputJSON(JSONArray rowsArray, String newHNodeId) throws JSONException {
JSONArray arr = new JSONArray();
arr.put(CommandInputJSONUtil.createJsonObject(MultipleValueEditColumnCommandFactory.Arguments.worksheetId.name(),
worksheetId, ParameterType.worksheetId));
arr.put(CommandInputJSONUtil.createJsonObject(MultipleValueEditColumnCommandFactory.Arguments.hNodeID.name(),
newHNodeId, ParameterType.worksheetId));
arr.put(CommandInputJSONUtil.createJsonObject(MultipleValueEditColumnCommandFactory.Arguments.rows.name(),
rowsArray, ParameterType.other));
return arr;
}
}