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;
+
/**
* Container for a Freenet node.
- *
+ *
* @author David ‘Bombe’ Roden <bombe@freenetproject.org>
* @version $Id$
*/
public class Node {
+ /** Property change listeners. */
+ private final List<PropertyChangeListener> propertyChangeListeners = Collections.synchronizedList(new ArrayList<PropertyChangeListener>());
+
/** The name of the node. */
private String name;
/** The port number of the node. */
private int port;
+ //
+ // EVENT MANAGEMENT
+ //
+
+ /**
+ * 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 String getName() {
/**
* Sets the user-given name of the node.
- *
+ *
* @param name
* 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);
+ }
}
/**
* Returns the hostname of the node.
- *
+ *
* @return The hostname of the node
*/
public String getHostname() {
/**
* Sets the hostname of the node.
- *
+ *
* @param hostname
* The hostname of the node
*/
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);
+ }
}
/**
* Returns the port number of the node.
- *
+ *
* @return The port number of the node
*/
public int getPort() {
/**
* Sets the port number of the node.
- *
+ *
* @param port
* The port number of the node
*/
public void setPort(int port) {
+ int oldPort = this.port;
this.port = 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;
+ if (oldPort != port) {
+ firePropertyChange("port", oldPort, port);
}
- Node node = (Node) object;
- return hostname.equals(node.hostname) && port == node.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}
*/