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>();
/** The node manager. */
private NodeManager nodeManager;
+ /** The request manager. */
+ /* TODO - remove */
+ @SuppressWarnings("unused")
+ private RequestManager requestManager;
+
//
// LISTENER MANAGEMENT
//
/**
* Notifies all listeners that the projects were loaded successfully.
- *
+ *
* @param directory
* The directory the projects were loaded from
*/
/**
* 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
/**
* Notifies all listeners that the projects were successfully saved.
- *
+ *
* @param directory
* The directory the projects were saved to
*/
/**
* Notifies all listeners that the projects could not be saved.
- *
+ *
* @param directory
* The directory the projects were to be saved to
* @param throwable
/**
* Notifies all listeners that the nodes were successfully loaded.
- *
+ *
* @param directory
* The directory the nodes were loaded from
*/
/**
* Notifies all listeners that loading the nodes has failed.
- *
+ *
* @param directory
* The directory the nodes were loaded from
* @param throwable
/**
* Notifies all listeners that the nodes were saved successfully.
- *
+ *
* @param directory
* The directory the nodes were saved to
*/
/**
* Notifies all listeners that saving the nodes has failed.
- *
+ *
* @param directory
* The directory the nodes were saved to
* @param throwable
}
}
+ /**
+ * 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() {
/**
* Sets the project manager to use.
- *
+ *
* @param projectManager
* The project manager to use
*/
/**
* Returns the node manager.
- *
+ *
* @return The node manager
*/
public NodeManager getNodeManager() {
/**
* Sets the node manager to use.
- *
+ *
* @param nodeManager
* The node manager to use
*/
}
/**
+ * 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() {
return nodeManager.hasNode(node);
}
+ /**
+ * {@inheritDoc}
+ */
+ public List<Project> getProjects() {
+ return projectManager.getProjects();
+ }
+
//
// ACTIONS
//
/**
* {@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 Project createProject() throws IOException, JSiteException {
+ return projectManager.createProject();
}
//
/* 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 */
+ }
+
}