KickJava   Java API By Example, From Geeks To Geeks.

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


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.io.IOException JavaDoc;
41 import java.net.URL JavaDoc;
42 import java.util.Map JavaDoc;
43
44 import com.gargoylesoftware.htmlunit.Page;
45 import com.gargoylesoftware.htmlunit.TextUtil;
46 import com.gargoylesoftware.htmlunit.WebRequestSettings;
47
48 /**
49  * Wrapper for the html element "a"
50  *
51  * @version $Revision: 100 $
52  * @author <a HREF="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
53  * @author David K. Taylor
54  * @author <a HREF="mailto:cse@dynabean.de">Christian Sell</a>
55  */

56 public class HtmlAnchor extends FocusableElement {
57
58     /** the HTML tag represented by this element */
59     public static final String JavaDoc TAG_NAME = "a";
60
61     /**
62      * Create an instance
63      *
64      * @param page The page that contains this element
65      * @param attributes the initial attributes
66      */

67     public HtmlAnchor(final HtmlPage page, final Map JavaDoc attributes) {
68         super( page, attributes );
69     }
70
71     /**
72      * @return the HTML tag name
73      */

74     public String JavaDoc getTagName() {
75         return TAG_NAME;
76     }
77
78     /**
79      * This method will be called if there either wasn't an onclick handler or
80      * there was but the result of that handler was true. This is the default
81      * behaviour of clicking the element. For this anchor element, the default
82      * behavior is to open the HREF page, or execute the HREF if it is a
83      * javascript: URL.
84      *
85      * @param defaultPage The default page to return if the action does not
86      * load a new page.
87      * @return The page that is currently loaded after execution of this method
88      * @throws IOException If an IO error occured
89      */

90     protected Page doClickAction(final Page defaultPage) throws IOException JavaDoc {
91
92
93         final String JavaDoc href = getHrefAttribute();
94
95         getLog().debug(
96             "do click action in window '"
97                     + defaultPage.getEnclosingWindow().getName()
98                     + "', using href '" + href + "'");
99
100         if( href != null && href.length() > 0 ) {
101             final HtmlPage page = getPage();
102             if( TextUtil.startsWithIgnoreCase(href, "javascript:") ) {
103                 return page.executeJavaScriptIfPossible(
104                     href, "javascript url", true, this ).getNewPage();
105             }
106             else {
107                 final URL JavaDoc url = page.getFullyQualifiedUrl(href);
108                 getLog().debug(
109                     "Getting page for " + url.toExternalForm()
110                             + ", derived from href '" + href
111                             + "', using the originating url "
112                             + page.getWebResponse().getUrl());
113                 return page.getWebClient().getPage(
114                         page.getEnclosingWindow(),
115                         page.getResolvedTarget(getTargetAttribute()),
116                         new WebRequestSettings(url));
117             }
118         }
119         else {
120             return defaultPage;
121         }
122     }
123
124
125     /**
126      * Return the value of the attribute "charset". Refer to the
127      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
128      * documentation for details on the use of this attribute.
129      *
130      * @return The value of the attribute "charset"
131      * or an empty string if that attribute isn't defined.
132      */

133     public final String JavaDoc getCharsetAttribute() {
134         return getAttributeValue("charset");
135     }
136
137
138     /**
139      * Return the value of the attribute "type". Refer to the
140      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
141      * documentation for details on the use of this attribute.
142      *
143      * @return The value of the attribute "type"
144      * or an empty string if that attribute isn't defined.
145      */

146     public final String JavaDoc getTypeAttribute() {
147         return getAttributeValue("type");
148     }
149
150
151     /**
152      * Return the value of the attribute "name". Refer to the
153      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
154      * documentation for details on the use of this attribute.
155      *
156      * @return The value of the attribute "name"
157      * or an empty string if that attribute isn't defined.
158      */

159     public final String JavaDoc getNameAttribute() {
160         return getAttributeValue("name");
161     }
162
163
164     /**
165      * Return the value of the attribute "href". Refer to the
166      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
167      * documentation for details on the use of this attribute.
168      *
169      * @return The value of the attribute "href"
170      * or an empty string if that attribute isn't defined.
171      */

172     public final String JavaDoc getHrefAttribute() {
173         return getAttributeValue("href");
174     }
175
176
177     /**
178      * Return the value of the attribute "hreflang". Refer to the
179      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
180      * documentation for details on the use of this attribute.
181      *
182      * @return The value of the attribute "hreflang"
183      * or an empty string if that attribute isn't defined.
184      */

185     public final String JavaDoc getHrefLangAttribute() {
186         return getAttributeValue("hreflang");
187     }
188
189
190     /**
191      * Return the value of the attribute "rel". Refer to the
192      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
193      * documentation for details on the use of this attribute.
194      *
195      * @return The value of the attribute "rel"
196      * or an empty string if that attribute isn't defined.
197      */

198     public final String JavaDoc getRelAttribute() {
199         return getAttributeValue("rel");
200     }
201
202
203     /**
204      * Return the value of the attribute "rev". Refer to the
205      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
206      * documentation for details on the use of this attribute.
207      *
208      * @return The value of the attribute "rev"
209      * or an empty string if that attribute isn't defined.
210      */

211     public final String JavaDoc getRevAttribute() {
212         return getAttributeValue("rev");
213     }
214
215
216     /**
217      * Return the value of the attribute "accesskey". Refer to the
218      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
219      * documentation for details on the use of this attribute.
220      *
221      * @return The value of the attribute "accesskey"
222      * or an empty string if that attribute isn't defined.
223      */

224     public final String JavaDoc getAccessKeyAttribute() {
225         return getAttributeValue("accesskey");
226     }
227
228
229     /**
230      * Return the value of the attribute "shape". Refer to the
231      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
232      * documentation for details on the use of this attribute.
233      *
234      * @return The value of the attribute "shape"
235      * or an empty string if that attribute isn't defined.
236      */

237     public final String JavaDoc getShapeAttribute() {
238         return getAttributeValue("shape");
239     }
240
241
242     /**
243      * Return the value of the attribute "coords". Refer to the
244      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
245      * documentation for details on the use of this attribute.
246      *
247      * @return The value of the attribute "coords"
248      * or an empty string if that attribute isn't defined.
249      */

250     public final String JavaDoc getCoordsAttribute() {
251         return getAttributeValue("coords");
252     }
253
254
255     /**
256      * Return the value of the attribute "tabindex". Refer to the
257      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
258      * documentation for details on the use of this attribute.
259      *
260      * @return The value of the attribute "tabindex"
261      * or an empty string if that attribute isn't defined.
262      */

263     public final String JavaDoc getTabIndexAttribute() {
264         return getAttributeValue("tabindex");
265     }
266
267
268     /**
269      * Return the value of the attribute "onfocus". Refer to the
270      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
271      * documentation for details on the use of this attribute.
272      *
273      * @return The value of the attribute "onfocus"
274      * or an empty string if that attribute isn't defined.
275      */

276     public final String JavaDoc getOnFocusAttribute() {
277         return getAttributeValue("onfocus");
278     }
279
280
281     /**
282      * Return the value of the attribute "onblur". Refer to the
283      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
284      * documentation for details on the use of this attribute.
285      *
286      * @return The value of the attribute "onblur"
287      * or an empty string if that attribute isn't defined.
288      */

289     public final String JavaDoc getOnBlurAttribute() {
290         return getAttributeValue("onblur");
291     }
292
293
294     /**
295      * Return the value of the attribute "target". Refer to the
296      * <a HREF='http://www.w3.org/TR/html401/'>HTML 4.01</a>
297      * documentation for details on the use of this attribute.
298      *
299      * @return The value of the attribute "target"
300      * or an empty string if that attribute isn't defined.
301      */

302     public final String JavaDoc getTargetAttribute() {
303         return getAttributeValue("target");
304     }
305 }
306
Popular Tags