add virtual entries
[jSite2.git] / src / net / pterodactylus / jsite / gui / ManageNodesDialog.java
index 9d993a0..0598144 100644 (file)
@@ -22,13 +22,14 @@ package net.pterodactylus.jsite.gui;
 import java.awt.BorderLayout;
 import java.awt.FlowLayout;
 import java.awt.event.ActionEvent;
+import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.logging.Logger;
 
 import javax.swing.AbstractListModel;
-import javax.swing.Action;
 import javax.swing.BorderFactory;
 import javax.swing.JButton;
 import javax.swing.JDialog;
@@ -43,7 +44,11 @@ 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.i18n.gui.I18nLabel;
 import net.pterodactylus.jsite.main.Version;
+import net.pterodactylus.util.logging.Logging;
 import net.pterodactylus.util.swing.SwingUtils;
 
 /**
@@ -52,7 +57,11 @@ import net.pterodactylus.util.swing.SwingUtils;
  * @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 logger.  */
+       @SuppressWarnings("unused")
+       private static final Logger logger = Logging.getLogger(ManageNodesDialog.class.getName());
 
        /** The core. */
        private final Core core;
@@ -61,23 +70,26 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
        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;
 
+       /** The warning label. */
+       private I18nLabel immediatelyEffectiveLabel;
+
        /** The node list. */
        private JList nodeList;
 
@@ -97,6 +109,7 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
                initComponents();
                initDialogs();
                pack();
+               I18n.registerI18nable(this);
                SwingUtils.center(this);
        }
 
@@ -105,6 +118,15 @@ 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
@@ -120,7 +142,7 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
         *            The list of nodes
         */
        public void setNodeList(List<Node> nodeList) {
-               originalNodeList = nodeList;
+               originalNodeList = new ArrayList<Node>(nodeList);
                nodeListModel.clear();
                for (Node node: nodeList) {
                        nodeListModel.addNode(node);
@@ -207,6 +229,11 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
                rootPanel.add(contentPanel, BorderLayout.CENTER);
                contentPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), BorderFactory.createEmptyBorder(12, 12, 12, 12)));
 
+               JPanel warningPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 12, 12));
+               warningPanel.setBorder(BorderFactory.createEmptyBorder(-12, -12, -12, -12));
+               warningPanel.add(immediatelyEffectiveLabel = new I18nLabel("manageNodesDialog.label.immediatelyEffective"));
+               contentPanel.add(warningPanel, BorderLayout.PAGE_START);
+
                JPanel listButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 12, 12));
                contentPanel.add(listButtonPanel, BorderLayout.PAGE_END);
                listButtonPanel.setBorder(BorderFactory.createEmptyBorder(-12, -12, -12, -12));
@@ -236,17 +263,26 @@ 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();
                        newNode.setName(editNodeDialog.getNodeName());
                        newNode.setHostname(editNodeDialog.getNodeHostname());
                        newNode.setPort(editNodeDialog.getNodePort());
-                       nodeListModel.addNode(newNode);
+                       try {
+                               if (!core.addNode(newNode)) {
+                                       JOptionPane.showMessageDialog(this, I18n.get("manageNodesDialog.error.nodeAlreadyKnown.message", newNode.getHostname(), newNode.getPort()), I18n.get("manageNodesDialog.error.nodeAlreadyKnown.title"), JOptionPane.ERROR_MESSAGE);
+                               }
+                       } catch (UnknownHostException e) {
+                               /*
+                                * normally this shouldn't throw because the node editor catches
+                                * it.
+                                */
+                               JOptionPane.showMessageDialog(this, I18n.get("manageNodesDialog.error.nodeUnresolvable.message", newNode.getHostname()), I18n.get("manageNodesDialog.error.nodeUnresolvable.title"), JOptionPane.ERROR_MESSAGE);
+                       }
                }
        }
 
@@ -258,13 +294,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();
                }
        }
@@ -338,8 +372,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();
+               immediatelyEffectiveLabel.updateI18n();
+               setTitle(I18n.get("manageNodesDialog.title") + " – jSite " + Version.getVersion());
+               SwingUtils.repackCentered(this);
+       }
+
        /**
-        * List model for the {@link ManageNodesDialog#nodeList}. TODO
+        * List model for the {@link ManageNodesDialog#nodeList}.
         * 
         * @author David ‘Bombe’ Roden &lt;bombe@freenetproject.org&gt;
         * @version $Id$
@@ -354,6 +406,7 @@ public class ManageNodesDialog extends JDialog implements ListSelectionListener
                 * Creates a new node list model.
                 */
                public NodeListModel() {
+                       /* do nothing. */
                }
 
                /**