load nodes before projects
[jSite2.git] / src / net / pterodactylus / jsite / core / CoreImpl.java
index 5fc0e26..cd65bf4 100644 (file)
@@ -23,18 +23,23 @@ 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;
+
 
 /**
  * The core of jSite.
  * 
  * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
- * @version $Id$
  */
 public class CoreImpl implements Core, NodeListener, RequestListener {
 
        /** The core listeners. */
        private final List<CoreListener> coreListeners = new ArrayList<CoreListener>();
 
+       /** Thread pool. */
+       private Executor threadPool = Executors.newCachedThreadPool();
+
        /** The project manager. */
        private ProjectManager projectManager;
 
@@ -71,7 +76,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         *            The directory the projects were loaded from
         */
        private void fireLoadingProjectsDone(String directory) {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.loadingProjectsDone(directory);
                }
        }
@@ -86,7 +91,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         *            The exception that occured when loading projects
         */
        private void fireLoadingProjectsFailed(String directory, Throwable throwable) {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.loadingProjectsFailed(directory, throwable);
                }
        }
@@ -98,7 +103,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         *            The directory the projects were saved to
         */
        private void fireSavingProjectsDone(String directory) {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.savingProjectsDone(directory);
                }
        }
@@ -112,19 +117,57 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         *            The exception that occured when saving the projects
         */
        private void fireSavingProjectsFailed(String directory, Throwable throwable) {
-               for (CoreListener coreListener: coreListeners) {
+               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) {
+               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) {
+               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) {
+               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) {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.loadingNodesDone(directory);
                }
        }
@@ -138,7 +181,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         *            The exception that occured while loading the nodes
         */
        private void fireLoadingNodesFailed(String directory, Throwable throwable) {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.loadingNodesFailed(directory, throwable);
                }
        }
@@ -150,7 +193,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         *            The directory the nodes were saved to
         */
        private void fireSavingNodesDone(String directory) {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.savingNodesDone(directory);
                }
        }
@@ -164,7 +207,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         *            The exception that occured while saving the nodes
         */
        private void fireSavingNodesFailed(String directory, Throwable throwable) {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.savingProjectsFailed(directory, throwable);
                }
        }
@@ -173,7 +216,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         * Notifies all core listeners that the core has loaded and is ready to run.
         */
        private void fireCoreLoaded() {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.coreLoaded();
                }
        }
@@ -182,7 +225,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         * Notifies all listeners that the core was stopped.
         */
        private void fireCoreStopped() {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.coreStopped();
                }
        }
@@ -194,7 +237,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         *            The node that was added
         */
        private void fireNodeAdded(Node node) {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.nodeAdded(node);
                }
        }
@@ -206,7 +249,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         *            The node that was removed
         */
        private void fireNodeRemoved(Node node) {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.nodeRemoved(node);
                }
        }
@@ -219,7 +262,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         *            The node that is being connected to
         */
        private void fireNodeConnecting(Node node) {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.nodeConnecting(node);
                }
        }
@@ -231,7 +274,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         *            The node that is now connected
         */
        private void fireNodeConnected(Node node) {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.nodeConnected(node);
                }
        }
@@ -245,7 +288,7 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         *            The cause of the failure
         */
        private void fireNodeConnectionFailed(Node node, Throwable cause) {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.nodeConnectionFailed(node, cause);
                }
        }
@@ -260,51 +303,22 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         *            if there was no exception
         */
        private void fireNodeDisconnected(Node node, Throwable throwable) {
-               for (CoreListener coreListener: coreListeners) {
+               for (CoreListener coreListener : coreListeners) {
                        coreListener.nodeDisconnected(node, throwable);
                }
        }
 
-       /**
-        * Notifies all listeners that a request was added to a node.
-        * 
-        * @param request
-        *            The request that was added
-        */
-       private void fireRequestAdded(Request request) {
-               for (CoreListener coreListener: coreListeners) {
-                       coreListener.requestAdded(request);
-               }
-       }
-
-       /**
-        * Notifies all listeners that a request progressed.
-        * 
-        * @param request
-        *            The request
-        */
-       private void fireRequestProgressed(Request request) {
-               for (CoreListener coreListener: coreListeners) {
-                       coreListener.requestProgressed(request);
-               }
-       }
+       //
+       // ACCESSORS
+       //
 
        /**
-        * Notifies all listeners that a request was removed.
-        * 
-        * @param request
-        *            The request that was removed
+        * {@inheritDoc}
         */
-       private void fireRequestRemoved(Request request) {
-               for (CoreListener coreListener: coreListeners) {
-                       coreListener.requestRemoved(request);
-               }
+       public Executor getThreadPool() {
+               return threadPool;
        }
 
-       //
-       // ACCESSORS
-       //
-
        /**
         * Returns the project manager.
         * 
@@ -383,17 +397,17 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         */
        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);
                }
+               try {
+                       projectManager.load();
+                       fireLoadingProjectsDone(projectManager.getDirectory());
+               } catch (IOException ioe1) {
+                       fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
+               }
                fireCoreLoaded();
        }
 
@@ -448,8 +462,25 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
        /**
         * {@inheritDoc}
         */
-       public Project createProject() throws IOException, NoNodeException {
-               return projectManager.createProject();
+       public void createProject() throws IOException, JSiteException {
+               Project newProject = projectManager.createProject();
+               fireProjectAdded(newProject);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public void cloneProject(Project project) {
+               Project projectClone = projectManager.cloneProject(project);
+               fireProjectCloned(project, projectClone);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public void removeProject(Project project) {
+               projectManager.removeProject(project);
+               fireProjectRemoved(project);
        }
 
        //
@@ -519,21 +550,36 @@ public class CoreImpl implements Core, NodeListener, RequestListener {
         * {@inheritDoc}
         */
        public void requestAdded(Request request) {
-               fireRequestAdded(request);
+               /* TODO - find project and process request */
        }
 
        /**
         * @see net.pterodactylus.jsite.core.RequestListener#requestProgressed(Request)
         */
        public void requestProgressed(Request request) {
-               fireRequestProgressed(request);
+               /* TODO - find project and process request */
        }
 
        /**
         * @see net.pterodactylus.jsite.core.RequestListener#requestRemoved(net.pterodactylus.jsite.core.Request)
         */
        public void requestRemoved(Request request) {
-               fireRequestRemoved(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 */
        }
 
 }