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.util.ArrayList;
24 import java.util.List;
29 * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
32 public class CoreImpl implements Core, NodeListener, RequestListener {
34 /** The core listeners. */
35 private final List<CoreListener> coreListeners = new ArrayList<CoreListener>();
37 /** The project manager. */
38 private ProjectManager projectManager;
40 /** The node manager. */
41 private NodeManager nodeManager;
43 /** The request manager. */
45 @SuppressWarnings("unused")
46 private RequestManager requestManager;
49 // LISTENER MANAGEMENT
55 public void addCoreListener(CoreListener coreListener) {
56 coreListeners.add(coreListener);
62 public void removeCoreListener(CoreListener coreListener) {
63 coreListeners.remove(coreListener);
67 * Notifies all listeners that the projects were loaded successfully.
70 * The directory the projects were loaded from
72 private void fireLoadingProjectsDone(String directory) {
73 for (CoreListener coreListener: coreListeners) {
74 coreListener.loadingProjectsDone(directory);
79 * Notifies all core listeners that loading the projects from the given
80 * directory has failed.
83 * The directory the projects were tried to load from
85 * The exception that occured when loading projects
87 private void fireLoadingProjectsFailed(String directory, Throwable throwable) {
88 for (CoreListener coreListener: coreListeners) {
89 coreListener.loadingProjectsFailed(directory, throwable);
94 * Notifies all listeners that the projects were successfully saved.
97 * The directory the projects were saved to
99 private void fireSavingProjectsDone(String directory) {
100 for (CoreListener coreListener: coreListeners) {
101 coreListener.savingProjectsDone(directory);
106 * Notifies all listeners that the projects could not be saved.
109 * The directory the projects were to be saved to
111 * The exception that occured when saving the projects
113 private void fireSavingProjectsFailed(String directory, Throwable throwable) {
114 for (CoreListener coreListener: coreListeners) {
115 coreListener.savingProjectsFailed(directory, throwable);
120 * Notifies all listeners that the nodes were successfully loaded.
123 * The directory the nodes were loaded from
125 private void fireLoadingNodesDone(String directory) {
126 for (CoreListener coreListener: coreListeners) {
127 coreListener.loadingNodesDone(directory);
132 * Notifies all listeners that loading the nodes has failed.
135 * The directory the nodes were loaded from
137 * The exception that occured while loading the nodes
139 private void fireLoadingNodesFailed(String directory, Throwable throwable) {
140 for (CoreListener coreListener: coreListeners) {
141 coreListener.loadingNodesFailed(directory, throwable);
146 * Notifies all listeners that the nodes were saved successfully.
149 * The directory the nodes were saved to
151 private void fireSavingNodesDone(String directory) {
152 for (CoreListener coreListener: coreListeners) {
153 coreListener.savingNodesDone(directory);
158 * Notifies all listeners that saving the nodes has failed.
161 * The directory the nodes were saved to
163 * The exception that occured while saving the nodes
165 private void fireSavingNodesFailed(String directory, Throwable throwable) {
166 for (CoreListener coreListener: coreListeners) {
167 coreListener.savingProjectsFailed(directory, throwable);
172 * Notifies all core listeners that the core has loaded and is ready to run.
174 private void fireCoreLoaded() {
175 for (CoreListener coreListener: coreListeners) {
176 coreListener.coreLoaded();
181 * Notifies all listeners that the core was stopped.
183 private void fireCoreStopped() {
184 for (CoreListener coreListener: coreListeners) {
185 coreListener.coreStopped();
190 * Notifies all listeners that a node was added to the core.
193 * The node that was added
195 private void fireNodeAdded(Node node) {
196 for (CoreListener coreListener: coreListeners) {
197 coreListener.nodeAdded(node);
202 * Notifies all listeners that a node was removed from the core.
205 * The node that was removed
207 private void fireNodeRemoved(Node node) {
208 for (CoreListener coreListener: coreListeners) {
209 coreListener.nodeRemoved(node);
214 * Notifies all listeners that a connection to the given node is now being
218 * The node that is being connected to
220 private void fireNodeConnecting(Node node) {
221 for (CoreListener coreListener: coreListeners) {
222 coreListener.nodeConnecting(node);
227 * Notifies all listeners that the given node is now connected.
230 * The node that is now connected
232 private void fireNodeConnected(Node node) {
233 for (CoreListener coreListener: coreListeners) {
234 coreListener.nodeConnected(node);
239 * Notifies all listeners that the given node was disconnected.
242 * The node that is now disconnected
244 * The exception that caused the disconnect, or <code>null</code>
245 * if there was no exception
247 private void fireNodeDisconnected(Node node, Throwable throwable) {
248 for (CoreListener coreListener: coreListeners) {
249 coreListener.nodeDisconnected(node, throwable);
254 * Notifies all listeners that a request was added to a node.
257 * The node the request was added to
259 * The request that was added
261 private void fireRequestAdded(Node node, Request request) {
262 for (CoreListener coreListener: coreListeners) {
263 coreListener.requestAdded(node, request);
272 * Returns the project manager.
274 * @return The project manager
276 public ProjectManager getProjectManager() {
277 return projectManager;
281 * Sets the project manager to use.
283 * @param projectManager
284 * The project manager to use
286 public void setProjectManager(ProjectManager projectManager) {
287 this.projectManager = projectManager;
291 * Returns the node manager.
293 * @return The node manager
295 public NodeManager getNodeManager() {
300 * Sets the node manager to use.
303 * The node manager to use
305 public void setNodeManager(NodeManager nodeManager) {
306 this.nodeManager = nodeManager;
310 * Sets the request manager to use.
312 * @param requestManager
313 * The request manager to use
315 public void setRequestManager(RequestManager requestManager) {
316 this.requestManager = requestManager;
322 public List<Node> getNodes() {
323 return nodeManager.getNodes();
329 public boolean isNodeConnected(Node node) {
330 return nodeManager.hasNode(node);
340 public void start() {
342 projectManager.load();
343 fireLoadingProjectsDone(projectManager.getDirectory());
344 } catch (IOException ioe1) {
345 fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
349 fireLoadingNodesDone(nodeManager.getDirectory());
350 } catch (IOException ioe1) {
351 fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
361 projectManager.save();
362 fireSavingProjectsDone(projectManager.getDirectory());
363 } catch (IOException ioe1) {
364 fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
368 fireSavingNodesDone(nodeManager.getDirectory());
369 } catch (IOException ioe1) {
370 fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
378 public void addNode(Node node) {
379 nodeManager.addNode(node);
386 public void removeNode(Node node) {
387 nodeManager.removeNode(node);
388 fireNodeRemoved(node);
394 public void connectToNode(Node node) {
395 fireNodeConnecting(node);
396 nodeManager.addNode(node);
397 nodeManager.connect(node);
403 public void disconnectFromNode(Node node) {
404 nodeManager.disconnect(node);
412 * Loads the configuration.
414 @SuppressWarnings("unused")
415 private void loadConfig() {
420 * Saves the configuration.
422 @SuppressWarnings("unused")
423 private void saveConfig() {
428 // INTERFACE NodeListener
434 public void nodeAdded(Node node) {
441 public void nodeRemoved(Node node) {
442 fireNodeRemoved(node);
448 public void nodeConnected(Node node) {
449 fireNodeConnected(node);
455 public void nodeDisconnected(Node node, Throwable throwable) {
456 fireNodeDisconnected(node, throwable);
460 // INTERFACE RequestListener
466 public void requestAdded(Node node, Request request) {
467 fireRequestAdded(node, request);