
import java.io.*;

public class AlbumServlet extends PhotoApplicationServlet
{
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
        throws ServletException,
        IOException
    {

        User user = getCurrentUser(request);
        if (user == null)
        {
            response.sendRedirect(LOGIN_PAGE_URL);
            return;
        }

        response.setContentType("text/html");

        disableCache(response);

        String albumName = request.getParameter("album");

        PrintWriter out = response.getWriter();

        if (albumName == null || albumName.equals(""))
        {
            // print error
            out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Error</title>");
            out.println("</head>");
            out.println("<body><p class='error'>");
            out.print("Missing parameter: album");
            out.print("</p></body>");
            out.println("</html>");
            return;
        }

        Album album = loadAlbumByName(albumName);
        if (album == null)
        {
            // print error
            out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Error</title>");
            out.println("<body><p class='error'>Could not load album '" + albumName + "'</p></body>");
            out.println("</html>");
            return;
        }

        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Album: " + album.getName() + "</title>" );
        out.println("</head>");
        out.println("<body>");

        out.println("<h1>Album: " + album.getName() + "</h1>");

        String pageParameter = request.getParameter("page");
        int page;
        if (pageParameter == null || pageParameter.equals(""))
        {
            page = 0;
        }
        else
        {
            page = Integer.parseInt(pageParameter);
        }

        out.println("<table border=0>");

        int start = page * 20;
        int end = start + 20;
        end = Math.min(end, album.getPictures().size());
        for (int i=start; i<end; ++i)
        {
            Picture picture = (Picture)album.getPictures().get(i);
            printPicture(out, picture);
        }

        out.println("</table>");

        out.println("<center>");
        if (page > 0) {
            out.print("<a href='?page=" + (page-1) + "'>&lt;&lt; previous</a>&nbsp;");
        }
        if (end < album.getPictures().size()) {
            out.print("&nbsp;<a href='?page=" + (page+1) + "'>next &gt;&gt;</a>");
        }
        out.println("<center>");

        out.flush();
    }

    User getCurrentUser(HttpServletRequest request)
    {
        return (User)(request.getSession(true).getAttribute(CURRENT_USER_SESSION_ATTRIBUTE));
    }

    private void disableCache(HttpServletResponse response)
    {
        response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1
        response.setHeader("Pragma", "no-cache"); //HTTP 1.0
        // prevents caching at the proxy server
        response.setHeader("Expires", "Thu, 01 Jan 1970 00:00:00 GMT");
    }

    private void printPicture(PrintWriter out, Picture picture)
    {
        out.print("<tr><td><a href='" + picture.getImageSource() + "'>");
        out.print("<img src='" + picture.getThumbnailImageSource() + "' border='0'>");
        out.print("</a>");
        out.print("</td>");
        out.print("<td>");
        out.print(picture.getCaption());
        out.print("</td>");
        out.println("</tr>");
    }
}
