/*
- * jSite-0.7 -
+ * jSite-0.7 -
* Copyright (C) 2006 David Roden
*
* This program is free software; you can redistribute it and/or modify
/**
* Wizard page that lets the user edit his nodes.
- *
+ *
* @author David ‘Bombe’ Roden <bombe@freenetproject.org>
*/
public class NodeManagerPage extends TWizardPage implements ListSelectionListener, DocumentListener, ChangeListener {
/**
* Creates a new node manager wizard page.
- *
+ *
* @param wizard
* The wizard this page belongs to
*/
/**
* Adds a listener for node manager events.
- *
+ *
* @param nodeManagerListener
* The listener to add
*/
/**
* Removes a listener for node manager events.
- *
+ *
* @param nodeManagerListener
* The listener to remove
*/
/**
* Notifies all listeners that the node configuration has changed.
- *
+ *
* @param nodes
* The new list of nodes
*/
}
/**
+ * Notifies all listeners that a new node was selected.
+ *
+ * @param node
+ * The newly selected node
+ */
+ protected void fireNodeSelected(Node node) {
+ for (NodeManagerListener nodeManagerListener : nodeManagerListeners) {
+ nodeManagerListener.nodeSelected(node);
+ }
+ }
+
+ /**
* Creates all actions.
*/
private void createActions() {
/**
* Sets the node list.
- *
+ *
* @param nodes
* The list of nodes
*/
/**
* Returns the node list.
- *
+ *
* @return The list of nodes
*/
public Node[] getNodes() {
/**
* Returns the currently selected node.
- *
+ *
* @return The selected node, or <code>null</code> if no node is selected
*/
private Node getSelectedNode() {
/**
* Updates node name or hostname when the user types into the textfields.
- *
+ *
* @see #insertUpdate(DocumentEvent)
* @see #removeUpdate(DocumentEvent)
* @see #changedUpdate(DocumentEvent)
private void addNode() {
Node node = new Node("localhost", 9481, I18n.getMessage("jsite.node-manager.new-node"));
nodeListModel.addElement(node);
+ deleteNodeAction.setEnabled(nodeListModel.size() > 1);
wizard.setNextEnabled(true);
fireNodesUpdated(getNodes());
}
if (JOptionPane.showConfirmDialog(wizard, I18n.getMessage("jsite.node-manager.delete-node.warning"), null, JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.CANCEL_OPTION) {
return;
}
+ int nodeIndex = nodeListModel.indexOf(node);
nodeListModel.removeElement(node);
nodeList.repaint();
+ fireNodeSelected((Node) nodeListModel.get(Math.min(nodeIndex, nodeListModel.size() - 1)));
fireNodesUpdated(getNodes());
+ deleteNodeAction.setEnabled(nodeListModel.size() > 1);
wizard.setNextEnabled(nodeListModel.size() > 0);
}
/**
* {@inheritDoc}
*/
+ @SuppressWarnings("null")
public void valueChanged(ListSelectionEvent e) {
Object source = e.getSource();
if (source instanceof JList) {
nodeNameTextField.setEnabled(enabled);
nodeHostnameTextField.setEnabled(enabled);
nodePortSpinner.setEnabled(enabled);
- deleteNodeAction.setEnabled(enabled);
+ deleteNodeAction.setEnabled(enabled && (nodeListModel.size() > 1));
if (enabled) {
nodeNameTextField.setText(node.getName());
nodeHostnameTextField.setText(node.getHostname());