package edu.isi.karma.controller.command.worksheet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
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.WorksheetSelectionCommand;
import edu.isi.karma.controller.command.selection.SuperSelection;
import edu.isi.karma.controller.update.ErrorUpdate;
import edu.isi.karma.controller.update.UpdateContainer;
import edu.isi.karma.rep.HNodePath;
import edu.isi.karma.rep.Node;
import edu.isi.karma.rep.Row;
import edu.isi.karma.rep.Worksheet;
import edu.isi.karma.rep.Workspace;
public class MergeClusterValuesCommand extends WorksheetSelectionCommand {
private String hNodeId;
@SuppressWarnings("unused")
private Map<String, String> oldRowValueMap = new HashMap<>();
MultipleValueEditColumnCommand edit;
public MergeClusterValuesCommand(String id, String model, String hNodeId,
String worksheetId, String selectionId) {
super(id, model, worksheetId, selectionId);
this.hNodeId = hNodeId;
}
@Override
public String getCommandName() {
return this.getClass().getName();
}
@Override
public String getTitle() {
// TODO Auto-generated method stub
return "Merge Cluster Values";
}
@Override
public String getDescription() {
// TODO Auto-generated method stub
return "";
}
@Override
public CommandType getCommandType() {
// TODO Auto-generated method stub
return CommandType.undoable;
}
@Override
public UpdateContainer doIt(Workspace workspace) throws CommandException {
// TODO Auto-generated method stub
Worksheet worksheet = workspace.getWorksheet(worksheetId);
SuperSelection selection = getSuperSelection(worksheet);
HNodePath selectedPath = null;
List<HNodePath> columnPaths = worksheet.getHeaders().getAllPaths();
for (HNodePath path : columnPaths) {
if (path.getLeaf().getId().equals(hNodeId)) {
selectedPath = path;
}
}
Collection<Node> nodes = new ArrayList<>();
workspace.getFactory().getWorksheet(worksheetId).getDataTable()
.collectNodes(selectedPath, nodes, selection);
try {
JSONArray requestJsonArray = new JSONArray();
for (Node node : nodes) {
String originalVal = node.getValue().asString();
originalVal = originalVal == null ? "" : originalVal;
requestJsonArray.put(originalVal);
}
JSONObject json = new JSONObject(worksheet.getJsonAnnotation().toString());
String mainId = json.getString("id");
String mainWorksheetId = json.getString("worksheetId");
String mainHNodeId = json.getString("hNodeId");
Worksheet mainWorksheet = workspace.getWorksheet(mainWorksheetId);
HNodePath mainSelectedPath = null;
List<HNodePath> mainColumnPaths = mainWorksheet.getHeaders().getAllPaths();
for (HNodePath path : mainColumnPaths) {
if (path.getLeaf().getId().equals(mainHNodeId)) {
mainSelectedPath = path;
}
}
Collection<Node> mainNodes = new ArrayList<>();
workspace.getFactory().getWorksheet(mainWorksheetId).getDataTable().collectNodes(mainSelectedPath, mainNodes, selection);
int i = 0;
Map<String, String> rowValueMap = new TreeMap<>();
UpdateContainer c = new UpdateContainer();
for (Node node : mainNodes) {
Row row = node.getBelongsToRow();
rowValueMap.put(row.getId(), requestJsonArray.get(i).toString());
//oldValueMap.put(row.getId(),node.getValue().asString());
i = i+1;
}
edit = new MultipleValueEditColumnCommand(mainId, model, mainWorksheetId, mainHNodeId, rowValueMap);
c.append(edit.doIt(workspace));
return c;
//return null;
} catch (Exception e) {
e.printStackTrace();
return new UpdateContainer(new ErrorUpdate("Error!"));
}
}
@Override
public UpdateContainer undoIt(Workspace workspace) {
// TODO Auto-generated method stub
UpdateContainer c = new UpdateContainer();
c.append(edit.undoIt(workspace));
return c;
}
}