X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fcore%2FNodeManager.java;h=b919cfe1434b46c07bf4bd081bd1340fa35ac87b;hb=ebd531bc775036dd66a7e20abebbcb480af35491;hp=70da6d6a1021afa92a94884b415c19162e9b1a79;hpb=1a15797202b29b63a0677041c437bb0dcb559e54;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/core/NodeManager.java b/src/net/pterodactylus/jsite/core/NodeManager.java index 70da6d6..b919cfe 100644 --- a/src/net/pterodactylus/jsite/core/NodeManager.java +++ b/src/net/pterodactylus/jsite/core/NodeManager.java @@ -29,6 +29,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; @@ -47,7 +48,7 @@ import net.pterodactylus.util.logging.Logging; * @author David ‘Bombe’ Roden <bombe@freenetproject.org> * @version $Id$ */ -public class NodeManager implements HighLevelClientListener { +public class NodeManager implements Iterable, HighLevelClientListener { /** Logger. */ private static final Logger logger = Logging.getLogger(NodeManager.class.getName()); @@ -114,6 +115,30 @@ public class NodeManager implements HighLevelClientListener { } /** + * Notifies all listeners that a node was added. + * + * @param node + * The node that was added. + */ + private void fireNodeAdded(Node node) { + for (NodeListener nodeListener: nodeListeners) { + nodeListener.nodeAdded(node); + } + } + + /** + * Notifies all listeners that a node was removed. + * + * @param node + * The node that was removed + */ + private void fireNodeRemoved(Node node) { + for (NodeListener nodeListener: nodeListeners) { + nodeListener.nodeRemoved(node); + } + } + + /** * Notifies all listeners that the given node was connected. * * @param node @@ -165,6 +190,13 @@ public class NodeManager implements HighLevelClientListener { return nodes.contains(node); } + /** + * {@inheritDoc} + */ + public Iterator iterator() { + return nodes.iterator(); + } + // // ACTIONS // @@ -222,10 +254,14 @@ public class NodeManager implements HighLevelClientListener { newNode.setPort(nodePort); loadedNodes.add(newNode); } + logger.fine("loaded " + loadedNodes.size() + " nodes from config"); synchronized (syncObject) { nodes.clear(); nodes.addAll(loadedNodes); } + for (Node node: nodes) { + fireNodeAdded(node); + } } /** @@ -270,6 +306,7 @@ public class NodeManager implements HighLevelClientListener { synchronized (syncObject) { if (!nodes.contains(node)) { nodes.add(node); + fireNodeAdded(node); } } } @@ -289,6 +326,7 @@ public class NodeManager implements HighLevelClientListener { if (nodeClients.containsKey(node)) { disconnect(node); } + fireNodeRemoved(node); } }