/*
* AbstractUrlModel.java
*
* Created on 13 April 2005, 04:07
*/
package org.owasp.webscarab.model;
import EDU.oswego.cs.dl.util.concurrent.Sync;
import javax.swing.event.EventListenerList;
import java.util.logging.Logger;
/**
*
* @author rogan
*/
public abstract class AbstractUrlModel implements UrlModel {
private EventListenerList _listenerList = new EventListenerList();
private Logger _logger = Logger.getLogger(getClass().getName());
/** Creates a new instance of AbstractUrlModel */
public AbstractUrlModel() {
}
public abstract int getChildCount(HttpUrl parent);
public abstract int getIndexOf(HttpUrl url);
public abstract HttpUrl getChildAt(HttpUrl parent, int index);
public abstract Sync readLock();
public void addUrlListener(UrlListener listener) {
synchronized(_listenerList) {
_listenerList.add(UrlListener.class, listener);
}
}
public void removeUrlListener(UrlListener listener) {
synchronized(_listenerList) {
_listenerList.remove(UrlListener.class, listener);
}
}
/**
* tells listeners that a new Url has been added
* @param url the url that was added
*/
protected void fireUrlAdded(HttpUrl url, int position) {
// Guaranteed to return a non-null array
Object[] listeners = _listenerList.getListenerList();
// Process the listeners last to first, notifying
// those that are interested in this event
UrlEvent evt = new UrlEvent(this, url, position);
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]==UrlListener.class) {
try {
((UrlListener)listeners[i+1]).urlAdded(evt);
} catch (Exception e) {
_logger.severe("Unhandled exception: " + e);
e.printStackTrace();
}
}
}
}
/**
* tells listeners that a Url has been removed, after the fact
* @param url the url that was removed
*/
protected void fireUrlRemoved(HttpUrl url, int position) {
// Guaranteed to return a non-null array
Object[] listeners = _listenerList.getListenerList();
// Process the listeners last to first, notifying
// those that are interested in this event
UrlEvent evt = new UrlEvent(this, url, position);
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]==UrlListener.class) {
try {
((UrlListener)listeners[i+1]).urlRemoved(evt);
} catch (Exception e) {
_logger.severe("Unhandled exception: " + e);
}
}
}
}
/**
* fired to tell listeners that a particular Url has had a property change
* @param url the url that was changed
*/
protected void fireUrlChanged(HttpUrl url, int position) {
// Guaranteed to return a non-null array
Object[] listeners = _listenerList.getListenerList();
// Process the listeners last to first, notifying
// those that are interested in this event
UrlEvent evt = new UrlEvent(this, url, position);
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]==UrlListener.class) {
try {
((UrlListener)listeners[i+1]).urlChanged(evt);
} catch (Exception e) {
_logger.severe("Unhandled exception: " + e);
e.printStackTrace();
}
}
}
}
/**
* fired to tell listeners that all Url have changed
*/
protected void fireUrlsChanged() {
// Guaranteed to return a non-null array
Object[] listeners = _listenerList.getListenerList();
// Process the listeners last to first, notifying
// those that are interested in this event
for (int i = listeners.length-2; i>=0; i-=2) {
if (listeners[i]==UrlListener.class) {
try {
((UrlListener)listeners[i+1]).urlsChanged();
} catch (Exception e) {
_logger.severe("Unhandled exception: " + e);
e.printStackTrace();
}
}
}
}
}