/***************************************************************************
* Copyright 2006-2016 by Christian Ihle *
* contact@kouchat.net *
* *
* This file is part of KouChat. *
* *
* KouChat is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 3 of *
* the License, or (at your option) any later version. *
* *
* KouChat is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with KouChat. *
* If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
package net.usikkert.kouchat.misc;
import net.usikkert.kouchat.ui.PrivateChatWindow;
/**
* This class represents a user in the chat.
*
* @author Christian Ihle
*/
public class User implements Comparable<User> {
/** The nick name of the user. */
private String nick;
/** The user's away message. Can not be blank if away, and must be blank if not away. */
private String awayMsg;
/** The user's ip address. */
private String ipAddress;
/** The user's operating system, like <code>Windows Vista</code> or <code>Linux</code>. */
private String operatingSystem;
/** Which type of chat client the user is connected with, like <code>KouChat v.1.0.0 Swing</code>. */
private String client;
/** The user's host name. */
private String hostName;
/** The unique code identifying this user. */
private final int code;
/** The port to use when connecting to this user's private chat. */
private int privateChatPort;
/** The time when the last idle message came from this user. */
private long lastIdle;
/** The time when this user logged on the chat. */
private long logonTime;
/** If the user is writing at the moment. */
private boolean writing;
/** If the user is away. Needs an away message as well if away. */
private boolean away;
/** If the user is the application user, and not some other user in the chat. */
private boolean me;
/** If a new unread private message has arrived. */
private boolean newPrivMsg;
/** If the user is logged on to the chat. */
private boolean online;
/** If a new unread message has arrived to the main chat. */
private boolean newMsg;
/** The private chat window where the chat session with this user happens. */
private PrivateChatWindow privchat;
/** The chat logger used for logging communication with this user. */
private ChatLogger privateChatLogger;
/**
* Constructor. Initializes variables.
*
* @param nick The nick name of the user.
* @param code A unique code identifying the user.
*/
public User(final String nick, final int code) {
this.nick = nick;
this.code = code;
lastIdle = 0;
awayMsg = "";
writing = false;
away = false;
ipAddress = "<unknown>";
me = false;
logonTime = 0;
operatingSystem = "<unknown>";
client = "<unknown>";
hostName = null;
newMsg = false;
privateChatPort = 0;
privchat = null;
online = true;
newPrivMsg = false;
}
/**
* Resets some of the fields to default, to reset the user's state.
*/
public void reset() {
awayMsg = "";
writing = false;
away = false;
ipAddress = "<unknown>";
hostName = null;
newMsg = false;
privateChatPort = 0;
privchat = null;
newPrivMsg = false;
}
/**
* Checks if this user is the application user.
*
* @return If this user is me.
*/
public boolean isMe() {
return me;
}
/**
* Sets if this user is the application user.
*
* @param me If this user is me.
*/
public void setMe(final boolean me) {
this.me = me;
}
/**
* Gets the user's unique code.
*
* @return The user's unique code.
*/
public int getCode() {
return code;
}
/**
* Gets the user's unique nick name.
*
* @return The user's unique nick name.
*/
public String getNick() {
return nick;
}
/**
* Sets the user's unique nick name.
*
* @param nick The user's unique nick name.
*/
public void setNick(final String nick) {
this.nick = nick;
}
/**
* Gets the time when the last idle message came from this user.
*
* @return The time of the last idle message.
*/
public long getLastIdle() {
return lastIdle;
}
/**
* Sets the time when the last idle message came from this user.
*
* @param lastIdle The time of the last idle message.
*/
public void setLastIdle(final long lastIdle) {
this.lastIdle = lastIdle;
}
/**
* Checks if the user is away.
*
* @return If the user is away.
*/
public boolean isAway() {
return away;
}
/**
* Sets if the user is away.
*
* @param away If the user is away.
*/
public void setAway(final boolean away) {
this.away = away;
}
/**
* Gets the user's away message.
*
* @return The user's away message.
*/
public String getAwayMsg() {
return awayMsg;
}
/**
* Sets the user's away message.
*
* @param awayMsg The user's away message.
*/
public void setAwayMsg(final String awayMsg) {
this.awayMsg = awayMsg;
}
/**
* Checks if the user is writing.
*
* @return If the user is writing.
*/
public boolean isWriting() {
return writing;
}
/**
* Sets if the user is writing.
*
* @param writing If the user is writing.
*/
public void setWriting(final boolean writing) {
this.writing = writing;
}
/**
* Gets the user's ip address.
*
* @return The user's ip address.
*/
public String getIpAddress() {
return ipAddress;
}
/**
* Sets the user's ip address.
*
* @param ipAddress The user's ip address.
*/
public void setIpAddress(final String ipAddress) {
this.ipAddress = ipAddress;
}
/**
* Gets the user's operating system.
*
* @return The user's operating system.
*/
public String getOperatingSystem() {
return operatingSystem;
}
/**
* Sets the user's operating system.
*
* @param operatingSystem The user's operating system.
*/
public void setOperatingSystem(final String operatingSystem) {
this.operatingSystem = operatingSystem;
}
/**
* Gets the time when the user logged on.
*
* @return The time when the user logged on.
*/
public long getLogonTime() {
return logonTime;
}
/**
* Sets the time when the user logged on.
*
* @param logonTime The time when the user logged on.
*/
public void setLogonTime(final long logonTime) {
this.logonTime = logonTime;
}
/**
* Gets the client the user is using.
*
* @return The client the user is using.
*/
public String getClient() {
return client;
}
/**
* Sets the client the user is using.
*
* @param client The client the user is using.
*/
public void setClient(final String client) {
this.client = client;
}
/**
* Gets the private chat window connected to this user.
*
* @return The user's private chat window.
*/
public PrivateChatWindow getPrivchat() {
return privchat;
}
/**
* Sets the private chat window connected to this user.
*
* @param privchat The user's private chat window.
*/
public void setPrivchat(final PrivateChatWindow privchat) {
this.privchat = privchat;
}
/**
* Checks if a new unread message has arrived in the main chat.
*
* @return If a new message has arrived.
*/
public boolean isNewMsg() {
return newMsg;
}
/**
* Sets if a new unread message has arrived in the main chat.
*
* @param newMsg If a new message has arrived.
*/
public void setNewMsg(final boolean newMsg) {
this.newMsg = newMsg;
}
/**
* Gets the port to use when sending private chat messages to this user.
*
* @return The port to use for private chat with the user.
*/
public int getPrivateChatPort() {
return privateChatPort;
}
/**
* Sets the port to use when sending private chat messages to this user.
*
* @param privateChatPort The port to use for private chat with the user.
*/
public void setPrivateChatPort(final int privateChatPort) {
this.privateChatPort = privateChatPort;
}
/**
* Checks if this user is logged on to the chat.
*
* @return If the user is online.
*/
public boolean isOnline() {
return online;
}
/**
* Sets if this user is logged on to the chat.
*
* @param online If the user is online.
*/
public void setOnline(final boolean online) {
this.online = online;
}
/**
* Checks if a new unread private message has arrived.
*
* @return If a new private message has arrived.
*/
public boolean isNewPrivMsg() {
return newPrivMsg;
}
/**
* Sets if a new unread private message has arrived.
*
* @param newPrivMsg If a new private message has arrived.
*/
public void setNewPrivMsg(final boolean newPrivMsg) {
this.newPrivMsg = newPrivMsg;
}
/**
* Gets the host name of the user.
*
* @return The host name.
*/
public String getHostName() {
return hostName;
}
/**
* Sets the host name of the user.
*
* @param hostName The host name.
*/
public void setHostName(final String hostName) {
this.hostName = hostName;
}
/**
* Gets the chat logger for this user.
*
* @return The private chat logger for this user.
*/
public ChatLogger getPrivateChatLogger() {
return privateChatLogger;
}
/**
* Sets the chat logger for this user.
*
* @param privateChatLogger The chat logger instance to use for logging messages with this user.
*/
public void setPrivateChatLogger(final ChatLogger privateChatLogger) {
this.privateChatLogger = privateChatLogger;
}
/**
* Returns the nick name.
*
* {@inheritDoc}
*/
@Override
public String toString() {
return nick;
}
/**
* Sorts by nick name alphabetically.
*
* {@inheritDoc}
*/
@Override
public int compareTo(final User compNick) {
return nick.compareToIgnoreCase(compNick.getNick());
}
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
final User user = (User) o;
return code == user.code;
}
@Override
public int hashCode() {
return code;
}
}