/*
* 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.protocol.jabber;
import net.java.sip.communicator.service.protocol.*;
import org.jivesoftware.smack.util.*;
/**
* The Jabber implementation for Volatile Contact
* @author Damian Minkov
*/
public class VolatileContactJabberImpl
extends ContactJabberImpl
{
/**
* This contact id
*/
private String contactId = null;
/**
* Indicates whether the contact is private messaging contact or not.
*/
private boolean isPrivateMessagingContact = false;
/**
* The display name of the contact. This property is used only for private
* messaging contacts.
*/
protected String displayName = null;
/**
* Creates an Volatile JabberContactImpl with the specified id
* @param id String the user id/address
* @param ssclCallback a reference to the ServerStoredContactListImpl
* instance that created us.
*/
VolatileContactJabberImpl(String id,
ServerStoredContactListJabberImpl ssclCallback)
{
this(id, ssclCallback, false, null);
}
/**
* Creates an Volatile JabberContactImpl with the specified id
* @param id String the user id/address
* @param ssclCallback a reference to the ServerStoredContactListImpl
* instance that created us.
* @param isPrivateMessagingContact if <tt>true</tt> this should be private
* messaging contact.
*/
VolatileContactJabberImpl(String id,
ServerStoredContactListJabberImpl ssclCallback,
boolean isPrivateMessagingContact)
{
this(id, ssclCallback, isPrivateMessagingContact, null);
}
/**
* Creates an Volatile JabberContactImpl with the specified id
* @param id String the user id/address
* @param ssclCallback a reference to the ServerStoredContactListImpl
* instance that created us.
* @param isPrivateMessagingContact if <tt>true</tt> this should be private
* messaging contact.
* @param displayName the display name of the contact
*/
VolatileContactJabberImpl(String id,
ServerStoredContactListJabberImpl ssclCallback,
boolean isPrivateMessagingContact, String displayName)
{
super(null, ssclCallback, false, false);
this.isPrivateMessagingContact = isPrivateMessagingContact;
if(this.isPrivateMessagingContact)
{
this.displayName = StringUtils.parseResource(id) + " from " +
StringUtils.parseBareAddress(id);
this.contactId = id;
setJid(id);
}
else
{
this.contactId = StringUtils.parseBareAddress(id);
this.displayName = (displayName == null)? contactId : displayName;
String resource = StringUtils.parseResource(id);
if(resource != null)
{
setJid(id);
}
}
}
/**
* Returns the Jabber Userid of this contact
* @return the Jabber Userid of this contact
*/
@Override
public String getAddress()
{
return contactId;
}
/**
* Returns a String that could be used by any user interacting modules for
* referring to this contact. An alias is not necessarily unique but is
* often more human readable than an address (or id).
* @return a String that can be used for referring to this contact when
* interacting with the user.
*/
@Override
public String getDisplayName()
{
return displayName;
}
/**
* Returns a string representation of this contact, containing most of its
* representative details.
*
* @return a string representation of this contact.
*/
@Override
public String toString()
{
StringBuffer buff = new StringBuffer("VolatileJabberContact[ id=");
buff.append(getAddress()).append("]");
return buff.toString();
}
/**
* Determines whether or not this contact group is being stored by the
* server. Non persistent contact groups exist for the sole purpose of
* containing non persistent contacts.
* @return true if the contact group is persistent and false otherwise.
*/
@Override
public boolean isPersistent()
{
return false;
}
/**
* Checks if the contact is private messaging contact or not.
*
* @return <tt>true</tt> if this is private messaging contact and
* <tt>false</tt> if it isn't.
*/
public boolean isPrivateMessagingContact()
{
return isPrivateMessagingContact;
}
/**
* Returns the real address of the contact. If the contact is not private
* messaging contact the result will be the same as <tt>getAddress</tt>'s
* result.
*
* @return the real address of the contact.
*/
@Override
public String getPersistableAddress()
{
if(!isPrivateMessagingContact)
return getAddress();
ChatRoomMemberJabberImpl chatRoomMember = null;
OperationSetMultiUserChatJabberImpl mucOpSet =
(OperationSetMultiUserChatJabberImpl)getProtocolProvider()
.getOperationSet(OperationSetMultiUserChat.class);
if(mucOpSet != null)
{
chatRoomMember = mucOpSet
.getChatRoom(StringUtils.parseBareAddress(contactId))
.findMemberForNickName(
StringUtils.parseResource(contactId));
}
return ((chatRoomMember == null)? null : StringUtils.parseBareAddress(
chatRoomMember.getJabberID()));
}
}