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;
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;
/**
* @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;
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;
initComponents();
initDialogs();
pack();
+ I18n.registerI18nable(this);
SwingUtils.center(this);
}
//
/**
+ * 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
* 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);
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));
* 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);
+ }
}
}
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();
}
}
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 <bombe@freenetproject.org>
* @version $Id$
* Creates a new node list model.
*/
public NodeListModel() {
+ /* do nothing. */
}
/**