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.Comparer;
+import net.pterodactylus.jsite.util.IdGenerator;
+import net.pterodactylus.util.beans.AbstractBean;
+import net.pterodactylus.util.number.Hex;
/**
* 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 {
-
- /** Property change listeners. */
- private final List<PropertyChangeListener> propertyChangeListeners = Collections.synchronizedList(new ArrayList<PropertyChangeListener>());
+public class Node extends AbstractBean {
/** Name of the “name” property. */
public static final String PROPERTY_NAME = "name";
/** 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;
/** The port number of the node. */
private int port;
- //
- // EVENT MANAGEMENT
- //
-
/**
- * Adds a property change listener.
- *
- * @param propertyChangeListener
- * The property change listener to add
+ * Creates a new node.
*/
- public void addPropertyChangeListener(PropertyChangeListener propertyChangeListener) {
- propertyChangeListeners.add(propertyChangeListener);
+ public Node() {
+ id = Hex.toHex(IdGenerator.generateId());
}
/**
- * Removes a property change listener.
- *
- * @param propertyChangeListener
- * The property change listener to remove
+ * Returns the internal ID of the node.
+ *
+ * @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.
- *
- * @param property
- * The name of the property
- * @param oldValue
- * The old value of the property
- * @param newValue
- * The new value of the property
+ * Sets the internal ID of the node.
+ *
+ * @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) {
+ if (id == null) {
+ this.id = Hex.toHex(IdGenerator.generateId());
+ } else {
+ this.id = id;
}
-
}
- //
- // 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 (!Comparer.equal(oldName, name)) {
- firePropertyChange(PROPERTY_NAME, oldName, name);
- }
+ fireIfPropertyChanged(PROPERTY_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 (!Comparer.equal(oldHostname, hostname)) {
- firePropertyChange(PROPERTY_HOSTNAME, oldHostname, hostname);
- }
+ fireIfPropertyChanged(PROPERTY_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;
- if (oldPort != port) {
- firePropertyChange(PROPERTY_PORT, oldPort, port);
- }
+ fireIfPropertyChanged(PROPERTY_PORT, oldPort, port);
}
/**
*/
@Override
public String toString() {
- return name + " (" + hostname + ((port == 9481) ? ("") : (":" + port)) + ")";
+ return getClass().getName() + "[name=" + name + ",hostname=" + hostname + ",port=" + port + "]";
}
}