/*
* 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.gibberish;
import net.java.sip.communicator.service.protocol.*;
/**
* A simple, straightforward implementation of a gibberish Contact. Since
* the Gibberish protocol is not a real one, we simply store all contact details
* in class fields. You should know that when implementing a real protocol,
* the contact implementation would rather encapsulate contact objects from
* the protocol stack and group property values should be returned after
* consulting the encapsulated object.
*
* @author Emil Ivov
*/
public class ContactGibberishImpl
extends AbstractContact
{
/**
* The id of the contact.
*/
private String contactID = null;
/**
* The provider that created us.
*/
private ProtocolProviderServiceGibberishImpl parentProvider = null;
/**
* The group that belong to.
*/
private ContactGroupGibberishImpl parentGroup = null;
/**
* The presence status of the contact.
*/
private PresenceStatus presenceStatus = GibberishStatusEnum.OFFLINE;
/**
* Determines whether this contact is persistent, i.e. member of the contact
* list or whether it is here only temporarily.
*/
private boolean isPersistent = true;
/**
* Determines whether the contact has been resolved (i.e. we have a
* confirmation that it is still on the server contact list).
*/
private boolean isResolved = true;
/**
* Creates an instance of a meta contact with the specified string used
* as a name and identifier.
*
* @param id the identifier of this contact (also used as a name).
* @param parentProvider the provider that created us.
*/
public ContactGibberishImpl(
String id,
ProtocolProviderServiceGibberishImpl parentProvider)
{
this.contactID = id;
this.parentProvider = parentProvider;
}
/**
* This method is only called when the contact is added to a new
* <tt>ContactGroupGibberishImpl</tt> by the
* <tt>ContactGroupGibberishImpl</tt> itself.
*
* @param newParentGroup the <tt>ContactGroupGibberishImpl</tt> that is now
* parent of this <tt>ContactGibberishImpl</tt>
*/
void setParentGroup(ContactGroupGibberishImpl newParentGroup)
{
this.parentGroup = newParentGroup;
}
/**
* Returns a String that can be used for identifying the contact.
*
* @return a String id representing and uniquely identifying the contact.
*/
public String getAddress()
{
return contactID;
}
/**
* Returns a String that could be used by any user interacting modules
* for referring to this contact.
*
* @return a String that can be used for referring to this contact when
* interacting with the user.
*/
public String getDisplayName()
{
return contactID;
}
/**
* Returns a byte array containing an image (most often a photo or an
* avatar) that the contact uses as a representation.
*
* @return byte[] an image representing the contact.
*/
public byte[] getImage()
{
return null;
}
/**
* Returns the status of the contact.
*
* @return always IcqStatusEnum.ONLINE.
*/
public PresenceStatus getPresenceStatus()
{
return this.presenceStatus;
}
/**
* Sets <tt>gibberishPresenceStatus</tt> as the PresenceStatus that this
* contact is currently in.
* @param gibberishPresenceStatus the <tt>GibberishPresenceStatus</tt>
* currently valid for this contact.
*/
public void setPresenceStatus(PresenceStatus gibberishPresenceStatus)
{
this.presenceStatus = gibberishPresenceStatus;
}
/**
* Returns a reference to the protocol provider that created the contact.
*
* @return a refererence to an instance of the ProtocolProviderService
*/
public ProtocolProviderService getProtocolProvider()
{
return parentProvider;
}
/**
* Determines whether or not this contact represents our own identity.
*
* @return true in case this is a contact that represents ourselves and
* false otherwise.
*/
public boolean isLocal()
{
return false;
}
/**
* Returns the group that contains this contact.
* @return a reference to the <tt>ContactGroupGibberishImpl</tt> that
* contains this contact.
*/
public ContactGroup getParentContactGroup()
{
return this.parentGroup;
}
/**
* 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("ContactGibberishImpl[ DisplayName=")
.append(getDisplayName()).append("]");
return buff.toString();
}
/**
* Determines whether or not this contact is being stored by the server.
* Non persistent contacts are common in the case of simple, non-persistent
* presence operation sets. They could however also be seen in persistent
* presence operation sets when for example we have received an event
* from someone not on our contact list. Non persistent contacts are
* volatile even when coming from a persistent presence op. set. They would
* only exist until the application is closed and will not be there next
* time it is loaded.
*
* @return true if the contact is persistent and false otherwise.
*/
public boolean isPersistent()
{
return isPersistent;
}
/**
* Specifies whether or not this contact is being stored by the server.
* Non persistent contacts are common in the case of simple, non-persistent
* presence operation sets. They could however also be seen in persistent
* presence operation sets when for example we have received an event
* from someone not on our contact list. Non persistent contacts are
* volatile even when coming from a persistent presence op. set. They would
* only exist until the application is closed and will not be there next
* time it is loaded.
*
* @param isPersistent true if the contact is persistent and false
* otherwise.
*/
public void setPersistent(boolean isPersistent)
{
this.isPersistent = isPersistent;
}
/**
* Returns null as no persistent data is required and the contact address is
* sufficient for restoring the contact.
* <p>
* @return null as no such data is needed.
*/
public String getPersistentData()
{
return null;
}
/**
* Determines whether or not this contact has been resolved against the
* server. Unresolved contacts are used when initially loading a contact
* list that has been stored in a local file until the presence operation
* set has managed to retrieve all the contact list from the server and has
* properly mapped contacts to their on-line buddies.
*
* @return true if the contact has been resolved (mapped against a buddy)
* and false otherwise.
*/
public boolean isResolved()
{
return isResolved;
}
/**
* Return the current status message of this contact.
*
* @return null as the protocol has currently no support of status messages
*/
public String getStatusMessage()
{
return null;
}
/**
* Makes the contact resolved or unresolved.
*
* @param resolved true to make the contact resolved; false to
* make it unresolved
*/
public void setResolved(boolean resolved)
{
this.isResolved = resolved;
}
/**
* Returns the persistent presence operation set that this contact belongs
* to.
*
* @return the <tt>OperationSetPersistentPresenceGibberishImpl</tt> that
* this contact belongs to.
*/
public OperationSetPersistentPresenceGibberishImpl
getParentPresenceOperationSet()
{
return (OperationSetPersistentPresenceGibberishImpl)parentProvider
.getOperationSet(OperationSetPersistentPresence.class);
}
}