package edu.isi.karma.controller.command.worksheet; import java.io.PrintWriter; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import org.json.JSONArray; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.update.AbstractUpdate; import edu.isi.karma.controller.update.ErrorUpdate; import edu.isi.karma.controller.update.UpdateContainer; import edu.isi.karma.rep.HNode; import edu.isi.karma.rep.HTable; import edu.isi.karma.rep.Worksheet; import edu.isi.karma.rep.Workspace; import edu.isi.karma.view.VWorkspace; public class GetHeadersCommand extends WorksheetCommand { private String hNodeId; private String commandName; private static Logger logger = LoggerFactory .getLogger(FoldCommand.class); protected GetHeadersCommand(String id, String model, String worksheetId, String hNodeId, String commandName) { super(id, model, worksheetId); this.hNodeId = hNodeId; this.commandName = commandName; // TODO Auto-generated constructor stub } @Override public String getCommandName() { return GetHeadersCommand.class.getSimpleName(); } @Override public String getTitle() { return "Get Headers"; } @Override public String getDescription() { return null; } @Override public CommandType getCommandType() { return CommandType.notInHistory; } @Override public UpdateContainer doIt(Workspace workspace) throws CommandException { Worksheet worksheet = workspace.getWorksheet(worksheetId); HTable ht = worksheet.getHeaders(); if (hNodeId.compareTo("") != 0) { HNode hNode = workspace.getFactory().getHNode(hNodeId); HTable parentHT = workspace.getFactory().getHTable(hNode.getHTableId()); if (commandName.compareTo("GroupBy") == 0 || commandName.compareTo("Fold") == 0 || commandName.compareTo("Glue") == 0) ht = hNode.getNestedTable(); else ht = parentHT; } if (ht == null) { return new UpdateContainer(); } final JSONArray array = new JSONArray(); for (HNode hn : ht.getHNodes()) { if (!commandName.equals("Unfold") || (!hn.hasNestedTable() && !hn.getId().equals(hNodeId)) ) { JSONObject obj = new JSONObject(); obj.put("ColumnName", hn.getColumnName()); obj.put("HNodeId", hn.getId()); HashMap<String, HashSet<HNode>> appliedCommands = hn.getAppliedCommands(); JSONArray commands = new JSONArray(); for(Map.Entry<String, HashSet<HNode>> stringHashSetEntry : appliedCommands.entrySet()) { JSONObject com = new JSONObject(); com.put("CommandName", stringHashSetEntry.getKey()); HashSet<HNode> cNodes = stringHashSetEntry.getValue(); JSONArray cols = new JSONArray(); for(HNode cNode : cNodes) { JSONObject col = new JSONObject(); col.put("HNodeId", cNode.getId()); col.put("ColumnName", cNode.getColumnName()); cols.put(col); } com.put("Columns", cols); commands.put(com); } obj.put("appliedCommands", commands); array.put(obj); } } try { return new UpdateContainer(new AbstractUpdate() { @Override public void generateJson(String prefix, PrintWriter pw, VWorkspace vWorkspace) { pw.print(array.toString()); } }); } catch (Exception e) { logger.error("Error occurred while fetching graphs!", e); return new UpdateContainer(new ErrorUpdate("Error occurred while fetching graphs!")); } } @Override public UpdateContainer undoIt(Workspace workspace) { return null; } }