X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fgui%2FSwingInterface.java;h=eb5ff268670d893725568f3d313ab477cd401327;hb=0fb6af2eeecf591148346548855b4834ece81e18;hp=eb67d27f04eec6c477128a001f852b25e1fe29c1;hpb=0a77fd9c0956cb61a4b6daba377343949b575add;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/gui/SwingInterface.java b/src/net/pterodactylus/jsite/gui/SwingInterface.java index eb67d27..eb5ff26 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; @@ -91,8 +92,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 +101,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 +128,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 +271,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 +302,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 +530,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 +545,16 @@ public class SwingInterface implements CoreListener, LoggingListener, PropertyCh } languageActions.add(languageAction); } + addNodeAction = new I18nAction("mainWindow.menu.node.item.addNode") { + + /** + * {@inheritDoc} + */ + @SuppressWarnings("synthetic-access") + public void actionPerformed(ActionEvent actionEvent) { + addNode(); + } + }; helpAboutAction = new I18nAction("mainWindow.menu.help.item.about") { /** @@ -572,9 +601,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 +656,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 +880,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 +890,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 +901,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 +933,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 +943,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())); } @@ -889,6 +961,8 @@ 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")); 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,6 +973,8 @@ 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())); }