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.List;
25 import java.util.concurrent.Executor;
26 import java.util.concurrent.Executors;
27 import java.util.logging.Level;
28 import java.util.logging.Logger;
30 import net.pterodactylus.util.logging.Logging;
35 * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
37 public class CoreImpl implements Core, NodeListener, RequestListener, InsertListener {
40 private static final Logger logger = Logging.getLogger(CoreImpl.class.getName());
42 /** The core listener support. */
43 private final CoreListenerSupport coreListenerSupport = new CoreListenerSupport();
46 @SuppressWarnings("unused")
47 private Executor threadPool = Executors.newCachedThreadPool();
49 /** The project manager. */
50 private ProjectManager projectManager;
52 /** The node manager. */
53 private NodeManager nodeManager;
55 /** The request manager. */
57 @SuppressWarnings("unused")
58 private RequestManager requestManager;
60 /** The insert manager. */
61 private InsertManager insertManager;
64 // LISTENER MANAGEMENT
70 public void addCoreListener(CoreListener coreListener) {
71 logger.log(Level.FINEST, "adding core listener: " + coreListener);
72 coreListenerSupport.addListener(coreListener);
78 public void removeCoreListener(CoreListener coreListener) {
79 logger.log(Level.FINEST, "removing core listener: " + coreListener);
80 coreListenerSupport.removeListener(coreListener);
88 * Returns the project manager.
90 * @return The project manager
92 public ProjectManager getProjectManager() {
93 return projectManager;
97 * Sets the project manager to use.
99 * @param projectManager
100 * The project manager to use
102 public void setProjectManager(ProjectManager projectManager) {
103 this.projectManager = projectManager;
107 * Returns the node manager.
109 * @return The node manager
111 public NodeManager getNodeManager() {
116 * Sets the node manager to use.
119 * The node manager to use
121 public void setNodeManager(NodeManager nodeManager) {
122 this.nodeManager = nodeManager;
126 * Sets the request manager to use.
128 * @param requestManager
129 * The request manager to use
131 public void setRequestManager(RequestManager requestManager) {
132 this.requestManager = requestManager;
136 * Sets the insert manager to use.
138 * @param insertManager
139 * The insert manager to use
141 public void setInsertManager(InsertManager insertManager) {
142 this.insertManager = insertManager;
148 public List<Node> getNodes() {
149 return nodeManager.getNodes();
155 public boolean isNodeConnected(Node node) {
156 return nodeManager.isNodeConnected(node);
162 public List<Project> getProjects() {
163 return projectManager.getProjects();
173 public void start() {
174 logger.log(Level.INFO, "starting core…");
177 coreListenerSupport.fireLoadingNodesDone(nodeManager.getDirectory());
178 } catch (IOException ioe1) {
179 coreListenerSupport.fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
182 projectManager.load();
183 coreListenerSupport.fireLoadingProjectsDone(projectManager.getDirectory());
184 } catch (IOException ioe1) {
185 coreListenerSupport.fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
187 coreListenerSupport.fireCoreLoaded();
194 logger.log(Level.INFO, "stopping core…");
196 projectManager.save();
197 coreListenerSupport.fireSavingProjectsDone(projectManager.getDirectory());
198 } catch (IOException ioe1) {
199 coreListenerSupport.fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
203 coreListenerSupport.fireSavingNodesDone(nodeManager.getDirectory());
204 } catch (IOException ioe1) {
205 coreListenerSupport.fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
207 coreListenerSupport.fireCoreStopped();
213 public boolean addNode(Node node) throws UnknownHostException {
214 logger.log(Level.FINEST, "addNode(node=" + node + ")");
215 return nodeManager.addNode(node);
221 public void removeNode(Node node) {
222 logger.log(Level.FINEST, "removeNode(node=" + node + ")");
223 nodeManager.removeNode(node);
229 public void connectToNode(Node node) {
230 logger.log(Level.FINEST, "connectToNode(node=" + node + ")");
231 coreListenerSupport.fireNodeConnecting(node);
232 nodeManager.connect(node);
238 public void disconnectFromNode(Node node) {
239 logger.log(Level.FINEST, "disconnectFromNode(node=" + node + ")");
240 nodeManager.disconnect(node);
246 public void createProject() throws IOException, JSiteException {
247 logger.log(Level.FINEST, "createProject()");
248 Project newProject = projectManager.createProject();
249 coreListenerSupport.fireProjectAdded(newProject);
255 public void insertProject(Node node, Project project) {
256 logger.log(Level.FINEST, "insertProject(node=" + node + ", project=" + project + ")");
257 insertManager.insertProject(project, node);
263 public void cloneProject(Project project) {
264 logger.log(Level.FINEST, "cloneProject(project=" + project + ")");
265 Project projectClone = projectManager.cloneProject(project);
266 coreListenerSupport.fireProjectCloned(project, projectClone);
272 public void removeProject(Project project) {
273 logger.log(Level.FINEST, "removeProject(project=" + project + ")");
274 projectManager.removeProject(project);
275 coreListenerSupport.fireProjectRemoved(project);
283 * Loads the configuration.
285 @SuppressWarnings("unused")
286 private void loadConfig() {
287 logger.log(Level.FINEST, "loadConfig()");
292 * Saves the configuration.
294 @SuppressWarnings("unused")
295 private void saveConfig() {
296 logger.log(Level.FINEST, "saveConfig()");
301 // INTERFACE NodeListener
307 public void nodeAdded(Node node) {
308 coreListenerSupport.fireNodeAdded(node);
314 public void nodeRemoved(Node node) {
315 coreListenerSupport.fireNodeRemoved(node);
321 public void nodeConnected(Node node) {
322 coreListenerSupport.fireNodeConnected(node);
328 public void nodeConnectionFailed(Node node, Throwable cause) {
329 coreListenerSupport.fireNodeConnectionFailed(node, cause);
335 public void nodeDisconnected(Node node, Throwable throwable) {
336 coreListenerSupport.fireNodeDisconnected(node, throwable);
340 // INTERFACE RequestListener
346 public void requestAdded(Request request) {
347 /* TODO - find project and process request */
351 * @see net.pterodactylus.jsite.core.RequestListener#requestProgressed(Request)
353 public void requestProgressed(Request request) {
354 /* TODO - find project and process request */
358 * @see net.pterodactylus.jsite.core.RequestListener#requestRemoved(net.pterodactylus.jsite.core.Request)
360 public void requestRemoved(Request request) {
361 /* TODO - find project and process request */
365 * @see net.pterodactylus.jsite.core.RequestListener#requestGeneratedURI(net.pterodactylus.jsite.core.Request,
368 public void requestGeneratedURI(Request request, String uri) {
369 /* TODO - find project and process request */
373 * @see net.pterodactylus.jsite.core.RequestListener#requestFinished(net.pterodactylus.jsite.core.Request)
375 public void requestFinished(Request request) {
376 /* TODO - find project and process request */
380 // INTERFACE InsertListener
386 public void insertAdded(Insert insert) {
393 public void insertRemoved(Insert insert) {
400 public void insertStarted(Insert insert) {
407 public void insertProgressed(Insert insert) {
414 public void insertGeneratedURI(Insert insert, String uri) {
421 public void insertFinished(Insert insert) {