package org.jboss.seam.document; import java.io.IOException; import javax.faces.context.FacesContext; import javax.faces.event.PhaseEvent; import javax.faces.event.PhaseId; import javax.faces.event.PhaseListener; import javax.servlet.http.HttpServletResponse; import org.jboss.seam.log.LogProvider; import org.jboss.seam.log.Logging; import org.jboss.seam.navigation.Pages; import org.jboss.seam.web.Parameters; public class DocumentStorePhaseListener implements PhaseListener { private static final long serialVersionUID = 7308251684939658978L; private static final LogProvider log = Logging.getLogProvider(DocumentStorePhaseListener.class); public PhaseId getPhaseId() { return PhaseId.RENDER_RESPONSE; } public void afterPhase(PhaseEvent phaseEvent) { // ... } public void beforePhase(PhaseEvent phaseEvent) { String rootId = Pages.getViewId(phaseEvent.getFacesContext()); Parameters params = Parameters.instance(); String id = (String) params.convertMultiValueRequestParameter(params.getRequestParameters(), "docId", String.class); if (rootId.contains(DocumentStore.DOCSTORE_BASE_URL)) { sendContent(phaseEvent.getFacesContext(), id); } } public void sendContent(FacesContext context, String contentId) { try { DocumentData documentData = DocumentStore.instance().getDocumentData(contentId); if (documentData != null) { HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse(); response.setContentType(documentData.getDocumentType().getMimeType()); response.setHeader("Content-Disposition", documentData.getDisposition() + "; filename=\"" + documentData.getFileName() + "\""); documentData.writeDataToStream(response.getOutputStream()); context.responseComplete(); } } catch (IOException e) { log.warn(e); } } }