package com.psddev.cms.tool.page; import java.io.IOException; import com.psddev.cms.db.Preview; import com.psddev.cms.db.ToolUser; import com.psddev.cms.db.ToolUserAction; import com.psddev.cms.tool.ToolPageContext; import com.psddev.dari.db.Query; import com.psddev.dari.db.State; import com.psddev.dari.util.JspUtils; import com.psddev.dari.util.ObjectUtils; import com.psddev.dari.util.StringUtils; public abstract class LookingGlassView { protected void doRenderAction(ToolPageContext page, Object content, String mirrorUrl) throws IOException { } public void renderAction(ToolPageContext page, ToolUser user, ToolUserAction action) throws IOException { Object content = Query .from(Object.class) .where("_id = ?", action.getContentId()) .first(); Preview preview = Query .from(Preview.class) .where("_id = ?", user.getCurrentPreviewId()) .first(); String mirrorUrl = StringUtils.addQueryParameters(preview != null && ObjectUtils.equals(action.getContentId(), preview.getObjectId()) ? JspUtils.getAbsolutePath(page.getRequest(), "/_preview", "_cms.db.previewId", preview.getId()) : action.getUrl(), "_mirror", true); doRenderAction(page, content, mirrorUrl); } private abstract static class QueryParametersView extends LookingGlassView { protected abstract String changeMirrorUrl(String mirrorUrl); @Override protected void doRenderAction(ToolPageContext page, Object content, String mirrorUrl) throws IOException { page.writeStart("div", "style", page.cssString("margin", "0 -20px")); page.writeStart("iframe", "src", changeMirrorUrl(mirrorUrl), "style", page.cssString( "border-style", "none", "height", "10000px", "width", "100%")); page.writeEnd(); page.writeEnd(); } } public static class PreviewView extends QueryParametersView { @Override protected String changeMirrorUrl(String mirrorUrl) { return mirrorUrl; } } public static class DebugView extends QueryParametersView { @Override protected String changeMirrorUrl(String mirrorUrl) { return StringUtils.addQueryParameters(mirrorUrl, "_debug", true); } } public static class GridView extends QueryParametersView { @Override protected String changeMirrorUrl(String mirrorUrl) { return StringUtils.addQueryParameters(mirrorUrl, "_grid", true); } } public static class HtmlApiView extends QueryParametersView { @Override protected String changeMirrorUrl(String mirrorUrl) { return StringUtils.addQueryParameters(mirrorUrl, "_format", "json"); } } public static class EditView extends LookingGlassView { @Override protected void doRenderAction(ToolPageContext page, Object content, String mirrorUrl) throws IOException { page.writeStart("div", "style", page.cssString( "margin", "0 -20px", "overflow", "hidden")); page.writeStart("iframe", "src", page.cmsUrl("/content/edit.jsp", "_mirror", true, "id", State.getInstance(content).getId()), "style", page.cssString( "border-style", "none", "height", "10000px", "margin-top", "-70px", "width", "100%")); page.writeEnd(); page.writeEnd(); } } }