/* * 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.gibberish; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.*; /** * 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 implements Contact { private static final Logger logger = Logger.getLogger(ContactGibberishImpl.class); /** * 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 * ContactGroupGibberishImpl by the * ContactGroupGibberishImpl itself. * * @param newParentGroup the ContactGroupGibberishImpl that is now * parent of this ContactGibberishImpl */ 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 gibberishPresenceStatus as the PresenceStatus that this * contact is currently in. * @param gibberishPresenceStatus the GibberishPresenceStatus * 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 ContactGroupGibberishImpl 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. */ 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. *

* @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; } /** * Indicates whether some other object is "equal to" this one which in terms * of contacts translates to having equal ids. The resolved status of the * contacts deliberately ignored so that contacts would be declared equal * even if it differs. *

* @param obj the reference object with which to compare. * @return true if this contact has the same id as that of the * obj argument. */ public boolean equals(Object obj) { if (obj == null || ! (obj instanceof ContactGibberishImpl)) return false; ContactGibberishImpl gibberishContact = (ContactGibberishImpl) obj; return this.getAddress().equals(gibberishContact.getAddress()); } /** * Returns the persistent presence operation set that this contact belongs * to. * * @return the OperationSetPersistentPresenceGibberishImpl that * this contact belongs to. */ public OperationSetPersistentPresenceGibberishImpl getParentPresenceOperationSet() { return (OperationSetPersistentPresenceGibberishImpl)parentProvider .getOperationSet(OperationSetPersistentPresence.class); } }