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;
56 // LISTENER MANAGEMENT
62 public void addCoreListener(CoreListener coreListener) {
63 logger.log(Level.FINEST, "adding core listener: " + coreListener);
64 coreListenerSupport.addListener(coreListener);
70 public void removeCoreListener(CoreListener coreListener) {
71 logger.log(Level.FINEST, "removing core listener: " + coreListener);
72 coreListenerSupport.removeListener(coreListener);
80 * Returns the project manager.
82 * @return The project manager
84 public ProjectManager getProjectManager() {
85 return projectManager;
89 * Sets the project manager to use.
91 * @param projectManager
92 * The project manager to use
94 public void setProjectManager(ProjectManager projectManager) {
95 this.projectManager = projectManager;
99 * Returns the node manager.
101 * @return The node manager
103 public NodeManager getNodeManager() {
108 * Sets the node manager to use.
111 * The node manager to use
113 public void setNodeManager(NodeManager nodeManager) {
114 this.nodeManager = nodeManager;
120 public List<Node> getNodes() {
121 return nodeManager.getNodes();
127 public boolean isNodeConnected(Node node) {
128 return nodeManager.isNodeConnected(node);
134 public List<Project> getProjects() {
135 return projectManager.getProjects();
145 public void start() {
146 logger.log(Level.INFO, "starting core…");
149 coreListenerSupport.fireLoadingNodesDone(nodeManager.getDirectory());
150 } catch (IOException ioe1) {
151 coreListenerSupport.fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
154 projectManager.load();
155 coreListenerSupport.fireLoadingProjectsDone(projectManager.getDirectory());
156 } catch (IOException ioe1) {
157 coreListenerSupport.fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
159 coreListenerSupport.fireCoreLoaded();
166 logger.log(Level.INFO, "stopping core…");
168 projectManager.save();
169 coreListenerSupport.fireSavingProjectsDone(projectManager.getDirectory());
170 } catch (IOException ioe1) {
171 coreListenerSupport.fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
175 coreListenerSupport.fireSavingNodesDone(nodeManager.getDirectory());
176 } catch (IOException ioe1) {
177 coreListenerSupport.fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
179 coreListenerSupport.fireCoreStopped();
185 public boolean addNode(Node node) throws UnknownHostException {
186 logger.log(Level.FINEST, "addNode(node=" + node + ")");
187 return nodeManager.addNode(node);
193 public void removeNode(Node node) {
194 logger.log(Level.FINEST, "removeNode(node=" + node + ")");
195 nodeManager.removeNode(node);
201 public void connectToNode(Node node) {
202 logger.log(Level.FINEST, "connectToNode(node=" + node + ")");
203 coreListenerSupport.fireNodeConnecting(node);
204 nodeManager.connect(node);
210 public void disconnectFromNode(Node node) {
211 logger.log(Level.FINEST, "disconnectFromNode(node=" + node + ")");
212 nodeManager.disconnect(node);
218 public void createProject() throws IOException, JSiteException {
219 logger.log(Level.FINEST, "createProject()");
220 Project newProject = projectManager.createProject();
221 coreListenerSupport.fireProjectAdded(newProject);
227 public void insertProject(Node node, Project project) {
228 logger.log(Level.FINEST, "insertProject(node=" + node + ", project=" + project + ")");
234 public void cloneProject(Project project) {
235 logger.log(Level.FINEST, "cloneProject(project=" + project + ")");
236 Project projectClone = projectManager.cloneProject(project);
237 coreListenerSupport.fireProjectCloned(project, projectClone);
243 public void removeProject(Project project) {
244 logger.log(Level.FINEST, "removeProject(project=" + project + ")");
245 projectManager.removeProject(project);
246 coreListenerSupport.fireProjectRemoved(project);
254 * Loads the configuration.
256 @SuppressWarnings("unused")
257 private void loadConfig() {
258 logger.log(Level.FINEST, "loadConfig()");
263 * Saves the configuration.
265 @SuppressWarnings("unused")
266 private void saveConfig() {
267 logger.log(Level.FINEST, "saveConfig()");
272 // INTERFACE NodeListener
278 public void nodeAdded(Node node) {
279 coreListenerSupport.fireNodeAdded(node);
285 public void nodeRemoved(Node node) {
286 coreListenerSupport.fireNodeRemoved(node);
292 public void nodeConnected(Node node) {
293 coreListenerSupport.fireNodeConnected(node);
299 public void nodeConnectionFailed(Node node, Throwable cause) {
300 coreListenerSupport.fireNodeConnectionFailed(node, cause);
306 public void nodeDisconnected(Node node, Throwable throwable) {
307 coreListenerSupport.fireNodeDisconnected(node, throwable);