/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.plugin.jabberaccregwizz;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import net.java.sip.communicator.service.certificate.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.jabber.*;
import org.jitsi.util.*;
/**
*
* @author Yana Stamcheva
* @author Pawel Domas
*/
public class ConnectionPanel
extends TransparentPanel
implements ValidatingPanel
{
/**
* Serial version UID.
*/
private final static long serialVersionUID = 0L;
private final TransparentPanel mainPanel = new TransparentPanel();
private final JPanel advancedOpPanel
= new TransparentPanel(new BorderLayout(10, 10));
private final JPanel serverOpPanel
= new TransparentPanel(new BorderLayout(10, 10));
private final JPanel labelsAdvOpPanel
= new TransparentPanel(new GridLayout(0, 1, 10, 10));
private final JPanel valuesAdvOpPanel
= new TransparentPanel(new GridLayout(0, 1, 10, 10));
private final JCheckBox sendKeepAliveBox = new SIPCommCheckBox(
Resources.getString("plugin.jabberaccregwizz.ENABLE_KEEP_ALIVE"));
private final JCheckBox gmailNotificationsBox = new SIPCommCheckBox(
Resources.getString(
"plugin.jabberaccregwizz.ENABLE_GMAIL_NOTIFICATIONS"));
private final JCheckBox googleContactsBox = new SIPCommCheckBox(
Resources.getString(
"plugin.jabberaccregwizz.ENABLE_GOOGLE_CONTACTS_SOURCE"));
private final JLabel resourceLabel
= new JLabel(Resources.getString("plugin.jabberaccregwizz.RESOURCE"));
private final JTextField resourceField
= new JTextField(
JabberAccountID.getDefaultStr(
ProtocolProviderFactory.RESOURCE));
private final JLabel priorityLabel = new JLabel(
Resources.getString("plugin.jabberaccregwizz.PRIORITY"));
private final JTextField priorityField
= new JTextField(
JabberAccountID.getDefaultStr(
ProtocolProviderFactory.RESOURCE_PRIORITY));
private final JCheckBox serverAutoCheckBox = new SIPCommCheckBox(
Resources.getString(
"plugin.jabberaccregwizz.OVERRIDE_SERVER_DEFAULT_OPTIONS"),
JabberAccountID.getDefaultBool(
ProtocolProviderFactory.IS_SERVER_OVERRIDDEN));
private final JLabel serverLabel
= new JLabel(Resources.getString("plugin.jabberaccregwizz.SERVER"));
private final JTextField serverField = new JTextField();
private final JLabel portLabel
= new JLabel(Resources.getString("service.gui.PORT"));
private final JTextField portField
= new JTextField(
JabberAccountID.getDefaultStr(
ProtocolProviderFactory.SERVER_PORT));
private final JCheckBox autoGenerateResource = new SIPCommCheckBox(
Resources.getString("plugin.jabberaccregwizz.AUTORESOURCE"),
JabberAccountID.getDefaultBool(
ProtocolProviderFactory.AUTO_GENERATE_RESOURCE));
JCheckBox allowNonSecureBox = new SIPCommCheckBox(
Resources.getString("plugin.jabberaccregwizz.ALLOW_NON_SECURE"),
JabberAccountID.getDefaultBool(
ProtocolProviderFactory.IS_ALLOW_NON_SECURE));
private JComboBox dtmfMethodBox = new JComboBox(new Object []
{
Resources.getString(
"plugin.jabberaccregwizz.DTMF_AUTO"),
Resources.getString(
"plugin.sipaccregwizz.DTMF_RTP"),
Resources.getString(
"plugin.sipaccregwizz.DTMF_INBAND")
});
/**
* The text field used to change the DTMF minimal tone duration.
*/
private JTextField dtmfMinimalToneDurationValue = new JTextField();
private final JLabel certificateLabel = new JLabel(
Resources.getString("plugin.sipaccregwizz.CLIENT_CERTIFICATE"));
private final JComboBox certificate = new JComboBox();
private final JabberAccountRegistrationForm parentForm;
/**
* Creates an instance of ConnectionPanel by specifying the parent
* wizard, where it's contained.
* @param parentForm the parent form
*/
public ConnectionPanel(JabberAccountRegistrationForm parentForm)
{
super(new BorderLayout());
this.parentForm = parentForm;
parentForm.addValidatingPanel(this);
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
portField.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent evt)
{
}
public void insertUpdate(DocumentEvent evt)
{
setNextButtonAccordingToPortAndPriority();
}
public void removeUpdate(DocumentEvent evt)
{
setNextButtonAccordingToPortAndPriority();
}
});
priorityField.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent evt)
{
}
public void insertUpdate(DocumentEvent evt)
{
setNextButtonAccordingToPortAndPriority();
}
public void removeUpdate(DocumentEvent evt)
{
setNextButtonAccordingToPortAndPriority();
}
});
serverAutoCheckBox.addActionListener(new ActionListener()
{
/**
* Invoked when an action occurs.
*/
public void actionPerformed(ActionEvent e)
{
enablesServerAutoConfigure(serverAutoCheckBox.isSelected());
}
});
serverAutoCheckBox.setSelected(
parentForm.getRegistration().isServerOverridden());
enablesServerAutoConfigure(serverAutoCheckBox.isSelected());
labelsAdvOpPanel.add(serverLabel);
labelsAdvOpPanel.add(portLabel);
labelsAdvOpPanel.add(certificateLabel);
valuesAdvOpPanel.add(serverField);
valuesAdvOpPanel.add(portField);
valuesAdvOpPanel.add(certificate);
initCertificateAliases(null);
serverOpPanel.add(serverAutoCheckBox, BorderLayout.NORTH);
serverOpPanel.add(labelsAdvOpPanel, BorderLayout.WEST);
serverOpPanel.add(valuesAdvOpPanel, BorderLayout.CENTER);
serverOpPanel.setBorder(BorderFactory.createTitledBorder(
Resources.getString("plugin.jabberaccregwizz.SERVER_OPTIONS")));
JPanel checkBoxesPanel
= new TransparentPanel(new GridLayout(0, 1, 10, 10));
//checkBoxesPanel.add(sendKeepAliveBox);
checkBoxesPanel.add(gmailNotificationsBox);
checkBoxesPanel.add(googleContactsBox);
checkBoxesPanel.add(allowNonSecureBox);
final JPanel resourcePanel
= new TransparentPanel(new BorderLayout(10, 10));
resourcePanel.setBorder(BorderFactory.createTitledBorder(
Resources.getString("plugin.jabberaccregwizz.RESOURCE")));
resourcePanel.add(autoGenerateResource, BorderLayout.NORTH);
JPanel resSubPanelLabel =
new TransparentPanel(new GridLayout(0, 1, 10, 10));
JPanel resSubPanelValue =
new TransparentPanel(new GridLayout(0, 1, 10, 10));
resSubPanelLabel.add(resourceLabel);
resSubPanelLabel.add(priorityLabel);
resSubPanelValue.add(resourceField);
resSubPanelValue.add(priorityField);
resourcePanel.add(resSubPanelLabel, BorderLayout.WEST);
resourcePanel.add(resSubPanelValue, BorderLayout.CENTER);
// default for new account
googleContactsBox.setSelected(true);
advancedOpPanel.add(checkBoxesPanel, BorderLayout.NORTH);
advancedOpPanel.add(serverOpPanel, BorderLayout.CENTER);
advancedOpPanel.add(resourcePanel, BorderLayout.SOUTH);
if(autoGenerateResource.isSelected())
{
resourceField.setEnabled(false);
}
autoGenerateResource.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
resourceField.setEnabled(!autoGenerateResource.isSelected());
}
});
mainPanel.add(advancedOpPanel);
mainPanel.add(createDTMFPanel());
String serverAddress = parentForm.getServerAddress();
if (!StringUtils.isNullOrEmpty(serverAddress))
serverField.setText(serverAddress);
add(mainPanel, BorderLayout.NORTH);
}
/**
* Creates the DTMF panel.
* @return the created DTMF panel
*/
private Component createDTMFPanel()
{
JPanel emptyLabelPanel = new TransparentPanel();
// Labels.
JPanel dtmfLabels = new TransparentPanel(new GridLayout(0, 1, 5, 5));
JLabel dtmfMethodLabel = new JLabel(
Resources.getString("plugin.sipaccregwizz.DTMF_METHOD"));
JLabel minimalDTMFToneDurationLabel = new JLabel(
Resources.getString(
"plugin.sipaccregwizz.DTMF_MINIMAL_TONE_DURATION"));
dtmfLabels.add(dtmfMethodLabel);
dtmfLabels.add(minimalDTMFToneDurationLabel);
dtmfLabels.add(emptyLabelPanel);
// Values
JPanel dtmfValues = new TransparentPanel(new GridLayout(0, 1, 5, 5));
dtmfMethodBox.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
boolean isEnabled = false;
String selectedItem
= (String) dtmfMethodBox.getSelectedItem();
if (selectedItem != null
&& (selectedItem.equals(Resources.getString(
"plugin.sipaccregwizz.DTMF_AUTO"))
|| selectedItem.equals(Resources.getString(
"plugin.sipaccregwizz.DTMF_RTP")))
)
{
isEnabled = true;
}
dtmfMinimalToneDurationValue.setEnabled(isEnabled);
}
});
JLabel dtmfMinimalToneDurationExampleLabel = new JLabel(
Resources.getString(
"plugin.sipaccregwizz.DTMF_MINIMAL_TONE_DURATION_INFO"));
dtmfMinimalToneDurationExampleLabel.setForeground(Color.GRAY);
dtmfMinimalToneDurationExampleLabel.setFont(
dtmfMinimalToneDurationExampleLabel.getFont().deriveFont(8));
dtmfMinimalToneDurationExampleLabel.setMaximumSize(
new Dimension(40, 35));
dtmfMinimalToneDurationExampleLabel.setBorder(
BorderFactory.createEmptyBorder(0, 0, 8, 0));
dtmfValues.add(dtmfMethodBox);
dtmfValues.add(dtmfMinimalToneDurationValue);
dtmfValues.add(dtmfMinimalToneDurationExampleLabel);
// DTMF panel
JPanel dtmfPanel = new TransparentPanel(new BorderLayout(10, 10));
dtmfPanel.setBorder(BorderFactory.createTitledBorder(
Resources.getString("plugin.sipaccregwizz.DTMF")));
dtmfPanel.add(dtmfLabels, BorderLayout.WEST);
dtmfPanel.add(dtmfValues, BorderLayout.CENTER);
return dtmfPanel;
}
/**
* Returns the server address.
* @return the server address
*/
String getServerAddress()
{
return serverField.getText();
}
/**
* Sets the server address.
* @param serverAddress the server address
*/
void setServerAddress(String serverAddress)
{
serverField.setText(serverAddress);
}
/**
* Returns the server port.
* @return the server port
*/
String getServerPort()
{
return portField.getText();
}
/**
* Sets the server port.
* @param serverPort the server port
*/
void setServerPort(String serverPort)
{
portField.setText(serverPort);
}
/**
* Returns the resource.
* @return the resource
*/
String getResource()
{
return resourceField.getText();
}
/**
* Sets the resource field value.
* @param resource the resource to set
*/
void setResource(String resource)
{
resourceField.setText(resource);
}
/**
* Returns the priority field value.
* @return the priority field value
*/
String getPriority()
{
return priorityField.getText();
}
/**
* Sets the priority field value.
* @param priority the priority field value
*/
void setPriority(String priority)
{
priorityField.setText(priority);
}
/**
* Returns true if the "send keep alive" check box is selected,
* otherwise returns false.
* @return true if the "send keep alive" check box is selected,
* otherwise returns false
*/
boolean isSendKeepAlive()
{
return sendKeepAliveBox.isSelected();
}
/**
* Selects/unselects the "send keep alive" check box according to the given
* isSendKeepAlive property.
* @param isSendKeepAlive indicates if the "send keep alive" check box
* should be selected or not
*/
void setSendKeepAlive(boolean isSendKeepAlive)
{
sendKeepAliveBox.setSelected(isSendKeepAlive);
}
/**
* Returns true if the "gmail notifications" check box is selected,
* otherwise returns false.
* @return true if the "gmail notifications" check box is selected,
* otherwise returns false
*/
boolean isGmailNotificationsEnabled()
{
return gmailNotificationsBox.isSelected();
}
/**
* Selects/unselects the "gmail notifications" check box according to the
* given isEnabled property.
* @param isEnabled indicates if the "gmail notifications"
* check box should be selected or not
*/
void setGmailNotificationsEnabled(boolean isEnabled)
{
gmailNotificationsBox.setSelected(isEnabled);
}
/**
* Returns true if the "Google contacts" check box is selected,
* otherwise returns false.
* @return true if the "Google contacts" check box is selected,
* otherwise returns false
*/
boolean isGoogleContactsEnabled()
{
return googleContactsBox.isSelected();
}
/**
* Selects/unselects the "Google contacts" check box according to the
* given isEnabled property.
* @param isEnabled indicates if the "Google contacts"
* check box should be selected or not
*/
void setGoogleContactsEnabled(boolean isEnabled)
{
googleContactsBox.setSelected(isEnabled);
}
/**
* Disables Next Button if Port field value is incorrect
*/
private void setNextButtonAccordingToPortAndPriority()
{
try
{
Integer.parseInt(getServerPort());
Integer.parseInt(getPriority());
parentForm.reValidateInput();
}
catch (NumberFormatException ex)
{
parentForm.reValidateInput();
}
}
/**
* Whether current inserted values into the panel are valid and enough
* to continue with account creation/modification.
* Checks whether proxy field values are ok to continue with
* account creating.
*
* @return whether the input values are ok to continue with account
* creation/modification.
*/
public boolean isValidated()
{
return true;
}
/**
* Set auto generate resource value.
* Set checkbox state.
* @param value the new value.
*/
void setAutogenerateResource(boolean value)
{
autoGenerateResource.setSelected(value);
resourceField.setEnabled(!value);
}
/**
* Is resource auto generate enabled. Returns checkbox state.
* @return is resource auto generate enabled.
*/
boolean isAutogenerateResourceEnabled()
{
return autoGenerateResource.isSelected();
}
/**
* Set allow non secure value.
* @param value the new value.
*/
void setAllowNonSecure(boolean value)
{
this.allowNonSecureBox.setSelected(value);
}
/**
* Is non-TLS allowed.
* @return is non-TLS allowed
*/
boolean isAllowNonSecure()
{
return allowNonSecureBox.isSelected();
}
/**
* Returns the DTMF method.
* @return the DTMF method
*/
String getDTMFMethod()
{
Object selItem = dtmfMethodBox.getSelectedItem();
// By default sets DTMF mezthod to auto.
if(selItem == null)
{
return null;
}
String selString = selItem.toString();
if(selString.equals(
Resources.getString("plugin.sipaccregwizz.DTMF_RTP")))
{
return "RTP_DTMF";
}
else if(selString.equals(
Resources.getString("plugin.sipaccregwizz.DTMF_INBAND")))
{
return "INBAND_DTMF";
}
else
{
return "AUTO_DTMF";
}
}
/**
* Sets the DTMF method.
* @param dtmfMethod the DTMF method
*/
void setDTMFMethod(String dtmfMethod)
{
if(dtmfMethod == null)
{
dtmfMethodBox.setSelectedItem(0);
}
else
{
String selString;
if(dtmfMethod.equals("RTP_DTMF"))
{
selString =
Resources.getString("plugin.sipaccregwizz.DTMF_RTP");
}
else if(dtmfMethod.equals("INBAND_DTMF"))
{
selString =
Resources.getString("plugin.sipaccregwizz.DTMF_INBAND");
}
else
{
selString =
Resources.getString("plugin.jabberaccregwizz.DTMF_AUTO");
}
dtmfMethodBox.setSelectedItem(selString);
}
}
/**
* Returns the minimal DTMF tone duration.
*
* @return The minimal DTMF tone duration.
*/
String getDtmfMinimalToneDuration()
{
return dtmfMinimalToneDurationValue.getText();
}
/**
* Sets the minimal DTMF tone duration
*
* @param dtmfMinimalToneDuration
*/
void setDtmfMinimalToneDuration(String dtmfMinimalToneDuration)
{
dtmfMinimalToneDurationValue.setText(dtmfMinimalToneDuration);
}
/**
* Sets the serverOverridden property.
* @param isServerOverridden true to indicate that the server is
* overridden, false - otherwise
*/
void setServerOverridden(boolean isServerOverridden)
{
this.serverAutoCheckBox.setSelected(isServerOverridden);
enablesServerAutoConfigure(serverAutoCheckBox.isSelected());
}
/**
* Return isServerOverridden property.
* @return isServerOverridden property.
*/
boolean isServerOverridden()
{
return this.serverAutoCheckBox.isSelected();
}
/**
* Enables/disables the proxy auto-configuration.
* @param isEnable true to enable proxy auto-configuration,
* false - otherwise
*/
void enablesServerAutoConfigure(boolean isEnable)
{
serverAutoCheckBox.setSelected(isEnable);
serverField.setEnabled(isEnable);
portField.setEnabled(isEnable);
parentForm.reValidateInput();
}
/**
* Sets the client TLS certificate ID.
* @param certificateId The ID of the TLS certificate to use or
* null if none should be selected.
*/
public void setClientTlsCertificateId(String certificateId)
{
initCertificateAliases(certificateId);
}
/**
* Gets the ID of the selected client TLS certificate or null if no
* certificate is selected.
*
* @return the ID of the selected client TLS certificate or null if
* no certificate is selected.
*/
String getClientTlsCertificateId()
{
if(certificate.getSelectedItem() != null
&& certificate.getSelectedItem() instanceof CertificateConfigEntry)
return ((CertificateConfigEntry)certificate.getSelectedItem())
.getId();
return null;
}
/**
* Initializes the certificate combo box with certificate names
*
* @param id ID of the selected certificate
* (can be null if no certificate is selected).
*/
private void initCertificateAliases(String id)
{
certificate.removeAllItems();
certificate.insertItemAt(
Resources.getString("plugin.sipaccregwizz.NO_CERTIFICATE"), 0);
certificate.setSelectedIndex(0);
for(CertificateConfigEntry e : JabberAccRegWizzActivator
.getCertificateService().getClientAuthCertificateConfigs())
{
certificate.addItem(e);
if(e.getId().equals(id))
certificate.setSelectedItem(e);
}
}
}