001: /*
002: * Copyright (c) 2002-2008 Gargoyle Software Inc. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * 1. Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: * 2. Redistributions in binary form must reproduce the above copyright notice,
010: * this list of conditions and the following disclaimer in the documentation
011: * and/or other materials provided with the distribution.
012: * 3. The end-user documentation included with the redistribution, if any, must
013: * include the following acknowledgment:
014: *
015: * "This product includes software developed by Gargoyle Software Inc.
016: * (http://www.GargoyleSoftware.com/)."
017: *
018: * Alternately, this acknowledgment may appear in the software itself, if
019: * and wherever such third-party acknowledgments normally appear.
020: * 4. The name "Gargoyle Software" must not be used to endorse or promote
021: * products derived from this software without prior written permission.
022: * For written permission, please contact info@GargoyleSoftware.com.
023: * 5. Products derived from this software may not be called "HtmlUnit", nor may
024: * "HtmlUnit" appear in their name, without prior written permission of
025: * Gargoyle Software Inc.
026: *
027: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
028: * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
029: * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARGOYLE
030: * SOFTWARE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
031: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
032: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
033: * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
034: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
035: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
036: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
037: */
038: package com.gargoylesoftware.htmlunit;
039:
040: import java.util.EventObject;
041:
042: /**
043: * An event that will be fired when a WebWindow changes.
044: *
045: * @version $Revision: 2132 $
046: * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
047: * @author David K. Taylor
048: */
049: public final class WebWindowEvent extends EventObject {
050: private static final long serialVersionUID = 6693838158619061745L;
051: private final Page oldPage_;
052: private final Page newPage_;
053: private final int type_;
054:
055: /** A window has opened */
056: public static final int OPEN = 1;
057:
058: /** A window has closed */
059: public static final int CLOSE = 2;
060:
061: /** The content of the window has changed */
062: public static final int CHANGE = 3;
063:
064: /**
065: * Create an instance
066: *
067: * @param webWindow The WebWindow that caused the event
068: * @param type The type - one of {@link #OPEN}, {@link #CLOSE} or {@link #CHANGE}
069: * @param oldPage The old contents of the web window
070: * @param newPage The new contents of the web window
071: */
072: public WebWindowEvent(final WebWindow webWindow, final int type,
073: final Page oldPage, final Page newPage) {
074: super (webWindow);
075: oldPage_ = oldPage;
076: newPage_ = newPage;
077:
078: switch (type) {
079: case OPEN:
080: case CLOSE:
081: case CHANGE:
082: type_ = type;
083: break;
084:
085: default:
086: throw new IllegalArgumentException(
087: "type must be one of OPEN, CLOSE, CHANGE but got "
088: + type);
089: }
090: }
091:
092: /**
093: * Return true if the two objects are equal
094: *
095: * @param object The object to compare against.
096: * @return true if the two objects are equal.
097: */
098: public boolean equals(final Object object) {
099: if (getClass() == object.getClass()) {
100: final WebWindowEvent event = (WebWindowEvent) object;
101: return isEqual(getSource(), event.getSource())
102: && getEventType() == event.getEventType()
103: && isEqual(getOldPage(), event.getOldPage())
104: && isEqual(getNewPage(), event.getNewPage());
105: }
106: return false;
107: }
108:
109: /**
110: * Return the hash code for this object.
111: * @return the hash code for this object.
112: */
113: public int hashCode() {
114: return source.hashCode();
115: }
116:
117: /**
118: * Return the oldPage
119: * @return the page or null if the window has no page
120: */
121: public Page getOldPage() {
122: return oldPage_;
123: }
124:
125: /**
126: * Return the oldPage
127: * @return the page or null if the window has no page
128: */
129: public Page getNewPage() {
130: return newPage_;
131: }
132:
133: /**
134: * Return the web window that fired the event.
135: * @return The web window that fired the event.
136: */
137: public WebWindow getWebWindow() {
138: return (WebWindow) getSource();
139: }
140:
141: private boolean isEqual(final Object object1, final Object object2) {
142: final boolean result;
143:
144: if (object1 == null && object2 == null) {
145: result = true;
146: } else if (object1 == null || object2 == null) {
147: result = false;
148: } else {
149: result = object1.equals(object2);
150: }
151:
152: return result;
153: }
154:
155: /**
156: * Return a string representation of this event
157: * @return A string representation of this event.
158: */
159: public String toString() {
160: final StringBuffer buffer = new StringBuffer(80);
161: buffer.append("WebWindowEvent(source=[");
162: buffer.append(getSource());
163: buffer.append("] type=[");
164: switch (type_) {
165: case OPEN:
166: buffer.append("OPEN");
167: break;
168: case CLOSE:
169: buffer.append("CLOSE");
170: break;
171: case CHANGE:
172: buffer.append("CHANGE");
173: break;
174: default:
175: buffer.append(type_);
176: break;
177: }
178: buffer.append("] oldPage=[");
179: buffer.append(getOldPage());
180: buffer.append("] newPage=[");
181: buffer.append(getNewPage());
182: buffer.append("])");
183:
184: return buffer.toString();
185: }
186:
187: /** @return the event type */
188: public int getEventType() {
189: return type_;
190: }
191: }
|