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, NodeListener, RequestListener {
- /** The core listeners. */
- private final List<CoreListener> coreListeners = new ArrayList<CoreListener>();
+ /** The logger. */
+ private static final Logger logger = Logging.getLogger(CoreImpl.class.getName());
+
+ /** The core listener support. */
+ private final CoreListenerSupport coreListenerSupport = new CoreListenerSupport();
+
+ /** Thread pool. */
+ @SuppressWarnings("unused")
+ private Executor threadPool = Executors.newCachedThreadPool();
/** The project manager. */
private ProjectManager projectManager;
private NodeManager nodeManager;
/** The request manager. */
- /* TODO - remove */
- @SuppressWarnings("unused")
private RequestManager requestManager;
//
* {@inheritDoc}
*/
public void addCoreListener(CoreListener coreListener) {
- coreListeners.add(coreListener);
+ logger.log(Level.FINEST, "adding core listener: " + coreListener);
+ coreListenerSupport.addListener(coreListener);
}
/**
* {@inheritDoc}
*/
public void removeCoreListener(CoreListener 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) {
- coreListener.loadingProjectsDone(directory);
- }
- }
-
- /**
- * 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) {
- 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) {
- 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) {
- coreListener.savingProjectsFailed(directory, throwable);
- }
- }
-
- /**
- * 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() {
- for (CoreListener coreListener: coreListeners) {
- coreListener.coreLoaded();
- }
- }
-
- /**
- * Notifies all listeners that the core was stopped.
- */
- private void fireCoreStopped() {
- 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) {
- 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);
- }
- }
-
- /**
- * 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);
- }
- }
-
- /**
- * Notifies all listeners that a request was removed.
- *
- * @param request
- * The request that was removed
- */
- private void fireRequestRemoved(Request request) {
- for (CoreListener coreListener: coreListeners) {
- coreListener.requestRemoved(request);
- }
+ logger.log(Level.FINEST, "removing core listener: " + coreListener);
+ coreListenerSupport.removeListener(coreListener);
}
//
/**
* 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.
- *
+ * Sets the request manager.
+ *
* @param requestManager
- * The request manager to use
+ * The request manager
*/
public void setRequestManager(RequestManager requestManager) {
this.requestManager = requestManager;
* {@inheritDoc}
*/
public boolean isNodeConnected(Node node) {
- return nodeManager.hasNode(node);
+ return nodeManager.isNodeConnected(node);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<Project> getProjects() {
+ return projectManager.getProjects();
}
//
* {@inheritDoc}
*/
public void start() {
+ logger.log(Level.INFO, "starting core…");
+ loadConfig();
try {
- projectManager.load();
- fireLoadingProjectsDone(projectManager.getDirectory());
+ nodeManager.load();
+ coreListenerSupport.fireLoadingNodesDone(nodeManager.getDirectory());
} catch (IOException ioe1) {
- fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
+ coreListenerSupport.fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
}
try {
- nodeManager.load();
- fireLoadingNodesDone(nodeManager.getDirectory());
+ projectManager.load();
+ coreListenerSupport.fireLoadingProjectsDone(projectManager.getDirectory());
} catch (IOException ioe1) {
- fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
+ coreListenerSupport.fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
}
- fireCoreLoaded();
+ coreListenerSupport.fireCoreLoaded();
}
/**
* {@inheritDoc}
*/
public void stop() {
+ logger.log(Level.INFO, "stopping core…");
+ saveConfig();
try {
projectManager.save();
- fireSavingProjectsDone(projectManager.getDirectory());
+ coreListenerSupport.fireSavingProjectsDone(projectManager.getDirectory());
} catch (IOException ioe1) {
- fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
+ coreListenerSupport.fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
}
try {
nodeManager.save();
- fireSavingNodesDone(nodeManager.getDirectory());
+ coreListenerSupport.fireSavingNodesDone(nodeManager.getDirectory());
} catch (IOException ioe1) {
- fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
+ coreListenerSupport.fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
}
- fireCoreStopped();
+ coreListenerSupport.fireCoreStopped();
}
/**
* {@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) {
- fireNodeConnecting(node);
+ logger.log(Level.FINEST, "connectToNode(node=" + node + ")");
+ coreListenerSupport.fireNodeConnecting(node);
nodeManager.connect(node);
}
* {@inheritDoc}
*/
public void disconnectFromNode(Node node) {
+ logger.log(Level.FINEST, "disconnectFromNode(node=" + node + ")");
nodeManager.disconnect(node);
}
/**
* {@inheritDoc}
*/
- public Project createProject(String projectName) throws IOException, NoNodeException {
- Project project = new Project();
- project.setName(projectName);
- String[] keyPair = nodeManager.generateKeyPair();
- project.setPrivateKey(keyPair[0]);
- project.setPublicKey(keyPair[1]);
- return project;
+ public void createProject() throws IOException, JSiteException {
+ logger.log(Level.FINEST, "createProject()");
+ Project newProject = projectManager.createProject();
+ coreListenerSupport.fireProjectAdded(newProject);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void insertProject(Node node, Project project) {
+ logger.log(Level.FINEST, "insertProject(node=" + node + ", project=" + project + ")");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void cloneProject(Project project) {
+ logger.log(Level.FINEST, "cloneProject(project=" + project + ")");
+ Project projectClone = projectManager.cloneProject(project);
+ coreListenerSupport.fireProjectCloned(project, projectClone);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void removeProject(Project project) {
+ logger.log(Level.FINEST, "removeProject(project=" + project + ")");
+ projectManager.removeProject(project);
+ coreListenerSupport.fireProjectRemoved(project);
}
//
/**
* Loads the configuration.
*/
- @SuppressWarnings("unused")
private void loadConfig() {
+ logger.log(Level.FINEST, "loadConfig()");
/* TODO */
}
/**
* Saves the configuration.
*/
- @SuppressWarnings("unused")
private void saveConfig() {
+ logger.log(Level.FINEST, "saveConfig()");
/* TODO */
}
* {@inheritDoc}
*/
public void nodeAdded(Node node) {
- fireNodeAdded(node);
+ coreListenerSupport.fireNodeAdded(node);
}
/**
* {@inheritDoc}
*/
public void nodeRemoved(Node node) {
- fireNodeRemoved(node);
+ coreListenerSupport.fireNodeRemoved(node);
}
/**
* {@inheritDoc}
*/
public void nodeConnected(Node node) {
- fireNodeConnected(node);
+ coreListenerSupport.fireNodeConnected(node);
}
/**
* {@inheritDoc}
*/
public void nodeConnectionFailed(Node node, Throwable cause) {
- fireNodeConnectionFailed(node, cause);
+ coreListenerSupport.fireNodeConnectionFailed(node, cause);
}
/**
* {@inheritDoc}
*/
public void nodeDisconnected(Node node, Throwable throwable) {
- fireNodeDisconnected(node, throwable);
+ coreListenerSupport.fireNodeDisconnected(node, throwable);
}
//
* {@inheritDoc}
*/
public void requestAdded(Request request) {
- fireRequestAdded(request);
- }
-
- /**
- * @see net.pterodactylus.jsite.core.RequestListener#requestProgressed(Request)
- */
- public void requestProgressed(Request request) {
- fireRequestProgressed(request);
- }
-
- /**
- * @see net.pterodactylus.jsite.core.RequestListener#requestRemoved(net.pterodactylus.jsite.core.Request)
- */
- public void requestRemoved(Request request) {
- fireRequestRemoved(request);
+ /* TODO */
}
}