package com.metaweb.gridworks.commands.row; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.metaweb.gridworks.commands.Command; import com.metaweb.gridworks.history.HistoryEntry; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.model.changes.RowFlagChange; import com.metaweb.gridworks.model.changes.RowStarChange; import com.metaweb.gridworks.process.QuickHistoryEntryProcess; public class AnnotateOneRowCommand extends Command { @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Type", "application/json"); try { Project project = getProject(request); int rowIndex = Integer.parseInt(request.getParameter("row")); String starredString = request.getParameter("starred"); if (starredString != null) { boolean starred = "true".endsWith(starredString); String description = (starred ? "Star row " : "Unstar row ") + (rowIndex + 1); StarOneRowProcess process = new StarOneRowProcess( project, description, rowIndex, starred ); performProcessAndRespond(request, response, project, process); return; } String flaggedString = request.getParameter("flagged"); if (flaggedString != null) { boolean flagged = "true".endsWith(flaggedString); String description = (flagged ? "Flag row " : "Unflag row ") + (rowIndex + 1); FlagOneRowProcess process = new FlagOneRowProcess( project, description, rowIndex, flagged ); performProcessAndRespond(request, response, project, process); return; } respond(response, "{ \"code\" : \"error\", \"message\" : \"invalid command parameters\" }"); } catch (Exception e) { respondException(response, e); } } protected static class StarOneRowProcess extends QuickHistoryEntryProcess { final int rowIndex; final boolean starred; StarOneRowProcess( Project project, String briefDescription, int rowIndex, boolean starred ) { super(project, briefDescription); this.rowIndex = rowIndex; this.starred = starred; } protected HistoryEntry createHistoryEntry(long historyEntryID) throws Exception { return new HistoryEntry( historyEntryID, _project, (starred ? "Star row " : "Unstar row ") + (rowIndex + 1), null, new RowStarChange(rowIndex, starred) ); } } protected static class FlagOneRowProcess extends QuickHistoryEntryProcess { final int rowIndex; final boolean flagged; FlagOneRowProcess( Project project, String briefDescription, int rowIndex, boolean flagged ) { super(project, briefDescription); this.rowIndex = rowIndex; this.flagged = flagged; } protected HistoryEntry createHistoryEntry(long historyEntryID) throws Exception { return new HistoryEntry( historyEntryID, _project, (flagged ? "Flag row " : "Unflag row ") + (rowIndex + 1), null, new RowFlagChange(rowIndex, flagged) ); } } }