package com.opensymphony.sitemesh.compatability; import com.opensymphony.module.sitemesh.*; import com.opensymphony.module.sitemesh.filter.HttpContentType; import com.opensymphony.sitemesh.Content; import com.opensymphony.sitemesh.SiteMeshContext; import com.opensymphony.sitemesh.webapp.SiteMeshWebAppContext; import com.opensymphony.sitemesh.ContentProcessor; import javax.servlet.http.HttpServletRequest; import java.io.IOException; /** * Adapts a SiteMesh 2 {@link PageParser} to a SiteMesh 3 {@link ContentProcessor}. * * @author Joe Walnes * @since SiteMesh 3 */ public class PageParser2ContentProcessor implements ContentProcessor { private final Factory factory; public PageParser2ContentProcessor(Factory factory) { this.factory = factory; } public boolean handles(SiteMeshContext context) { SiteMeshWebAppContext webAppContext = (SiteMeshWebAppContext) context; return !factory.isPathExcluded(extractRequestPath(webAppContext.getRequest())); } private String extractRequestPath(HttpServletRequest request) { String servletPath = request.getServletPath(); String pathInfo = request.getPathInfo(); String query = request.getQueryString(); return (servletPath == null ? "" : servletPath) + (pathInfo == null ? "" : pathInfo) + (query == null ? "" : ("?" + query)); } public boolean handles(String contentType) { return factory.shouldParsePage(contentType); } public Content build(SitemeshBuffer buffer, SiteMeshContext context) throws IOException { HttpContentType httpContentType = new HttpContentType(context.getContentType()); PageParser pageParser = factory.getPageParser(httpContentType.getType()); Page page = pageParser.parse(buffer); return new HTMLPage2Content((HTMLPage) page); } }