KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > gargoylesoftware > htmlunit > html > HtmlOption


1 /*
2  * Copyright (c) 2002, 2005 Gargoyle Software Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * 1. Redistributions of source code must retain the above copyright notice,
8  * this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright notice,
10  * this list of conditions and the following disclaimer in the documentation
11  * and/or other materials provided with the distribution.
12  * 3. The end-user documentation included with the redistribution, if any, must
13  * include the following acknowledgment:
14  *
15  * "This product includes software developed by Gargoyle Software Inc.
16  * (http://www.GargoyleSoftware.com/)."
17  *
18  * Alternately, this acknowledgment may appear in the software itself, if
19  * and wherever such third-party acknowledgments normally appear.
20  * 4. The name "Gargoyle Software" must not be used to endorse or promote
21  * products derived from this software without prior written permission.
22  * For written permission, please contact info@GargoyleSoftware.com.
23  * 5. Products derived from this software may not be called "HtmlUnit", nor may
24  * "HtmlUnit" appear in their name, without prior written permission of
25  * Gargoyle Software Inc.
26  *
27  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
28  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
29  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARGOYLE
30  * SOFTWARE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
31  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
33  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
36  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37  */

38 package com.gargoylesoftware.htmlunit.html;
39
40 import java.util.Map JavaDoc;
41
42 /**
43  * Wrapper for the html element "option"
44  *
45  * @version $Revision: 100 $
46  * @author <a HREF="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
47  * @author David K. Taylor
48  * @author <a HREF="mailto:cse@dynabean.de">Christian Sell</a>
49  * @author David D. Kilzer
50  */

51 public class HtmlOption extends ClickableElement implements DisabledElement {
52
53     /** the HTML tag represented by this element */
54     public static final String JavaDoc TAG_NAME = "option";
55
56     private final boolean initialSelectedState_;
57
58     /**
59      * Create an instance
60      *
61      * @param page The page that contains this element
62      * @param attributes the initial attributes
63      */

64     public HtmlOption( final HtmlPage page, final Map JavaDoc attributes ) {
65         super(page, attributes);
66         initialSelectedState_ = isAttributeDefined("selected");
67     }
68
69     /**
70      * @return the HTML tag name
71      */

72     public String JavaDoc getTagName() {
73         return TAG_NAME;
74     }
75
76     /**
77      * Return true if this option is currently selected
78      *
79      * @return See above
80      */

81     public boolean isSelected() {
82         return isAttributeDefined("selected");
83     }
84
85
86     /**
87      * Set the selected state of this option. This will possibly also change the
88      * selected properties of sibling option elements
89      *
90      * @param selected true if this option should be selected.
91      */

92     public void setSelected( final boolean selected ) {
93         getEnclosingSelectOrDie().setSelectedAttribute(this, selected);
94     }
95
96
97     private HtmlSelect getEnclosingSelectOrDie() {
98         DomNode parent = getParentNode();
99         while( parent != null ) {
100             if( parent instanceof HtmlSelect ) {
101                 return (HtmlSelect)parent;
102             }
103             parent = parent.getParentNode();
104         }
105         throw new IllegalStateException JavaDoc("Can't find enclosing select element");
106     }
107
108
109     /**
110      * Reset the option to its original selected state.
111      */

112     public void reset() {
113         if( initialSelectedState_ ) {
114             setAttributeValue("selected", "selected");
115         }
116         else {
117             removeAttribute("selected");
118         }
119     }
120
121
122     /**
123      * Return the value of the attribute "selected". Refer to the
124      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
125      * documentation for details on the use of this attribute.
126      *
127      * @return The value of the attribute "selected"
128      * or an empty string if that attribute isn't defined.
129      */

130     public final String JavaDoc getSelectedAttribute() {
131         return getAttributeValue("selected");
132     }
133
134
135     /**
136      * Return true if the disabled attribute is set for this element.
137      *
138      * @return Return true if this element is disabled.
139      */

140     public final boolean isDisabled() {
141         return isAttributeDefined("disabled");
142     }
143
144
145     /**
146      * Return the value of the attribute "disabled". Refer to the
147      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
148      * documentation for details on the use of this attribute.
149      *
150      * @return The value of the attribute "disabled"
151      * or an empty string if that attribute isn't defined.
152      */

153     public final String JavaDoc getDisabledAttribute() {
154         return getAttributeValue("disabled");
155     }
156
157
158     /**
159      * Return the value of the attribute "label". Refer to the
160      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
161      * documentation for details on the use of this attribute.
162      *
163      * @return The value of the attribute "label"
164      * or an empty string if that attribute isn't defined.
165      */

166     public final String JavaDoc getLabelAttribute() {
167         return getAttributeValue("label");
168     }
169
170
171     /**
172      * Set the value of the attribute "label". Refer to the
173      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
174      * documentation for details on the use of this attribute.
175      *
176      * @param newLabel The value of the attribute "label".
177      */

178     public final void setLabelAttribute( final String JavaDoc newLabel ) {
179         setAttributeValue("label", newLabel);
180     }
181
182
183     /**
184      * Return the value of the attribute "value". Refer to the
185      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
186      * documentation for details on the use of this attribute.
187      *
188      * @return The value of the attribute "value"
189      * or an empty string if that attribute isn't defined.
190      */

191     public final String JavaDoc getValueAttribute() {
192         return getAttributeValue("value");
193     }
194
195
196     /**
197      * Set the value of the attribute "value". Refer to the
198      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
199      * documentation for details on the use of this attribute.
200      *
201      * @param newValue The value of the attribute "value".
202      */

203     public final void setValueAttribute( final String JavaDoc newValue ) {
204         setAttributeValue("value", newValue);
205     }
206
207     /**
208      * Return the value of this option as it will be submitted
209      *
210      * @return The value of the control
211      */

212     public String JavaDoc getValue() {
213         if (isAttributeDefined("value")){
214             return getValueAttribute();
215         }
216         else {
217             return asText();
218         }
219     }
220 }
221
Popular Tags