3 * Copyright © 2008 David Roden
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 package net.pterodactylus.jsite.core;
22 import java.io.IOException;
23 import java.net.UnknownHostException;
24 import java.util.ArrayList;
25 import java.util.List;
27 import net.pterodactylus.jsite.project.Project;
28 import net.pterodactylus.jsite.project.ProjectManager;
33 * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
35 public class CoreImpl implements Core, NodeListener, RequestListener {
37 /** The core listeners. */
38 private final List<CoreListener> coreListeners = new ArrayList<CoreListener>();
40 /** The project manager. */
41 private ProjectManager projectManager;
43 /** The node manager. */
44 private NodeManager nodeManager;
46 /** The request manager. */
48 @SuppressWarnings("unused")
49 private RequestManager requestManager;
52 // LISTENER MANAGEMENT
58 public void addCoreListener(CoreListener coreListener) {
59 coreListeners.add(coreListener);
65 public void removeCoreListener(CoreListener coreListener) {
66 coreListeners.remove(coreListener);
70 * Notifies all listeners that the projects were loaded successfully.
73 * The directory the projects were loaded from
75 private void fireLoadingProjectsDone(String directory) {
76 for (CoreListener coreListener: coreListeners) {
77 coreListener.loadingProjectsDone(directory);
82 * Notifies all core listeners that loading the projects from the given
83 * directory has failed.
86 * The directory the projects were tried to load from
88 * The exception that occured when loading projects
90 private void fireLoadingProjectsFailed(String directory, Throwable throwable) {
91 for (CoreListener coreListener: coreListeners) {
92 coreListener.loadingProjectsFailed(directory, throwable);
97 * Notifies all listeners that the projects were successfully saved.
100 * The directory the projects were saved to
102 private void fireSavingProjectsDone(String directory) {
103 for (CoreListener coreListener: coreListeners) {
104 coreListener.savingProjectsDone(directory);
109 * Notifies all listeners that the projects could not be saved.
112 * The directory the projects were to be saved to
114 * The exception that occured when saving the projects
116 private void fireSavingProjectsFailed(String directory, Throwable throwable) {
117 for (CoreListener coreListener: coreListeners) {
118 coreListener.savingProjectsFailed(directory, throwable);
123 * Notifies all listeners that a project was added.
126 * The project that was added
128 private void fireProjectAdded(Project project) {
129 for (CoreListener coreListener: coreListeners) {
130 coreListener.projectAdded(project);
135 * Notifies all listeners that a project was removed.
138 * The project that was removed
140 private void fireProjectRemoved(Project project) {
141 for (CoreListener coreListener: coreListeners) {
142 coreListener.projectRemoved(project);
147 * Notifies all listeners that the nodes were successfully loaded.
150 * The directory the nodes were loaded from
152 private void fireLoadingNodesDone(String directory) {
153 for (CoreListener coreListener: coreListeners) {
154 coreListener.loadingNodesDone(directory);
159 * Notifies all listeners that loading the nodes has failed.
162 * The directory the nodes were loaded from
164 * The exception that occured while loading the nodes
166 private void fireLoadingNodesFailed(String directory, Throwable throwable) {
167 for (CoreListener coreListener: coreListeners) {
168 coreListener.loadingNodesFailed(directory, throwable);
173 * Notifies all listeners that the nodes were saved successfully.
176 * The directory the nodes were saved to
178 private void fireSavingNodesDone(String directory) {
179 for (CoreListener coreListener: coreListeners) {
180 coreListener.savingNodesDone(directory);
185 * Notifies all listeners that saving the nodes has failed.
188 * The directory the nodes were saved to
190 * The exception that occured while saving the nodes
192 private void fireSavingNodesFailed(String directory, Throwable throwable) {
193 for (CoreListener coreListener: coreListeners) {
194 coreListener.savingProjectsFailed(directory, throwable);
199 * Notifies all core listeners that the core has loaded and is ready to run.
201 private void fireCoreLoaded() {
202 for (CoreListener coreListener: coreListeners) {
203 coreListener.coreLoaded();
208 * Notifies all listeners that the core was stopped.
210 private void fireCoreStopped() {
211 for (CoreListener coreListener: coreListeners) {
212 coreListener.coreStopped();
217 * Notifies all listeners that a node was added to the core.
220 * The node that was added
222 private void fireNodeAdded(Node node) {
223 for (CoreListener coreListener: coreListeners) {
224 coreListener.nodeAdded(node);
229 * Notifies all listeners that a node was removed from the core.
232 * The node that was removed
234 private void fireNodeRemoved(Node node) {
235 for (CoreListener coreListener: coreListeners) {
236 coreListener.nodeRemoved(node);
241 * Notifies all listeners that a connection to the given node is now being
245 * The node that is being connected to
247 private void fireNodeConnecting(Node node) {
248 for (CoreListener coreListener: coreListeners) {
249 coreListener.nodeConnecting(node);
254 * Notifies all listeners that the given node is now connected.
257 * The node that is now connected
259 private void fireNodeConnected(Node node) {
260 for (CoreListener coreListener: coreListeners) {
261 coreListener.nodeConnected(node);
266 * Notifies all listeners that a connection to a node has failed.
269 * The node that could not be connected
271 * The cause of the failure
273 private void fireNodeConnectionFailed(Node node, Throwable cause) {
274 for (CoreListener coreListener: coreListeners) {
275 coreListener.nodeConnectionFailed(node, cause);
280 * Notifies all listeners that the given node was disconnected.
283 * The node that is now disconnected
285 * The exception that caused the disconnect, or <code>null</code>
286 * if there was no exception
288 private void fireNodeDisconnected(Node node, Throwable throwable) {
289 for (CoreListener coreListener: coreListeners) {
290 coreListener.nodeDisconnected(node, throwable);
299 * Returns the project manager.
301 * @return The project manager
303 public ProjectManager getProjectManager() {
304 return projectManager;
308 * Sets the project manager to use.
310 * @param projectManager
311 * The project manager to use
313 public void setProjectManager(ProjectManager projectManager) {
314 this.projectManager = projectManager;
318 * Returns the node manager.
320 * @return The node manager
322 public NodeManager getNodeManager() {
327 * Sets the node manager to use.
330 * The node manager to use
332 public void setNodeManager(NodeManager nodeManager) {
333 this.nodeManager = nodeManager;
337 * Sets the request manager to use.
339 * @param requestManager
340 * The request manager to use
342 public void setRequestManager(RequestManager requestManager) {
343 this.requestManager = requestManager;
349 public List<Node> getNodes() {
350 return nodeManager.getNodes();
356 public boolean isNodeConnected(Node node) {
357 return nodeManager.hasNode(node);
363 public List<Project> getProjects() {
364 return projectManager.getProjects();
374 public void start() {
376 projectManager.load();
377 fireLoadingProjectsDone(projectManager.getDirectory());
378 } catch (IOException ioe1) {
379 fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
383 fireLoadingNodesDone(nodeManager.getDirectory());
384 } catch (IOException ioe1) {
385 fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
395 projectManager.save();
396 fireSavingProjectsDone(projectManager.getDirectory());
397 } catch (IOException ioe1) {
398 fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
402 fireSavingNodesDone(nodeManager.getDirectory());
403 } catch (IOException ioe1) {
404 fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
412 public boolean addNode(Node node) throws UnknownHostException {
413 return nodeManager.addNode(node);
419 public void removeNode(Node node) {
420 nodeManager.removeNode(node);
426 public void connectToNode(Node node) {
427 fireNodeConnecting(node);
428 nodeManager.connect(node);
434 public void disconnectFromNode(Node node) {
435 nodeManager.disconnect(node);
441 public void createProject() throws IOException, JSiteException {
442 Project newProject = projectManager.createProject();
443 fireProjectAdded(newProject);
449 public void removeProject(Project project) {
450 projectManager.removeProject(project);
451 fireProjectRemoved(project);
459 * Loads the configuration.
461 @SuppressWarnings("unused")
462 private void loadConfig() {
467 * Saves the configuration.
469 @SuppressWarnings("unused")
470 private void saveConfig() {
475 // INTERFACE NodeListener
481 public void nodeAdded(Node node) {
488 public void nodeRemoved(Node node) {
489 fireNodeRemoved(node);
495 public void nodeConnected(Node node) {
496 fireNodeConnected(node);
502 public void nodeConnectionFailed(Node node, Throwable cause) {
503 fireNodeConnectionFailed(node, cause);
509 public void nodeDisconnected(Node node, Throwable throwable) {
510 fireNodeDisconnected(node, throwable);
514 // INTERFACE RequestListener
520 public void requestAdded(Request request) {
521 /* TODO - find project and process request */
525 * @see net.pterodactylus.jsite.core.RequestListener#requestProgressed(Request)
527 public void requestProgressed(Request request) {
528 /* TODO - find project and process request */
532 * @see net.pterodactylus.jsite.core.RequestListener#requestRemoved(net.pterodactylus.jsite.core.Request)
534 public void requestRemoved(Request request) {
535 /* TODO - find project and process request */
539 * @see net.pterodactylus.jsite.core.RequestListener#requestGeneratedURI(net.pterodactylus.jsite.core.Request,
542 public void requestGeneratedURI(Request request, String uri) {
543 /* TODO - find project and process request */
547 * @see net.pterodactylus.jsite.core.RequestListener#requestFinished(net.pterodactylus.jsite.core.Request)
549 public void requestFinished(Request request) {
550 /* TODO - find project and process request */