/*
* 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.impl.gui.main.chat.conference;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;
import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.service.msghistory.*;
import net.java.sip.communicator.service.muc.*;
import net.java.sip.communicator.service.protocol.*;
/**
* A dialog for the chat room automatically open configuration.
*
* @author Hristo Terezov
*/
public class ChatRoomAutoOpenConfigDialog
extends SIPCommDialog
implements ActionListener
{
/**
* The serial version ID.
*/
private static final long serialVersionUID = -7741709128413173168L;
/**
* The current value.
*/
private String value = null;
/**
* The protocol provider service associated with the chat room.
*/
private ProtocolProviderService pps;
/**
* The chat room id of the chat room.
*/
private String chatRoomId;
/**
* Open on activity radio button.
*/
private final JRadioButton openOnActivity
= new JRadioButton(
GuiActivator.getResources()
.getI18NString("service.gui.OPEN_ON_ACTIVITY"));
/**
* Open on message radio button.
*/
private final JRadioButton openOnMessage
= new JRadioButton(
GuiActivator.getResources()
.getI18NString("service.gui.OPEN_ON_MESSAGE"));
/**
* Open on important message radio button.
*/
private final JRadioButton openOnImportantMessage
= new JRadioButton(
GuiActivator.getResources()
.getI18NString("service.gui.OPEN_ON_IMPORTANT_MESSAGE"));
/**
* OK button.
*/
private JButton okButton = new JButton(
GuiActivator.getResources().getI18NString("service.gui.OK"));
/**
* Cancel button.
*/
private JButton cancelButton = new JButton(
GuiActivator.getResources().getI18NString("service.gui.CANCEL"));
/**
* The property change listener for the message service.
*/
private PropertyChangeListener propertyListener = new PropertyChangeListener()
{
@Override
public void propertyChange(PropertyChangeEvent e)
{
updateView();
}
};
/**
* The <tt>ChatRoomAutoOpenConfigDialog</tt> instance.
*/
private static ChatRoomAutoOpenConfigDialog dialog = null;
/**
* Creates if necessary a new <tt>ChatRoomAutoOpenConfigDialog</tt>
* instance and displays it.
* @param chatRoomId the chat room id of the chat room associated with the
* dialog
* @param pps the protocol provider service of the chat room
*/
public static void showChatRoomAutoOpenConfigDialog(
ProtocolProviderService pps,
String chatRoomId)
{
if(dialog == null)
{
dialog = new ChatRoomAutoOpenConfigDialog(pps, chatRoomId);
}
else
{
dialog.clearListeners();
dialog.setProvider(pps);
dialog.setChatRoomId(chatRoomId);
dialog.refreshValue();
if(dialog.isVisible())
{
dialog.toFront();
}
else
{
dialog.setVisible(true);
}
dialog.pack();
}
}
/**
* Constructs new <tt>ChatRoomAutoOpenConfigDialog</tt> instance.
* @param chatRoomId the chat room id of the chat room associated with the
* dialog
* @param pps the protocol provider service of the chat room
*/
private ChatRoomAutoOpenConfigDialog(ProtocolProviderService pps,
final String chatRoomId)
{
this.pps = pps;
this.chatRoomId = chatRoomId;
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
refreshValue();
JPanel choicePanel = new TransparentPanel();
choicePanel.setLayout(new BoxLayout(choicePanel, BoxLayout.Y_AXIS));
choicePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
openOnActivity.addActionListener( this );
openOnMessage.addActionListener( this );
openOnImportantMessage.addActionListener(this);
setTitle(GuiActivator.getResources()
.getI18NString("service.gui.OPEN_AUTOMATICALLY"));
openOnActivity.setOpaque(false);
openOnMessage.setOpaque(false);
openOnImportantMessage.setOpaque(false);
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(openOnActivity);
buttonGroup.add(openOnMessage);
buttonGroup.add(openOnImportantMessage);
choicePanel.add(openOnActivity);
choicePanel.add(openOnMessage);
choicePanel.add(openOnImportantMessage);
JPanel buttonPanel
= new TransparentPanel(new FlowLayout(FlowLayout.RIGHT));
updateView();
okButton.addActionListener(this);
cancelButton.addActionListener(this);
buttonPanel.add(okButton);
buttonPanel.add(cancelButton);
add(choicePanel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH);
setVisible(true);
setPreferredSize(new Dimension(320, 150));
pack();
}
/**
* Sets new <tt>ProtocolProviderService</tt> instance.
*
* @param pps the <tt>ProtocolProviderService</tt> to be set.
*/
private void setProvider(ProtocolProviderService pps)
{
this.pps = pps;
}
/**
* Sets new chat room id.
* @param chatRoomId the chat room id to be set
*/
private void setChatRoomId(String chatRoomId)
{
this.chatRoomId = chatRoomId;
}
/**
* Refreshes the selected value if the chat room is changed.
*/
private void refreshValue()
{
value = MUCService.getChatRoomAutoOpenOption(pps, chatRoomId);
GuiActivator.getConfigurationService().addPropertyChangeListener(
MessageHistoryService.PNAME_IS_MESSAGE_HISTORY_ENABLED,
propertyListener);
GuiActivator.getConfigurationService().addPropertyChangeListener(
MessageHistoryService
.PNAME_IS_MESSAGE_HISTORY_PER_CONTACT_ENABLED_PREFIX + "."
+ chatRoomId,
propertyListener);
if(value == null)
value = MUCService.DEFAULT_AUTO_OPEN_BEHAVIOUR;
if(value.equals(MUCService.OPEN_ON_ACTIVITY))
{
openOnActivity.setSelected(true);
}
else if(value.equals(MUCService.OPEN_ON_IMPORTANT_MESSAGE))
{
openOnImportantMessage.setSelected(true);
}
else
{
openOnMessage.setSelected(true);
}
}
/**
* Sets enable/disable state of the buttons.
*/
private void updateView()
{
MessageHistoryService mhs
= GuiActivator.getMessageHistoryService();
if(!mhs.isHistoryLoggingEnabled()
|| !mhs.isHistoryLoggingEnabled(chatRoomId))
{
openOnImportantMessage.setEnabled(false);
openOnMessage.setEnabled(false);
openOnActivity.setSelected(true);
}
else
{
openOnImportantMessage.setEnabled(true);
openOnMessage.setEnabled(true);
}
}
@Override
public void actionPerformed(ActionEvent e)
{
Object source = e.getSource();
if (source instanceof JButton)
{
if(source.equals(okButton))
{
MUCService.setChatRoomAutoOpenOption(
pps,
chatRoomId, value);
}
this.dispose();
}
else if(source instanceof JRadioButton)
{
if(source.equals(openOnActivity))
{
value = MUCService.OPEN_ON_ACTIVITY;
}
else if(source.equals(openOnMessage))
{
value = MUCService.OPEN_ON_MESSAGE;
}
else
{
value = MUCService.OPEN_ON_IMPORTANT_MESSAGE;
}
}
}
/**
* Removes the added listeners.
*/
private void clearListeners()
{
GuiActivator.getConfigurationService().removePropertyChangeListener(
MessageHistoryService.PNAME_IS_MESSAGE_HISTORY_ENABLED,
propertyListener);
GuiActivator.getConfigurationService().removePropertyChangeListener(
MessageHistoryService
.PNAME_IS_MESSAGE_HISTORY_PER_CONTACT_ENABLED_PREFIX + "."
+ chatRoomId,
propertyListener);
}
@Override
public void dispose()
{
clearListeners();
super.dispose();
}
@Override
protected void close(boolean escaped)
{
super.close(escaped);
dispose();
}
}