/*
* 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.desktoputil;
import net.java.sip.communicator.service.contactlist.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.ServerStoredDetails.*;
import net.java.sip.communicator.util.call.*;
import java.util.*;
/**
* Utility class that is obtained per metacontact. Used to check is a telephony
* service, video calls and desktop sharing are enabled per contact from the
* metacontact, or globally for the metacontct.
* @author Damian Minkov
*/
public class UIPhoneUtil
extends MetaContactPhoneUtil
{
/**
* Creates utility instance for <tt>metaContact</tt>.
*
* @param metaContact the metacontact checked in the utility.
*/
protected UIPhoneUtil(MetaContact metaContact)
{
super(metaContact);
}
/**
* Obtains an instance of this utility class for the given
* <tt>metaContact</tt>.
*
* @param metaContact the <tt>MetaContact</tt>, for which the instance of
* this utility class would be created
* @return UIPhoneUtil for the given <tt>metaContact</tt>.
*/
public static UIPhoneUtil getPhoneUtil(MetaContact metaContact)
{
return new UIPhoneUtil(metaContact);
}
/**
* Searches for additional phone numbers found in contact information
*
* @return additional phone numbers found in contact information;
*/
public List<UIContactDetail> getAdditionalMobileNumbers()
{
return getAdditionalNumbers(true);
}
/**
* Searches for additional phone numbers found in contact information
*
* @return additional phone numbers found in contact information;
*/
public List<UIContactDetail> getAdditionalNumbers()
{
return getAdditionalNumbers(false);
}
/**
* Searches for additional phone numbers found in contact information
*
* @return additional phone numbers found in contact information;
*/
private List<UIContactDetail> getAdditionalNumbers(boolean onlyMobile)
{
List<UIContactDetail> telephonyContacts
= new ArrayList<UIContactDetail>();
Iterator<Contact> contacts = getMetaContact().getContacts();
while(contacts.hasNext())
{
Contact contact = contacts.next();
OperationSetServerStoredContactInfo infoOpSet =
contact.getProtocolProvider().getOperationSet(
OperationSetServerStoredContactInfo.class);
Iterator<GenericDetail> details;
ArrayList<String> phones = new ArrayList<String>();
if(infoOpSet != null)
{
details = infoOpSet.getAllDetailsForContact(contact);
while(details.hasNext())
{
GenericDetail d = details.next();
boolean process = false;
if(onlyMobile)
{
if(d instanceof MobilePhoneDetail)
process = true;
}
else if(d instanceof PhoneNumberDetail &&
!(d instanceof PagerDetail) &&
!(d instanceof FaxDetail))
{
process = true;
}
if(process)
{
PhoneNumberDetail pnd = (PhoneNumberDetail)d;
if(pnd.getNumber() != null &&
pnd.getNumber().length() > 0)
{
// skip phones which were already added
if(phones.contains(pnd.getNumber()))
continue;
phones.add(pnd.getNumber());
UIContactDetail cd =
new UIContactDetailImpl(
pnd.getNumber(),
pnd.getNumber() +
" (" + getLocalizedPhoneNumber(d) + ")",
null,
new ArrayList<String>(),
DesktopUtilActivator.getResources()
.getImage(
"service.gui.icons.EXTERNAL_PHONE"),
null,
null,
pnd)
{
@Override
public PresenceStatus getPresenceStatus()
{
return null;
}
};
telephonyContacts.add(cd);
}
}
}
}
}
return telephonyContacts;
}
}