/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.java.sip.communicator.plugin.sipaccregwizz;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.sip.*;
/**
* The PresencePanel is the one containing presence information.
*
* @author Yana Stamcheva
* @author Grigorii Balutsel
* @author Damian Minkov
*/
public class PresencePanel
extends TransparentPanel
implements ActionListener
{
/**
* Serial version UID.
*/
private static final long serialVersionUID = 0L;
private JPanel presenceOpPanel
= new TransparentPanel(new BorderLayout(10, 10));
private JPanel buttonsPresOpPanel =
new TransparentPanel(new GridLayout(0, 1, 10, 10));
private JPanel labelsPresOpPanel
= new TransparentPanel(new GridLayout(0, 1, 10, 10));
private JPanel valuesPresOpPanel
= new TransparentPanel(new GridLayout(0, 1, 10, 10));
private final JCheckBox enablePresOpButton;
private final JCheckBox forceP2PPresOpButton;
private JLabel pollPeriodLabel = new JLabel(
Resources.getString(
"plugin.sipaccregwizz.OFFLINE_CONTACT_POLLING_PERIOD"));
private JLabel subscribeExpiresLabel = new JLabel(
Resources.getString("plugin.sipaccregwizz.SUBSCRIPTION_EXPIRATION"));
private JTextField pollPeriodField
= new JTextField(SipAccountID.getDefaultStr(
ProtocolProviderFactory.POLLING_PERIOD));
private JTextField subscribeExpiresField
= new JTextField(SipAccountID.getDefaultStr(
ProtocolProviderFactory.SUBSCRIPTION_EXPIRATION));
private JTextField clistOptionServerUriValue = new JTextField();
private JTextField clistOptionUserValue = new JTextField();
private JPasswordField clistOptionPasswordValue = new JPasswordField();
private final JCheckBox clistOptionUseSipCredentialsBox;
private String[] contactlistOptions = new String[]
{ "Local", "XCAP", "XiVO" };
private JComboBox contactlistOptionsCombo = new JComboBox(
contactlistOptions);
/**
* Creates an instance of PresencePanel.
* @param regform the parent registration form
*/
public PresencePanel(SIPAccountRegistrationForm regform)
{
super(new BorderLayout(10, 10));
JPanel mainPanel = new TransparentPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
this.enablePresOpButton = new SIPCommCheckBox(
Resources.getString("plugin.sipaccregwizz.ENABLE_PRESENCE"),
regform.getRegistration().isEnablePresence());
this.forceP2PPresOpButton = new SIPCommCheckBox(
Resources.getString("plugin.sipaccregwizz.FORCE_P2P_PRESENCE"),
regform.getRegistration().isForceP2PMode());
this.clistOptionUseSipCredentialsBox = new SIPCommCheckBox(
Resources.getString("plugin.sipaccregwizz.XCAP_USE_SIP_CREDENTIALS"),
regform.getRegistration().isClistOptionUseSipCredentials());
if(regform.getRegistration().isXCapEnable())
this.clistOptionServerUriValue.setText(
regform.getRegistration().getClistOptionServerUri());
enablePresOpButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
// Perform action
JCheckBox cb = (JCheckBox) evt.getSource();
setPresenceOptionsEnabled(cb.isSelected());
}
});
labelsPresOpPanel.add(pollPeriodLabel);
labelsPresOpPanel.add(subscribeExpiresLabel);
valuesPresOpPanel.add(pollPeriodField);
valuesPresOpPanel.add(subscribeExpiresField);
buttonsPresOpPanel.add(enablePresOpButton);
buttonsPresOpPanel.add(forceP2PPresOpButton);
presenceOpPanel.add(buttonsPresOpPanel, BorderLayout.NORTH);
presenceOpPanel.add(labelsPresOpPanel, BorderLayout.WEST);
presenceOpPanel.add(valuesPresOpPanel, BorderLayout.CENTER);
presenceOpPanel.setBorder(BorderFactory.createTitledBorder(
Resources.getString("plugin.sipaccregwizz.PRESENCE_OPTIONS")));
clistOptionUseSipCredentialsBox.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
JCheckBox checkBox = (JCheckBox) evt.getSource();
setClistOptionUseSipCredentialsEnabled(checkBox.isSelected());
}
});
JPanel xCapServerUriPanel
= new TransparentPanel(new BorderLayout());
xCapServerUriPanel.add(
new JLabel(
Resources.getString("plugin.sipaccregwizz.XCAP_SERVER_URI")),
BorderLayout.WEST);
xCapServerUriPanel.add(clistOptionServerUriValue, BorderLayout.CENTER);
String xcapUri = regform.getRegistration().getClistOptionServerUri();
if (xcapUri != null)
clistOptionServerUriValue.setText(xcapUri);
JPanel xCapPanel
= new TransparentPanel(new BorderLayout(5, 5));
JPanel xCapButtonsPanel = new TransparentPanel();
xCapButtonsPanel.setLayout(
new BoxLayout(xCapButtonsPanel, BoxLayout.Y_AXIS));
JPanel xCapCredentialsLabelsPanel
= new TransparentPanel(new GridLayout(0, 1, 0, 0));
JPanel xCapCredentialsValuesPanel
= new TransparentPanel(new GridLayout(0, 1, 0, 0));
JPanel contactlistTypePanel
= new TransparentPanel(new FlowLayout(FlowLayout.LEFT));
contactlistTypePanel.add(new JLabel(
Resources.getString("plugin.sipaccregwizz.CLIST_TYPE")));
contactlistTypePanel.add(contactlistOptionsCombo);
contactlistOptionsCombo.addActionListener(this);
if(regform.getRegistration().isXCapEnable())
{
setXCapEnable(true);
}
else if(regform.getRegistration().isXiVOEnable())
{
setXiVOEnable(true);
}
updateContactListPanel();
xCapServerUriPanel.setBorder(
BorderFactory.createEmptyBorder(0, 16, 0, 0));
xCapButtonsPanel.add(contactlistTypePanel);
xCapButtonsPanel.add(xCapServerUriPanel);
JPanel credPanel = new TransparentPanel(new BorderLayout());
credPanel.add(clistOptionUseSipCredentialsBox, BorderLayout.WEST);
credPanel.setBorder(
BorderFactory.createEmptyBorder(0, 7, 0, 0));
xCapButtonsPanel.add(credPanel);
xCapCredentialsLabelsPanel.add(new JLabel(
Resources.getString("plugin.sipaccregwizz.XCAP_USER")));
xCapCredentialsLabelsPanel.add(new JLabel(
Resources.getString("plugin.sipaccregwizz.XCAP_PASSWORD")));
xCapCredentialsValuesPanel.add(clistOptionUserValue);
xCapCredentialsValuesPanel.add(clistOptionPasswordValue);
xCapCredentialsLabelsPanel.setBorder(
BorderFactory.createEmptyBorder(0, 16, 0, 0));
xCapPanel.add(xCapButtonsPanel, BorderLayout.NORTH);
xCapPanel.add(xCapCredentialsLabelsPanel, BorderLayout.WEST);
xCapPanel.add(xCapCredentialsValuesPanel, BorderLayout.CENTER);
xCapPanel.setBorder(BorderFactory.createTitledBorder(
Resources.getString("plugin.sipaccregwizz.XCAP_OPTIONS")));
mainPanel.add(presenceOpPanel);
mainPanel.add(xCapPanel);
this.add(mainPanel, BorderLayout.NORTH);
}
/**
* Enables or disable all presence related options.
*
* @param isEnabled true
to enable the presence related
* options, false
- to disable them.
*/
void setPresenceOptionsEnabled(boolean isEnabled)
{
forceP2PPresOpButton.setEnabled(isEnabled);
pollPeriodField.setEnabled(isEnabled);
subscribeExpiresField.setEnabled(isEnabled);
}
/**
* Enables or disable contact list credentials related options.
*
* @param isEnabled true
to enable the credentials related
* options, false
- to disable them.
*/
void setClistOptionUseSipCredentialsEnabled(boolean isEnabled)
{
clistOptionUserValue.setEnabled(!isEnabled);
clistOptionPasswordValue.setEnabled(!isEnabled);
}
/**
* Enables or disable contact list related options.
*
* @param isEnabled true
to enable the clist options related
* options, false
- to disable them.
*/
void setClistOptionEnableEnabled(boolean isEnabled)
{
clistOptionUseSipCredentialsBox.setEnabled(isEnabled);
clistOptionServerUriValue.setEnabled(isEnabled);
if(isEnabled)
{
setClistOptionUseSipCredentialsEnabled(
clistOptionUseSipCredentialsBox.isSelected());
}
else
{
setClistOptionUseSipCredentialsEnabled(true);
}
}
/**
* Indicates if the presence is enabled.
*
* @return true if the presence is enabled, false -
* otherwise
*/
boolean isPresenceEnabled()
{
return enablePresOpButton.isSelected();
}
/**
* Enables/disables the presence.
*
* @param isPresenceEnabled true to enable the presence,
* false - otherwise
*/
void setPresenceEnabled(boolean isPresenceEnabled)
{
enablePresOpButton.setSelected(isPresenceEnabled);
}
/**
* Indicates if the peer-to-peer presence mode is selected.
*
* @return true if the peer-to-peer presence mode is selected,
* false - otherwise.
*/
boolean isForcePeerToPeerMode()
{
return forceP2PPresOpButton.isSelected();
}
/**
* Enables/disables the peer-to-peer presence mode.
*
* @param forceP2P true to select the peer-to-peer presence mode,
* false - otherwise.
*/
void setForcePeerToPeerMode(boolean forceP2P)
{
forceP2PPresOpButton.setSelected(forceP2P);
}
/**
* Returns the poll period.
*
* @return the poll period
*/
String getPollPeriod()
{
return pollPeriodField.getText();
}
/**
* Sets the poll period.
*
* @param pollPeriod the poll period
*/
void setPollPeriod(String pollPeriod)
{
pollPeriodField.setText(pollPeriod);
}
/**
* Returns the subscription expiration information.
*
* @return the subscription expiration information
*/
String getSubscriptionExpiration()
{
return subscribeExpiresField.getText();
}
/**
* Sets the subscription expiration information.
*
* @param subscExp the subscription expiration information
*/
void setSubscriptionExpiration(String subscExp)
{
subscribeExpiresField.setText(subscExp);
}
/**
* Indicates if XCAP has to use its capabilities.
*
* @return true if XCAP has to use its capabilities,
* false - otherwise.
*/
boolean isXCapEnable()
{
Object o = contactlistOptionsCombo.getSelectedItem();
if(o != null && o.equals(contactlistOptions[1]))
return true;
return false;
}
/**
* Sets if has to use its capabilities.
*
* @param xCapEnable if has to use its capabilities.
*/
void setXCapEnable(boolean xCapEnable)
{
if(xCapEnable)
{
contactlistOptionsCombo.setSelectedItem(contactlistOptions[1]);
updateContactListPanel();
}
}
/**
* Indicates if XCAP has to use its capabilities.
*
* @return true if XCAP has to use its capabilities,
* false - otherwise.
*/
boolean isXiVOEnable()
{
Object o = contactlistOptionsCombo.getSelectedItem();
if(o != null && o.equals(contactlistOptions[2]))
return true;
return false;
}
/**
* Sets if has to use its capabilities.
*
* @param xivoEnable if has to use its capabilities.
*/
void setXiVOEnable(boolean xivoEnable)
{
if(xivoEnable)
{
contactlistOptionsCombo.setSelectedItem(contactlistOptions[2]);
updateContactListPanel();
}
}
/**
* Indicates if contact list has to use SIP account credentials.
*
* @return true if contact list has to use SIP account credentials,
* false - otherwise.
*/
boolean isClistOptionUseSipCredentials()
{
return clistOptionUseSipCredentialsBox.isSelected();
}
/**
* Sets if contact list has to use SIP account credentials.
*
* @param clistOptionUseSipCredentials if contact list
* has to use SIP account credentials.
*/
void setClistOptionUseSipCredentials(boolean clistOptionUseSipCredentials)
{
clistOptionUseSipCredentialsBox.setSelected(
clistOptionUseSipCredentials);
}
/**
* Gets the contact list server uri.
*
* @return the contact list server uri.
*/
String getClistOptionServerUri()
{
return clistOptionServerUriValue.getText();
}
/**
* Sets the contact list server uri.
*
* @param xCapServerUri the contact list server uri.
*/
void setClistOptionServerUri(String xCapServerUri)
{
clistOptionServerUriValue.setText(xCapServerUri);
}
/**
* Gets the contact list user.
*
* @return the contact list user.
*/
String getClistOptionUser()
{
return clistOptionUserValue.getText();
}
/**
* Sets the contact list user.
*
* @param clistOptionUser the contact list user.
*/
void setClistOptionUser(String clistOptionUser)
{
clistOptionUserValue.setText(clistOptionUser);
}
/**
* Gets the contact list password.
*
* @return the contact list password.
*/
char[] getClistOptionPassword()
{
return clistOptionPasswordValue.getPassword();
}
/**
* Sets the contact list password.
*
* @param xCapPassword the contact list password.
*/
void setClistOptionPassword(String xCapPassword)
{
clistOptionPasswordValue.setText(xCapPassword);
}
public void actionPerformed(ActionEvent actionEvent)
{
updateContactListPanel();
}
/**
* Updates panel states.
*/
private void updateContactListPanel()
{
Object obj = contactlistOptionsCombo.getSelectedItem();
if(obj == null || obj.equals(contactlistOptions[0]))
{
clistOptionUseSipCredentialsBox.setEnabled(false);
clistOptionServerUriValue.setEnabled(false);
clistOptionUserValue.setEnabled(false);
clistOptionPasswordValue.setEnabled(false);
}
else
{
clistOptionUseSipCredentialsBox.setEnabled(true);
clistOptionServerUriValue.setEnabled(true);
setClistOptionUseSipCredentialsEnabled(
clistOptionUseSipCredentialsBox.isSelected());
}
}
/**
* Reinits labels and combobox to default values.
*/
public void reinit()
{
setClistOptionEnableEnabled(false);
setClistOptionUseSipCredentials(false);
setClistOptionUseSipCredentialsEnabled(false);
setClistOptionServerUri(null);
setClistOptionUser(null);
setClistOptionPassword(null);
contactlistOptionsCombo.setSelectedItem(contactlistOptions[0]);
}
}