001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *   http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing,
013     * software distributed under the License is distributed on an
014     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015     * KIND, either express or implied.  See the License for the
016     * specific language governing permissions and limitations
017     * under the License.
018     */
019    
020    package org.apache.myfaces.tobago.taglib.extension;
021    
022    import org.apache.myfaces.tobago.apt.annotation.ExtensionTag;
023    import org.apache.myfaces.tobago.apt.annotation.Tag;
024    import org.apache.myfaces.tobago.taglib.component.SelectOneListboxTag;
025    import org.apache.myfaces.tobago.taglib.decl.HasBinding;
026    import org.apache.myfaces.tobago.taglib.decl.HasConverter;
027    import org.apache.myfaces.tobago.taglib.decl.HasDeprecatedHeight;
028    import org.apache.myfaces.tobago.taglib.decl.HasId;
029    import org.apache.myfaces.tobago.taglib.decl.HasLabel;
030    import org.apache.myfaces.tobago.taglib.decl.HasLabelWidth;
031    import org.apache.myfaces.tobago.taglib.decl.HasMarkup;
032    import org.apache.myfaces.tobago.taglib.decl.HasOnchange;
033    import org.apache.myfaces.tobago.taglib.decl.HasTabIndex;
034    import org.apache.myfaces.tobago.taglib.decl.HasTip;
035    import org.apache.myfaces.tobago.taglib.decl.HasValidator;
036    import org.apache.myfaces.tobago.taglib.decl.HasValue;
037    import org.apache.myfaces.tobago.taglib.decl.HasValueChangeListener;
038    import org.apache.myfaces.tobago.taglib.decl.IsDisabled;
039    import org.apache.myfaces.tobago.taglib.decl.IsFocus;
040    import org.apache.myfaces.tobago.taglib.decl.IsReadonly;
041    import org.apache.myfaces.tobago.taglib.decl.IsRendered;
042    import org.apache.myfaces.tobago.taglib.decl.IsRequired;
043    import org.apache.myfaces.tobago.util.Deprecation;
044    
045    import javax.servlet.jsp.JspException;
046    import javax.servlet.jsp.tagext.BodyTagSupport;
047    
048    /**
049     * Render a single selection option listbox.
050     */
051    @Tag(name = "selectOneListbox")
052    @ExtensionTag(baseClassName = "org.apache.myfaces.tobago.taglib.component.SelectOneListboxTag")
053    public class SelectOneListboxExtensionTag
054        extends BodyTagSupport implements HasId, HasValue, HasValueChangeListener, IsDisabled,
055        HasLabel, HasLabelWidth, IsReadonly, HasOnchange, IsRendered, HasMarkup,
056        HasBinding, HasDeprecatedHeight, IsFocus, HasTip, IsRequired, HasConverter, HasValidator, HasTabIndex {
057      private String required;
058      private String value;
059      private String valueChangeListener;
060      private String disabled;
061      private String readonly;
062      private String onchange;
063      private String inline;
064      private String label;
065      private String rendered;
066      private String binding;
067      private String tip;
068      private String height;
069      private String converter;
070      private String validator;
071      private String labelWidth;
072      private String tabIndex;
073      private String focus;
074      private String markup;
075    
076      private LabelExtensionTag labelTag;
077      private SelectOneListboxTag selectOneListboxTag;
078    
079      @Override
080      public int doStartTag() throws JspException {
081    
082        labelTag = new LabelExtensionTag();
083        labelTag.setPageContext(pageContext);
084        labelTag.setRows("*");
085        if (label != null) {
086          labelTag.setValue(label);
087        }
088        if (tip != null) {
089          labelTag.setTip(tip);
090        }
091        if (rendered != null) {
092          labelTag.setRendered(rendered);
093        }
094        if (labelWidth != null) {
095          labelTag.setColumns(labelWidth + ";*");
096        }
097        if (markup != null) {
098          labelTag.setMarkup(markup);
099        }
100        labelTag.setParent(getParent());
101        labelTag.doStartTag();
102    
103        selectOneListboxTag = new SelectOneListboxTag();
104        selectOneListboxTag.setPageContext(pageContext);
105        if (value != null) {
106          selectOneListboxTag.setValue(value);
107        }
108        if (valueChangeListener != null) {
109          selectOneListboxTag.setValueChangeListener(valueChangeListener);
110        }
111        if (binding != null) {
112          selectOneListboxTag.setBinding(binding);
113        }
114        if (onchange != null) {
115          selectOneListboxTag.setOnchange(onchange);
116        }
117        if (validator != null) {
118          selectOneListboxTag.setValidator(validator);
119        }
120        if (converter != null) {
121          selectOneListboxTag.setConverter(converter);
122        }
123        if (disabled != null) {
124          selectOneListboxTag.setDisabled(disabled);
125        }
126        if (inline != null) {
127          selectOneListboxTag.setInline(inline);
128        }
129        if (focus != null) {
130          selectOneListboxTag.setFocus(focus);
131        }
132        if (id != null) {
133          selectOneListboxTag.setId(id);
134        }
135        if (height != null) {
136          selectOneListboxTag.setHeight(height);
137        }
138        if (readonly != null) {
139          selectOneListboxTag.setReadonly(readonly);
140        }
141        if (required != null) {
142          selectOneListboxTag.setRequired(required);
143        }
144        if (tabIndex != null) {
145          selectOneListboxTag.setTabIndex(tabIndex);
146        }
147        if (markup != null) {
148          selectOneListboxTag.setMarkup(markup);
149        }
150        selectOneListboxTag.setParent(labelTag);
151        selectOneListboxTag.doStartTag();
152    
153        return super.doStartTag();
154      }
155    
156      @Override
157      public int doEndTag() throws JspException {
158        selectOneListboxTag.doEndTag();
159        labelTag.doEndTag();
160        return super.doEndTag();
161      }
162    
163      @Override
164      public void release() {
165        super.release();
166        binding = null;
167        onchange = null;
168        disabled = null;
169        inline = null;
170        labelWidth = null;
171        label = null;
172        height = null;
173        readonly = null;
174        rendered = null;
175        converter = null;
176        validator = null;
177        required = null;
178        tip = null;
179        value = null;
180        valueChangeListener = null;
181        tabIndex = null;
182        selectOneListboxTag = null;
183        labelTag = null;
184        focus = null;
185        markup = null;
186      }
187    
188      public void setRequired(String required) {
189        this.required = required;
190      }
191    
192      public void setValue(String value) {
193        this.value = value;
194      }
195    
196      public void setValueChangeListener(String valueChangeListener) {
197        this.valueChangeListener = valueChangeListener;
198      }
199    
200      public void setDisabled(String disabled) {
201        this.disabled = disabled;
202      }
203    
204      public void setReadonly(String readonly) {
205        this.readonly = readonly;
206      }
207    
208      public void setOnchange(String onchange) {
209        this.onchange = onchange;
210      }
211    
212      public void setInline(String inline) {
213        this.inline = inline;
214      }
215    
216      public void setLabel(String label) {
217        this.label = label;
218      }
219    
220      public void setHeight(String height) {
221        if (Deprecation.LOG.isWarnEnabled()) {
222          Deprecation.LOG.warn("Attribute 'height' is deprecated, "
223              + "and will removed soon! Please use a layout manager instead.");
224        }
225        this.height = height;
226      }
227    
228      public void setValidator(String validator) {
229        this.validator = validator;
230      }
231    
232      public void setConverter(String converter) {
233        this.converter = converter;
234      }
235    
236      public void setRendered(String rendered) {
237        this.rendered = rendered;
238      }
239    
240      public void setBinding(String binding) {
241        this.binding = binding;
242      }
243    
244      public void setTip(String tip) {
245        this.tip = tip;
246      }
247    
248      public void setLabelWidth(String labelWidth) {
249        this.labelWidth = labelWidth;
250      }
251    
252      public void setTabIndex(String tabIndex) {
253        this.tabIndex = tabIndex;
254      }
255    
256      public void setFocus(String focus) {
257        this.focus = focus;
258      }
259    
260      public void setMarkup(String markup) {
261        this.markup = markup;
262      }
263    }