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 {
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. */
56 private RequestManager requestManager;
59 // LISTENER MANAGEMENT
65 public void addCoreListener(CoreListener coreListener) {
66 logger.log(Level.FINEST, "adding core listener: " + coreListener);
67 coreListenerSupport.addListener(coreListener);
73 public void removeCoreListener(CoreListener coreListener) {
74 logger.log(Level.FINEST, "removing core listener: " + coreListener);
75 coreListenerSupport.removeListener(coreListener);
83 * Returns the project manager.
85 * @return The project manager
87 public ProjectManager getProjectManager() {
88 return projectManager;
92 * Sets the project manager to use.
94 * @param projectManager
95 * The project manager to use
97 public void setProjectManager(ProjectManager projectManager) {
98 this.projectManager = projectManager;
102 * Returns the node manager.
104 * @return The node manager
106 public NodeManager getNodeManager() {
111 * Sets the node manager to use.
114 * The node manager to use
116 public void setNodeManager(NodeManager nodeManager) {
117 this.nodeManager = nodeManager;
121 * Sets the request manager.
123 * @param requestManager
124 * The request manager
126 public void setRequestManager(RequestManager requestManager) {
127 this.requestManager = requestManager;
133 public List<Node> getNodes() {
134 return nodeManager.getNodes();
140 public boolean isNodeConnected(Node node) {
141 return nodeManager.isNodeConnected(node);
147 public List<Project> getProjects() {
148 return projectManager.getProjects();
158 public void start() {
159 logger.log(Level.INFO, "starting core…");
163 coreListenerSupport.fireLoadingNodesDone(nodeManager.getDirectory());
164 } catch (IOException ioe1) {
165 coreListenerSupport.fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
168 projectManager.load();
169 coreListenerSupport.fireLoadingProjectsDone(projectManager.getDirectory());
170 } catch (IOException ioe1) {
171 coreListenerSupport.fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
173 coreListenerSupport.fireCoreLoaded();
180 logger.log(Level.INFO, "stopping core…");
183 projectManager.save();
184 coreListenerSupport.fireSavingProjectsDone(projectManager.getDirectory());
185 } catch (IOException ioe1) {
186 coreListenerSupport.fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
190 coreListenerSupport.fireSavingNodesDone(nodeManager.getDirectory());
191 } catch (IOException ioe1) {
192 coreListenerSupport.fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
194 coreListenerSupport.fireCoreStopped();
200 public boolean addNode(Node node) throws UnknownHostException {
201 logger.log(Level.FINEST, "addNode(node=" + node + ")");
202 return nodeManager.addNode(node);
208 public void removeNode(Node node) {
209 logger.log(Level.FINEST, "removeNode(node=" + node + ")");
210 nodeManager.removeNode(node);
216 public void connectToNode(Node node) {
217 logger.log(Level.FINEST, "connectToNode(node=" + node + ")");
218 coreListenerSupport.fireNodeConnecting(node);
219 nodeManager.connect(node);
225 public void disconnectFromNode(Node node) {
226 logger.log(Level.FINEST, "disconnectFromNode(node=" + node + ")");
227 nodeManager.disconnect(node);
233 public void createProject() throws IOException, JSiteException {
234 logger.log(Level.FINEST, "createProject()");
235 Project newProject = projectManager.createProject();
236 coreListenerSupport.fireProjectAdded(newProject);
242 public void insertProject(Node node, Project project) {
243 logger.log(Level.FINEST, "insertProject(node=" + node + ", project=" + project + ")");
249 public void cloneProject(Project project) {
250 logger.log(Level.FINEST, "cloneProject(project=" + project + ")");
251 Project projectClone = projectManager.cloneProject(project);
252 coreListenerSupport.fireProjectCloned(project, projectClone);
258 public void removeProject(Project project) {
259 logger.log(Level.FINEST, "removeProject(project=" + project + ")");
260 projectManager.removeProject(project);
261 coreListenerSupport.fireProjectRemoved(project);
269 * Loads the configuration.
271 private void loadConfig() {
272 logger.log(Level.FINEST, "loadConfig()");
277 * Saves the configuration.
279 private void saveConfig() {
280 logger.log(Level.FINEST, "saveConfig()");
285 // INTERFACE NodeListener
291 public void nodeAdded(Node node) {
292 coreListenerSupport.fireNodeAdded(node);
298 public void nodeRemoved(Node node) {
299 coreListenerSupport.fireNodeRemoved(node);
305 public void nodeConnected(Node node) {
306 coreListenerSupport.fireNodeConnected(node);
312 public void nodeConnectionFailed(Node node, Throwable cause) {
313 coreListenerSupport.fireNodeConnectionFailed(node, cause);
319 public void nodeDisconnected(Node node, Throwable throwable) {
320 coreListenerSupport.fireNodeDisconnected(node, throwable);