/* * 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); } }