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 private Executor threadPool = Executors.newCachedThreadPool();
48 /** The project manager. */
49 private ProjectManager projectManager;
51 /** The node manager. */
52 private NodeManager nodeManager;
54 /** The request manager. */
56 @SuppressWarnings("unused")
57 private RequestManager requestManager;
59 /** The insert manager. */
60 private InsertManager insertManager;
63 // LISTENER MANAGEMENT
69 public void addCoreListener(CoreListener coreListener) {
70 logger.log(Level.FINEST, "adding core listener: " + coreListener);
71 coreListenerSupport.addListener(coreListener);
77 public void removeCoreListener(CoreListener coreListener) {
78 logger.log(Level.FINEST, "removing core listener: " + coreListener);
79 coreListenerSupport.removeListener(coreListener);
89 public Executor getThreadPool() {
94 * Returns the project manager.
96 * @return The project manager
98 public ProjectManager getProjectManager() {
99 return projectManager;
103 * Sets the project manager to use.
105 * @param projectManager
106 * The project manager to use
108 public void setProjectManager(ProjectManager projectManager) {
109 this.projectManager = projectManager;
113 * Returns the node manager.
115 * @return The node manager
117 public NodeManager getNodeManager() {
122 * Sets the node manager to use.
125 * The node manager to use
127 public void setNodeManager(NodeManager nodeManager) {
128 this.nodeManager = nodeManager;
132 * Sets the request manager to use.
134 * @param requestManager
135 * The request manager to use
137 public void setRequestManager(RequestManager requestManager) {
138 this.requestManager = requestManager;
142 * Sets the insert manager to use.
144 * @param insertManager
145 * The insert manager to use
147 public void setInsertManager(InsertManager insertManager) {
148 this.insertManager = insertManager;
154 public List<Node> getNodes() {
155 return nodeManager.getNodes();
161 public boolean isNodeConnected(Node node) {
162 return nodeManager.hasNode(node);
168 public List<Project> getProjects() {
169 return projectManager.getProjects();
179 public void start() {
180 logger.log(Level.INFO, "starting core…");
183 coreListenerSupport.fireLoadingNodesDone(nodeManager.getDirectory());
184 } catch (IOException ioe1) {
185 coreListenerSupport.fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
188 projectManager.load();
189 coreListenerSupport.fireLoadingProjectsDone(projectManager.getDirectory());
190 } catch (IOException ioe1) {
191 coreListenerSupport.fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
193 coreListenerSupport.fireCoreLoaded();
200 logger.log(Level.INFO, "stopping core…");
202 projectManager.save();
203 coreListenerSupport.fireSavingProjectsDone(projectManager.getDirectory());
204 } catch (IOException ioe1) {
205 coreListenerSupport.fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
209 coreListenerSupport.fireSavingNodesDone(nodeManager.getDirectory());
210 } catch (IOException ioe1) {
211 coreListenerSupport.fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
213 coreListenerSupport.fireCoreStopped();
219 public boolean addNode(Node node) throws UnknownHostException {
220 logger.log(Level.FINEST, "addNode(node=" + node + ")");
221 return nodeManager.addNode(node);
227 public void removeNode(Node node) {
228 logger.log(Level.FINEST, "removeNode(node=" + node + ")");
229 nodeManager.removeNode(node);
235 public void connectToNode(Node node) {
236 logger.log(Level.FINEST, "connectToNode(node=" + node + ")");
237 coreListenerSupport.fireNodeConnecting(node);
238 nodeManager.connect(node);
244 public void disconnectFromNode(Node node) {
245 logger.log(Level.FINEST, "disconnectFromNode(node=" + node + ")");
246 nodeManager.disconnect(node);
252 public void createProject() throws IOException, JSiteException {
253 logger.log(Level.FINEST, "createProject()");
254 Project newProject = projectManager.createProject();
255 coreListenerSupport.fireProjectAdded(newProject);
261 public void insertProject(Node node, Project project) {
262 logger.log(Level.FINEST, "insertProject(node=" + node + ", project=" + project + ")");
263 insertManager.insertProject(project, node);
269 public void cloneProject(Project project) {
270 logger.log(Level.FINEST, "cloneProject(project=" + project + ")");
271 Project projectClone = projectManager.cloneProject(project);
272 coreListenerSupport.fireProjectCloned(project, projectClone);
278 public void removeProject(Project project) {
279 logger.log(Level.FINEST, "removeProject(project=" + project + ")");
280 projectManager.removeProject(project);
281 coreListenerSupport.fireProjectRemoved(project);
289 * Loads the configuration.
291 @SuppressWarnings("unused")
292 private void loadConfig() {
293 logger.log(Level.FINEST, "loadConfig()");
298 * Saves the configuration.
300 @SuppressWarnings("unused")
301 private void saveConfig() {
302 logger.log(Level.FINEST, "saveConfig()");
307 // INTERFACE NodeListener
313 public void nodeAdded(Node node) {
314 coreListenerSupport.fireNodeAdded(node);
320 public void nodeRemoved(Node node) {
321 coreListenerSupport.fireNodeRemoved(node);
327 public void nodeConnected(Node node) {
328 coreListenerSupport.fireNodeConnected(node);
334 public void nodeConnectionFailed(Node node, Throwable cause) {
335 coreListenerSupport.fireNodeConnectionFailed(node, cause);
341 public void nodeDisconnected(Node node, Throwable throwable) {
342 coreListenerSupport.fireNodeDisconnected(node, throwable);
346 // INTERFACE RequestListener
352 public void requestAdded(Request request) {
353 /* TODO - find project and process request */
357 * @see net.pterodactylus.jsite.core.RequestListener#requestProgressed(Request)
359 public void requestProgressed(Request request) {
360 /* TODO - find project and process request */
364 * @see net.pterodactylus.jsite.core.RequestListener#requestRemoved(net.pterodactylus.jsite.core.Request)
366 public void requestRemoved(Request request) {
367 /* TODO - find project and process request */
371 * @see net.pterodactylus.jsite.core.RequestListener#requestGeneratedURI(net.pterodactylus.jsite.core.Request,
374 public void requestGeneratedURI(Request request, String uri) {
375 /* TODO - find project and process request */
379 * @see net.pterodactylus.jsite.core.RequestListener#requestFinished(net.pterodactylus.jsite.core.Request)
381 public void requestFinished(Request request) {
382 /* TODO - find project and process request */
386 // INTERFACE InsertListener
392 public void insertAdded(Insert insert) {
399 public void insertRemoved(Insert insert) {
406 public void insertStarted(Insert insert) {
413 public void insertProgressed(Insert insert) {
420 public void insertGeneratedURI(Insert insert, String uri) {
427 public void insertFinished(Insert insert) {