make delete and clone buttons project specific
[jSite2.git] / src / net / pterodactylus / jsite / core / CoreImpl.java
index 8b79d3e..dbc5997 100644 (file)
 package net.pterodactylus.jsite.core;
 
 import java.io.IOException;
+import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
 
+import net.pterodactylus.jsite.project.Project;
+import net.pterodactylus.jsite.project.ProjectManager;
+
 /**
  * The core of jSite.
- *
+ * 
  * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- * @version $Id$
  */
-public class CoreImpl implements Core {
+public class CoreImpl implements Core, NodeListener, RequestListener {
 
        /** The core listeners. */
        private final List<CoreListener> coreListeners = new ArrayList<CoreListener>();
@@ -40,6 +43,11 @@ public class CoreImpl implements Core {
        /** The node manager. */
        private NodeManager nodeManager;
 
+       /** The request manager. */
+       /* TODO - remove */
+       @SuppressWarnings("unused")
+       private RequestManager requestManager;
+
        //
        // LISTENER MANAGEMENT
        //
@@ -60,7 +68,7 @@ public class CoreImpl implements Core {
 
        /**
         * Notifies all listeners that the projects were loaded successfully.
-        *
+        * 
         * @param directory
         *            The directory the projects were loaded from
         */
@@ -73,7 +81,7 @@ public class CoreImpl implements Core {
        /**
         * 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
@@ -87,7 +95,7 @@ public class CoreImpl implements Core {
 
        /**
         * Notifies all listeners that the projects were successfully saved.
-        *
+        * 
         * @param directory
         *            The directory the projects were saved to
         */
@@ -99,7 +107,7 @@ public class CoreImpl implements Core {
 
        /**
         * Notifies all listeners that the projects could not be saved.
-        *
+        * 
         * @param directory
         *            The directory the projects were to be saved to
         * @param throwable
@@ -112,8 +120,32 @@ public class CoreImpl implements Core {
        }
 
        /**
+        * Notifies all listeners that a project was added.
+        * 
+        * @param project
+        *            The project that was added
+        */
+       private void fireProjectAdded(Project project) {
+               for (CoreListener coreListener: coreListeners) {
+                       coreListener.projectAdded(project);
+               }
+       }
+
+       /**
+        * Notifies all listeners that a project was removed.
+        * 
+        * @param project
+        *            The project that was removed
+        */
+       private void fireProjectRemoved(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
         */
@@ -125,7 +157,7 @@ public class CoreImpl implements Core {
 
        /**
         * Notifies all listeners that loading the nodes has failed.
-        *
+        * 
         * @param directory
         *            The directory the nodes were loaded from
         * @param throwable
@@ -139,7 +171,7 @@ public class CoreImpl implements Core {
 
        /**
         * Notifies all listeners that the nodes were saved successfully.
-        *
+        * 
         * @param directory
         *            The directory the nodes were saved to
         */
@@ -151,7 +183,7 @@ public class CoreImpl implements Core {
 
        /**
         * Notifies all listeners that saving the nodes has failed.
-        *
+        * 
         * @param directory
         *            The directory the nodes were saved to
         * @param throwable
@@ -181,13 +213,91 @@ public class CoreImpl implements Core {
                }
        }
 
+       /**
+        * Notifies all listeners that a node was added to the core.
+        * 
+        * @param node
+        *            The node that was added
+        */
+       private void fireNodeAdded(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) {
+               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) {
+               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) {
+               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) {
+               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) {
+               for (CoreListener coreListener: coreListeners) {
+                       coreListener.nodeDisconnected(node, throwable);
+               }
+       }
+
        //
        // ACCESSORS
        //
 
        /**
         * Returns the project manager.
-        *
+        * 
         * @return The project manager
         */
        public ProjectManager getProjectManager() {
@@ -196,7 +306,7 @@ public class CoreImpl implements Core {
 
        /**
         * Sets the project manager to use.
-        *
+        * 
         * @param projectManager
         *            The project manager to use
         */
@@ -206,7 +316,7 @@ public class CoreImpl implements Core {
 
        /**
         * Returns the node manager.
-        *
+        * 
         * @return The node manager
         */
        public NodeManager getNodeManager() {
@@ -215,7 +325,7 @@ public class CoreImpl implements Core {
 
        /**
         * Sets the node manager to use.
-        *
+        * 
         * @param nodeManager
         *            The node manager to use
         */
@@ -224,6 +334,16 @@ public class CoreImpl implements Core {
        }
 
        /**
+        * Sets the request manager to use.
+        * 
+        * @param requestManager
+        *            The request manager to use
+        */
+       public void setRequestManager(RequestManager requestManager) {
+               this.requestManager = requestManager;
+       }
+
+       /**
         * {@inheritDoc}
         */
        public List<Node> getNodes() {
@@ -237,6 +357,13 @@ public class CoreImpl implements Core {
                return nodeManager.hasNode(node);
        }
 
+       /**
+        * {@inheritDoc}
+        */
+       public List<Project> getProjects() {
+               return projectManager.getProjects();
+       }
+
        //
        // ACTIONS
        //
@@ -282,10 +409,48 @@ public class CoreImpl implements Core {
        /**
         * {@inheritDoc}
         */
+       public boolean addNode(Node node) throws UnknownHostException {
+               return nodeManager.addNode(node);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public void removeNode(Node node) {
+               nodeManager.removeNode(node);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
        public void connectToNode(Node node) {
-               /* TODO */
+               fireNodeConnecting(node);
+               nodeManager.connect(node);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public void disconnectFromNode(Node node) {
+               nodeManager.disconnect(node);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public void createProject() throws IOException, JSiteException {
+               Project newProject = projectManager.createProject();
+               fireProjectAdded(newProject);
        }
 
+       /**
+        * {@inheritDoc}
+        */
+       public void removeProject(Project project) {
+               projectManager.removeProject(project);
+               fireProjectRemoved(project);
+       }
+       
        //
        // PRIVATE METHODS
        //
@@ -306,4 +471,83 @@ public class CoreImpl implements Core {
                /* TODO */
        }
 
+       //
+       // INTERFACE NodeListener
+       //
+
+       /**
+        * {@inheritDoc}
+        */
+       public void nodeAdded(Node node) {
+               fireNodeAdded(node);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public void nodeRemoved(Node node) {
+               fireNodeRemoved(node);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public void nodeConnected(Node node) {
+               fireNodeConnected(node);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public void nodeConnectionFailed(Node node, Throwable cause) {
+               fireNodeConnectionFailed(node, cause);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public void nodeDisconnected(Node node, Throwable throwable) {
+               fireNodeDisconnected(node, throwable);
+       }
+
+       //
+       // INTERFACE RequestListener
+       //
+
+       /**
+        * {@inheritDoc}
+        */
+       public void requestAdded(Request request) {
+               /* TODO - find project and process request */
+       }
+
+       /**
+        * @see net.pterodactylus.jsite.core.RequestListener#requestProgressed(Request)
+        */
+       public void requestProgressed(Request request) {
+               /* TODO - find project and process request */
+       }
+
+       /**
+        * @see net.pterodactylus.jsite.core.RequestListener#requestRemoved(net.pterodactylus.jsite.core.Request)
+        */
+       public void requestRemoved(Request request) {
+               /* TODO - find project and process request */
+       }
+
+       /**
+        * @see net.pterodactylus.jsite.core.RequestListener#requestGeneratedURI(net.pterodactylus.jsite.core.Request,
+        *      java.lang.String)
+        */
+       public void requestGeneratedURI(Request request, String uri) {
+               /* TODO - find project and process request */
+       }
+
+       /**
+        * @see net.pterodactylus.jsite.core.RequestListener#requestFinished(net.pterodactylus.jsite.core.Request)
+        */
+       public void requestFinished(Request request) {
+               /* TODO - find project and process request */
+       }
+
 }