Implement InsertListener interface in CoreImpl.
[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, RequestListener, InsertListener {
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         private Executor threadPool = Executors.newCachedThreadPool();
47
48         /** The project manager. */
49         private ProjectManager projectManager;
50
51         /** The node manager. */
52         private NodeManager nodeManager;
53
54         /** The request manager. */
55         /* TODO - remove */
56         @SuppressWarnings("unused")
57         private RequestManager requestManager;
58
59         /** The insert manager. */
60         private InsertManager insertManager;
61
62         //
63         // LISTENER MANAGEMENT
64         //
65
66         /**
67          * {@inheritDoc}
68          */
69         public void addCoreListener(CoreListener coreListener) {
70                 logger.log(Level.FINEST, "adding core listener: " + coreListener);
71                 coreListenerSupport.addListener(coreListener);
72         }
73
74         /**
75          * {@inheritDoc}
76          */
77         public void removeCoreListener(CoreListener coreListener) {
78                 logger.log(Level.FINEST, "removing core listener: " + coreListener);
79                 coreListenerSupport.removeListener(coreListener);
80         }
81
82         //
83         // ACCESSORS
84         //
85
86         /**
87          * {@inheritDoc}
88          */
89         public Executor getThreadPool() {
90                 return threadPool;
91         }
92
93         /**
94          * Returns the project manager.
95          *
96          * @return The project manager
97          */
98         public ProjectManager getProjectManager() {
99                 return projectManager;
100         }
101
102         /**
103          * Sets the project manager to use.
104          *
105          * @param projectManager
106          *            The project manager to use
107          */
108         public void setProjectManager(ProjectManager projectManager) {
109                 this.projectManager = projectManager;
110         }
111
112         /**
113          * Returns the node manager.
114          *
115          * @return The node manager
116          */
117         public NodeManager getNodeManager() {
118                 return nodeManager;
119         }
120
121         /**
122          * Sets the node manager to use.
123          *
124          * @param nodeManager
125          *            The node manager to use
126          */
127         public void setNodeManager(NodeManager nodeManager) {
128                 this.nodeManager = nodeManager;
129         }
130
131         /**
132          * Sets the request manager to use.
133          *
134          * @param requestManager
135          *            The request manager to use
136          */
137         public void setRequestManager(RequestManager requestManager) {
138                 this.requestManager = requestManager;
139         }
140
141         /**
142          * Sets the insert manager to use.
143          *
144          * @param insertManager
145          *            The insert manager to use
146          */
147         public void setInsertManager(InsertManager insertManager) {
148                 this.insertManager = insertManager;
149         }
150
151         /**
152          * {@inheritDoc}
153          */
154         public List<Node> getNodes() {
155                 return nodeManager.getNodes();
156         }
157
158         /**
159          * {@inheritDoc}
160          */
161         public boolean isNodeConnected(Node node) {
162                 return nodeManager.hasNode(node);
163         }
164
165         /**
166          * {@inheritDoc}
167          */
168         public List<Project> getProjects() {
169                 return projectManager.getProjects();
170         }
171
172         //
173         // ACTIONS
174         //
175
176         /**
177          * {@inheritDoc}
178          */
179         public void start() {
180                 logger.log(Level.INFO, "starting core…");
181                 try {
182                         nodeManager.load();
183                         coreListenerSupport.fireLoadingNodesDone(nodeManager.getDirectory());
184                 } catch (IOException ioe1) {
185                         coreListenerSupport.fireLoadingNodesFailed(nodeManager.getDirectory(), ioe1);
186                 }
187                 try {
188                         projectManager.load();
189                         coreListenerSupport.fireLoadingProjectsDone(projectManager.getDirectory());
190                 } catch (IOException ioe1) {
191                         coreListenerSupport.fireLoadingProjectsFailed(projectManager.getDirectory(), ioe1);
192                 }
193                 coreListenerSupport.fireCoreLoaded();
194         }
195
196         /**
197          * {@inheritDoc}
198          */
199         public void stop() {
200                 logger.log(Level.INFO, "stopping core…");
201                 try {
202                         projectManager.save();
203                         coreListenerSupport.fireSavingProjectsDone(projectManager.getDirectory());
204                 } catch (IOException ioe1) {
205                         coreListenerSupport.fireSavingProjectsFailed(projectManager.getDirectory(), ioe1);
206                 }
207                 try {
208                         nodeManager.save();
209                         coreListenerSupport.fireSavingNodesDone(nodeManager.getDirectory());
210                 } catch (IOException ioe1) {
211                         coreListenerSupport.fireSavingNodesFailed(nodeManager.getDirectory(), ioe1);
212                 }
213                 coreListenerSupport.fireCoreStopped();
214         }
215
216         /**
217          * {@inheritDoc}
218          */
219         public boolean addNode(Node node) throws UnknownHostException {
220                 logger.log(Level.FINEST, "addNode(node=" + node + ")");
221                 return nodeManager.addNode(node);
222         }
223
224         /**
225          * {@inheritDoc}
226          */
227         public void removeNode(Node node) {
228                 logger.log(Level.FINEST, "removeNode(node=" + node + ")");
229                 nodeManager.removeNode(node);
230         }
231
232         /**
233          * {@inheritDoc}
234          */
235         public void connectToNode(Node node) {
236                 logger.log(Level.FINEST, "connectToNode(node=" + node + ")");
237                 coreListenerSupport.fireNodeConnecting(node);
238                 nodeManager.connect(node);
239         }
240
241         /**
242          * {@inheritDoc}
243          */
244         public void disconnectFromNode(Node node) {
245                 logger.log(Level.FINEST, "disconnectFromNode(node=" + node + ")");
246                 nodeManager.disconnect(node);
247         }
248
249         /**
250          * {@inheritDoc}
251          */
252         public void createProject() throws IOException, JSiteException {
253                 logger.log(Level.FINEST, "createProject()");
254                 Project newProject = projectManager.createProject();
255                 coreListenerSupport.fireProjectAdded(newProject);
256         }
257
258         /**
259          * {@inheritDoc}
260          */
261         public void insertProject(Node node, Project project) {
262                 logger.log(Level.FINEST, "insertProject(node=" + node + ", project=" + project + ")");
263                 insertManager.insertProject(project, node);
264         }
265
266         /**
267          * {@inheritDoc}
268          */
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);
273         }
274
275         /**
276          * {@inheritDoc}
277          */
278         public void removeProject(Project project) {
279                 logger.log(Level.FINEST, "removeProject(project=" + project + ")");
280                 projectManager.removeProject(project);
281                 coreListenerSupport.fireProjectRemoved(project);
282         }
283
284         //
285         // PRIVATE METHODS
286         //
287
288         /**
289          * Loads the configuration.
290          */
291         @SuppressWarnings("unused")
292         private void loadConfig() {
293                 logger.log(Level.FINEST, "loadConfig()");
294                 /* TODO */
295         }
296
297         /**
298          * Saves the configuration.
299          */
300         @SuppressWarnings("unused")
301         private void saveConfig() {
302                 logger.log(Level.FINEST, "saveConfig()");
303                 /* TODO */
304         }
305
306         //
307         // INTERFACE NodeListener
308         //
309
310         /**
311          * {@inheritDoc}
312          */
313         public void nodeAdded(Node node) {
314                 coreListenerSupport.fireNodeAdded(node);
315         }
316
317         /**
318          * {@inheritDoc}
319          */
320         public void nodeRemoved(Node node) {
321                 coreListenerSupport.fireNodeRemoved(node);
322         }
323
324         /**
325          * {@inheritDoc}
326          */
327         public void nodeConnected(Node node) {
328                 coreListenerSupport.fireNodeConnected(node);
329         }
330
331         /**
332          * {@inheritDoc}
333          */
334         public void nodeConnectionFailed(Node node, Throwable cause) {
335                 coreListenerSupport.fireNodeConnectionFailed(node, cause);
336         }
337
338         /**
339          * {@inheritDoc}
340          */
341         public void nodeDisconnected(Node node, Throwable throwable) {
342                 coreListenerSupport.fireNodeDisconnected(node, throwable);
343         }
344
345         //
346         // INTERFACE RequestListener
347         //
348
349         /**
350          * {@inheritDoc}
351          */
352         public void requestAdded(Request request) {
353                 /* TODO - find project and process request */
354         }
355
356         /**
357          * @see net.pterodactylus.jsite.core.RequestListener#requestProgressed(Request)
358          */
359         public void requestProgressed(Request request) {
360                 /* TODO - find project and process request */
361         }
362
363         /**
364          * @see net.pterodactylus.jsite.core.RequestListener#requestRemoved(net.pterodactylus.jsite.core.Request)
365          */
366         public void requestRemoved(Request request) {
367                 /* TODO - find project and process request */
368         }
369
370         /**
371          * @see net.pterodactylus.jsite.core.RequestListener#requestGeneratedURI(net.pterodactylus.jsite.core.Request,
372          *      java.lang.String)
373          */
374         public void requestGeneratedURI(Request request, String uri) {
375                 /* TODO - find project and process request */
376         }
377
378         /**
379          * @see net.pterodactylus.jsite.core.RequestListener#requestFinished(net.pterodactylus.jsite.core.Request)
380          */
381         public void requestFinished(Request request) {
382                 /* TODO - find project and process request */
383         }
384
385         //
386         // INTERFACE InsertListener
387         //
388
389         /**
390          * {@inheritDoc}
391          */
392         public void insertAdded(Insert insert) {
393                 /* TODO */
394         }
395
396         /**
397          * {@inheritDoc}
398          */
399         public void insertRemoved(Insert insert) {
400                 /* TODO */
401         }
402
403         /**
404          * {@inheritDoc}
405          */
406         public void insertStarted(Insert insert) {
407                 /* TODO */
408         }
409
410         /**
411          * {@inheritDoc}
412          */
413         public void insertProgressed(Insert insert) {
414                 /* TODO */
415         }
416
417         /**
418          * {@inheritDoc}
419          */
420         public void insertGeneratedURI(Insert insert, String uri) {
421                 /* TODO */
422         }
423
424         /**
425          * {@inheritDoc}
426          */
427         public void insertFinished(Insert insert) {
428                 /* TODO */
429         }
430
431 }