add id to node
[jSite2.git] / src / net / pterodactylus / jsite / core / Node.java
index afcce6a..5a8ec89 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;
+
+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";
+
+       /** Internal ID. */
+       private String id;
 
        /** The name of the node. */
        private String name;
@@ -45,52 +52,25 @@ 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.
+        * Returns the internal ID of the node.
         * 
-        * @param propertyChangeListener
-        *            The property change listener to remove
+        * @return The internal ID of the node
         */
-       public void removePropertyChangeListener(PropertyChangeListener propertyChangeListener) {
-               propertyChangeListeners.remove(propertyChangeListener);
+       String getId() {
+               return id;
        }
 
        /**
-        * Notifies all listeners that a property has changed.
+        * Sets the internal ID of the node.
         * 
-        * @param property
-        *            The name of the property
-        * @param oldValue
-        *            The old value of the property
-        * @param newValue
-        *            The new value of the property
+        * @param id
+        *            The internal ID of the node
         */
-       private void firePropertyChange(String property, Object oldValue, Object newValue) {
-               PropertyChangeEvent propertyChangeEvent = new PropertyChangeEvent(this, property, oldValue, newValue);
-               for (PropertyChangeListener propertyChangeListener: propertyChangeListeners) {
-                       propertyChangeListener.propertyChange(propertyChangeEvent);
-               }
-
+       void setId(String id) {
+               this.id = id;
        }
 
-       //
-       // ACCESSORS
-       //
-
        /**
         * Returns the user-given name of the node.
         * 
@@ -109,9 +89,7 @@ public class 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);
        }
 
        /**
@@ -132,9 +110,7 @@ public class 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);
-               }
+               fireIfPropertyChanged(PROPERTY_HOSTNAME, oldHostname, hostname);
        }
 
        /**
@@ -155,32 +131,9 @@ public class Node {
        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}
         */