/*
* 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.event.*;
import java.util.*;
import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.impl.gui.main.chat.*;
import net.java.sip.communicator.impl.gui.main.contactlist.contactsource.*;
import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.service.contactsource.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.protocol.*;
/**
* The invite dialog is the one shown when the user clicks on the conference
* button in the chat toolbar.
*
* @author Yana Stamcheva
*/
public class ChatInviteDialog
extends InviteDialog
{
private final ChatPanel chatPanel;
private ChatTransport inviteChatTransport;
/**
* Constructs the <tt>ChatInviteDialog</tt>.
*
* @param chatPanel the <tt>ChatPanel</tt> corresponding to the
* <tt>ChatRoom</tt>, where the contact is invited.
*/
public ChatInviteDialog (ChatPanel chatPanel)
{
super(GuiActivator.getResources()
.getI18NString("service.gui.INVITE_CONTACT_TO_CHAT"), true);
this.chatPanel = chatPanel;
this.initContactListData();
this.addInviteButtonListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
inviteContacts();
dispose();
}
});
this.addCancelButtonListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
dispose();
}
});
}
/**
* Initializes the left contact list with the contacts that could be added
* to the current chat session.
*/
private void initContactListData()
{
this.inviteChatTransport = chatPanel.findInviteChatTransport();
srcContactList.addContactSource(
new ProtocolContactSourceServiceImpl(
inviteChatTransport.getProtocolProvider(),
OperationSetMultiUserChat.class));
srcContactList.setDefaultFilter(
new ChatInviteContactListFilter(srcContactList));
srcContactList.applyDefaultFilter();
}
/**
* The <tt>ChatInviteContactListFilter</tt> is
* <tt>InviteContactListFilter</tt> which doesn't list contact that don't
* have persistable addresses ( for example private messaging contacts are
* not listed).
*/
private class ChatInviteContactListFilter extends InviteContactListFilter
{
/**
* The Multi User Chat operation set instance.
*/
private OperationSetMultiUserChat opSetMUC;
/**
* Creates an instance of <tt>InviteContactListFilter</tt>.
*
* @param sourceContactList the contact list to filter
*/
public ChatInviteContactListFilter(ContactList sourceContactList)
{
super(sourceContactList);
opSetMUC = inviteChatTransport
.getProtocolProvider().getOperationSet(
OperationSetMultiUserChat.class);
}
@Override public boolean isMatching(UIContact uiContact)
{
SourceContact contact = (SourceContact)uiContact.getDescriptor();
if(opSetMUC.isPrivateMessagingContact(
contact.getContactAddress()))
{
return false;
}
return true;
}
}
/**
* Invites the contacts to the chat conference.
*/
private void inviteContacts()
{
Collection<String> selectedContactAddresses = new ArrayList<String>();
// Obtain selected contacts.
Collection<UIContact> contacts = destContactList.getContacts(null);
if(contacts == null)
return;
Iterator<UIContact> selectedContacts = contacts.iterator();
if (selectedContacts != null)
{
while (selectedContacts.hasNext())
{
UIContact uiContact = selectedContacts.next();
Iterator<UIContactDetail> contactsIter
= uiContact.getContactDetailsForOperationSet(
OperationSetMultiUserChat.class).iterator();
// We invite the first protocol contact that corresponds to the
// invite provider.
if (contactsIter.hasNext())
{
UIContactDetail inviteDetail = contactsIter.next();
selectedContactAddresses.add(inviteDetail.getAddress());
}
}
}
// Invite all selected.
if (selectedContactAddresses.size() > 0)
{
chatPanel.inviteContacts( inviteChatTransport,
selectedContactAddresses,
this.getReason());
}
}
}