/*
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.protocol.jabber;
import org.jivesoftware.smackx.muc.*;
import org.jivesoftware.smack.util.*;
import net.java.sip.communicator.service.protocol.*;
/**
* A Jabber implementation of the chat room member.
*
* @author Emil Ivov
*/
public class ChatRoomMemberJabberImpl
implements ChatRoomMember
{
/**
* The chat room that we are a member of.
*/
private final ChatRoomJabberImpl containingRoom;
/**
* The role that this member has in its member room.
*/
private ChatRoomMemberRole role;
/**
* The jabber id of the member (will only be visible to members with
* necessary permissions)
*/
private final String jabberID;
/**
* The nick name that this member is using inside its containing chat room.
*/
private String nickName;
/**
* The contact from our server stored contact list corresponding to this
* member.
*/
private Contact contact;
/**
* The avatar of this chat room member.
*/
private byte[] avatar;
/**
* Creates a jabber chat room member with the specified containing chat
* room parent.
* @param containingChatRoom the room that this
* ChatRoomMemberJabberImpl is a member of.
* @param nickName the nick name that the member is using to participate
* in the chat room
* @param jabberID the jabber id, if available, of the member or null
* otherwise.
*/
public ChatRoomMemberJabberImpl(ChatRoomJabberImpl containingChatRoom,
String nickName,
String jabberID)
{
this.jabberID = jabberID;
this.nickName = nickName;
this.containingRoom = containingChatRoom;
OperationSetPersistentPresenceJabberImpl presenceOpSet
= (OperationSetPersistentPresenceJabberImpl) containingChatRoom
.getParentProvider().getOperationSet(
OperationSetPersistentPresence.class);
this.contact = presenceOpSet.findContactByID(
StringUtils.parseBareAddress(jabberID));
// If we have found a contact we set also its avatar.
if (contact != null)
this.avatar = contact.getImage();
// just query the stack for role, if its present will be set
getRole();
}
/**
* Returns the chat room that this member is participating in.
*
* @return the ChatRoom instance that this member belongs to.
*/
public ChatRoom getChatRoom()
{
return containingRoom;
}
/**
* Returns the contact identifier representing this contact.
*
* @return a String (contact address), uniquely representing the contact
* over the service the service being used by the associated protocol
* provider instance/
*/
public String getContactAddress()
{
return StringUtils.parseBareAddress(jabberID);
}
/**
* Returns the name of this member as it is known in its containing
* chatroom (aka a nickname).
*
* @return the name of this member as it is known in the containing chat
* room (aka a nickname).
*/
public String getName()
{
return nickName;
}
/**
* Update the name of this parcipant
* @param newNick the newNick of the participant
*/
protected void setName(String newNick)
{
if ((newNick == null) || !(newNick.length() > 0))
throw new IllegalArgumentException(
"a room member nickname could not be null");
nickName = newNick;
}
/**
* Returns the protocol provider instance that this member has originated
* in.
*
* @return the ProtocolProviderService instance that created
* this member and its containing cht room
*/
public ProtocolProviderService getProtocolProvider()
{
return containingRoom.getParentProvider();
}
/**
* Returns the role of this chat room member in its containing room.
*
* @return a ChatRoomMemberRole instance indicating the role
* the this member in its containing chat room.
*/
public ChatRoomMemberRole getRole()
{
if(role == null)
{
Occupant o =
containingRoom.getMultiUserChat().getOccupant(
containingRoom.getIdentifier() + "/" + nickName);
if(o == null)
{
return ChatRoomMemberRole.GUEST;
}
else
role = ChatRoomJabberImpl.smackRoleToScRole(o.getRole());
}
return role;
}
/**
* Returns the current role without trying to query it in the stack.
* Mostly used for event creating on member role change.
*
* @return the current role of this member.
*/
ChatRoomMemberRole getCurrentRole()
{
return this.role;
}
/**
* Sets the role of this member.
* @param role the role to set
*/
public void setRole(ChatRoomMemberRole role)
{
this.role = role;
}
/**
* Returns the avatar of this member, that can be used when including it in
* user interface.
*
* @return an avatar (e.g. user photo) of this member.
*/
public byte[] getAvatar()
{
return avatar;
}
/**
* Sets the avatar for this member.
*
* @param avatar the avatar to set.
*/
public void setAvatar(byte[] avatar)
{
this.avatar = avatar;
}
/**
* Returns the protocol contact corresponding to this member in our contact
* list. The contact returned here could be used by the user interface to
* check if this member is contained in our contact list and in function of
* this to show additional information add additional functionality.
*
* @return the protocol contact corresponding to this member in our contact
* list.
*/
public Contact getContact()
{
return contact;
}
/**
* Sets the given contact to this member.
*
* @param contact the contact to set.
*/
public void setContact(Contact contact)
{
this.contact = contact;
}
}