X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fgui%2FSwingInterface.java;h=2f13df6416075140661c7b15b87c8b156a2c3ab6;hb=2357d27038c4dc266052fd9a07dad5eb24d8760d;hp=eb67d27f04eec6c477128a001f852b25e1fe29c1;hpb=5b9ae5a755e76b81e20fdc9e1d5a592540b02f12;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/gui/SwingInterface.java b/src/net/pterodactylus/jsite/gui/SwingInterface.java index eb67d27..2f13df6 100644 --- a/src/net/pterodactylus/jsite/gui/SwingInterface.java +++ b/src/net/pterodactylus/jsite/gui/SwingInterface.java @@ -26,6 +26,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Collections; import java.util.Date; @@ -60,7 +61,6 @@ import net.pterodactylus.util.logging.LoggingListener; * The Swing user interface. * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> - * @version $Id$ */ public class SwingInterface implements CoreListener, LoggingListener, PropertyChangeListener { @@ -91,8 +91,8 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh /** The “quit” action. */ private I18nAction quitAction; - /** The “manage nodes” action. */ - private I18nAction manageNodesAction; + /** The “add node” action. */ + private I18nAction addNodeAction; /** All node menu items. */ private Map nodeConnectActions = Collections.synchronizedMap(new HashMap()); @@ -100,8 +100,11 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh /** All node disconnect actions. */ private Map nodeDisconnectActions = Collections.synchronizedMap(new HashMap()); - /** The node manager dialog. */ - private ManageNodesDialog manageNodesDialog; + /** All node edit actions. */ + private Map nodeEditActions = Collections.synchronizedMap(new HashMap()); + + /** All node removal actions. */ + private Map nodeDeleteActions = Collections.synchronizedMap(new HashMap()); /** All lanugage menu items. */ private List languageActions = new ArrayList(); @@ -124,6 +127,9 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh /** The configuration dialog. */ private ConfigurationDialog configurationDialog; + /** The node editor dialog. */ + private EditNodeDialog editNodeDialog; + /** The list of all defined nodes. */ private List nodeList = Collections.synchronizedList(new ArrayList()); @@ -264,12 +270,12 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh } /** - * Returns the “manage nodes” action. + * Returns the “add node” action. * - * @return The “manage nodes” action + * @return The “add node” action */ - I18nAction getManageNodesAction() { - return manageNodesAction; + I18nAction getAddNodeAction() { + return addNodeAction; } /** @@ -295,6 +301,28 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh } /** + * Returns the “edit node” action for the given node. + * + * @param node + * The node to edit + * @return The “edit node” action + */ + I18nAction getNodeEditAction(Node node) { + return nodeEditActions.get(node); + } + + /** + * Returns the “delete node” action for the given node. + * + * @param node + * The node to delete + * @return The “delete node” action + */ + I18nAction getNodeDeleteAction(Node node) { + return nodeDeleteActions.get(node); + } + + /** * Returns all language actions. * * @return All language actions @@ -501,16 +529,6 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh quit(); } }; - manageNodesAction = new I18nAction("mainWindow.menu.node.item.manageNodes") { - - /** - * {@inheritDoc} - */ - @SuppressWarnings("synthetic-access") - public void actionPerformed(ActionEvent actionEvent) { - manageNodes(); - } - }; List availableLanguages = I18n.findAvailableLanguages(); for (final Locale locale: availableLanguages) { I18nAction languageAction = new I18nAction("general.language." + locale.getLanguage()) { @@ -526,6 +544,16 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh } languageActions.add(languageAction); } + addNodeAction = new I18nAction("mainWindow.menu.node.item.addNode", IconLoader.loadIcon("/node-new.png")) { + + /** + * {@inheritDoc} + */ + @SuppressWarnings("synthetic-access") + public void actionPerformed(ActionEvent actionEvent) { + addNode(); + } + }; helpAboutAction = new I18nAction("mainWindow.menu.help.item.about") { /** @@ -572,9 +600,9 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh * Initializes all child dialogs. */ private void initDialogs() { - manageNodesDialog = new ManageNodesDialog(this); aboutDialog = new AboutDialog(this); configurationDialog = new ConfigurationDialog(this); + editNodeDialog = new EditNodeDialog(mainWindow); } // @@ -627,38 +655,58 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh } /** - * Pops up the “manage nodes” dialog. + * Adds a node. */ - private void manageNodes() { - if (advancedMode) { - manageNodesDialog.setNodeList(nodeList); - manageNodesDialog.setVisible(true); - nodeList = manageNodesDialog.getNodeList(); - /* TODO - notify main window of changes */ - } else { - if (nodeList.isEmpty()) { - Node newNode = new Node(); - newNode.setName(I18n.get("general.defaultNode.name")); - newNode.setHostname("localhost"); - newNode.setPort(9481); - nodeList.add(newNode); - } - Node firstNode = nodeList.get(0); - EditNodeDialog editNodeDialog = manageNodesDialog.getEditNodeDialog(); - editNodeDialog.setNodeName(firstNode.getName()); - editNodeDialog.setNodeHostname(firstNode.getHostname()); - editNodeDialog.setNodePort(firstNode.getPort()); - editNodeDialog.setVisible(true); - if (!editNodeDialog.wasCancelled()) { - firstNode.setName(editNodeDialog.getNodeName()); - firstNode.setHostname(editNodeDialog.getNodeHostname()); - firstNode.setPort(editNodeDialog.getNodePort()); - /* TODO - give to core. */ + private void addNode() { + editNodeDialog.setNodeName(I18n.get(nodeList.isEmpty() ? "general.defaultNode.name" : "general.newNode.name")); + editNodeDialog.setNodeHostname("localhost"); + editNodeDialog.setNodePort(9481); + editNodeDialog.setVisible(true); + if (!editNodeDialog.wasCancelled()) { + Node newNode = new Node(); + newNode.setName(editNodeDialog.getNodeName()); + newNode.setHostname(editNodeDialog.getNodeHostname()); + newNode.setPort(editNodeDialog.getNodePort()); + try { + core.addNode(newNode); + } catch (UnknownHostException e) { + JOptionPane.showMessageDialog(mainWindow, I18n.get("mainWindow.error.hostnameUnresolvable.message"), I18n.get("mainWindow.error.hostnameUnresolvable.title"), JOptionPane.ERROR_MESSAGE); } } } /** + * Edits the given node. + * + * @param node + * The node to edit + */ + private void editNode(Node node) { + editNodeDialog.setNodeName(node.getName()); + editNodeDialog.setNodeHostname(node.getHostname()); + editNodeDialog.setNodePort(node.getPort()); + editNodeDialog.setVisible(true); + if (!editNodeDialog.wasCancelled()) { + node.setName(editNodeDialog.getNodeName()); + node.setHostname(editNodeDialog.getNodeHostname()); + node.setPort(editNodeDialog.getNodePort()); + } + } + + /** + * Deletes the given node. + * + * @param node + * The node to delete + */ + private void deleteNode(Node node) { + int option = JOptionPane.showConfirmDialog(mainWindow, I18n.get("mainWindow.question.deleteNode.message", node.getName()), I18n.get("mainWindow.question.deleteNode.title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); + if (option == JOptionPane.OK_OPTION) { + core.removeNode(node); + } + } + + /** * Connects to the node. * * @param node @@ -831,8 +879,7 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh nodeList.add(node); node.addPropertyChangeListener(this); logger.log(Level.FINE, "nodeList.size(): " + nodeList.size()); - manageNodesDialog.setNodeList(nodeList); - nodeConnectActions.put(node, new I18nAction("mainWindow.menu.connect") { + nodeConnectActions.put(node, new I18nAction("mainWindow.menu.node.item.connect") { /** * {@inheritDoc} @@ -842,7 +889,7 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh nodeConnect(node); } }); - nodeDisconnectActions.put(node, new I18nAction("mainWindow.menu.disconnect") { + nodeDisconnectActions.put(node, new I18nAction("mainWindow.menu.node.item.disconnect") { /** * {@inheritDoc} @@ -853,6 +900,26 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh } }); nodeDisconnectActions.get(node).setEnabled(false); + nodeEditActions.put(node, new I18nAction("mainWindow.menu.node.item.edit") { + + /** + * {@inheritDoc} + */ + @SuppressWarnings("synthetic-access") + public void actionPerformed(ActionEvent actionEvent) { + editNode(node); + } + }); + nodeDeleteActions.put(node, new I18nAction("mainWindow.menu.node.item.remove") { + + /** + * {@inheritDoc} + */ + @SuppressWarnings("synthetic-access") + public void actionPerformed(ActionEvent actionEvent) { + deleteNode(node); + } + }); mainWindow.addNode(node); } @@ -865,6 +932,8 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh node.removePropertyChangeListener(this); nodeConnectActions.remove(node); nodeDisconnectActions.remove(node); + nodeEditActions.remove(node); + nodeDeleteActions.remove(node); mainWindow.removeNode(node); } @@ -873,6 +942,8 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh */ public void nodeConnecting(Node node) { nodeConnectActions.get(node).setEnabled(false); + nodeEditActions.get(node).setEnabled(false); + nodeDeleteActions.get(node).setEnabled(false); mainWindow.setStatusBarText(I18n.get("mainWindow.statusBar.connectingToNode", node.getName(), node.getHostname(), node.getPort())); } @@ -882,6 +953,7 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh public void nodeConnected(Node node) { nodeDisconnectActions.get(node).setEnabled(true); mainWindow.setStatusBarText(I18n.get("mainWindow.statusBar.connectedToNode", node.getName(), node.getHostname(), node.getPort())); + mainWindow.setOnline(node); } /** @@ -889,7 +961,10 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh */ public void nodeConnectionFailed(Node node, Throwable cause) { nodeConnectActions.get(node).setEnabled(true); + nodeEditActions.get(node).setEnabled(true); + nodeDeleteActions.get(node).setEnabled(true); mainWindow.setStatusBarText(I18n.get("mainWindow.statusBar.connectionToNodeFailed", node.getName(), node.getHostname(), node.getPort(), (cause != null) ? cause.getMessage() : "no reason given")); + mainWindow.setError(node); JOptionPane.showMessageDialog(mainWindow, I18n.get("mainWindow.error.nodeConnectionFailed.message", node.getName(), node.getHostname(), node.getPort(), (cause != null) ? cause.getMessage() : "no reason given"), I18n.get("mainWindow.error.nodeConnectionFailed.title"), JOptionPane.ERROR_MESSAGE); } @@ -899,7 +974,10 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh public void nodeDisconnected(Node node, Throwable throwable) { nodeDisconnectActions.get(node).setEnabled(false); nodeConnectActions.get(node).setEnabled(true); + nodeEditActions.get(node).setEnabled(true); + nodeDeleteActions.get(node).setEnabled(true); mainWindow.setStatusBarText(I18n.get("mainWindow.statusBar.disconnectedFromNode", node.getName(), node.getHostname(), node.getPort())); + mainWindow.setOffline(node); } /**