1 18 package org.apache.beehive.netui.tags.template; 19 20 import org.apache.beehive.netui.util.internal.InternalStringBuilder; 21 22 import org.apache.beehive.netui.tags.AbstractClassicTag; 23 import org.apache.beehive.netui.tags.javascript.IScriptReporter; 24 import org.apache.beehive.netui.tags.javascript.ScriptRequestState; 25 import org.apache.beehive.netui.tags.divpanel.DivPanel; 26 import org.apache.beehive.netui.tags.databinding.repeater.Repeater; 27 import org.apache.beehive.netui.util.Bundle; 28 29 import javax.servlet.ServletRequest ; 30 import javax.servlet.http.HttpServletRequest ; 31 import javax.servlet.jsp.JspException ; 32 import javax.servlet.jsp.tagext.BodyContent ; 33 import javax.servlet.jsp.tagext.Tag ; 34 import java.util.HashMap ; 35 36 import org.apache.struts.util.ResponseUtils; 37 38 123 public class Section extends AbstractClassicTag 124 implements TemplateConstants 125 { 126 129 private String _name; 130 131 134 private boolean _visible = true; 135 136 141 public String getTagName() { 142 return "Section"; 143 } 144 145 167 public void setName(String name) { 168 _name = name; 169 } 170 171 185 public void setVisible(boolean visible) { 186 _visible = visible; 187 } 188 189 195 public int doStartTag() 196 throws JspException { 197 198 if (!_visible) 199 return SKIP_BODY; 200 201 Tag parentTag = getParent(); 203 if (parentTag instanceof Repeater) { 205 parentTag = parentTag.getParent(); 206 if (!(parentTag instanceof DivPanel)) { 207 String s = Bundle.getString("Temp_SectionInRepeater"); 208 registerTagError(s,null); 209 reportErrors(); 210 localRelease(); 211 return EVAL_PAGE; 212 } 213 } 214 if (parentTag instanceof DivPanel) { 215 InternalStringBuilder results = new InternalStringBuilder(128); 216 results.append("<div "); 217 renderTagId(results); 218 if (hasErrors()) { 219 reportErrors(); 220 localRelease(); 221 return EVAL_PAGE; 222 } 223 results.append(">"); 224 ResponseUtils.write(pageContext,results.toString()); 225 return EVAL_BODY_BUFFERED; 226 } 227 228 return EVAL_BODY_BUFFERED; 229 } 230 231 239 public int doEndTag() 240 throws JspException { 241 242 Tag parentTag = getParent(); 244 if (parentTag instanceof Repeater) { 245 parentTag = parentTag.getParent(); 246 } 247 if (parentTag instanceof DivPanel) { 248 return processDivPanel(); 249 } 250 assert(parentTag instanceof Template); 251 return processTemplate(); 252 } 253 254 257 protected void localRelease() { 258 super.localRelease(); 259 _name = null; 260 _visible = true; 261 } 262 263 267 private int processDivPanel() 268 throws JspException { 269 270 if (!_visible) 271 return EVAL_PAGE; 272 273 if (hasErrors()) { 274 reportErrors(); 275 localRelease(); 276 return EVAL_PAGE; 277 } 278 279 BodyContent bc = getBodyContent(); 280 String content = (bc != null) ? bc.getString() : ""; 281 ResponseUtils.write(pageContext,content); 282 ResponseUtils.write(pageContext,"</div>"); 283 localRelease(); 284 return EVAL_PAGE; 285 } 286 287 291 private int processTemplate() 292 { 293 ServletRequest req = pageContext.getRequest(); 294 Template.TemplateContext tc = (Template.TemplateContext) 295 req.getAttribute(TEMPLATE_SECTIONS); 296 297 if (tc.secs == null) { 298 tc.secs = new HashMap (); 299 } 300 301 assert (tc.secs != null); 302 303 if (!_visible) { 304 tc.secs.put(_name,""); 306 localRelease(); 307 return EVAL_PAGE; 308 } 309 if (hasErrors()) { 310 String s = getErrorsReport(); 311 tc.secs.put(_name,s); 312 localRelease(); 313 return EVAL_PAGE; 314 } 315 316 BodyContent bc = getBodyContent(); 317 String content = (bc != null) ? bc.getString() : ""; 318 tc.secs.put(_name,content); 319 localRelease(); 320 return EVAL_PAGE; 321 } 322 323 332 private final String renderTagId(InternalStringBuilder buffer) 333 throws JspException { 334 assert(_name != null); 335 336 String realName = rewriteName(_name); 338 String idScript = mapLegacyTagId(_name, realName); 339 340 renderAttribute(buffer, "id", realName); 342 return idScript; 343 } 344 345 351 private void renderAttribute(InternalStringBuilder buf, String name, String value) 352 { 353 assert (name != null); 354 if (value == null) 355 return; 356 357 buf.append(" "); 358 buf.append(name); 359 buf.append("=\""); 360 buf.append(value); 361 buf.append("\""); 362 } 363 364 private String mapLegacyTagId(String tagId, String value) 365 { 366 IScriptReporter scriptReporter = getScriptReporter(); 368 ScriptRequestState srs = ScriptRequestState.getScriptRequestState((HttpServletRequest ) pageContext.getRequest()); 369 String scriptId = srs.mapLegacyTagId(scriptReporter,tagId, value); 370 return scriptId; 371 } 372 } 373 | Popular Tags |