package scrum.server.common; import ilarkesto.base.PermissionDeniedException; import ilarkesto.base.time.Date; import ilarkesto.pdf.itext.PdfBuilder; import ilarkesto.webapp.Servlet; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import scrum.server.WebSession; import scrum.server.calendar.CalendarPdfCreator; import scrum.server.collaboration.Wikipage; import scrum.server.collaboration.WikipagePdfCreator; import scrum.server.impediments.ImpedimentListPdfCreator; import scrum.server.project.ProductBacklogPdfCreator; import scrum.server.risks.RiskListPdfCreator; import scrum.server.sprint.Sprint; import scrum.server.sprint.SprintBacklogPdfCreator; import scrum.server.sprint.SprintReportPdfCreator; public class PdfServlet extends AHttpServlet { private APdfCreator getPdfCreator(String pdfId, HttpServletRequest req, WebSession session) { if (pdfId.equals("sprintReport")) return createSprintReport(req, session); if (pdfId.equals("wikipage")) return createWikipage(req, session); if (pdfId.equals("productBacklog")) return createProductBacklog(req, session); if (pdfId.equals("sprintBacklog")) return createSprintBacklog(req, session); if (pdfId.equals("impedimentList")) return createImpedimentList(req, session); if (pdfId.equals("riskList")) return createRiskList(req, session); if (pdfId.equals("calendar")) return createCalendar(req, session); throw new RuntimeException("Unknown pdfId: " + pdfId); } private APdfCreator createCalendar(HttpServletRequest req, WebSession session) { Date from = new Date(req.getParameter("from")); Date to = new Date(req.getParameter("to")); return new CalendarPdfCreator(getProject(session, req), from, to); } private APdfCreator createRiskList(HttpServletRequest req, WebSession session) { return new RiskListPdfCreator(getProject(session, req)); } private APdfCreator createImpedimentList(HttpServletRequest req, WebSession session) { return new ImpedimentListPdfCreator(getProject(session, req)); } private APdfCreator createSprintBacklog(HttpServletRequest req, WebSession session) { return new SprintBacklogPdfCreator(getProject(session, req)); } private APdfCreator createProductBacklog(HttpServletRequest req, WebSession session) { return new ProductBacklogPdfCreator(getProject(session, req)); } private APdfCreator createWikipage(HttpServletRequest req, WebSession session) { Wikipage wikipage = getEntityByParameter(req, Wikipage.class); if (!wikipage.isProject(getProject(session, req))) throw new PermissionDeniedException(); return new WikipagePdfCreator(wikipage); } private APdfCreator createSprintReport(HttpServletRequest req, WebSession session) { Sprint sprint = getEntityByParameter(req, Sprint.class); if (!sprint.isProject(getProject(session, req))) throw new PermissionDeniedException(); return new SprintReportPdfCreator(sprint); } @Override protected void onRequest(HttpServletRequest req, HttpServletResponse resp, WebSession session) throws IOException { String pdfId = req.getParameter("pdfId"); if (pdfId == null) throw new RuntimeException("pdfId==null"); APdfCreator creator = getPdfCreator(pdfId, req, session); resp.setContentType("application/pdf"); Servlet.setFilename(creator.getFilename() + ".pdf", resp); PdfBuilder pdf = new PdfBuilder(); creator.build(pdf); pdf.write(resp.getOutputStream()); } }