add advanced mode
[jSite2.git] / src / net / pterodactylus / jsite / gui / ManageNodesDialog.java
index c2d6adf..0ae270c 100644 (file)
@@ -28,11 +28,9 @@ import java.util.Iterator;
 import java.util.List;
 
 import javax.swing.AbstractListModel;
-import javax.swing.Action;
 import javax.swing.BorderFactory;
 import javax.swing.JButton;
 import javax.swing.JDialog;
-import javax.swing.JFrame;
 import javax.swing.JList;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
@@ -41,36 +39,42 @@ import javax.swing.border.EtchedBorder;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
 
+import net.pterodactylus.jsite.core.Core;
 import net.pterodactylus.jsite.core.Node;
 import net.pterodactylus.jsite.i18n.I18n;
+import net.pterodactylus.jsite.i18n.I18nable;
+import net.pterodactylus.jsite.i18n.gui.I18nAction;
 import net.pterodactylus.jsite.main.Version;
 import net.pterodactylus.util.swing.SwingUtils;
 
 /**
  * Dialog that lets the user manage her nodes.
- * 
+ *
  * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
  * @version $Id$
  */
-public class ManageNodesDialog extends JDialog implements ListSelectionListener {
+public class ManageNodesDialog extends JDialog implements ListSelectionListener, I18nable {
+
+       /** The core. */
+       private final Core core;
 
        /** The original list of nodes. */
        private List<Node> originalNodeList;
 
        /** The “add node” action. */
-       private Action addNodeAction;
+       private I18nAction addNodeAction;
 
        /** The “edit node” action. */
-       private Action editNodeAction;
+       private I18nAction editNodeAction;
 
        /** The “delete node” action. */
-       private Action deleteNodeAction;
+       private I18nAction deleteNodeAction;
 
        /** The “okay” action. */
-       private Action okayAction;
+       private I18nAction okayAction;
 
        /** The “cancel” action. */
-       private Action cancelAction;
+       private I18nAction cancelAction;
 
        /** The “edit node” dialog. */
        private EditNodeDialog editNodeDialog;
@@ -83,16 +87,18 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
 
        /**
         * Creates a new node manager dialog.
-        * 
-        * @param parentFrame
-        *            The parent frame of the dialog
+        *
+        * @param swingInterface
+        *            The Swing interface
         */
-       public ManageNodesDialog(JFrame parentFrame) {
-               super(parentFrame, I18n.get("manageNodesDialog.title") + " – jSite " + Version.getVersion(), true);
+       public ManageNodesDialog(SwingInterface swingInterface) {
+               super(swingInterface.getMainWindow(), I18n.get("manageNodesDialog.title") + " – jSite " + Version.getVersion(), true);
+               this.core = swingInterface.getCore();
                initActions();
                initComponents();
                initDialogs();
                pack();
+               I18n.registerI18nable(this);
                SwingUtils.center(this);
        }
 
@@ -101,8 +107,17 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
        //
 
        /**
+        * Expose the edit node dialog for the simple mode.
+        *
+        * @return The edit node dialog
+        */
+       EditNodeDialog getEditNodeDialog() {
+               return editNodeDialog;
+       }
+
+       /**
         * Returns the list of nodes.
-        * 
+        *
         * @return The list of nodes
         */
        public List<Node> getNodeList() {
@@ -111,7 +126,7 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
 
        /**
         * Sets the list of nodes.
-        * 
+        *
         * @param nodeList
         *            The list of nodes
         */
@@ -232,10 +247,9 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
         * Adds a new node via {@link #editNodeDialog}.
         */
        private void addNode() {
-               editNodeDialog.setNodeName("New Node");
+               editNodeDialog.setNodeName(I18n.get("general.newNode.name"));
                editNodeDialog.setNodeHostname("localhost");
                editNodeDialog.setNodePort(9481);
-               editNodeDialog.setNodeOnSameMachine(true);
                editNodeDialog.setVisible(true);
                if (!editNodeDialog.wasCancelled()) {
                        Node newNode = new Node();
@@ -254,13 +268,11 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
                editNodeDialog.setNodeName(selectedNode.getName());
                editNodeDialog.setNodeHostname(selectedNode.getHostname());
                editNodeDialog.setNodePort(selectedNode.getPort());
-               editNodeDialog.setNodeOnSameMachine(selectedNode.isSameMachine());
                editNodeDialog.setVisible(true);
                if (!editNodeDialog.wasCancelled()) {
                        selectedNode.setName(editNodeDialog.getNodeName());
                        selectedNode.setHostname(editNodeDialog.getNodeHostname());
                        selectedNode.setPort(editNodeDialog.getNodePort());
-                       selectedNode.setSameMachine(editNodeDialog.isNodeOnSameMachine());
                        nodeList.repaint();
                }
        }
@@ -271,14 +283,23 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
        private void deleteNodes() {
                Object[] selectedNodes = nodeList.getSelectedValues();
                for (Object node: selectedNodes) {
-                       nodeListModel.removeNode((Node) node);
+                       Node selectedNode = (Node) node;
+                       if (core.isNodeConnected(selectedNode)) {
+                               int response = JOptionPane.showConfirmDialog(this, I18n.get("manageNodesDialog.error.nodeConnected.message", selectedNode.getName()), I18n.get("manageNodesDialog.error.nodeConnected.title"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);
+                               if (response == JOptionPane.CANCEL_OPTION) {
+                                       break;
+                               } else if (response == JOptionPane.NO_OPTION) {
+                                       continue;
+                               }
+                       }
+                       nodeListModel.removeNode(selectedNode);
                }
                nodeList.clearSelection();
        }
 
        /**
         * Checks whether the list of nodes is not empty.
-        * 
+        *
         * @return <code>true</code> if there is at least one node defined,
         *         <code>false</code> otherwise
         */
@@ -325,9 +346,26 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
                deleteNodeAction.setEnabled(selectCount >= 1);
        }
 
+       //
+       // INTERFACE I18nable
+       //
+
+       /**
+        * {@inheritDoc}
+        */
+       public void updateI18n() {
+               okayAction.updateI18n();
+               cancelAction.updateI18n();
+               addNodeAction.updateI18n();
+               editNodeAction.updateI18n();
+               deleteNodeAction.updateI18n();
+               setTitle(I18n.get("manageNodesDialog.title") + " – jSite " + Version.getVersion());
+               SwingUtils.repackCentered(this);
+       }
+
        /**
         * List model for the {@link ManageNodesDialog#nodeList}. TODO
-        * 
+        *
         * @author David ‘Bombe’ Roden &lt;bombe@freenetproject.org&gt;
         * @version $Id$
         */
@@ -341,11 +379,12 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
                 * Creates a new node list model.
                 */
                public NodeListModel() {
+                       /* do nothing. */
                }
 
                /**
                 * Adds the given node to the list model.
-                * 
+                *
                 * @see Collection#add(Object)
                 * @param node
                 *            The node to add
@@ -357,7 +396,7 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
 
                /**
                 * Removes the given node from the list model.
-                * 
+                *
                 * @see Collection#remove(Object)
                 * @param node
                 *            The node to remove
@@ -370,7 +409,7 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
 
                /**
                 * Removes all nodes from the list model.
-                * 
+                *
                 * @see Collection#clear()
                 */
                public void clear() {