package edu.isi.karma.controller.command.alignment; import java.io.PrintWriter; import java.util.List; 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.WorksheetSelectionCommand; import edu.isi.karma.controller.update.AbstractUpdate; 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.LabeledLink; import edu.isi.karma.rep.alignment.NodeType; import edu.isi.karma.view.VWorkspace; public class GetLinkSuggestionsCommand extends WorksheetSelectionCommand { private final String hNodeId; private static Logger logger = LoggerFactory.getLogger(GetLinkSuggestionsCommand.class.getSimpleName()); private enum Arguments { links, source, target, uri, label, id } public GetLinkSuggestionsCommand(String id, String model, String worksheetId, String hNodeId, String selectionId) { super(id, model, worksheetId, selectionId); this.hNodeId = hNodeId; } @Override public String getCommandName() { return this.getClass().getSimpleName(); } @Override public String getTitle() { return null; } @Override public String getDescription() { return null; } @Override public CommandType getCommandType() { return CommandType.notInHistory; } @Override public UpdateContainer doIt(final Workspace workspace) throws CommandException { logger.info("Get Link Suggestions: " + worksheetId + "," + hNodeId); UpdateContainer uc = new UpdateContainer(); final Alignment alignment = AlignmentManager.Instance().getAlignment(workspace.getId(), worksheetId); final List<LabeledLink> finalProperties = alignment.suggestLinks(hNodeId); uc.add(new AbstractUpdate() { @Override public void generateJson(String prefix, PrintWriter pw, VWorkspace vWorkspace) { JSONObject result = new JSONObject(); JSONArray links = new JSONArray(); for(LabeledLink property : finalProperties) { if(property.getTarget().getType() == NodeType.ColumnNode) continue; JSONObject link = new JSONObject(); link.put(Arguments.uri.name(), property.getUri()); link.put(Arguments.label.name(), property.getLabel().getDisplayName()); JSONObject sourceObject = new JSONObject(); sourceObject.put(Arguments.uri.name(), property.getSource().getUri()); sourceObject.put(Arguments.id.name(), property.getSource().getId()); sourceObject.put(Arguments.label.name(), property.getSource().getLabel().getDisplayName()); JSONObject targetObject = new JSONObject(); targetObject.put(Arguments.uri.name(), property.getTarget().getUri()); targetObject.put(Arguments.id.name(), property.getTarget().getId()); targetObject.put(Arguments.label.name(), property.getTarget().getLabel().getDisplayName()); link.put(Arguments.source.name(), sourceObject); link.put(Arguments.target.name(), targetObject); links.put(link); logger.info("Suggestion:" + link.toString()); } result.put(Arguments.links.name(), links); pw.println(result.toString()); } }); return uc; } @Override public UpdateContainer undoIt(Workspace workspace) { return null; } }