1 9 package org.jboss.portal.core.theme.tag.basic; 10 11 import org.jboss.portal.server.PortalRequest; 12 import org.jboss.portal.server.PortalResponse; 13 import org.jboss.portal.server.PortalServer; 14 import org.jboss.portal.server.ServerObjectID; 15 import org.jboss.portal.server.Window; 16 import org.jboss.portal.server.WindowContext; 17 import org.jboss.portal.server.WindowURL; 18 import org.jboss.portal.server.output.FragmentResult; 19 import org.jboss.portal.server.plugins.mode.Mode; 20 import org.jboss.portal.server.plugins.windowstate.WindowState; 21 import org.jboss.portal.server.theme.Item; 22 import org.jboss.portal.server.theme.PageHolder; 23 import org.jboss.portal.server.theme.Region; 24 import org.jboss.portal.server.theme.RegionSet; 25 26 import javax.servlet.jsp.JspException ; 27 import javax.servlet.jsp.tagext.BodyTagSupport ; 28 import javax.servlet.jsp.tagext.IterationTag ; 29 import javax.servlet.jsp.tagext.Tag ; 30 import java.io.StringWriter ; 31 import java.util.ArrayList ; 32 import java.util.HashSet ; 33 import java.util.Iterator ; 34 import java.util.List ; 35 import java.util.Set ; 36 import java.util.StringTokenizer ; 37 38 42 public class IterateTag extends BodyTagSupport 43 { 44 45 48 private String region; 49 50 53 private Iterator iterator; 54 55 58 private FragmentResult fragment; 59 60 63 private PortalServer server; 64 65 68 Window window; 69 70 73 PortalResponse resp; 74 75 78 WindowURL navURL; 79 80 public String getRegion() 81 { 82 return region; 83 } 84 85 public void setRegion(String region) 86 { 87 this.region = region; 88 } 89 90 92 private boolean next() 93 { 94 if (iterator.hasNext()) 95 { 96 Item item = (Item)iterator.next(); 97 fragment = item.getFragment(); 98 99 WindowContext wctx = fragment.getProducer(); 101 ServerObjectID id = wctx.getID(); 102 window = (Window)server.getObject(id); 103 104 navURL = (WindowURL)window.createURL(); 106 navURL.setType(WindowURL.TYPE_NAVIGATION); 107 108 String title = fragment.getTitle(); 110 pageContext.setAttribute(IterateTEI.IMPLICIT_TITLE, String.valueOf(title)); 111 112 StringWriter chars = fragment.getChars(); 114 String content = chars == null ? "" : chars.toString(); 115 pageContext.setAttribute(IterateTEI.IMPLICIT_CONTENT, content); 116 117 pageContext.setAttribute(IterateTEI.IMPLICIT_CURRENT_MODE, String.valueOf(wctx.getMode())); 119 120 Set modes = new HashSet (); 122 for (Iterator i = window.getSupportedModes("text/html").iterator(); i.hasNext();) 123 { 124 Mode mode = (Mode)i.next(); 125 modes.add(mode.toString()); 126 } 127 pageContext.setAttribute(IterateTEI.IMPLICIT_SUPPORTED_MODES, modes); 128 129 pageContext.setAttribute(IterateTEI.IMPLICIT_CURRENT_WINDOW_STATE, String.valueOf(wctx.getWindowState())); 131 132 Set windowStates = new HashSet (); 134 for (Iterator i = window.getSupportedWindowStates().iterator(); i.hasNext();) 135 { 136 WindowState windowState = (WindowState)i.next(); 137 windowStates.add(windowState.toString()); 138 } 139 pageContext.setAttribute(IterateTEI.IMPLICIT_SUPPORTED_WINDOW_STATES, windowStates); 140 141 return true; 142 } 143 else 144 { 145 fragment = null; 146 return false; 147 } 148 } 149 150 public int doStartTag() throws JspException 151 { 152 PortalRequest preq = (PortalRequest)pageContext.getRequest().getAttribute("REQ"); 153 PageHolder page = (PageHolder)pageContext.getRequest().getAttribute("PAGE"); 154 RegionSet regions = page.getRegions(); 155 156 List items = new ArrayList (10); 158 for (StringTokenizer tokenizer = new StringTokenizer (this.region, ","); tokenizer.hasMoreTokens();) 159 { 160 String token = tokenizer.nextToken().trim(); 161 Region region = regions.getRegion(token); 162 if (region != null) 163 { 164 for (Iterator i = region.items(); i.hasNext();) 165 { 166 Item item = (Item)i.next(); 167 items.add(item); 168 } 169 } 170 } 171 172 resp = (PortalResponse)pageContext.getRequest().getAttribute("RESP"); 174 server = preq.getServer(); 175 iterator = items.iterator(); 176 if (next()) 177 { 178 return Tag.EVAL_BODY_INCLUDE; 179 } 180 else 181 { 182 return Tag.SKIP_BODY; 183 } 184 } 185 186 public int doAfterBody() throws JspException 187 { 188 if (next()) 189 { 190 return IterationTag.EVAL_BODY_AGAIN; 191 } 192 else 193 { 194 return IterationTag.SKIP_BODY; 195 } 196 } 197 198 public int doEndTag() throws JspException 199 { 200 resp = null; 201 iterator = null; 202 server = null; 203 fragment = null; 204 window = null; 205 resp = null; 206 navURL = null; 207 return Tag.EVAL_PAGE; 208 } 209 } 210 | Popular Tags |