package com.opensymphony.sitemesh.compatability; import com.opensymphony.module.sitemesh.HTMLPage; import com.opensymphony.sitemesh.Content; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import java.util.Map; import java.util.HashMap; /** * Adapts a SiteMesh 3 {@link Content} to a SiteMesh 2 {@link HTMLPage}. * * @author Joe Walnes * @since SiteMesh 3 */ public class Content2HTMLPage implements HTMLPage { private final Content content; private HttpServletRequest request; public Content2HTMLPage(Content content, HttpServletRequest request) { this.content = content; this.request = request; } public void writePage(Writer out) throws IOException { content.writeOriginal(out); } public String getPage() { try { StringWriter writer = new StringWriter(); writePage(writer); return writer.toString(); } catch (IOException e) { throw new IllegalStateException("Could not get page " + e.getMessage(), e); } } public void writeBody(Writer out) throws IOException { content.writeBody(out); } public String getBody() { try { StringWriter writer = new StringWriter(); writeBody(writer); return writer.toString(); } catch (IOException e) { throw new IllegalStateException("Could not get body " + e.getMessage(), e); } } public void writeHead(Writer out) throws IOException { content.writeHead(out); } public String getHead() { try { StringWriter writer = new StringWriter(); writeHead(writer); return writer.toString(); } catch (IOException e) { throw new IllegalStateException("Could not get head " + e.getMessage(), e); } } public String getTitle() { return content.getTitle(); } public String getProperty(String name) { return content.getProperty(name); } public int getIntProperty(String name) { try { return Integer.parseInt(noNull(getProperty(name))); } catch (NumberFormatException e) { return 0; } } public long getLongProperty(String name) { try { return Long.parseLong(noNull(getProperty(name))); } catch (NumberFormatException e) { return 0; } } private String noNull(String property) { return property == null ? "" : property; } public boolean getBooleanProperty(String name) { String property = getProperty(name); if (property == null || property.trim().length() == 0) return false; switch (property.charAt(0)) { case '1': case 't': case 'T': case 'y': case 'Y': return true; default: return false; } } public boolean isPropertySet(String name) { return getProperty(name) != null; } public String[] getPropertyKeys() { return content.getPropertyKeys(); } public Map getProperties() { Map result = new HashMap(); String[] keys = content.getPropertyKeys(); for (int i = 0; i < keys.length; i++) { result.put(keys[i], content.getProperty(keys[i])); } return result; } public boolean isFrameSet() { return isPropertySet("frameset") && getProperty("frameset").equalsIgnoreCase("true"); } public void setFrameSet(boolean frameset) { addProperty("frameset", frameset ? "true" : "false"); } /** * @see com.opensymphony.module.sitemesh.Page#getRequest() */ public HttpServletRequest getRequest() { return request; } /** * Create snapshot of Request. * * @see com.opensymphony.module.sitemesh.Page#getRequest() */ public void setRequest(HttpServletRequest request) { this.request = request; } public void addProperty(String name, String value) { content.addProperty(name, value); } }