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>
36 public class CoreImpl implements Core, NodeListener, RequestListener {
38 /** The core listeners. */
39 private final List<CoreListener> coreListeners = new ArrayList<CoreListener>();
41 /** The project manager. */
42 private ProjectManager projectManager;
44 /** The node manager. */
45 private NodeManager nodeManager;
47 /** The request manager. */
49 @SuppressWarnings("unused")
50 private RequestManager requestManager;
53 // LISTENER MANAGEMENT
59 public void addCoreListener(CoreListener coreListener) {
60 coreListeners.add(coreListener);
66 public void removeCoreListener(CoreListener coreListener) {
67 coreListeners.remove(coreListener);
71 * Notifies all listeners that the projects were loaded successfully.
74 * The directory the projects were loaded from
76 private void fireLoadingProjectsDone(String directory) {
77 for (CoreListener coreListener: coreListeners) {
78 coreListener.loadingProjectsDone(directory);
83 * Notifies all core listeners that loading the projects from the given
84 * directory has failed.
87 * The directory the projects were tried to load from
89 * The exception that occured when loading projects
91 private void fireLoadingProjectsFailed(String directory, Throwable throwable) {
92 for (CoreListener coreListener: coreListeners) {
93 coreListener.loadingProjectsFailed(directory, throwable);
98 * Notifies all listeners that the projects were successfully saved.
101 * The directory the projects were saved to
103 private void fireSavingProjectsDone(String directory) {
104 for (CoreListener coreListener: coreListeners) {
105 coreListener.savingProjectsDone(directory);
110 * Notifies all listeners that the projects could not be saved.
113 * The directory the projects were to be saved to
115 * The exception that occured when saving the projects
117 private void fireSavingProjectsFailed(String directory, Throwable throwable) {
118 for (CoreListener coreListener: coreListeners) {
119 coreListener.savingProjectsFailed(directory, throwable);
124 * Notifies all listeners that the nodes were successfully loaded.
127 * The directory the nodes were loaded from
129 private void fireLoadingNodesDone(String directory) {
130 for (CoreListener coreListener: coreListeners) {
131 coreListener.loadingNodesDone(directory);
136 * Notifies all listeners that loading the nodes has failed.
139 * The directory the nodes were loaded from
141 * The exception that occured while loading the nodes
143 private void fireLoadingNodesFailed(String directory, Throwable throwable) {
144 for (CoreListener coreListener: coreListeners) {
145 coreListener.loadingNodesFailed(directory, throwable);
150 * Notifies all listeners that the nodes were saved successfully.
153 * The directory the nodes were saved to
155 private void fireSavingNodesDone(String directory) {
156 for (CoreListener coreListener: coreListeners) {
157 coreListener.savingNodesDone(directory);
162 * Notifies all listeners that saving the nodes has failed.
165 * The directory the nodes were saved to
167 * The exception that occured while saving the nodes
169 private void fireSavingNodesFailed(String directory, Throwable throwable) {
170 for (CoreListener coreListener: coreListeners) {
171 coreListener.savingProjectsFailed(directory, throwable);
176 * Notifies all core listeners that the core has loaded and is ready to run.
178 private void fireCoreLoaded() {
179 for (CoreListener coreListener: coreListeners) {
180 coreListener.coreLoaded();
185 * Notifies all listeners that the core was stopped.
187 private void fireCoreStopped() {
188 for (CoreListener coreListener: coreListeners) {
189 coreListener.coreStopped();
194 * Notifies all listeners that a node was added to the core.
197 * The node that was added
199 private void fireNodeAdded(Node node) {
200 for (CoreListener coreListener: coreListeners) {
201 coreListener.nodeAdded(node);
206 * Notifies all listeners that a node was removed from the core.
209 * The node that was removed
211 private void fireNodeRemoved(Node node) {
212 for (CoreListener coreListener: coreListeners) {
213 coreListener.nodeRemoved(node);
218 * Notifies all listeners that a connection to the given node is now being
222 * The node that is being connected to
224 private void fireNodeConnecting(Node node) {
225 for (CoreListener coreListener: coreListeners) {
226 coreListener.nodeConnecting(node);
231 * Notifies all listeners that the given node is now connected.
234 * The node that is now connected
236 private void fireNodeConnected(Node node) {
237 for (CoreListener coreListener: coreListeners) {
238 coreListener.nodeConnected(node);
243 * Notifies all listeners that a connection to a node has failed.
246 * The node that could not be connected
248 * The cause of the failure
250 private void fireNodeConnectionFailed(Node node, Throwable cause) {
251 for (CoreListener coreListener: coreListeners) {
252 coreListener.nodeConnectionFailed(node, cause);
257 * Notifies all listeners that the given node was disconnected.
260 * The node that is now disconnected
262 * The exception that caused the disconnect, or <code>null</code>
263 * if there was no exception
265 private void fireNodeDisconnected(Node node, Throwable throwable) {
266 for (CoreListener coreListener: coreListeners) {
267 coreListener.nodeDisconnected(node, throwable);
272 * Notifies all listeners that a request was added to a node.
275 * The request that was added
277 private void fireRequestAdded(Request request) {
278 for (CoreListener coreListener: coreListeners) {
279 coreListener.requestAdded(request);
284 * Notifies all listeners that a request progressed.
289 private void fireRequestProgressed(Request request) {
290 for (CoreListener coreListener: coreListeners) {
291 coreListener.requestProgressed(request);
296 * Notifies all listeners that a request was removed.
299 * The request that was removed
301 private void fireRequestRemoved(Request request) {
302 for (CoreListener coreListener: coreListeners) {
303 coreListener.requestRemoved(request);
312 * Returns the project manager.
314 * @return The project manager
316 public ProjectManager getProjectManager() {
317 return projectManager;
321 * Sets the project manager to use.
323 * @param projectManager
324 * The project manager to use
326 public void setProjectManager(ProjectManager projectManager) {
327 this.projectManager = projectManager;
331 * Returns the node manager.
333 * @return The node manager
335 public NodeManager getNodeManager() {
340 * Sets the node manager to use.
343 * The node manager to use
345 public void setNodeManager(NodeManager nodeManager) {
346 this.nodeManager = nodeManager;
350 * Sets the request manager to use.
352 * @param requestManager
353 * The request manager to use
355 public void setRequestManager(RequestManager requestManager) {
356 this.requestManager = requestManager;
362 public List<Node> getNodes() {
363 return nodeManager.getNodes();
369 public boolean isNodeConnected(Node node) {
370 return nodeManager.hasNode(node);
376 public List<Project> getProjects() {
377 return projectManager.getProjects();
387 public void start() {
389 projectManager.load();
390 fireLoadingProjectsDone(projectManager.getDirectory());
391 } catch (IOException ioe1) {
392 fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
396 fireLoadingNodesDone(nodeManager.getDirectory());
397 } catch (IOException ioe1) {
398 fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
408 projectManager.save();
409 fireSavingProjectsDone(projectManager.getDirectory());
410 } catch (IOException ioe1) {
411 fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
415 fireSavingNodesDone(nodeManager.getDirectory());
416 } catch (IOException ioe1) {
417 fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
425 public boolean addNode(Node node) throws UnknownHostException {
426 return nodeManager.addNode(node);
432 public void removeNode(Node node) {
433 nodeManager.removeNode(node);
439 public void connectToNode(Node node) {
440 fireNodeConnecting(node);
441 nodeManager.connect(node);
447 public void disconnectFromNode(Node node) {
448 nodeManager.disconnect(node);
454 public Project createProject() throws IOException, JSiteException {
455 return projectManager.createProject();
463 * Loads the configuration.
465 @SuppressWarnings("unused")
466 private void loadConfig() {
471 * Saves the configuration.
473 @SuppressWarnings("unused")
474 private void saveConfig() {
479 // INTERFACE NodeListener
485 public void nodeAdded(Node node) {
492 public void nodeRemoved(Node node) {
493 fireNodeRemoved(node);
499 public void nodeConnected(Node node) {
500 fireNodeConnected(node);
506 public void nodeConnectionFailed(Node node, Throwable cause) {
507 fireNodeConnectionFailed(node, cause);
513 public void nodeDisconnected(Node node, Throwable throwable) {
514 fireNodeDisconnected(node, throwable);
518 // INTERFACE RequestListener
524 public void requestAdded(Request request) {
525 fireRequestAdded(request);
529 * @see net.pterodactylus.jsite.core.RequestListener#requestProgressed(Request)
531 public void requestProgressed(Request request) {
532 fireRequestProgressed(request);
536 * @see net.pterodactylus.jsite.core.RequestListener#requestRemoved(net.pterodactylus.jsite.core.Request)
538 public void requestRemoved(Request request) {
539 fireRequestRemoved(request);