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 cloned.
136 * @param clonedProject The project that was cloned
137 * @param projectClone The clone of the project
139 private void fireProjectCloned(Project clonedProject, Project projectClone) {
140 for (CoreListener coreListener: coreListeners) {
141 coreListener.projectCloned(clonedProject, projectClone);
146 * Notifies all listeners that a project was removed.
149 * The project that was removed
151 private void fireProjectRemoved(Project project) {
152 for (CoreListener coreListener: coreListeners) {
153 coreListener.projectRemoved(project);
158 * Notifies all listeners that the nodes were successfully loaded.
161 * The directory the nodes were loaded from
163 private void fireLoadingNodesDone(String directory) {
164 for (CoreListener coreListener: coreListeners) {
165 coreListener.loadingNodesDone(directory);
170 * Notifies all listeners that loading the nodes has failed.
173 * The directory the nodes were loaded from
175 * The exception that occured while loading the nodes
177 private void fireLoadingNodesFailed(String directory, Throwable throwable) {
178 for (CoreListener coreListener: coreListeners) {
179 coreListener.loadingNodesFailed(directory, throwable);
184 * Notifies all listeners that the nodes were saved successfully.
187 * The directory the nodes were saved to
189 private void fireSavingNodesDone(String directory) {
190 for (CoreListener coreListener: coreListeners) {
191 coreListener.savingNodesDone(directory);
196 * Notifies all listeners that saving the nodes has failed.
199 * The directory the nodes were saved to
201 * The exception that occured while saving the nodes
203 private void fireSavingNodesFailed(String directory, Throwable throwable) {
204 for (CoreListener coreListener: coreListeners) {
205 coreListener.savingProjectsFailed(directory, throwable);
210 * Notifies all core listeners that the core has loaded and is ready to run.
212 private void fireCoreLoaded() {
213 for (CoreListener coreListener: coreListeners) {
214 coreListener.coreLoaded();
219 * Notifies all listeners that the core was stopped.
221 private void fireCoreStopped() {
222 for (CoreListener coreListener: coreListeners) {
223 coreListener.coreStopped();
228 * Notifies all listeners that a node was added to the core.
231 * The node that was added
233 private void fireNodeAdded(Node node) {
234 for (CoreListener coreListener: coreListeners) {
235 coreListener.nodeAdded(node);
240 * Notifies all listeners that a node was removed from the core.
243 * The node that was removed
245 private void fireNodeRemoved(Node node) {
246 for (CoreListener coreListener: coreListeners) {
247 coreListener.nodeRemoved(node);
252 * Notifies all listeners that a connection to the given node is now being
256 * The node that is being connected to
258 private void fireNodeConnecting(Node node) {
259 for (CoreListener coreListener: coreListeners) {
260 coreListener.nodeConnecting(node);
265 * Notifies all listeners that the given node is now connected.
268 * The node that is now connected
270 private void fireNodeConnected(Node node) {
271 for (CoreListener coreListener: coreListeners) {
272 coreListener.nodeConnected(node);
277 * Notifies all listeners that a connection to a node has failed.
280 * The node that could not be connected
282 * The cause of the failure
284 private void fireNodeConnectionFailed(Node node, Throwable cause) {
285 for (CoreListener coreListener: coreListeners) {
286 coreListener.nodeConnectionFailed(node, cause);
291 * Notifies all listeners that the given node was disconnected.
294 * The node that is now disconnected
296 * The exception that caused the disconnect, or <code>null</code>
297 * if there was no exception
299 private void fireNodeDisconnected(Node node, Throwable throwable) {
300 for (CoreListener coreListener: coreListeners) {
301 coreListener.nodeDisconnected(node, throwable);
310 * Returns the project manager.
312 * @return The project manager
314 public ProjectManager getProjectManager() {
315 return projectManager;
319 * Sets the project manager to use.
321 * @param projectManager
322 * The project manager to use
324 public void setProjectManager(ProjectManager projectManager) {
325 this.projectManager = projectManager;
329 * Returns the node manager.
331 * @return The node manager
333 public NodeManager getNodeManager() {
338 * Sets the node manager to use.
341 * The node manager to use
343 public void setNodeManager(NodeManager nodeManager) {
344 this.nodeManager = nodeManager;
348 * Sets the request manager to use.
350 * @param requestManager
351 * The request manager to use
353 public void setRequestManager(RequestManager requestManager) {
354 this.requestManager = requestManager;
360 public List<Node> getNodes() {
361 return nodeManager.getNodes();
367 public boolean isNodeConnected(Node node) {
368 return nodeManager.hasNode(node);
374 public List<Project> getProjects() {
375 return projectManager.getProjects();
385 public void start() {
387 projectManager.load();
388 fireLoadingProjectsDone(projectManager.getDirectory());
389 } catch (IOException ioe1) {
390 fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
394 fireLoadingNodesDone(nodeManager.getDirectory());
395 } catch (IOException ioe1) {
396 fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
406 projectManager.save();
407 fireSavingProjectsDone(projectManager.getDirectory());
408 } catch (IOException ioe1) {
409 fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
413 fireSavingNodesDone(nodeManager.getDirectory());
414 } catch (IOException ioe1) {
415 fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
423 public boolean addNode(Node node) throws UnknownHostException {
424 return nodeManager.addNode(node);
430 public void removeNode(Node node) {
431 nodeManager.removeNode(node);
437 public void connectToNode(Node node) {
438 fireNodeConnecting(node);
439 nodeManager.connect(node);
445 public void disconnectFromNode(Node node) {
446 nodeManager.disconnect(node);
452 public void createProject() throws IOException, JSiteException {
453 Project newProject = projectManager.createProject();
454 fireProjectAdded(newProject);
460 public void cloneProject(Project project) {
461 Project projectClone = projectManager.cloneProject(project);
462 fireProjectCloned(project, projectClone);
468 public void removeProject(Project project) {
469 projectManager.removeProject(project);
470 fireProjectRemoved(project);
478 * Loads the configuration.
480 @SuppressWarnings("unused")
481 private void loadConfig() {
486 * Saves the configuration.
488 @SuppressWarnings("unused")
489 private void saveConfig() {
494 // INTERFACE NodeListener
500 public void nodeAdded(Node node) {
507 public void nodeRemoved(Node node) {
508 fireNodeRemoved(node);
514 public void nodeConnected(Node node) {
515 fireNodeConnected(node);
521 public void nodeConnectionFailed(Node node, Throwable cause) {
522 fireNodeConnectionFailed(node, cause);
528 public void nodeDisconnected(Node node, Throwable throwable) {
529 fireNodeDisconnected(node, throwable);
533 // INTERFACE RequestListener
539 public void requestAdded(Request request) {
540 /* TODO - find project and process request */
544 * @see net.pterodactylus.jsite.core.RequestListener#requestProgressed(Request)
546 public void requestProgressed(Request request) {
547 /* TODO - find project and process request */
551 * @see net.pterodactylus.jsite.core.RequestListener#requestRemoved(net.pterodactylus.jsite.core.Request)
553 public void requestRemoved(Request request) {
554 /* TODO - find project and process request */
558 * @see net.pterodactylus.jsite.core.RequestListener#requestGeneratedURI(net.pterodactylus.jsite.core.Request,
561 public void requestGeneratedURI(Request request, String uri) {
562 /* TODO - find project and process request */
566 * @see net.pterodactylus.jsite.core.RequestListener#requestFinished(net.pterodactylus.jsite.core.Request)
568 public void requestFinished(Request request) {
569 /* TODO - find project and process request */