Move CoreListener event firing to CoreListenerSupport.
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Wed, 12 Nov 2008 23:49:54 +0000 (00:49 +0100)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Wed, 12 Nov 2008 23:49:54 +0000 (00:49 +0100)
src/net/pterodactylus/jsite/core/CoreImpl.java
src/net/pterodactylus/jsite/core/CoreListenerSupport.java [new file with mode: 0644]

index cff97c6..1e52659 100644 (file)
@@ -21,7 +21,6 @@ package net.pterodactylus.jsite.core;
 
 import java.io.IOException;
 import java.net.UnknownHostException;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
@@ -40,8 +39,8 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
        /** The logger. */
        private static final Logger logger = Logging.getLogger(CoreImpl.class.getName());
 
-       /** The core listeners. */
-       private final List<CoreListener> coreListeners = new ArrayList<CoreListener>();
+       /** The core listener support. */
+       private final CoreListenerSupport coreListenerSupport = new CoreListenerSupport();
 
        /** Thread pool. */
        private Executor threadPool = Executors.newCachedThreadPool();
@@ -66,7 +65,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         */
        public void addCoreListener(CoreListener coreListener) {
                logger.log(Level.FINEST, "adding core listener: " + coreListener);
-               coreListeners.add(coreListener);
+               coreListenerSupport.addListener(coreListener);
        }
 
        /**
@@ -74,265 +73,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         */
        public void removeCoreListener(CoreListener coreListener) {
                logger.log(Level.FINEST, "removing core listener: " + coreListener);
-               coreListeners.remove(coreListener);
-       }
-
-       /**
-        * Notifies all listeners that the projects were loaded successfully.
-        *
-        * @param directory
-        *            The directory the projects were loaded from
-        */
-       private void fireLoadingProjectsDone(String directory) {
-               logger.log(Level.FINEST, "firing loadingProjectsDone event with [directory=" + directory + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.loadingProjectsDone(directory);
-               }
-       }
-
-       /**
-        * Notifies all core listeners that loading the projects from the given
-        * directory has failed.
-        *
-        * @param directory
-        *            The directory the projects were tried to load from
-        * @param throwable
-        *            The exception that occured when loading projects
-        */
-       private void fireLoadingProjectsFailed(String directory, Throwable throwable) {
-               logger.log(Level.FINEST, "firing loadingProjectsFailed event with [directory=" + directory + ",throwable=" + throwable + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.loadingProjectsFailed(directory, throwable);
-               }
-       }
-
-       /**
-        * Notifies all listeners that the projects were successfully saved.
-        *
-        * @param directory
-        *            The directory the projects were saved to
-        */
-       private void fireSavingProjectsDone(String directory) {
-               logger.log(Level.FINEST, "firing savingProjectsDone event with [directory=" + directory + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.savingProjectsDone(directory);
-               }
-       }
-
-       /**
-        * Notifies all listeners that the projects could not be saved.
-        *
-        * @param directory
-        *            The directory the projects were to be saved to
-        * @param throwable
-        *            The exception that occured when saving the projects
-        */
-       private void fireSavingProjectsFailed(String directory, Throwable throwable) {
-               logger.log(Level.FINEST, "firing savingProjectsFailed event with [directory=" + directory + ",throwable=" + throwable + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.savingProjectsFailed(directory, throwable);
-               }
-       }
-
-       /**
-        * Notifies all listeners that a project was added.
-        *
-        * @param project
-        *            The project that was added
-        */
-       private void fireProjectAdded(Project project) {
-               logger.log(Level.FINEST, "firing projectAdded event with [project=" + project + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.projectAdded(project);
-               }
-       }
-
-       /**
-        * Notifies all listeners that a project was cloned.
-        *
-        * @param clonedProject
-        *            The project that was cloned
-        * @param projectClone
-        *            The clone of the project
-        */
-       private void fireProjectCloned(Project clonedProject, Project projectClone) {
-               logger.log(Level.FINEST, "firing projectCloned event with [clonedProject=" + clonedProject + ",projectClone=" + projectClone + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.projectCloned(clonedProject, projectClone);
-               }
-       }
-
-       /**
-        * Notifies all listeners that a project was removed.
-        *
-        * @param project
-        *            The project that was removed
-        */
-       private void fireProjectRemoved(Project project) {
-               logger.log(Level.FINEST, "firing projectRemoved event with [project=" + project + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.projectRemoved(project);
-               }
-       }
-
-       /**
-        * Notifies all listeners that the nodes were successfully loaded.
-        *
-        * @param directory
-        *            The directory the nodes were loaded from
-        */
-       private void fireLoadingNodesDone(String directory) {
-               logger.log(Level.FINEST, "firing loadingNodesDone event with [directory=" + directory + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.loadingNodesDone(directory);
-               }
-       }
-
-       /**
-        * Notifies all listeners that loading the nodes has failed.
-        *
-        * @param directory
-        *            The directory the nodes were loaded from
-        * @param throwable
-        *            The exception that occured while loading the nodes
-        */
-       private void fireLoadingNodesFailed(String directory, Throwable throwable) {
-               logger.log(Level.FINEST, "firing loadingNodesFailed event with [directory=" + directory + ",throwable=" + throwable + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.loadingNodesFailed(directory, throwable);
-               }
-       }
-
-       /**
-        * Notifies all listeners that the nodes were saved successfully.
-        *
-        * @param directory
-        *            The directory the nodes were saved to
-        */
-       private void fireSavingNodesDone(String directory) {
-               logger.log(Level.FINEST, "firing savingNodesDone event with [directory=" + directory + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.savingNodesDone(directory);
-               }
-       }
-
-       /**
-        * Notifies all listeners that saving the nodes has failed.
-        *
-        * @param directory
-        *            The directory the nodes were saved to
-        * @param throwable
-        *            The exception that occured while saving the nodes
-        */
-       private void fireSavingNodesFailed(String directory, Throwable throwable) {
-               logger.log(Level.FINEST, "firing savingNodesFailed event with [directory=" + directory + ",throwable=" + throwable + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.savingProjectsFailed(directory, throwable);
-               }
-       }
-
-       /**
-        * Notifies all core listeners that the core has loaded and is ready to run.
-        */
-       private void fireCoreLoaded() {
-               logger.log(Level.FINEST, "firing coreLoaded event");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.coreLoaded();
-               }
-       }
-
-       /**
-        * Notifies all listeners that the core was stopped.
-        */
-       private void fireCoreStopped() {
-               logger.log(Level.FINEST, "firing coreStopped event");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.coreStopped();
-               }
-       }
-
-       /**
-        * Notifies all listeners that a node was added to the core.
-        *
-        * @param node
-        *            The node that was added
-        */
-       private void fireNodeAdded(Node node) {
-               logger.log(Level.FINEST, "firing nodeAdded event with [node=" + node + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.nodeAdded(node);
-               }
-       }
-
-       /**
-        * Notifies all listeners that a node was removed from the core.
-        *
-        * @param node
-        *            The node that was removed
-        */
-       private void fireNodeRemoved(Node node) {
-               logger.log(Level.FINEST, "firing nodeRemoved event with [node=" + node + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.nodeRemoved(node);
-               }
-       }
-
-       /**
-        * Notifies all listeners that a connection to the given node is now being
-        * established.
-        *
-        * @param node
-        *            The node that is being connected to
-        */
-       private void fireNodeConnecting(Node node) {
-               logger.log(Level.FINEST, "firing nodeConnecting event with [node=" + node + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.nodeConnecting(node);
-               }
-       }
-
-       /**
-        * Notifies all listeners that the given node is now connected.
-        *
-        * @param node
-        *            The node that is now connected
-        */
-       private void fireNodeConnected(Node node) {
-               logger.log(Level.FINEST, "firing nodeConnected event with [node=" + node + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.nodeConnected(node);
-               }
-       }
-
-       /**
-        * Notifies all listeners that a connection to a node has failed.
-        *
-        * @param node
-        *            The node that could not be connected
-        * @param cause
-        *            The cause of the failure
-        */
-       private void fireNodeConnectionFailed(Node node, Throwable cause) {
-               logger.log(Level.FINEST, "firing nodeConnectionFailed event with [node=" + node + ",cause=" + cause + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.nodeConnectionFailed(node, cause);
-               }
-       }
-
-       /**
-        * Notifies all listeners that the given node was disconnected.
-        *
-        * @param node
-        *            The node that is now disconnected
-        * @param throwable
-        *            The exception that caused the disconnect, or <code>null</code>
-        *            if there was no exception
-        */
-       private void fireNodeDisconnected(Node node, Throwable throwable) {
-               logger.log(Level.FINEST, "firing nodeDisconnected event with [node=" + node + ",throwable=" + throwable + "]");
-               for (CoreListener coreListener : coreListeners) {
-                       coreListener.nodeDisconnected(node, throwable);
-               }
+               coreListenerSupport.removeListener(coreListener);
        }
 
        //
@@ -426,17 +167,17 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
                logger.log(Level.INFO, "starting core…");
                try {
                        nodeManager.load();
-                       fireLoadingNodesDone(nodeManager.getDirectory());
+                       coreListenerSupport.fireLoadingNodesDone(nodeManager.getDirectory());
                } catch (IOException ioe1) {
-                       fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
+                       coreListenerSupport.fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
                }
                try {
                        projectManager.load();
-                       fireLoadingProjectsDone(projectManager.getDirectory());
+                       coreListenerSupport.fireLoadingProjectsDone(projectManager.getDirectory());
                } catch (IOException ioe1) {
-                       fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
+                       coreListenerSupport.fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
                }
-               fireCoreLoaded();
+               coreListenerSupport.fireCoreLoaded();
        }
 
        /**
@@ -446,17 +187,17 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
                logger.log(Level.INFO, "stopping core…");
                try {
                        projectManager.save();
-                       fireSavingProjectsDone(projectManager.getDirectory());
+                       coreListenerSupport.fireSavingProjectsDone(projectManager.getDirectory());
                } catch (IOException ioe1) {
-                       fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
+                       coreListenerSupport.fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
                }
                try {
                        nodeManager.save();
-                       fireSavingNodesDone(nodeManager.getDirectory());
+                       coreListenerSupport.fireSavingNodesDone(nodeManager.getDirectory());
                } catch (IOException ioe1) {
-                       fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
+                       coreListenerSupport.fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
                }
-               fireCoreStopped();
+               coreListenerSupport.fireCoreStopped();
        }
 
        /**
@@ -480,7 +221,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         */
        public void connectToNode(Node node) {
                logger.log(Level.FINEST, "connectToNode(node=" + node + ")");
-               fireNodeConnecting(node);
+               coreListenerSupport.fireNodeConnecting(node);
                nodeManager.connect(node);
        }
 
@@ -498,7 +239,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
        public void createProject() throws IOException, JSiteException {
                logger.log(Level.FINEST, "createProject()");
                Project newProject = projectManager.createProject();
-               fireProjectAdded(newProject);
+               coreListenerSupport.fireProjectAdded(newProject);
        }
 
        /**
@@ -507,7 +248,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
        public void cloneProject(Project project) {
                logger.log(Level.FINEST, "cloneProject(project=" + project + ")");
                Project projectClone = projectManager.cloneProject(project);
-               fireProjectCloned(project, projectClone);
+               coreListenerSupport.fireProjectCloned(project, projectClone);
        }
 
        /**
@@ -516,7 +257,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
        public void removeProject(Project project) {
                logger.log(Level.FINEST, "removeProject(project=" + project + ")");
                projectManager.removeProject(project);
-               fireProjectRemoved(project);
+               coreListenerSupport.fireProjectRemoved(project);
        }
 
        //
@@ -549,35 +290,35 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         * {@inheritDoc}
         */
        public void nodeAdded(Node node) {
-               fireNodeAdded(node);
+               coreListenerSupport.fireNodeAdded(node);
        }
 
        /**
         * {@inheritDoc}
         */
        public void nodeRemoved(Node node) {
-               fireNodeRemoved(node);
+               coreListenerSupport.fireNodeRemoved(node);
        }
 
        /**
         * {@inheritDoc}
         */
        public void nodeConnected(Node node) {
-               fireNodeConnected(node);
+               coreListenerSupport.fireNodeConnected(node);
        }
 
        /**
         * {@inheritDoc}
         */
        public void nodeConnectionFailed(Node node, Throwable cause) {
-               fireNodeConnectionFailed(node, cause);
+               coreListenerSupport.fireNodeConnectionFailed(node, cause);
        }
 
        /**
         * {@inheritDoc}
         */
        public void nodeDisconnected(Node node, Throwable throwable) {
-               fireNodeDisconnected(node, throwable);
+               coreListenerSupport.fireNodeDisconnected(node, throwable);
        }
 
        //
diff --git a/src/net/pterodactylus/jsite/core/CoreListenerSupport.java b/src/net/pterodactylus/jsite/core/CoreListenerSupport.java
new file mode 100644 (file)
index 0000000..e0d62f5
--- /dev/null
@@ -0,0 +1,295 @@
+/*
+ * jSite-next - CoreListenerSupport.java -
+ * Copyright © 2008 David Roden
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+package net.pterodactylus.jsite.core;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import net.pterodactylus.util.event.ListenerSupport;
+
+/**
+ * TODO
+ *
+ * @author David Roden &lt;droden@gmail.com&gt;
+ */
+public class CoreListenerSupport extends ListenerSupport<CoreListener> {
+
+       /** The logger. */
+       private static final Logger logger = Logger.getLogger(CoreListenerSupport.class.getName());
+
+       /**
+        * Notifies all listeners that the projects were loaded successfully.
+        *
+        * @param directory
+        *            The directory the projects were loaded from
+        */
+       public void fireLoadingProjectsDone(String directory) {
+               logger.log(Level.FINEST, "firing loadingProjectsDone event with [directory=" + directory + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.loadingProjectsDone(directory);
+               }
+       }
+
+       /**
+        * Notifies all core listeners that loading the projects from the given
+        * directory has failed.
+        *
+        * @param directory
+        *            The directory the projects were tried to load from
+        * @param throwable
+        *            The exception that occured when loading projects
+        */
+       public void fireLoadingProjectsFailed(String directory, Throwable throwable) {
+               logger.log(Level.FINEST, "firing loadingProjectsFailed event with [directory=" + directory + ",throwable=" + throwable + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.loadingProjectsFailed(directory, throwable);
+               }
+       }
+
+       /**
+        * Notifies all listeners that the projects were successfully saved.
+        *
+        * @param directory
+        *            The directory the projects were saved to
+        */
+       public void fireSavingProjectsDone(String directory) {
+               logger.log(Level.FINEST, "firing savingProjectsDone event with [directory=" + directory + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.savingProjectsDone(directory);
+               }
+       }
+
+       /**
+        * Notifies all listeners that the projects could not be saved.
+        *
+        * @param directory
+        *            The directory the projects were to be saved to
+        * @param throwable
+        *            The exception that occured when saving the projects
+        */
+       public void fireSavingProjectsFailed(String directory, Throwable throwable) {
+               logger.log(Level.FINEST, "firing savingProjectsFailed event with [directory=" + directory + ",throwable=" + throwable + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.savingProjectsFailed(directory, throwable);
+               }
+       }
+
+       /**
+        * Notifies all listeners that a project was added.
+        *
+        * @param project
+        *            The project that was added
+        */
+       public void fireProjectAdded(Project project) {
+               logger.log(Level.FINEST, "firing projectAdded event with [project=" + project + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.projectAdded(project);
+               }
+       }
+
+       /**
+        * Notifies all listeners that a project was cloned.
+        *
+        * @param clonedProject
+        *            The project that was cloned
+        * @param projectClone
+        *            The clone of the project
+        */
+       public void fireProjectCloned(Project clonedProject, Project projectClone) {
+               logger.log(Level.FINEST, "firing projectCloned event with [clonedProject=" + clonedProject + ",projectClone=" + projectClone + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.projectCloned(clonedProject, projectClone);
+               }
+       }
+
+       /**
+        * Notifies all listeners that a project was removed.
+        *
+        * @param project
+        *            The project that was removed
+        */
+       public void fireProjectRemoved(Project project) {
+               logger.log(Level.FINEST, "firing projectRemoved event with [project=" + project + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.projectRemoved(project);
+               }
+       }
+
+       /**
+        * Notifies all listeners that the nodes were successfully loaded.
+        *
+        * @param directory
+        *            The directory the nodes were loaded from
+        */
+       public void fireLoadingNodesDone(String directory) {
+               logger.log(Level.FINEST, "firing loadingNodesDone event with [directory=" + directory + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.loadingNodesDone(directory);
+               }
+       }
+
+       /**
+        * Notifies all listeners that loading the nodes has failed.
+        *
+        * @param directory
+        *            The directory the nodes were loaded from
+        * @param throwable
+        *            The exception that occured while loading the nodes
+        */
+       public void fireLoadingNodesFailed(String directory, Throwable throwable) {
+               logger.log(Level.FINEST, "firing loadingNodesFailed event with [directory=" + directory + ",throwable=" + throwable + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.loadingNodesFailed(directory, throwable);
+               }
+       }
+
+       /**
+        * Notifies all listeners that the nodes were saved successfully.
+        *
+        * @param directory
+        *            The directory the nodes were saved to
+        */
+       public void fireSavingNodesDone(String directory) {
+               logger.log(Level.FINEST, "firing savingNodesDone event with [directory=" + directory + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.savingNodesDone(directory);
+               }
+       }
+
+       /**
+        * Notifies all listeners that saving the nodes has failed.
+        *
+        * @param directory
+        *            The directory the nodes were saved to
+        * @param throwable
+        *            The exception that occured while saving the nodes
+        */
+       public void fireSavingNodesFailed(String directory, Throwable throwable) {
+               logger.log(Level.FINEST, "firing savingNodesFailed event with [directory=" + directory + ",throwable=" + throwable + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.savingProjectsFailed(directory, throwable);
+               }
+       }
+
+       /**
+        * Notifies all core listeners that the core has loaded and is ready to run.
+        */
+       public void fireCoreLoaded() {
+               logger.log(Level.FINEST, "firing coreLoaded event");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.coreLoaded();
+               }
+       }
+
+       /**
+        * Notifies all listeners that the core was stopped.
+        */
+       public void fireCoreStopped() {
+               logger.log(Level.FINEST, "firing coreStopped event");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.coreStopped();
+               }
+       }
+
+       /**
+        * Notifies all listeners that a node was added to the core.
+        *
+        * @param node
+        *            The node that was added
+        */
+       public void fireNodeAdded(Node node) {
+               logger.log(Level.FINEST, "firing nodeAdded event with [node=" + node + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.nodeAdded(node);
+               }
+       }
+
+       /**
+        * Notifies all listeners that a node was removed from the core.
+        *
+        * @param node
+        *            The node that was removed
+        */
+       public void fireNodeRemoved(Node node) {
+               logger.log(Level.FINEST, "firing nodeRemoved event with [node=" + node + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.nodeRemoved(node);
+               }
+       }
+
+       /**
+        * Notifies all listeners that a connection to the given node is now being
+        * established.
+        *
+        * @param node
+        *            The node that is being connected to
+        */
+       public void fireNodeConnecting(Node node) {
+               logger.log(Level.FINEST, "firing nodeConnecting event with [node=" + node + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.nodeConnecting(node);
+               }
+       }
+
+       /**
+        * Notifies all listeners that the given node is now connected.
+        *
+        * @param node
+        *            The node that is now connected
+        */
+       public void fireNodeConnected(Node node) {
+               logger.log(Level.FINEST, "firing nodeConnected event with [node=" + node + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.nodeConnected(node);
+               }
+       }
+
+       /**
+        * Notifies all listeners that a connection to a node has failed.
+        *
+        * @param node
+        *            The node that could not be connected
+        * @param cause
+        *            The cause of the failure
+        */
+       public void fireNodeConnectionFailed(Node node, Throwable cause) {
+               logger.log(Level.FINEST, "firing nodeConnectionFailed event with [node=" + node + ",cause=" + cause + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.nodeConnectionFailed(node, cause);
+               }
+       }
+
+       /**
+        * Notifies all listeners that the given node was disconnected.
+        *
+        * @param node
+        *            The node that is now disconnected
+        * @param throwable
+        *            The exception that caused the disconnect, or <code>null</code>
+        *            if there was no exception
+        */
+       public void fireNodeDisconnected(Node node, Throwable throwable) {
+               logger.log(Level.FINEST, "firing nodeDisconnected event with [node=" + node + ",throwable=" + throwable + "]");
+               for (CoreListener coreListener : getListeners()) {
+                       coreListener.nodeDisconnected(node, throwable);
+               }
+       }
+
+}