X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fcore%2FCoreImpl.java;h=3654c4fa09a978c4a13486dc93bb40e9a50fc84b;hb=164c7174571672ca255b918a56c8db9336e31d19;hp=8b79d3ea4dab4987200b3ec12d0c47a53e83912a;hpb=53a6875ff935dbfdc08aaeadcd09bcaa3172ad53;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/core/CoreImpl.java b/src/net/pterodactylus/jsite/core/CoreImpl.java index 8b79d3e..3654c4f 100644 --- a/src/net/pterodactylus/jsite/core/CoreImpl.java +++ b/src/net/pterodactylus/jsite/core/CoreImpl.java @@ -20,26 +20,43 @@ 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; +import java.util.logging.Level; +import java.util.logging.Logger; + +import net.pterodactylus.util.logging.Logging; /** * 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 logger. */ + private static final Logger logger = Logging.getLogger(CoreImpl.class.getName()); /** The core listeners. */ private final List coreListeners = new ArrayList(); + /** Thread pool. */ + private Executor threadPool = Executors.newCachedThreadPool(); + /** The project manager. */ private ProjectManager projectManager; /** The node manager. */ private NodeManager nodeManager; + /** The request manager. */ + /* TODO - remove */ + @SuppressWarnings("unused") + private RequestManager requestManager; + // // LISTENER MANAGEMENT // @@ -48,6 +65,7 @@ public class CoreImpl implements Core { * {@inheritDoc} */ public void addCoreListener(CoreListener coreListener) { + logger.log(Level.FINEST, "adding core listener: " + coreListener); coreListeners.add(coreListener); } @@ -55,17 +73,19 @@ public class CoreImpl implements Core { * {@inheritDoc} */ 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) { - for (CoreListener coreListener: coreListeners) { + logger.log(Level.FINEST, "firing loadingProjectsDone event with [directory=" + directory + "]"); + for (CoreListener coreListener : coreListeners) { coreListener.loadingProjectsDone(directory); } } @@ -73,92 +93,140 @@ 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 * The exception that occured when loading projects */ private void fireLoadingProjectsFailed(String directory, Throwable throwable) { - for (CoreListener coreListener: coreListeners) { + 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) { - for (CoreListener coreListener: coreListeners) { + 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) { - for (CoreListener coreListener: coreListeners) { + 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) { - for (CoreListener coreListener: coreListeners) { + 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) { - for (CoreListener coreListener: coreListeners) { + 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) { - for (CoreListener coreListener: coreListeners) { + 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) { - for (CoreListener coreListener: coreListeners) { + logger.log(Level.FINEST, "firing savingNodesFailed event with [directory=" + directory + ",throwable=" + throwable + "]"); + for (CoreListener coreListener : coreListeners) { coreListener.savingProjectsFailed(directory, throwable); } } @@ -167,7 +235,8 @@ public class CoreImpl implements Core { * Notifies all core listeners that the core has loaded and is ready to run. */ private void fireCoreLoaded() { - for (CoreListener coreListener: coreListeners) { + logger.log(Level.FINEST, "firing coreLoaded event"); + for (CoreListener coreListener : coreListeners) { coreListener.coreLoaded(); } } @@ -176,18 +245,110 @@ public class CoreImpl implements Core { * Notifies all listeners that the core was stopped. */ private void fireCoreStopped() { - for (CoreListener coreListener: coreListeners) { + 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 null + * 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); + } + } + // // ACCESSORS // /** + * {@inheritDoc} + */ + public Executor getThreadPool() { + return threadPool; + } + + /** * Returns the project manager. - * + * * @return The project manager */ public ProjectManager getProjectManager() { @@ -196,7 +357,7 @@ public class CoreImpl implements Core { /** * Sets the project manager to use. - * + * * @param projectManager * The project manager to use */ @@ -206,7 +367,7 @@ public class CoreImpl implements Core { /** * Returns the node manager. - * + * * @return The node manager */ public NodeManager getNodeManager() { @@ -215,7 +376,7 @@ public class CoreImpl implements Core { /** * Sets the node manager to use. - * + * * @param nodeManager * The node manager to use */ @@ -224,6 +385,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 getNodes() { @@ -237,6 +408,13 @@ public class CoreImpl implements Core { return nodeManager.hasNode(node); } + /** + * {@inheritDoc} + */ + public List getProjects() { + return projectManager.getProjects(); + } + // // ACTIONS // @@ -245,18 +423,19 @@ public class CoreImpl implements Core { * {@inheritDoc} */ public void start() { - try { - projectManager.load(); - fireLoadingProjectsDone(projectManager.getDirectory()); - } catch (IOException ioe1) { - fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1); - } + logger.log(Level.INFO, "starting core…"); 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(); } @@ -264,6 +443,7 @@ public class CoreImpl implements Core { * {@inheritDoc} */ public void stop() { + logger.log(Level.INFO, "stopping core…"); try { projectManager.save(); fireSavingProjectsDone(projectManager.getDirectory()); @@ -282,8 +462,61 @@ public class CoreImpl implements Core { /** * {@inheritDoc} */ + public boolean addNode(Node node) throws UnknownHostException { + logger.log(Level.FINEST, "addNode(node=" + node + ")"); + return nodeManager.addNode(node); + } + + /** + * {@inheritDoc} + */ + public void removeNode(Node node) { + logger.log(Level.FINEST, "removeNode(node=" + node + ")"); + nodeManager.removeNode(node); + } + + /** + * {@inheritDoc} + */ public void connectToNode(Node node) { - /* TODO */ + logger.log(Level.FINEST, "connectToNode(node=" + node + ")"); + fireNodeConnecting(node); + nodeManager.connect(node); + } + + /** + * {@inheritDoc} + */ + public void disconnectFromNode(Node node) { + logger.log(Level.FINEST, "disconnectFromNode(node=" + node + ")"); + nodeManager.disconnect(node); + } + + /** + * {@inheritDoc} + */ + public void createProject() throws IOException, JSiteException { + logger.log(Level.FINEST, "createProject()"); + Project newProject = projectManager.createProject(); + fireProjectAdded(newProject); + } + + /** + * {@inheritDoc} + */ + public void cloneProject(Project project) { + logger.log(Level.FINEST, "cloneProject(project=" + project + ")"); + Project projectClone = projectManager.cloneProject(project); + fireProjectCloned(project, projectClone); + } + + /** + * {@inheritDoc} + */ + public void removeProject(Project project) { + logger.log(Level.FINEST, "removeProject(project=" + project + ")"); + projectManager.removeProject(project); + fireProjectRemoved(project); } // @@ -295,6 +528,7 @@ public class CoreImpl implements Core { */ @SuppressWarnings("unused") private void loadConfig() { + logger.log(Level.FINEST, "loadConfig()"); /* TODO */ } @@ -303,7 +537,87 @@ public class CoreImpl implements Core { */ @SuppressWarnings("unused") private void saveConfig() { + logger.log(Level.FINEST, "saveConfig()"); /* 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 */ + } + }