KickJava   Java API By Example, From Geeks To Geeks.

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


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.WebClient;
45 import com.gargoylesoftware.htmlunit.html.HtmlImage;
46 import com.gargoylesoftware.htmlunit.html.HtmlPage;
47 import com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine;
48
49
50 /**
51  * The javascript object that represents an "Image"
52  *
53  * @version $Revision: 100 $
54  * @author <a HREF="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
55  * @author <a HREF="mailto:george@murnock.com">George Murnock</a>
56  * @author Chris Erskine
57  * @author Marc Guillemot
58  */

59 public class Image extends HTMLElement {
60
61     private static final long serialVersionUID = 5630843390548382869L;
62     private String JavaDoc src_;
63
64
65     /**
66      * Create an instance.
67      */

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

76     public void jsConstructor() {
77     }
78     
79     /**
80      * Set the src property, either on the DOM node which corresponds to this
81      * JavaScript object, or if none exists (as when using JavaScript to preload
82      * images), on the JavaScript object itself.
83      * @param src the src attribute value
84      */

85     public void jsxSet_src(final String JavaDoc src) {
86         src_ = src;
87         final HtmlImage htmlImageElement = (HtmlImage) getHtmlElementOrNull();
88         if (htmlImageElement != null) {
89             htmlImageElement.setAttributeValue( "src", src );
90         }
91     }
92     
93     /**
94      * Return the value of the src property, either from the DOM node which
95      * corresponds to this JavaScript object, or if that doesn't exist (as
96      * when using JavaScript to preload images), from the JavaScript object
97      * itself.
98      * @return the src attribute
99      */

100     public String JavaDoc jsxGet_src() {
101         final HtmlImage htmlImageElement = (HtmlImage) getHtmlElementOrNull();
102         if (htmlImageElement != null) {
103             final String JavaDoc srcValue = htmlImageElement.getSrcAttribute();
104             try {
105                 return htmlImageElement.getPage().getFullyQualifiedUrl(srcValue).toExternalForm();
106             }
107             catch (final MalformedURLException JavaDoc e) {
108                 throw Context.reportRuntimeError("Unable to create fully qualified URL for src attribute of image: "
109                                                   + e.getMessage());
110             }
111         }
112         else {
113             // this is an image instantiated in js with "new Image()" and not yet added to the DOM tree.
114
// this way to get the "active" page is probably wrong because there is no reason
115
// that the page in which script is currently executed is contained the current window of the "browser"
116
// but as long as we don't have a clean way to get the page from the js Context...
117
final WebClient webClient = JavaScriptEngine.getWebClientForCurrentThread();
118             final HtmlPage currentPage = (HtmlPage) webClient.getCurrentWindow().getEnclosedPage();
119             try {
120                 return currentPage.getFullyQualifiedUrl(src_).toExternalForm();
121             }
122             catch (final MalformedURLException JavaDoc e) {
123                 throw Context.reportRuntimeError("Unable to create fully qualified URL for src attribute of image: "
124                                                  + e.getMessage());
125             }
126         }
127     }
128 }
129
Popular Tags