1 18 package org.apache.beehive.netui.tags.html; 19 20 import org.apache.beehive.netui.util.internal.InternalStringBuilder; 21 22 import org.apache.beehive.netui.tags.rendering.AbstractHtmlState; 23 import org.apache.beehive.netui.tags.rendering.OptionTag; 24 import org.apache.beehive.netui.tags.rendering.TagRenderingBase; 25 import org.apache.beehive.netui.tags.rendering.WriteRenderAppender; 26 import org.apache.beehive.netui.util.Bundle; 27 28 import javax.servlet.ServletRequest ; 29 import javax.servlet.http.HttpServletRequest ; 30 import javax.servlet.jsp.JspException ; 31 import javax.servlet.jsp.tagext.Tag ; 32 33 55 public class SelectOption extends HtmlBaseTag 56 { 57 private OptionTag.State _state = new OptionTag.State(); 58 59 private String _text; private boolean _disabled; private String _value; private Select.RepeatingStages _repeatingType; private boolean _hasError = false; 66 69 public String getTagName() 70 { 71 return "SelectOption"; 72 } 73 74 80 public void setAttribute(String name, String value, String facet) 81 throws JspException 82 { 83 if (name == null) 84 return; 85 86 if (name.equals(VALUE)) { 87 String s = Bundle.getString("Tags_AttributeMayNotBeSet", new Object []{name}); 88 registerTagError(s, null); 89 } 90 super.setAttribute(name, value, facet); 91 } 92 93 98 protected AbstractHtmlState getState() 99 { 100 return _state; 101 } 102 103 107 public boolean getDisabled() 108 { 109 return _disabled; 110 } 111 112 121 public void setDisabled(boolean disabled) 122 { 123 _disabled = disabled; 124 } 125 126 132 protected boolean isDisabled() 133 throws JspException 134 { 135 return _disabled; 136 } 137 138 151 public void setRepeatingType(String repeatingType) 152 { 153 _repeatingType = Select.RepeatingStages.parseString(repeatingType); 154 } 155 156 167 public void setValue(String value) 168 throws JspException 169 { 170 _value = value; 171 } 172 173 177 public int doStartTag() throws JspException 178 { 179 180 Tag parentTag = getParent(); 181 while (!(parentTag instanceof Select)) { 182 parentTag = parentTag.getParent(); 183 } 184 185 if (parentTag == null) { 186 String s = Bundle.getString("Tags_SelectOptionNoSelect"); 188 registerTagError(s, null); 189 return SKIP_BODY; 190 } 191 192 Select parentSelect = (Select) parentTag; 193 boolean repeating = parentSelect.isRepeater(); 194 195 if ((parentSelect.getOptionsDataSource() != null) && !repeating) { 197 String s = Bundle.getString("Tags_SelectOptionParentHasOptionsDataSource"); 198 _hasError = true; 199 parentSelect.registerTagError(s, null); 200 return SKIP_BODY; 201 } 202 203 if (repeating && _repeatingType == null) { 205 String s = Bundle.getString("Tags_SelectRepeatingOptionType"); 206 _hasError = true; 207 parentSelect.registerTagError(s, null); 208 return SKIP_BODY; 209 } 210 211 if (repeating && !isRenderable(parentSelect)) { 212 return SKIP_BODY; 213 } 214 215 return EVAL_BODY_BUFFERED; 217 } 218 219 223 public int doAfterBody() throws JspException 224 { 225 String text = bodyContent.getString(); 226 if (text != null) { 227 bodyContent.clearBody(); 228 text = text.trim(); 229 if (text.length() > 0) 230 _text = text; 231 } 232 return SKIP_BODY; 233 } 234 235 239 public int doEndTag() throws JspException 240 { 241 String scriptId = null; 242 243 ServletRequest req = pageContext.getRequest(); 244 245 if ((hasErrors()) || _hasError) { 246 localRelease(); 247 return EVAL_PAGE; 248 } 249 250 Tag parentTag = getParent(); 252 while (!(parentTag instanceof Select)) { 253 parentTag = parentTag.getParent(); 254 } 255 256 assert (parentTag instanceof Select); 257 Select parentSelect = (Select) parentTag; 258 if (parentSelect.isRepeater()) { 259 if (!isRenderable(parentSelect)) 260 return EVAL_PAGE; 261 } 262 263 264 _state.value = _value; 267 268 if (_state.id != null) { 271 scriptId = renderNameAndId((HttpServletRequest ) req, _state, null); 272 } 273 274 _state.disabled = _disabled; 275 276 if (parentSelect.isMatched(_value)) 277 _state.selected = true; 278 279 WriteRenderAppender writer = new WriteRenderAppender(pageContext); 280 TagRenderingBase br = TagRenderingBase.Factory.getRendering(TagRenderingBase.OPTION_TAG, req); 281 br.doStartTag(writer, _state); 282 283 284 if (_text == null) 285 write(parentSelect.formatText(_value)); 286 else { 287 write(parentSelect.formatText(_text)); 289 } 290 br.doEndTag(writer); 291 292 parentSelect.addOptionToList(_value); 293 294 if (scriptId != null) 295 write(scriptId); 296 297 localRelease(); 299 return EVAL_PAGE; 300 } 301 302 305 protected void localRelease() 306 { 307 super.localRelease(); 308 309 _state.clear(); 310 311 _text = null; 312 _disabled = false; 313 _value = null; 314 _hasError = false; 315 } 316 317 private boolean isRenderable(Select sel) 318 { 319 assert(sel != null); 320 321 if (_repeatingType == null) 322 return true; 323 324 if (sel.isNullStage()) 325 return _repeatingType == Select.RepeatingStages.NULL; 326 if (sel.isOptionStage() && _repeatingType == Select.RepeatingStages.OPTION) 327 return true; 328 if (sel.isDataSourceStage() && _repeatingType == Select.RepeatingStages.DATASOURCE) 329 return true; 330 if (sel.isDefaultStage() && _repeatingType == Select.RepeatingStages.DEFAULT) 331 return true; 332 return false; 333 } 334 } 335 | Popular Tags |