/* * Copyright (c) 1998-2011 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source 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, or any warranty * of NON-INFRINGEMENT. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * * Free Software Foundation, Inc. * 59 Temple Place, Suite 330 * Boston, MA 02111-1307 USA * * @author Scott Ferguson */ package com.caucho.xmpp.im; import com.caucho.xmpp.im.Text; import java.io.Serializable; import java.util.*; /** * IM message - RFC 3921 * * <pre> * element message{xmlns="jabber:client"} { * attribute from? * & attribute to? * & attribute id? * & attribute type? * * & subject* * & body* * & thread? * & other* * } * * element body { * attribute xml:lang? * & string * } * * element subject { * attribute xml:lang? * & string * } * * element thread { * & string * } * </pre> */ public class ImMessage implements Serializable { private String _to; private String _from; // chat, error, groupchat, headline, normal private String _type = "normal"; private Text []_subject; private Text []_body; private String _thread; private Serializable []_extra; private ImMessage() { } public ImMessage(String body) { _type = "chat"; _body = new Text[] { new Text(body) }; } public ImMessage(String type, String body) { _type = type; _body = new Text[] { new Text(body) }; } public ImMessage(String to, String from, String body) { _type = "chat"; _to = to; _from = from; _body = new Text[] { new Text(body) }; } public ImMessage(String to, String from, String body, Serializable extra) { _type = "chat"; _to = to; _from = from; _body = new Text[] { new Text(body) }; _extra = new Serializable[] { extra }; } public ImMessage(String to, String from, String body, Serializable []extra) { _type = "chat"; _to = to; _from = from; _body = new Text[] { new Text(body) }; _extra = extra; } public ImMessage(String to, String from, String type, Text []subject, Text []body, String thread, Serializable []extra) { _to = to; _from = from; _type = type; _subject = subject; _body = body; _thread = thread; _extra = extra; } public String getTo() { return _to; } public String getFrom() { return _from; } public String getType() { return _type; } public Text []getSubjects() { return _subject; } public String getSubjectString() { if (_subject == null || _subject.length == 0) return null; else return _subject[0].getValue(); } public Text []getBodys() { return _body; } public String getBodyString() { if (_body == null || _body.length == 0) return null; else return _body[0].getValue(); } public void setThread(String thread) { _thread = thread; } public String getThread() { return _thread; } public Serializable []getExtra() { return _extra; } public void setExtra(Serializable []extra) { _extra = extra; } public void setExtraList(ArrayList<Serializable> extraList) { if (extraList != null && extraList.size() > 0) { _extra = new Serializable[extraList.size()]; extraList.toArray(_extra); } else _extra = null; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(getClass().getSimpleName()); sb.append("["); sb.append(_type); if (_to != null) sb.append(",to=").append(_to); if (_from != null) sb.append(",from=").append(_from); if (_subject != null) { for (Text text : _subject) { if (text.getLang() != null) { sb.append(",subject(").append(text.getLang()).append(")='"); } else sb.append(",subject='"); sb.append(text.getValue()); sb.append("'"); } } if (_body != null && _body.length != 0) { for (Text text : _body) { if (text.getLang() != null) { sb.append(",body(").append(text.getLang()).append(")='"); } else sb.append(",body='"); sb.append(text.getValue()); sb.append("'"); } } if (_thread != null) { sb.append(",thread="); sb.append(_thread); } if (_extra != null) { for (Serializable extra : _extra) sb.append(",extra=").append(extra); } sb.append("]"); return sb.toString(); } }