From 445bbb0ce1658eddb60602fa1ffbb1542958f19e Mon Sep 17 00:00:00 2001 From: Sebastien Vincent Date: Fri, 26 Nov 2010 15:54:56 +0000 Subject: [PATCH] STUN dialog configuration can be edited and changes are correctly reported to TableModel, also do not require username/password for a non-TURN server. --- .../jabberaccregwizz/IceConfigPanel.java | 116 +++++++++++++++--- 1 file changed, 99 insertions(+), 17 deletions(-) diff --git a/src/net/java/sip/communicator/plugin/jabberaccregwizz/IceConfigPanel.java b/src/net/java/sip/communicator/plugin/jabberaccregwizz/IceConfigPanel.java index 102c78a30..c13bb94d0 100644 --- a/src/net/java/sip/communicator/plugin/jabberaccregwizz/IceConfigPanel.java +++ b/src/net/java/sip/communicator/plugin/jabberaccregwizz/IceConfigPanel.java @@ -19,6 +19,8 @@ import net.java.sip.communicator.util.swing.*; /** + * ICE configuration panel. + * * @author Yana Stamcheva */ public class IceConfigPanel @@ -105,7 +107,7 @@ private Component createAdditionalServersComponent() { public void actionPerformed(ActionEvent e) { - StunConfigDialog stunDialog = new StunConfigDialog(); + StunConfigDialog stunDialog = new StunConfigDialog(false); stunDialog.setVisible(true); } @@ -117,6 +119,9 @@ public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) { + if(table.getSelectedRow() < 0) + return; + StunServerDescriptor stunServer = (StunServerDescriptor) tableModel.getValueAt( table.getSelectedRow(), 0); @@ -217,6 +222,11 @@ private class StunConfigDialog extends SIPCommDialog */ private JEditorPane errorMessagePane; + /** + * If the dialog is open via "edit" button. + */ + private final boolean isEditMode; + /** * Default STUN/TURN port. */ @@ -238,22 +248,33 @@ public StunConfigDialog(String address, String username, String password) { - this(); + this(true); addressField.setText(address); portField.setText(Integer.toString( port )); supportTurnCheckBox.setSelected(isSupportTurn); usernameField.setText(username); passwordField.setText(password); + + if(!isSupportTurn) + { + usernameField.setEnabled(false); + passwordField.setEnabled(false); + } } /** * Creates an empty dialog. + * + * @param editMode true if the dialog is in "edit" state, false means + * "add" state */ - public StunConfigDialog() + public StunConfigDialog(boolean editMode) { super(false); + this.isEditMode = editMode; + setTitle(Resources.getString( "plugin.jabberaccregwizz.ADD_STUN_SERVER")); @@ -290,7 +311,8 @@ public StunConfigDialog() portField.setInputVerifier(portVerifier); JButton addButton - = new JButton(Resources.getString("service.gui.ADD")); + = new JButton(Resources.getString(isEditMode ? + "service.gui.EDIT" : "service.gui.ADD")); JButton cancelButton = new JButton(Resources.getString("service.gui.CANCEL")); @@ -300,6 +322,7 @@ public void actionPerformed(ActionEvent e) { String address = addressField.getText(); String portStr = portField.getText(); + StunServerDescriptor stunServer = null; int port = -1; if(portStr != null && portStr.trim().length() > 0) @@ -313,13 +336,18 @@ public void actionPerformed(ActionEvent e) errorMessage = Resources.getString( "plugin.jabberaccregwizz.NO_STUN_ADDRESS"); - if (username == null || username.length() <= 0) + if ((username == null || username.length() <= 0) && + supportTurnCheckBox.isSelected()) errorMessage = Resources.getString( "plugin.jabberaccregwizz.NO_STUN_USERNAME"); - if (containsStunServer(address, port)) + stunServer = getStunServer(address, port); + + if(stunServer != null && !isEditMode) + { errorMessage = Resources.getString( "plugin.jabberaccregwizz.STUN_ALREADY_EXIST"); + } if (errorMessage != null) { @@ -327,12 +355,26 @@ public void actionPerformed(ActionEvent e) return; } - StunServerDescriptor stunServer = new StunServerDescriptor( - address, port, supportTurnCheckBox.isSelected(), - username, new String( password )); - - addStunServer(stunServer); + if(!isEditMode) + { + stunServer = new StunServerDescriptor( + address, port, supportTurnCheckBox.isSelected(), + username, new String( password )); + addStunServer(stunServer); + } + else + { + /* edit an existing STUN/TURN server */ + stunServer.setAddress(address); + stunServer.setPort(port); + stunServer.setTurnSupported( + supportTurnCheckBox.isSelected()); + stunServer.setUsername(username); + stunServer.setPassword(new String(password)); + + modifyStunServer(stunServer); + } dispose(); } }); @@ -345,6 +387,25 @@ public void actionPerformed(ActionEvent e) } }); + supportTurnCheckBox.addItemListener(new ItemListener() + { + public void itemStateChanged(ItemEvent evt) + { + if(evt.getStateChange() == ItemEvent.SELECTED) + { + /* show TURN user/password textfield */ + usernameField.setEnabled(true); + passwordField.setEnabled(true); + } + else + { + /* hide TURN user/password textfield */ + usernameField.setEnabled(false); + passwordField.setEnabled(false); + } + } + }); + TransparentPanel buttonsPanel = new TransparentPanel(new FlowLayout(FlowLayout.RIGHT)); buttonsPanel.add(addButton); @@ -608,6 +669,27 @@ void addStunServer(StunServerDescriptor stunServer) stunServer.isTurnSupported()}); } + /** + * Modify the given stunServer from the list of stun servers. + * + * @param stunServer the stun server to modify + */ + void modifyStunServer(StunServerDescriptor stunServer) + { + for (int i = 0; i < tableModel.getRowCount(); i++) + { + StunServerDescriptor server + = (StunServerDescriptor) tableModel.getValueAt(i, 0); + + if(stunServer == server) + { + tableModel.setValueAt(stunServer, i, 0); + tableModel.setValueAt(stunServer.isTurnSupported(), i, 1); + return; + } + } + } + /** * Indicates if a stun server with the given address and * port already exists in the additional stun servers table. @@ -615,11 +697,11 @@ void addStunServer(StunServerDescriptor stunServer) * @param address the STUN server address to check * @param port the STUN server port to check * - * @return true if a STUN server with the given address - * and port already exists in the table, otherwise returns - * false + * @return StunServerDescriptor if a STUN server with the given + * address and port already exists in the table, otherwise + * returns null */ - boolean containsStunServer(String address, int port) + StunServerDescriptor getStunServer(String address, int port) { for (int i = 0; i < tableModel.getRowCount(); i++) { @@ -628,9 +710,9 @@ boolean containsStunServer(String address, int port) if (stunServer.getAddress().equalsIgnoreCase(address) && stunServer.getPort() == port) - return true; + return stunServer; } - return false; + return null; } /**