whitespace fixups
[jSite2.git] / src / net / pterodactylus / jsite / core / Node.java
index b3a98e9..3d35b47 100644 (file)
 
 package net.pterodactylus.jsite.core;
 
+import java.beans.PropertyChangeListener;
+
+import net.pterodactylus.jsite.util.IdGenerator;
+import net.pterodactylus.util.beans.AbstractBean;
+import net.pterodactylus.util.number.Hex;
+
 /**
- * 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";
+
+       /** 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;
@@ -37,6 +55,36 @@ public class Node {
        private int port;
 
        /**
+        * Creates a new node.
+        */
+       public Node() {
+               id = Hex.toHex(IdGenerator.generateId());
+       }
+
+       /**
+        * Returns the internal ID of the node.
+        *
+        * @return The internal ID of the node
+        */
+       String getId() {
+               return id;
+       }
+
+       /**
+        * Sets the internal ID of the node.
+        *
+        * @param id
+        *            The internal ID of the node
+        */
+       void setId(String id) {
+               if (id == null) {
+                       this.id = Hex.toHex(IdGenerator.generateId());
+               } else {
+                       this.id = id;
+               }
+       }
+
+       /**
         * Returns the user-given name of the node.
         *
         * @return The name of the node
@@ -52,7 +100,9 @@ public class Node {
         *            The name of the node
         */
        public void setName(String name) {
+               String oldName = this.name;
                this.name = name;
+               fireIfPropertyChanged(PROPERTY_NAME, oldName, name);
        }
 
        /**
@@ -71,7 +121,9 @@ public class Node {
         *            The hostname of the node
         */
        public void setHostname(String hostname) {
+               String oldHostname = this.hostname;
                this.hostname = hostname;
+               fireIfPropertyChanged(PROPERTY_HOSTNAME, oldHostname, hostname);
        }
 
        /**
@@ -90,20 +142,9 @@ public class Node {
         *            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;
-               }
-               Node node = (Node) object;
-               return hostname.equals(node.hostname) && port == node.port;
+               fireIfPropertyChanged(PROPERTY_PORT, oldPort, port);
        }
 
        /**
@@ -111,7 +152,7 @@ public class Node {
         */
        @Override
        public String toString() {
-               return name + " (" + hostname + ((port == 9481) ? ("") : (":" + port)) + ")";
+               return getClass().getName() + "[name=" + name + ",hostname=" + hostname + ",port=" + port + "]";
        }
 
 }