/** * $RCSfile$ * $Revision$ * $Date$ * * Copyright 2003-2007 Jive Software. * * All rights reserved. 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 org.jivesoftware.smack.packet; import org.jivesoftware.smack.util.StringUtils; /** * Represents XMPP message packets. A message can be one of several types: * * * * For each message type, different message fields are typically used as follows: *

* * * * * * * *
 Message type
FieldNormalChatGroup ChatHeadlineXMPPError
subject SHOULDSHOULD NOTSHOULD NOTSHOULD NOTSHOULD NOT
thread OPTIONALSHOULDOPTIONALOPTIONALSHOULD NOT
body SHOULDSHOULDSHOULDSHOULDSHOULD NOT
error MUST NOTMUST NOTMUST NOTMUST NOTMUST
* * @author Matt Tucker */ public class Message extends Packet { private Type type = Type.normal; private String subject = null; private String body = null; private String thread = null; /** * Creates a new, "normal" message. */ public Message() { } /** * Creates a new "normal" message to the specified recipient. * * @param to the recipient of the message. */ public Message(String to) { if (to == null) { throw new IllegalArgumentException("Parameter cannot be null"); } setTo(to); } /** * Creates a new message of the specified type to a recipient. * * @param to the user to send the message to. * @param type the message type. */ public Message(String to, Type type) { if (to == null || type == null) { throw new IllegalArgumentException("Parameters cannot be null."); } setTo(to); this.type = type; } /** * Returns the type of the message. * * @return the type of the message. */ public Type getType() { return type; } /** * Sets the type of the message. * * @param type the type of the message. */ public void setType(Type type) { if (type == null) { throw new IllegalArgumentException("Type cannot be null."); } this.type = type; } /** * Returns the subject of the message, or null if the subject has not been set. * The subject is a short description of message contents. * * @return the subject of the message. */ public String getSubject() { return subject; } /** * Sets the subject of the message. The subject is a short description of * message contents. * * @param subject the subject of the message. */ public void setSubject(String subject) { this.subject = subject; } /** * Returns the body of the message, or null if the body has not been set. The body * is the main message contents. * * @return the body of the message. */ public String getBody() { return body; } /** * Sets the body of the message. The body is the main message contents. * * @param body the body of the message. */ public void setBody(String body) { this.body = body; } /** * Returns the thread id of the message, which is a unique identifier for a sequence * of "chat" messages. If no thread id is set, null will be returned. * * @return the thread id of the message, or null if it doesn't exist. */ public String getThread() { return thread; } /** * Sets the thread id of the message, which is a unique identifier for a sequence * of "chat" messages. * * @param thread the thread id of the message. */ public void setThread(String thread) { this.thread = thread; } public String toXML() { StringBuilder buf = new StringBuilder(); buf.append(""); if (subject != null) { buf.append("").append(StringUtils.escapeForXML(subject)).append(""); } if (body != null) { buf.append("").append(StringUtils.escapeForXML(body)).append(""); } if (thread != null) { buf.append("").append(thread).append(""); } // Append the error subpacket if the message type is an error. if (type == Type.error) { XMPPError error = getError(); if (error != null) { buf.append(error.toXML()); } } // Add packet extensions, if any are defined. buf.append(getExtensionsXML()); buf.append(""); return buf.toString(); } /** * Represents the type of a message. */ public enum Type { /** * (Default) a normal text message used in email like interface. */ normal, /** * Typically short text message used in line-by-line chat interfaces. */ chat, /** * Chat message sent to a groupchat server for group chats. */ groupchat, /** * Text message to be displayed in scrolling marquee displays. */ headline, /** * indicates a messaging error. */ error; public static Type fromString(String name) { try { return Type.valueOf(name); } catch (Exception e) { return normal; } } } }