package edu.isi.karma.controller.command.alignment; import java.io.PrintWriter; import org.json.JSONException; import org.json.JSONStringer; import org.json.JSONWriter; 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.modeling.alignment.Alignment; import edu.isi.karma.modeling.alignment.AlignmentManager; import edu.isi.karma.rep.Workspace; import edu.isi.karma.rep.alignment.LiteralNode; import edu.isi.karma.rep.alignment.Node; import edu.isi.karma.view.VWorkspace; public class GetLiteralNodeCommand extends WorksheetCommand { private String nodeId; private String alignmentId; private static Logger logger = LoggerFactory.getLogger(AddLiteralNodeCommand.class); protected GetLiteralNodeCommand(String id, String model, String worksheetId, String alignmentId, String nodeId) { super(id, model, worksheetId); this.alignmentId = alignmentId; this.nodeId = nodeId; } @Override public String getCommandName() { return this.getClass().getSimpleName(); } @Override public String getTitle() { return "Get Literal Node"; } @Override public String getDescription() { return null; } @Override public CommandType getCommandType() { return CommandType.notInHistory; } @Override public UpdateContainer doIt(Workspace workspace) throws CommandException { logCommand(logger, workspace); Alignment alignment = AlignmentManager.Instance().getAlignment( alignmentId); final UpdateContainer uc = new UpdateContainer(); Node node = alignment.getNodeById(nodeId); if(node instanceof LiteralNode) { final LiteralNode lNode = (LiteralNode)node; uc.add(new AbstractUpdate() { @Override public void generateJson(String prefix, PrintWriter pw, VWorkspace vWorkspace) { try { JSONStringer jsonStr = new JSONStringer(); JSONWriter writer = jsonStr.object(); writer.key("worksheetId").value(worksheetId); writer.key("updateType").value("LiteralNodeUpdate"); writer.key("node"); writer.object(); writer.key("value").value(lNode.getValue()); String type = lNode.getDatatype().getLocalName(); if(type != null && type.length() > 0) type = lNode.getDatatype().getDisplayName(); else type = ""; writer.key("type").value(type); writer.key("language").value(lNode.getLanguage()); writer.key("isUri").value(lNode.isUri()); writer.endObject(); writer.endObject(); pw.print(writer.toString()); } catch (JSONException e) { logger.error("Error occured while writing to JSON!", e); uc.add(new ErrorUpdate("Error occured while writing to JSON")); } } }); } else { uc.add(new ErrorUpdate("Node does not exist in the Alignment")); } return uc; } @Override public UpdateContainer undoIt(Workspace workspace) { return null; } }