package com.opensymphony.sitemesh.webapp; import com.opensymphony.module.sitemesh.SitemeshBuffer; import com.opensymphony.module.sitemesh.filter.PageResponseWrapper; import com.opensymphony.module.sitemesh.PageParserSelector; import com.opensymphony.module.sitemesh.PageParser; import com.opensymphony.sitemesh.ContentProcessor; import com.opensymphony.sitemesh.Content; import javax.servlet.http.HttpServletResponseWrapper; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author Joe Walnes * @since SiteMesh 3 */ public class ContentBufferingResponse extends HttpServletResponseWrapper { // TODO: Temporary SM3 migration implementation! Wraps SM2 PageResponseWrapper. This class is an evil stopgap. // Eventually PageResponseWrapper will go away and the functionality will be rolled into this class. private final PageResponseWrapper pageResponseWrapper; private final ContentProcessor contentProcessor; private final SiteMeshWebAppContext webAppContext; public ContentBufferingResponse(HttpServletResponse response, final ContentProcessor contentProcessor, final SiteMeshWebAppContext webAppContext) { super(new PageResponseWrapper(response, new PageParserSelector() { public boolean shouldParsePage(String contentType) { return contentProcessor.handles(contentType); } public PageParser getPageParser(String contentType) { // Migration: Not actually needed by PageResponseWrapper, so long as getPage() isn't called. return null; } }){ public void setContentType(String contentType) { webAppContext.setContentType(contentType); super.setContentType(contentType); } }); this.contentProcessor = contentProcessor; this.webAppContext = webAppContext; pageResponseWrapper = (PageResponseWrapper) getResponse(); } public boolean isUsingStream() { return pageResponseWrapper.isUsingStream(); } public Content getContent() throws IOException { SitemeshBuffer content = pageResponseWrapper.getContents(); if (content != null) { return contentProcessor.build(content, webAppContext); } else { return null; } } }