/* * $Id: ListServlet.java 378 2006-05-17 00:11:14Z jon $ * $URL: http://subetha.tigris.org/svn/subetha/trunk/frontend/src/org/subethamail/web/servlet/ListServlet.java $ */ package org.subethamail.web.servlet; import java.io.BufferedOutputStream; import java.io.IOException; import javax.inject.Inject; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.subethamail.common.ExportMessagesException; import org.subethamail.common.NotFoundException; import org.subethamail.core.lists.i.Archiver; import org.subethamail.core.lists.i.ExportFormat; import org.subethamail.entity.i.PermissionException; /** * This servlet will exported messages for a list. The format is passed through. * * The format of the url has to be /id/[format]/filename. If format is omitted it will default to rfc2822directory (maildir like). */ public class ExportServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Inject Archiver archiver; /* * (non-Javadoc) * * @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, * javax.servlet.http.HttpServletResponse) */ @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Long listId = null; String[] pathSplit = request.getPathInfo().split("/"); String tmpId = (pathSplit.length > 1) ? pathSplit[1] : null; ExportFormat format = null; if (pathSplit.length > 2) { try { format = ExportFormat.valueOf(pathSplit[2]); } catch (IllegalArgumentException iae) { } finally { format = (format == null) ? ExportFormat.RFC2822DIRECTORY : format; } } listId = Long.parseLong(tmpId); try { if (listId == null) throw new NotFoundException("List not found: invalid id!"); switch (format) { case MBOX: //response.setHeader("Content-Disposition", "attachment"); response.setContentType("application/mbox"); break; case RFC2822DIRECTORY: response.setHeader("Content-Disposition", "attachment"); response.setContentType("application/x-compressed"); break; } BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream()); archiver.exportList(listId, format, bos); } catch (PermissionException pex) { RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher( "/error_permission.jsp"); request.setAttribute("javax.servlet.error.exception", pex); dispatcher.forward(request, response); } catch (NotFoundException nfex) { RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher( "/error_notfound.jsp"); request.setAttribute("javax.servlet.error.exception", nfex); dispatcher.forward(request, response); } catch (ExportMessagesException eme) { RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/error_notfound.jsp"); request.setAttribute("javax.servlet.error.exception", eme); dispatcher.forward(request, response); } } }