make connections work
[jSite2.git] / src / net / pterodactylus / jsite / core / Node.java
index b3a98e9..afcce6a 100644 (file)
 
 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;
 
@@ -36,9 +45,55 @@ public class Node {
        /** 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() {
@@ -47,17 +102,21 @@ public class Node {
 
        /**
         * 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() {
@@ -66,17 +125,21 @@ public class Node {
 
        /**
         * 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() {
@@ -85,27 +148,39 @@ public class Node {
 
        /**
         * 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}
         */