add more status notifications to core listener
[jSite2.git] / src / net / pterodactylus / jsite / core / Core.java
index 7c37808..9aa60cf 100644 (file)
@@ -37,11 +37,8 @@ public class Core {
        /** The project manager. */
        private ProjectManager projectManager;
 
-       /** The node list. */
-       private List<Node> configuredNodes = new ArrayList<Node>();
-
-       /** List of currently connected nodes. */
-       private List<Node> connectedNodes = new ArrayList<Node>();
+       /** The node manager. */
+       private NodeManager nodeManager;
 
        //
        // LISTENER MANAGEMENT
@@ -68,6 +65,18 @@ public class Core {
        }
 
        /**
+        * Notifies all listeners that the projects were loaded successfully.
+        *
+        * @param directory
+        *            The directory the projects were loaded from
+        */
+       private void fireLoadingProjectsDone(String directory) {
+               for (CoreListener coreListener: coreListeners) {
+                       coreListener.loadingProjectsDone(directory);
+               }
+       }
+
+       /**
         * Notifies all core listeners that loading the projects from the given
         * directory has failed.
         *
@@ -109,6 +118,58 @@ public class Core {
        }
 
        /**
+        * Notifies all listeners that the nodes were successfully loaded.
+        *
+        * @param directory
+        *            The directory the nodes were loaded from
+        */
+       private void fireLoadingNodesDone(String 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) {
+               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) {
+               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) {
+               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() {
@@ -150,12 +211,31 @@ public class Core {
        }
 
        /**
+        * Returns the node manager.
+        *
+        * @return The node manager
+        */
+       public NodeManager getNodeManager() {
+               return nodeManager;
+       }
+
+       /**
+        * Sets the node manager to use.
+        *
+        * @param nodeManager
+        *            The node manager to use
+        */
+       public void setNodeManager(NodeManager nodeManager) {
+               this.nodeManager = nodeManager;
+       }
+
+       /**
         * Returns the list of all configured nodes.
         *
         * @return All configured nodes
         */
        public List<Node> getNodes() {
-               return configuredNodes;
+               return nodeManager.getNodes();
        }
 
        /**
@@ -167,7 +247,7 @@ public class Core {
         *         node, <code>false</code> otherwise
         */
        public boolean isNodeConnected(Node node) {
-               return connectedNodes.contains(node);
+               return nodeManager.hasNode(node);
        }
 
        //
@@ -180,9 +260,16 @@ public class Core {
        public void start() {
                try {
                        projectManager.load();
+                       fireLoadingProjectsDone(projectManager.getDirectory());
                } catch (IOException ioe1) {
                        fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
                }
+               try {
+                       nodeManager.load();
+                       fireLoadingNodesDone(nodeManager.getDirectory());
+               } catch (IOException ioe1) {
+                       fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
+               }
                fireCoreLoaded();
        }
 
@@ -196,6 +283,12 @@ public class Core {
                } catch (IOException ioe1) {
                        fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
                }
+               try {
+                       nodeManager.save();
+                       fireSavingNodesDone(nodeManager.getDirectory());
+               } catch (IOException ioe1) {
+                       fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
+               }
                fireCoreStopped();
        }