package com.xenoage.zong.webserver.actions; import static com.xenoage.zong.webserver.util.Database.stmt; import static com.xenoage.zong.webserver.util.Database.unixTime; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.http.HttpServletResponse; import com.xenoage.zong.webserver.Webserver; import com.xenoage.zong.webserver.model.requests.CursorRequest; import com.xenoage.zong.webserver.model.requests.Request; import com.xenoage.zong.webserver.util.Response; /** * Responds to a {@link CursorRequest}. * * @author Andreas Wenger */ public class CursorAction extends RetryAction { @Override public boolean performTry(Request request, Webserver server, HttpServletResponse response) throws SQLException, IOException { CursorRequest cursorRequest = getAs(CursorRequest.class, request); Connection db = server.getDBConnection(); //get ID of document PreparedStatement stmtID = stmt(db, "SELECT id FROM docs WHERE public_id = ?", cursorRequest.id); ResultSet resID = stmtID.executeQuery(); if (!resID.next()) { stmtID.close(); return false; } int docID = resID.getInt(1); stmtID.close(); //deliver cursor data PreparedStatement stmtCursor = stmt(db, "SELECT cursors FROM cursors WHERE doc_id = ?", docID); ResultSet resCursor = stmtCursor.executeQuery(); if (!resCursor.next()) { stmtCursor.close(); return false; } String sCursor = resCursor.getString(1); response.setHeader("Content-Type", Response.mimetypeJson); response.getWriter().print(sCursor); stmtCursor.close(); //update access time PreparedStatement stmtTime = stmt(db, "UPDATE docs SET last_access = ? WHERE id = ?", unixTime(), docID); stmtTime.executeUpdate(); stmtTime.close(); return true; } }