mirror of https://github.com/sipwise/jitsi.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
236 lines
7.1 KiB
236 lines
7.1 KiB
/*
|
|
* 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.service.contactsource;
|
|
|
|
import java.util.*;
|
|
|
|
import net.java.sip.communicator.service.protocol.*;
|
|
import net.java.sip.communicator.util.*;
|
|
|
|
/**
|
|
* Implements a generic <tt>SourceContact</tt> for the purposes of the support
|
|
* for the OS-specific Address Book.
|
|
*
|
|
* @author Lyubomir Marinov
|
|
*/
|
|
public class GenericSourceContact
|
|
extends DataObject
|
|
implements SourceContact
|
|
{
|
|
/**
|
|
* The <tt>ContactDetail</tt>s of this <tt>SourceContact</tt>.
|
|
*/
|
|
private final List<ContactDetail> contactDetails;
|
|
|
|
/**
|
|
* The <tt>ContactSourceService</tt> which has created this
|
|
* <tt>SourceContact</tt>.
|
|
*/
|
|
private final ContactSourceService contactSource;
|
|
|
|
/**
|
|
* The display name of this <tt>SourceContact</tt>.
|
|
*/
|
|
private final String displayName;
|
|
|
|
/**
|
|
* The display details of this contact.
|
|
*/
|
|
private String displayDetails;
|
|
|
|
/**
|
|
* The presence status of this contact.
|
|
*/
|
|
private PresenceStatus presenceStatus;
|
|
|
|
/**
|
|
* The image/avatar of this <tt>SourceContact</tt>
|
|
*/
|
|
private byte[] image;
|
|
|
|
/**
|
|
* Initializes a new <tt>AddrBookSourceContact</tt> instance.
|
|
*
|
|
* @param contactSource the <tt>ContactSourceService</tt> which is creating
|
|
* the new instance
|
|
* @param displayName the display name of the new instance
|
|
* @param contactDetails the <tt>ContactDetail</tt>s of the new instance
|
|
*/
|
|
public GenericSourceContact(
|
|
ContactSourceService contactSource,
|
|
String displayName,
|
|
List<ContactDetail> contactDetails)
|
|
{
|
|
this.contactSource = contactSource;
|
|
this.displayName = displayName;
|
|
this.contactDetails = contactDetails;
|
|
}
|
|
|
|
/**
|
|
* Gets the <tt>ContactDetail</tt>s of this <tt>SourceContact</tt>.
|
|
*
|
|
* @return the <tt>ContactDetail</tt>s of this <tt>SourceContact</tt>
|
|
* @see SourceContact#getContactDetails()
|
|
*/
|
|
public List<ContactDetail> getContactDetails()
|
|
{
|
|
return Collections.unmodifiableList(contactDetails);
|
|
}
|
|
|
|
/**
|
|
* Gets the <tt>ContactDetail</tt>s of this <tt>SourceContact</tt> which
|
|
* support a specific <tt>OperationSet</tt>.
|
|
*
|
|
* @param operationSet the <tt>OperationSet</tt> the supporting
|
|
* <tt>ContactDetail</tt>s of which are to be returned
|
|
* @return the <tt>ContactDetail</tt>s of this <tt>SourceContact</tt> which
|
|
* support the specified <tt>operationSet</tt>
|
|
* @see SourceContact#getContactDetails(Class)
|
|
*/
|
|
public List<ContactDetail> getContactDetails(
|
|
Class<? extends OperationSet> operationSet)
|
|
{
|
|
List<ContactDetail> contactDetails = new LinkedList<ContactDetail>();
|
|
|
|
for (ContactDetail contactDetail : getContactDetails())
|
|
{
|
|
List<Class<? extends OperationSet>> supportedOperationSets
|
|
= contactDetail.getSupportedOperationSets();
|
|
|
|
if ((supportedOperationSets != null)
|
|
&& supportedOperationSets.contains(operationSet))
|
|
contactDetails.add(contactDetail);
|
|
}
|
|
return contactDetails;
|
|
}
|
|
|
|
/**
|
|
* Returns a list of all <tt>ContactDetail</tt>s corresponding to the given
|
|
* category.
|
|
* @param category the <tt>OperationSet</tt> class we're looking for
|
|
* @return a list of all <tt>ContactDetail</tt>s corresponding to the given
|
|
* category
|
|
*/
|
|
public List<ContactDetail> getContactDetails(
|
|
ContactDetail.Category category)
|
|
{
|
|
List<ContactDetail> contactDetails = new LinkedList<ContactDetail>();
|
|
|
|
for (ContactDetail contactDetail : getContactDetails())
|
|
{
|
|
ContactDetail.Category detailCategory = contactDetail.getCategory();
|
|
if (detailCategory != null && detailCategory.equals(category))
|
|
contactDetails.add(contactDetail);
|
|
}
|
|
return contactDetails;
|
|
}
|
|
|
|
/**
|
|
* Gets the <tt>ContactSourceService</tt> which has created this
|
|
* <tt>SourceContact</tt>.
|
|
*
|
|
* @return the <tt>ContactSourceService</tt> which has created this
|
|
* <tt>SourceContact</tt>
|
|
* @see SourceContact#getContactSource()
|
|
*/
|
|
public ContactSourceService getContactSource()
|
|
{
|
|
return contactSource;
|
|
}
|
|
|
|
/**
|
|
* Gets the display details of this <tt>SourceContact</tt>.
|
|
*
|
|
* @return the display details of this <tt>SourceContact</tt>
|
|
* @see SourceContact#getDisplayDetails()
|
|
*/
|
|
public String getDisplayDetails()
|
|
{
|
|
return displayDetails;
|
|
}
|
|
|
|
/**
|
|
* Sets the display details of this <tt>SourceContact</tt>.
|
|
*
|
|
* @param displayDetails the display details of this <tt>SourceContact</tt>
|
|
*/
|
|
public String setDisplayDetails(String displayDetails)
|
|
{
|
|
return this.displayDetails = displayDetails;
|
|
}
|
|
|
|
/**
|
|
* Gets the display name of this <tt>SourceContact</tt>.
|
|
*
|
|
* @return the display name of this <tt>SourceContact</tt>
|
|
* @see SourceContact#getDisplayName()
|
|
*/
|
|
public String getDisplayName()
|
|
{
|
|
return displayName;
|
|
}
|
|
|
|
/**
|
|
* Gets the image/avatar of this <tt>SourceContact</tt>.
|
|
*
|
|
* @return the image/avatar of this <tt>SourceContact</tt>
|
|
* @see SourceContact#getImage()
|
|
*/
|
|
public byte[] getImage()
|
|
{
|
|
return image;
|
|
}
|
|
|
|
/**
|
|
* Gets the preferred <tt>ContactDetail</tt> for a specific
|
|
* <tt>OperationSet</tt>.
|
|
*
|
|
* @param operationSet the <tt>OperationSet</tt> to get the preferred
|
|
* <tt>ContactDetail</tt> for
|
|
* @return the preferred <tt>ContactDetail</tt> for the specified
|
|
* <tt>operationSet</tt>
|
|
* @see SourceContact#getPreferredContactDetail(Class)
|
|
*/
|
|
public ContactDetail getPreferredContactDetail(
|
|
Class<? extends OperationSet> operationSet)
|
|
{
|
|
List<ContactDetail> contactDetails = getContactDetails(operationSet);
|
|
|
|
return contactDetails.isEmpty() ? null : contactDetails.get(0);
|
|
}
|
|
|
|
/**
|
|
* Sets the image/avatar of this <tt>SourceContact</tt>.
|
|
*
|
|
* @param image the image/avatar to be set on this <tt>SourceContact</tt>
|
|
*/
|
|
public void setImage(byte[] image)
|
|
{
|
|
this.image = image;
|
|
}
|
|
|
|
/**
|
|
* Returns the status of the source contact. And null if such information
|
|
* is not available.
|
|
* @return the PresenceStatus representing the state of this source contact.
|
|
*/
|
|
public PresenceStatus getPresenceStatus()
|
|
{
|
|
return presenceStatus;
|
|
}
|
|
|
|
/**
|
|
* Sets the status of the source contact.
|
|
*
|
|
* @param presenceStatus the status of this contact
|
|
*/
|
|
public void setPresenceStatus(PresenceStatus presenceStatus)
|
|
{
|
|
this.presenceStatus = presenceStatus;
|
|
}
|
|
}
|