KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > gargoylesoftware > htmlunit > javascript > host > Anchor


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.javascript.host;
39
40 import java.net.MalformedURLException JavaDoc;
41
42 import org.mozilla.javascript.Context;
43
44 import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
45 import com.gargoylesoftware.htmlunit.html.HtmlElement;
46
47
48 /**
49  * The javascript object that represents an anchor
50  *
51  * @version $Revision: 100 $
52  * @author <a HREF="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
53  * @author <a HREF="mailto:gousseff@netscape.net">Alexei Goussev</a>
54  * @author David D. Kilzer
55  * @author Marc Guillemot
56  * @author Chris Erskine
57  */

58 public class Anchor extends FocusableHostElement {
59
60     private static final long serialVersionUID = -816365374422492967L;
61
62     /**
63      * Create an instance.
64      */

65     public Anchor() {
66     }
67
68
69     /**
70      * Javascript constructor. This must be declared in every javascript file because
71      * the rhino engine won't walk up the hierarchy looking for constructors.
72      */

73     public void jsConstructor() {
74     }
75  
76     /**
77      * Set the href property.
78      * @param href href attribute value.
79      */

80     public void jsxSet_href( final String JavaDoc href ) {
81         getHtmlElementOrDie().setAttributeValue( "href", href );
82     }
83
84     /**
85      * Return the value of the href property.
86      * @return The href property.
87      */

88     public String JavaDoc jsxGet_href() {
89         return getHtmlElementOrDie().getAttributeValue( "href" );
90     }
91
92     /**
93      * Calls for instance for implicit conversion to string
94      * @see com.gargoylesoftware.htmlunit.javascript.SimpleScriptable#getDefaultValue(java.lang.Class)
95      * @param hint the type hint
96      * @return the default value
97      */

98     public Object JavaDoc getDefaultValue(final Class JavaDoc hint) {
99         final HtmlAnchor link = (HtmlAnchor) getHtmlElementOrDie();
100         final String JavaDoc href = link.getHrefAttribute();
101         
102         final String JavaDoc response;
103         if (href == HtmlElement.ATTRIBUTE_NOT_DEFINED) {
104             response = ""; // for example for named anchors
105
}
106         else {
107             final int indexAnchor = href.indexOf('#');
108             final String JavaDoc beforeAnchor;
109             final String JavaDoc anchorPart;
110             if (indexAnchor == -1) {
111                 beforeAnchor = href;
112                 anchorPart = "";
113             }
114             else {
115                 beforeAnchor = href.substring(0, indexAnchor);
116                 anchorPart = href.substring(indexAnchor);
117             }
118
119             try {
120                 response = link.getPage().getFullyQualifiedUrl(beforeAnchor).toExternalForm() + anchorPart;
121             }
122             catch (final MalformedURLException JavaDoc e) {
123                 throw Context.reportRuntimeError("Problem reading url: " + e);
124             }
125         }
126         
127         return response;
128     }
129     
130 }
131
Popular Tags