X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fcore%2FInsertManager.java;h=bdd02a10618b87d98600ac0730dc4bfbeac32a2a;hb=c63257e8cc0ba1a5aca9364b22171abe7279d479;hp=8e1083ae92d1df82a6dbd6edb20c3fdab2491127;hpb=5be10a2eec0ff8381c087a40509cb5305394ff85;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/core/InsertManager.java b/src/net/pterodactylus/jsite/core/InsertManager.java index 8e1083a..bdd02a1 100644 --- a/src/net/pterodactylus/jsite/core/InsertManager.java +++ b/src/net/pterodactylus/jsite/core/InsertManager.java @@ -1,28 +1,225 @@ /* - * jSite2 - InsertManager.java - - * Copyright © 2008 David Roden + * jSite2 - InsertManager.java - Copyright © 2008 David Roden * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307, USA. */ + package net.pterodactylus.jsite.core; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +import net.pterodactylus.util.logging.Logging; /** - * TODO + * Manages all currently running and past inserts. + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> */ public class InsertManager { + /** Logger. */ + private static final Logger logger = Logging.getLogger(InsertManager.class.getName()); + + /** The insert listeners. */ + private final List insertListeners = new ArrayList(); + + /** Mapping from insert IDs to inserts. */ + private final Map inserts = new HashMap(); + + // + // EVENT MANAGEMENT + // + + /** + * Adds an insert listener to the list of insert listeners. + * + * @param insertListener + * The insert listener to add + */ + public void addInsertListener(InsertListener insertListener) { + logger.log(Level.FINEST, "addInsertListener(insertListener=" + insertListener + ")"); + synchronized (insertListeners) { + insertListeners.add(insertListener); + } + } + + /** + * Removes an insert listener from the list of insert listeners. + * + * @param insertListener + * The insert listener to remove + */ + public void removeInsertListener(InsertListener insertListener) { + logger.log(Level.FINEST, "removeInsertListener(insertListener=" + insertListener + ")"); + synchronized (insertListeners) { + insertListeners.remove(insertListener); + } + } + + /** + * Notifies all listeners that an insert was added. + * + * @param insert + * The insert that was added + */ + private void fireInsertAdded(Insert insert) { + synchronized (insertListeners) { + for (InsertListener insertListener : insertListeners) { + insertListener.insertAdded(insert); + } + } + } + + /** + * Notifies all listeners that an insert was removed. + * + * @param insert + * The insert that was removes + */ + @SuppressWarnings("unused") + private void fireInsertRemoved(Insert insert) { + synchronized (insertListeners) { + for (InsertListener insertListener : insertListeners) { + insertListener.insertRemoved(insert); + } + } + } + + /** + * Notifies all listeners that an insert was started. + * + * @param insert + * The insert that was started + */ + @SuppressWarnings("unused") + private void fireInsertStarted(Insert insert) { + synchronized (insertListeners) { + for (InsertListener insertListener : insertListeners) { + insertListener.insertStarted(insert); + } + } + } + + /** + * Notifies all listeners that an insert made some progress + * + * @param insert + * The insert that made some progress + */ + @SuppressWarnings("unused") + private void fireInsertProgressed(Insert insert) { + synchronized (insertListeners) { + for (InsertListener insertListener : insertListeners) { + insertListener.insertProgressed(insert); + } + } + } + + /** + * Notifies all listeners that an insert generated a URI. + * + * @param insert + * The insert that generated a URI + * @param uri + * The generated URI + */ + @SuppressWarnings("unused") + private void fireInsertGeneratedURI(Insert insert, String uri) { + synchronized (insertListeners) { + for (InsertListener insertListener : insertListeners) { + insertListener.insertGeneratedURI(insert, uri); + } + } + } + + /** + * Notifies all listeners that an insert has finished. + * + * @param insert + * The insert that has finished + */ + @SuppressWarnings("unused") + private void fireInsertFinished(Insert insert) { + synchronized (insertListeners) { + for (InsertListener insertListener : insertListeners) { + insertListener.insertFinished(insert); + } + } + } + + // + // ACTIONS + // + + /** + * Starts to insert the given project. The insert will be made to the node + * stored in the project, and if no node is specified in the project, the + * given node will be used. + * + * @param project + * The project to insert + * @param node + * The node to insert the project to if the project does not + * specify a node + */ + public void insertProject(Project project, Node node) { + logger.log(Level.FINEST, "insertProject(project=" + project + ",node=" + node + ")"); + Node insertNode = project.getNode(); + if (insertNode == null) { + insertNode = node; + if (insertNode == null) { + throw new NullPointerException("node must not be null"); + } + } + String insertId = "insert-" + project.getId(); + Insert newInsert = new Insert(project, insertNode, insertId); + inserts.put(insertId, newInsert); + saveConfiguration(); + fireInsertAdded(newInsert); + /* TODO - start insert */ + } + + /** + * Starts the insert manager. + */ + public void start() { + logger.log(Level.FINEST, "start()"); + loadConfiguration(); + } + + // + // PRIVATE METHODS + // + + /** + * Loads the configuration. + */ + private void loadConfiguration() { + logger.log(Level.FINEST, "loadConfiguration()"); + } + + /** + * Saves the configuration. + */ + private void saveConfiguration() { + logger.log(Level.FINEST, "saveConfiguration()"); + } + }