implement node addition and removal events
[jSite2.git] / src / net / pterodactylus / jsite / gui / SwingInterface.java
index f868f85..f634fa5 100644 (file)
@@ -142,7 +142,7 @@ public class SwingInterface implements CoreListener, LoggingListener {
        private ConfigurationDialog configurationDialog;
 
        /** The list of all defined nodes. */
-       private List<Node> nodeList;
+       private List<Node> nodeList = Collections.synchronizedList(new ArrayList<Node>());
 
        //
        // CONFIGURATION
@@ -624,6 +624,8 @@ public class SwingInterface implements CoreListener, LoggingListener {
         * Quits jSite.
         */
        private void quit() {
+               /* TODO - ask */
+               core.stop();
                saveConfig();
                System.exit(0);
        }
@@ -635,6 +637,7 @@ public class SwingInterface implements CoreListener, LoggingListener {
         *            The list of nodes
         */
        private void rebuildNodeActions(List<Node> nodes) {
+               logger.fine("rebuilding node actions…");
                nodeConnectActions.clear();
                nodeNodeConnectActions.clear();
                nodeConnectActionNodes.clear();
@@ -642,6 +645,7 @@ public class SwingInterface implements CoreListener, LoggingListener {
                nodeNodeDisconnectActions.clear();
                nodeDisconnectActionNodes.clear();
                for (Node node: nodes) {
+                       logger.finer("adding node “" + node + "” to menu");
                        Action nodeConnectAction = new AbstractAction(node.getName()) {
 
                                /**
@@ -847,8 +851,6 @@ public class SwingInterface implements CoreListener, LoggingListener {
         * {@inheritDoc}
         */
        public void coreLoaded() {
-               this.nodeList = core.getNodes();
-               manageNodesDialog.setNodeList(nodeList);
                mainWindow.setVisible(true);
                mainWindow.setStatusBarText(I18n.get("mainWindow.statusBar.coreLoaded"));
        }
@@ -863,6 +865,27 @@ public class SwingInterface implements CoreListener, LoggingListener {
        /**
         * {@inheritDoc}
         */
+       public void nodeAdded(Node node) {
+               logger.log(Level.INFO, "node added: " + node);
+               nodeList.add(node);
+               manageNodesDialog.setNodeList(nodeList);
+               rebuildNodeActions(nodeList);
+               mainWindow.refreshNodeMenuItems();
+       }
+
+       /**
+        * {@inheritDoc}
+        */
+       public void nodeRemoved(Node node) {
+               logger.log(Level.INFO, "node removed: " + node);
+               nodeList.remove(node);
+               rebuildNodeActions(nodeList);
+               mainWindow.refreshNodeMenuItems();
+       }
+
+       /**
+        * {@inheritDoc}
+        */
        public void nodeConnecting(Node node) {
                Action nodeConnectAction = nodeNodeConnectActions.get(node);
                nodeConnectActions.remove(nodeConnectAction);
@@ -897,7 +920,14 @@ public class SwingInterface implements CoreListener, LoggingListener {
                logger.log(Level.INFO, "request added to node: " + request + ", " + node);
                /* TODO - implement */
        }
-       
+
+       /**
+        * {@inheritDoc}
+        */
+       public void requestProgressed(Request request, int totalBlocks, int requiredBlocks, int successfulBlocks, int failedBlocks, int fatallyFailedBlocks, boolean finalizedTotal) {
+               /* TODO - update table model */
+       }
+
        //
        // INTERFACE LoggingListener
        //