1 9 10 package org.jboss.portal.core.theme.tag; 11 12 import org.apache.log4j.Logger; 13 import org.jboss.portal.common.MediaType; 14 import org.jboss.portal.core.theme.render.RendererFactory; 15 import org.jboss.portal.server.LayoutServer; 16 import org.jboss.portal.server.theme.LayoutConstants; 17 import org.jboss.portal.server.theme.PageHolder; 18 import org.jboss.portal.server.theme.PortalLayout; 19 import org.jboss.portal.server.theme.PortalRenderSet; 20 import org.jboss.portal.server.theme.Region; 21 import org.jboss.portal.server.theme.RegionOrientation; 22 import org.jboss.portal.server.theme.RegionSet; 23 import org.jboss.portal.server.theme.render.RenderContext; 24 import org.jboss.portal.server.theme.render.RenderException; 25 26 import javax.activation.MimeTypeParseException ; 27 import javax.servlet.http.HttpServletRequest ; 28 import javax.servlet.http.HttpServletResponse ; 29 import javax.servlet.jsp.JspException ; 30 import javax.servlet.jsp.JspWriter ; 31 import javax.servlet.jsp.PageContext ; 32 import javax.servlet.jsp.tagext.SimpleTagSupport ; 33 import java.io.IOException ; 34 import java.util.Iterator ; 35 36 47 public class RegionTagHandler 48 extends SimpleTagSupport 49 { 50 private static Logger log = Logger.getLogger(RegionTagHandler.class); 51 private RegionOrientation orientation = RegionOrientation.VERTICAL; 53 private String regionName = null; 54 55 61 public void doTag() throws JspException , IOException 62 { 63 log.debug("rendering " + regionName + " [" + orientation + "]"); 64 65 PageContext app = (PageContext )getJspContext(); 67 HttpServletRequest request = (HttpServletRequest )app.getRequest(); 68 HttpServletResponse response = (HttpServletResponse )app.getResponse(); 69 70 PageHolder requestedPage = (PageHolder)request.getAttribute(LayoutConstants.ATTR_PAGE); 71 JspWriter out = this.getJspContext().getOut(); 72 if (requestedPage == null) 73 { 74 out.write("<p bgcolor='red'>No page to render!</p>"); 75 out.write("<p bgcolor='red'>The page to render (PageHolder) must be set in the request attribute '" + 76 LayoutConstants.ATTR_PAGE + "'</p>"); 77 out.flush(); 78 return; 79 } 80 81 RegionSet regions = requestedPage.getRegions(); 82 83 Region region = null; 84 85 if (regionName != null) 86 { 87 if (regions.getRegion(regionName) == null) 88 { 89 log.warn("requested page has no region [" + regionName + "]"); 90 return; 91 } 92 } 93 94 try 96 { 97 LayoutServer layoutServer = (LayoutServer)request.getAttribute(LayoutConstants.ATTR_LAYOUTSERVER); 98 if (layoutServer == null) 99 { 100 log.error("no layout server provided in this request"); 101 throw new JspException ("no layout server provided in this request"); 102 } 103 104 MediaType mediaType = getMediaTypeFromResponse(response); 106 107 PortalLayout layout = (PortalLayout)request.getAttribute(LayoutConstants.PARAM_LAYOUT); 109 PortalRenderSet renderSet = layoutServer.getRenderSet(layout, mediaType); 110 String renderSetName = (String )request.getAttribute(LayoutConstants.ATTR_RENDERSET); 111 112 if (renderSet == null && renderSetName != null) 113 { 114 renderSet = layoutServer.getRenderSet(renderSetName, mediaType); 115 } 116 117 if (renderSet == null) 118 { 119 log.error("render set cannot be determined : " + renderSetName); 120 throw new JspException ("render set cannot be determined : " + renderSetName); 121 } 122 123 if (regionName != null) 125 { 126 if (regions.getRegion(regionName) != null) 127 { 128 region = regions.getRegion(regionName); 129 renderRegion(renderSet, mediaType, request, region, out); 130 } 131 } 132 else 133 { 134 for (Iterator i = regions.getRegionNames().iterator(); i.hasNext();) 140 { 141 region = regions.getRegion((String )i.next()); 142 renderRegion(renderSet, mediaType, request, region, out); 143 } 144 } 145 146 } 147 catch (RenderException e) 148 { 149 log.error(e); 150 out.write("<p>" + e.getMessage() + "</p>"); 151 out.flush(); 152 } 153 154 log.debug("done rendering page region [" + regionName + "]"); 155 } 156 157 private void renderRegion(PortalRenderSet renderSet, MediaType mediaType, HttpServletRequest request, Region region, JspWriter out) 158 throws RenderException, IOException 159 { 160 RenderContext renderContext = 161 RendererFactory.getRenderContext(renderSet, mediaType, orientation, request); 162 163 renderSet.getRegionRenderer().render(renderContext, region); 164 out.write(renderContext.getMarkupFragment().toString()); 165 out.flush(); 166 } 167 168 private static MediaType getMediaTypeFromResponse(HttpServletResponse response) 169 { 170 MediaType contentType = MediaType.HTML; 171 if (response.getContentType() != null) 172 { 173 try 174 { 175 contentType = MediaType.parseMimeType(response.getContentType()); 176 } 177 catch (MimeTypeParseException e) 178 { 179 log.error(e); 180 } 181 } 182 return contentType; 183 } 184 185 186 188 193 public void setOrientation(String orientation) 194 { 195 if (orientation == null) 196 { 197 log.error("no null value allowed"); 198 } 199 200 try 201 { 202 this.orientation = RegionOrientation.parseOrientation(orientation); 203 } 204 catch (IllegalArgumentException e) 205 { 206 log.error(e); 207 } 208 } 209 210 215 public void setRegionName(String regionName) 216 { 217 this.regionName = regionName; 218 } 219 } 220 | Popular Tags |