/*
* Jitsi, 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.irc;
import net.java.sip.communicator.service.protocol.*;
/**
* Very simple message implementation for the IRC protocol.
*
* @author Stephane Remy
* @author Loic Kempf
* @author Lubomir Marinov
* @author Danny van Heumen
*/
public class MessageIrcImpl
extends AbstractMessage
{
/**
* Default encoding for outgoing messages.
*/
public static final String DEFAULT_MIME_ENCODING = "UTF-8";
/**
* Default mime type for outgoing messages.
*/
public static final String DEFAULT_MIME_TYPE = "text/plain";
/**
* Default mime type for HTML messages.
*/
public static final String HTML_MIME_TYPE = "text/html";
/**
* Create a Message instance from a piece of text directly from IRC. This
* text might contain control characters for formatting as well as html
* entities that have yet to be escaped.
*
* The IRC message is parsed, control codes replaced with html tags and html
* entities in the original message are escaped.
*
* @param message the message from IRC
* @return returns a Message instance with content
*/
public static MessageIrcImpl newMessageFromIRC(final String message)
{
String text = Utils.parseIrcMessage(message);
text = Utils.styleAsMessage(text);
return new MessageIrcImpl(text, HTML_MIME_TYPE, DEFAULT_MIME_ENCODING,
null);
}
/**
* Create a new instance from an IRC text and parse the IRC message. (See
* {@link #newMessageFromIRC(String)}.)
*
* @param user the originating user
* @param message the IRC notice message
* @return returns a new message instance
*/
public static MessageIrcImpl newNoticeFromIRC(
final ChatRoomMemberIrcImpl user, final String message)
{
return newNoticeFromIRC(user.getContactAddress(), message);
}
/**
* Create a new instance from an IRC text and parse the IRC message. (See
* {@link #newMessageFromIRC(String)}.)
*
* @param user the originating user
* @param message the IRC notice message
* @return returns a new message instance
*/
public static MessageIrcImpl newNoticeFromIRC(final Contact user,
final String message)
{
return newNoticeFromIRC(user.getAddress(), message);
}
/**
* Construct the new notice message.
*
* @param user the originating user
* @param message the IRC notice message
* @return returns a new message instance
*/
private static MessageIrcImpl newNoticeFromIRC(final String user,
final String message)
{
String text = Utils.parseIrcMessage(message);
text = Utils.styleAsNotice(text, user);
return new MessageIrcImpl(text, HTML_MIME_TYPE, DEFAULT_MIME_ENCODING,
null);
}
/**
* Construct the new action message.
*
* @param message the IRC action message
* @return returns a new message instance
*/
public static MessageIrcImpl newActionFromIRC(final String message)
{
String text = Utils.parseIrcMessage(message);
return new MessageIrcImpl("/me " + text, HTML_MIME_TYPE,
DEFAULT_MIME_ENCODING, null);
}
/**
* Construct the new away message.
*
* @param message the IRC away message
* @return returns a new message instance
*/
public static MessageIrcImpl newAwayMessageFromIRC(final String message)
{
String text = Utils.parseIrcMessage(message);
text = Utils.styleAsAwayMessage(text);
return new MessageIrcImpl(text, HTML_MIME_TYPE, DEFAULT_MIME_ENCODING,
null);
}
/**
* Creates a message instance according to the specified parameters.
*
* @param content the message body
* @param contentType message content type or null for text/plain
* @param contentEncoding message encoding or null for UTF8
* @param subject the subject of the message or null for no subject.
*/
public MessageIrcImpl(final String content, final String contentType,
final String contentEncoding, final String subject)
{
super(content, contentType, contentEncoding, subject);
}
/**
* Checks if this message is a command. In IRC all messages that start with
* the '/' character are commands.
*
* @return TRUE if this Message is a command, FALSE otherwise
*/
public boolean isCommand()
{
return getContent().startsWith("/");
}
/**
* Checks if this message is an action. All message starting with '/me' are
* actions.
*
* @return TRUE if this message is an action, FALSE otherwise
*/
public boolean isAction()
{
return getContent().startsWith("/me ");
}
/**
* Sets the content to this Message. Used to change the content,
* before showing action messages to the user.
*
* @param messageContent the new message content
*/
@Override
protected void setContent(final String messageContent)
{
super.setContent(messageContent);
}
}