Remove request and insert manager and all related classes.
[jSite2.git] / src / net / pterodactylus / jsite / core / CoreImpl.java
1 /*
2  * jSite2 - Core.java -
3  * Copyright © 2008 David Roden
4  *
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.
9  *
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.
14  *
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.
18  */
19
20 package net.pterodactylus.jsite.core;
21
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;
29
30 import net.pterodactylus.util.logging.Logging;
31
32 /**
33  * The core of jSite.
34  *
35  * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
36  */
37 public class CoreImpl implements Core, NodeListener {
38
39         /** The logger. */
40         private static final Logger logger = Logging.getLogger(CoreImpl.class.getName());
41
42         /** The core listener support. */
43         private final CoreListenerSupport coreListenerSupport = new CoreListenerSupport();
44
45         /** Thread pool. */
46         @SuppressWarnings("unused")
47         private Executor threadPool = Executors.newCachedThreadPool();
48
49         /** The project manager. */
50         private ProjectManager projectManager;
51
52         /** The node manager. */
53         private NodeManager nodeManager;
54
55         //
56         // LISTENER MANAGEMENT
57         //
58
59         /**
60          * {@inheritDoc}
61          */
62         public void addCoreListener(CoreListener coreListener) {
63                 logger.log(Level.FINEST, "adding core listener: " + coreListener);
64                 coreListenerSupport.addListener(coreListener);
65         }
66
67         /**
68          * {@inheritDoc}
69          */
70         public void removeCoreListener(CoreListener coreListener) {
71                 logger.log(Level.FINEST, "removing core listener: " + coreListener);
72                 coreListenerSupport.removeListener(coreListener);
73         }
74
75         //
76         // ACCESSORS
77         //
78
79         /**
80          * Returns the project manager.
81          *
82          * @return The project manager
83          */
84         public ProjectManager getProjectManager() {
85                 return projectManager;
86         }
87
88         /**
89          * Sets the project manager to use.
90          *
91          * @param projectManager
92          *            The project manager to use
93          */
94         public void setProjectManager(ProjectManager projectManager) {
95                 this.projectManager = projectManager;
96         }
97
98         /**
99          * Returns the node manager.
100          *
101          * @return The node manager
102          */
103         public NodeManager getNodeManager() {
104                 return nodeManager;
105         }
106
107         /**
108          * Sets the node manager to use.
109          *
110          * @param nodeManager
111          *            The node manager to use
112          */
113         public void setNodeManager(NodeManager nodeManager) {
114                 this.nodeManager = nodeManager;
115         }
116
117         /**
118          * {@inheritDoc}
119          */
120         public List<Node> getNodes() {
121                 return nodeManager.getNodes();
122         }
123
124         /**
125          * {@inheritDoc}
126          */
127         public boolean isNodeConnected(Node node) {
128                 return nodeManager.isNodeConnected(node);
129         }
130
131         /**
132          * {@inheritDoc}
133          */
134         public List<Project> getProjects() {
135                 return projectManager.getProjects();
136         }
137
138         //
139         // ACTIONS
140         //
141
142         /**
143          * {@inheritDoc}
144          */
145         public void start() {
146                 logger.log(Level.INFO, "starting core…");
147                 try {
148                         nodeManager.load();
149                         coreListenerSupport.fireLoadingNodesDone(nodeManager.getDirectory());
150                 } catch (IOException ioe1) {
151                         coreListenerSupport.fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
152                 }
153                 try {
154                         projectManager.load();
155                         coreListenerSupport.fireLoadingProjectsDone(projectManager.getDirectory());
156                 } catch (IOException ioe1) {
157                         coreListenerSupport.fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
158                 }
159                 coreListenerSupport.fireCoreLoaded();
160         }
161
162         /**
163          * {@inheritDoc}
164          */
165         public void stop() {
166                 logger.log(Level.INFO, "stopping core…");
167                 try {
168                         projectManager.save();
169                         coreListenerSupport.fireSavingProjectsDone(projectManager.getDirectory());
170                 } catch (IOException ioe1) {
171                         coreListenerSupport.fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
172                 }
173                 try {
174                         nodeManager.save();
175                         coreListenerSupport.fireSavingNodesDone(nodeManager.getDirectory());
176                 } catch (IOException ioe1) {
177                         coreListenerSupport.fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
178                 }
179                 coreListenerSupport.fireCoreStopped();
180         }
181
182         /**
183          * {@inheritDoc}
184          */
185         public boolean addNode(Node node) throws UnknownHostException {
186                 logger.log(Level.FINEST, "addNode(node=" + node + ")");
187                 return nodeManager.addNode(node);
188         }
189
190         /**
191          * {@inheritDoc}
192          */
193         public void removeNode(Node node) {
194                 logger.log(Level.FINEST, "removeNode(node=" + node + ")");
195                 nodeManager.removeNode(node);
196         }
197
198         /**
199          * {@inheritDoc}
200          */
201         public void connectToNode(Node node) {
202                 logger.log(Level.FINEST, "connectToNode(node=" + node + ")");
203                 coreListenerSupport.fireNodeConnecting(node);
204                 nodeManager.connect(node);
205         }
206
207         /**
208          * {@inheritDoc}
209          */
210         public void disconnectFromNode(Node node) {
211                 logger.log(Level.FINEST, "disconnectFromNode(node=" + node + ")");
212                 nodeManager.disconnect(node);
213         }
214
215         /**
216          * {@inheritDoc}
217          */
218         public void createProject() throws IOException, JSiteException {
219                 logger.log(Level.FINEST, "createProject()");
220                 Project newProject = projectManager.createProject();
221                 coreListenerSupport.fireProjectAdded(newProject);
222         }
223
224         /**
225          * {@inheritDoc}
226          */
227         public void insertProject(Node node, Project project) {
228                 logger.log(Level.FINEST, "insertProject(node=" + node + ", project=" + project + ")");
229         }
230
231         /**
232          * {@inheritDoc}
233          */
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);
238         }
239
240         /**
241          * {@inheritDoc}
242          */
243         public void removeProject(Project project) {
244                 logger.log(Level.FINEST, "removeProject(project=" + project + ")");
245                 projectManager.removeProject(project);
246                 coreListenerSupport.fireProjectRemoved(project);
247         }
248
249         //
250         // PRIVATE METHODS
251         //
252
253         /**
254          * Loads the configuration.
255          */
256         @SuppressWarnings("unused")
257         private void loadConfig() {
258                 logger.log(Level.FINEST, "loadConfig()");
259                 /* TODO */
260         }
261
262         /**
263          * Saves the configuration.
264          */
265         @SuppressWarnings("unused")
266         private void saveConfig() {
267                 logger.log(Level.FINEST, "saveConfig()");
268                 /* TODO */
269         }
270
271         //
272         // INTERFACE NodeListener
273         //
274
275         /**
276          * {@inheritDoc}
277          */
278         public void nodeAdded(Node node) {
279                 coreListenerSupport.fireNodeAdded(node);
280         }
281
282         /**
283          * {@inheritDoc}
284          */
285         public void nodeRemoved(Node node) {
286                 coreListenerSupport.fireNodeRemoved(node);
287         }
288
289         /**
290          * {@inheritDoc}
291          */
292         public void nodeConnected(Node node) {
293                 coreListenerSupport.fireNodeConnected(node);
294         }
295
296         /**
297          * {@inheritDoc}
298          */
299         public void nodeConnectionFailed(Node node, Throwable cause) {
300                 coreListenerSupport.fireNodeConnectionFailed(node, cause);
301         }
302
303         /**
304          * {@inheritDoc}
305          */
306         public void nodeDisconnected(Node node, Throwable throwable) {
307                 coreListenerSupport.fireNodeDisconnected(node, throwable);
308         }
309
310 }