/* * 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.irc; import net.java.sip.communicator.service.protocol.*; /** * IRC contact implementation. * * @author Danny van Heumen */ public class ContactIrcImpl extends AbstractContact { /** * Parent provider. */ private final ProtocolProviderServiceIrcImpl provider; /** * Contact id. */ private String id; /** * Contact's parent group. */ private ContactGroupIrcImpl parentGroup; /** * Contact's presence status. */ private PresenceStatus presence; /** * Constructor. * * @param provider Protocol provider service instance. * @param id Contact id. * @param parentGroup The parent group of the contact. * @param presence the initial presence status of the new contact */ public ContactIrcImpl(final ProtocolProviderServiceIrcImpl provider, final String id, final ContactGroupIrcImpl parentGroup, final IrcStatusEnum presence) { if (provider == null) { throw new IllegalArgumentException("provider cannot be null"); } this.provider = provider; if (id == null) { throw new IllegalArgumentException("id cannot be null"); } this.id = id; if (parentGroup == null) { throw new IllegalArgumentException("parentGroup cannot be null"); } this.parentGroup = parentGroup; if (presence == null) { throw new IllegalArgumentException("presence cannot be null"); } this.presence = presence; } /** * Get contact id (a.k.a. address) * * @return returns id */ @Override public String getAddress() { return this.id; } /** * Set a new contact id (a.k.a. address) * * IRC allows nick change and the nick is also the identity of the user on * the IRC networks, so we allow nick changes. * * @param address the new address */ public void setAddress(final String address) { if (address == null) { throw new IllegalArgumentException("address cannot be null"); } this.id = address; } /** * Get contact display name. * * @return returns display name */ @Override public String getDisplayName() { return this.id; } /** * Get contact image (avatar). * * @return returns image data */ @Override public byte[] getImage() { return null; } /** * Get presence status. * * @return returns presence status */ @Override public PresenceStatus getPresenceStatus() { return this.presence; } /** * Set a new presence status for contact. * * @param status new presence status (cannot be null) */ protected void setPresenceStatus(final PresenceStatus status) { if (status == null) { throw new IllegalArgumentException("status cannot be null"); } this.presence = status; } /** * Get parent contact group. * * @return returns parent contact group */ @Override public ContactGroup getParentContactGroup() { return this.parentGroup; } /** * Set a new parent group. * * @param group the new parent group */ public void setParentContactGroup(final ContactGroupIrcImpl group) { if (group == null) { throw new IllegalArgumentException("group cannot be null"); } this.parentGroup = group; } /** * Get protocol provider service. * * @return returns IRC protocol provider service. */ @Override public ProtocolProviderService getProtocolProvider() { return this.provider; } /** * Is persistent contact. * * Determine persistence by the group in which it is stored. As long as a * contact is stored in the non-persistent contact group, we will consider * it non-persistent. As soon as a contact is moved to another group, we * assume it is valuable, so we consider it persistent. * * @return Returns true if contact is persistent, or false otherwise. */ @Override public boolean isPersistent() { return this.parentGroup.isPersistent(); } /** * Is contact resolved. * * @return Returns true if contact is resolved, or false otherwise. */ @Override public boolean isResolved() { // TODO implement resolved status based on whether or not the nick name // is registered and the nick is currently "active" according to the // server, i.e. NickServ. // For now, we consider the contact unresolved ... return true; } /** * Get persistent data (if any). * * @return returns persistent data if available or null otherwise. */ @Override public String getPersistentData() { return null; } /** * Get status message. * * @return returns status message */ @Override public String getStatusMessage() { return null; } }