package net.pterodactylus.jsite.core;
-import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
+
+import net.pterodactylus.util.beans.AbstractBean;
/**
- * Container for a Freenet node.
+ * Container for a Freenet node. A Node is capable of notifying
+ * {@link PropertyChangeListener}s if any of the contained properties change.
*
* @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- * @version $Id$
*/
-public class Node {
+public class Node extends AbstractBean {
+
+ /** Name of the “name” property. */
+ public static final String PROPERTY_NAME = "name";
+
+ /** Name of the “hostname” property. */
+ public static final String PROPERTY_HOSTNAME = "hostname";
- /** Property change listeners. */
- private final List<PropertyChangeListener> propertyChangeListeners = Collections.synchronizedList(new ArrayList<PropertyChangeListener>());
+ /** Name of the “port” property. */
+ public static final String PROPERTY_PORT = "port";
/** The name of the node. */
private String name;
//
/**
- * Adds a property change listener.
- *
- * @param propertyChangeListener
- * The property change listener to add
- */
- public void addPropertyChangeListener(PropertyChangeListener propertyChangeListener) {
- propertyChangeListeners.add(propertyChangeListener);
- }
-
- /**
- * Removes a property change listener.
- *
- * @param propertyChangeListener
- * The property change listener to remove
- */
- public void removePropertyChangeListener(PropertyChangeListener propertyChangeListener) {
- propertyChangeListeners.remove(propertyChangeListener);
- }
-
- /**
- * Notifies all listeners that a property has changed.
- *
- * @param property
- * The name of the property
- * @param oldValue
- * The old value of the property
- * @param newValue
- * The new value of the property
- */
- private void firePropertyChange(String property, Object oldValue, Object newValue) {
- PropertyChangeEvent propertyChangeEvent = new PropertyChangeEvent(this, property, oldValue, newValue);
- for (PropertyChangeListener propertyChangeListener: propertyChangeListeners) {
- propertyChangeListener.propertyChange(propertyChangeEvent);
- }
-
- }
-
- //
- // ACCESSORS
- //
-
- /**
* Returns the user-given name of the node.
*
* @return The name of the node
public void setName(String name) {
String oldName = this.name;
this.name = name;
- if (((oldName != null) && (name == null)) || ((oldName == null) && (name != null)) || ((name != null) && !name.equals(oldName))) {
- firePropertyChange("name", oldName, name);
- }
+ fireIfPropertyChanged(PROPERTY_NAME, oldName, name);
}
/**
public void setHostname(String hostname) {
String oldHostname = this.hostname;
this.hostname = hostname;
- if (((oldHostname != null) && (hostname == null)) || ((oldHostname == null) && (hostname != null)) || ((hostname != null) && !hostname.equals(oldHostname))) {
- firePropertyChange("hostname", oldHostname, hostname);
- }
+ fireIfPropertyChanged(PROPERTY_HOSTNAME, oldHostname, hostname);
}
/**
public void setPort(int port) {
int oldPort = this.port;
this.port = port;
- if (oldPort != port) {
- firePropertyChange("port", oldPort, port);
- }
+ fireIfPropertyChanged(PROPERTY_PORT, oldPort, port);
}
-// /**
-// * {@inheritDoc} Two Node objects are considered equal if their hostnames
-// * and their port numbers are equal.
-// */
-// @Override
-// public boolean equals(Object object) {
-// if ((object == null) || !(object instanceof Node)) {
-// return false;
-// }
-// Node node = (Node) object;
-// return hostname.equals(node.hostname) && port == node.port;
-// }
-
-// /**
-// * {@inheritDoc}
-// */
-// @Override
-// public int hashCode() {
-// return hostname.hashCode() ^ (-1 - port);
-// }
-
/**
* {@inheritDoc}
*/