package com.psddev.cms.db; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.psddev.dari.util.HtmlGrid; import com.psddev.dari.util.HtmlObject; import com.psddev.dari.util.HtmlWriter; import com.psddev.dari.util.ObjectUtils; /** * @deprecated No replacement. Create your own. */ @Deprecated @Grid.Embedded public class Grid extends Content implements Renderer { @Required private ContentStream contents; @Required private List<GridLayout> layouts; private String defaultContext; private List<GridContext> contexts; public ContentStream getContents() { return contents; } public void setContents(ContentStream contents) { this.contents = contents; } public List<GridLayout> getLayouts() { if (layouts == null) { layouts = new ArrayList<GridLayout>(); } return layouts; } public void setLayouts(List<GridLayout> layouts) { this.layouts = layouts; } public String getDefaultContext() { return defaultContext; } public void setDefaultContext(String defaultContext) { this.defaultContext = defaultContext; } public List<GridContext> getContexts() { if (contexts == null) { contexts = new ArrayList<GridContext>(); } return contexts; } public void setContexts(List<GridContext> contexts) { this.contexts = contexts; } @Override protected void beforeSave() { for (GridLayout l : getLayouts()) { new HtmlGrid(l.getTemplate()); } } @Override public void renderObject( HttpServletRequest request, HttpServletResponse response, HtmlWriter writer) throws IOException { String cssClass = "_gl-" + getId(); int maxSize = 0; HtmlGrid maxGrid = null; writer.writeStart("style", "type", "text/css"); writer.writeCommonGridCss(); for (GridLayout l : getLayouts()) { HtmlGrid grid = new HtmlGrid(l.getTemplate()); int size = grid.getAreas().size(); String prefix = l.getPrefix(); if (maxSize < size) { maxSize = size; maxGrid = grid; } writer.writeGridCss( (ObjectUtils.isBlank(prefix) ? "." : prefix + " .") + cssClass, grid); } writer.writeEnd(); List<HtmlObject> contentRenderers = new ArrayList<HtmlObject>(); String defaultContext = getDefaultContext(); Map<Integer, String> contextsMap = new HashMap<Integer, String>(); for (GridContext c : getContexts()) { String context = c.getContext(); for (Integer area : c.getAreas()) { contextsMap.put(area, context); } } List<?> contents = getContents().findContents(0, maxSize); for (int i = 0, size = contents.size(); i < size; ++ i) { contentRenderers.add(new ContentRenderer( request, response, contents.get(i), ObjectUtils.firstNonNull(contextsMap.get(i), defaultContext))); } writer.writeStart("div", "class", cssClass); writer.writeGrid(contentRenderers, maxGrid); writer.writeEnd(); } private class ContentRenderer implements HtmlObject { private final HttpServletRequest request; private final HttpServletResponse response; private final Object content; private final String context; public ContentRenderer(HttpServletRequest request, HttpServletResponse response, Object content, String context) { this.request = request; this.response = response; this.content = content; this.context = context; } @Override public void format(HtmlWriter writer) throws IOException { try { if (!ObjectUtils.isBlank(context)) { ContextTag.Static.pushContext(request, context); } try { PageFilter.renderObject(request, response, writer, content); } finally { if (!ObjectUtils.isBlank(context)) { ContextTag.Static.popContext(request); } } } catch (ServletException error) { throw new IOException(error); } } } }