/* * 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 java.util.*; import net.java.sip.communicator.service.protocol.*; /** * The IRC implementation of a sip-communicator AccountID. * * @author Stephane Remy * @author Loic Kempf * @author Danny van Heumen */ public class IrcAccountID extends AccountID { /** * IRC account server host. */ private final String host; /** * IRC account server port. */ private final int port; /** * Creates an account id from the specified id and account properties. * * @param userID the user identifier corresponding to this account * @param host IRC server host * @param port IRC server port * @param accountProperties any other properties necessary for the account. */ IrcAccountID(final String userID, final String host, final String port, final Map accountProperties) { super(userID, accountProperties, ProtocolNames.IRC, getServiceName(accountProperties)); if (host == null) { throw new IllegalArgumentException("host cannot be null"); } this.host = host; if (port == null) { throw new IllegalArgumentException("port cannot be null"); } this.port = Integer.parseInt(port); } /** * {@inheritDoc} */ @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + host.hashCode(); result = prime * result + port; return result; } /** * Equality extended with checking IRC server host and port, since different * IRC networks can have users with similar names. * * @param obj other object * @return returns true if equal or false otherwise */ @Override public boolean equals(final Object obj) { // TODO if available, base equality on NETWORK= in // RPL_ISUPPORT. return super.equals(obj) && this.host.equals(((IrcAccountID) obj).host) && this.port == ((IrcAccountID) obj).port; } /** * Get the IRC server host. * * @return returns IRC server host */ public String getHost() { return this.host; } /** * Get the IRC server port. * * @return returns IRC server port */ public int getPort() { return this.port; } /** * Returns the service name - the server we are logging to if it is null * which is not supposed to be - we return for compatibility the string we * used in the first release for creating AccountID (Using this string is * wrong, but used for compatibility for now). * * @param accountProperties Map the properties table configuring the account * @return String the service name */ private static String getServiceName( final Map accountProperties) { String serviceName = accountProperties.get(ProtocolProviderFactory.SERVER_ADDRESS); if (serviceName != null) { final String port = accountProperties.get(ProtocolProviderFactory.SERVER_PORT); if (port != null) { serviceName += ":" + port; } } return (serviceName == null) ? ProtocolNames.IRC : serviceName; } /** * Get display name for this account instance. * * @return returns the display name for this AccountID instance */ @Override public String getDisplayName() { // If the ACCOUNT_DISPLAY_NAME property has been set for this account // we'll be using it as a display name. String key = ProtocolProviderFactory.ACCOUNT_DISPLAY_NAME; String accountDisplayName = accountProperties.get(key); if (accountDisplayName != null && !accountDisplayName.isEmpty()) { return accountDisplayName; } // Construct our own account display name. return String.format("%s@%s:%s (%s)", this.getUserID(), this.host, this.port, this.getProtocolName()); } }