/**
*
*/
package com.beem.project.beem.service;
import org.jivesoftware.smack.packet.XMPPError;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
/**
* This class represents a instant message.
*
* @author darisk
*/
public class Message implements Parcelable {
/**
* Normal message type. Theese messages are like an email, with subject.
*/
public static final int MSG_TYPE_NORMAL = 100;
/**
* Chat message type.
*/
public static final int MSG_TYPE_CHAT = 200;
/**
* Group chat message type.
*/
public static final int MSG_TYPE_GROUP_CHAT = 300;
/**
* Error message type.
*/
public static final int MSG_TYPE_ERROR = 400;
private int mType;
private String mBody;
private String mSubject;
private String mTo;
private String mThread;
// TODO ajouter l'erreur
/**
* Parcelable.Creator needs by Android.
*/
public static final Parcelable.Creator<Message> CREATOR = new Parcelable.Creator<Message>() {
@Override
public Message createFromParcel(
Parcel source) {
return new Message(source);
}
@Override
public Message[] newArray(int size) {
return new Message[size];
}
};
public Message(org.jivesoftware.smack.packet.Message smackMsg) {
this(smackMsg.getTo());
switch (smackMsg.getType()) {
case chat:
mType = MSG_TYPE_CHAT;
break;
case groupchat:
mType = MSG_TYPE_GROUP_CHAT;
break;
case normal:
mType = MSG_TYPE_NORMAL;
break;
// TODO gerer les message de type error
// this a little work around waiting for a better handling of error messages
case error:
mType = MSG_TYPE_ERROR;
break;
default:
Log.w("BEEM_MESSAGE", "type de message non gerer" + smackMsg.getType());
break;
}
if (mType == MSG_TYPE_ERROR) {
XMPPError er = smackMsg.getError();
String msg = er.getMessage();
if (msg != null)
mBody = msg;
else
mBody = er.getCondition();
} else {
mBody = smackMsg.getBody();
mSubject = smackMsg.getSubject();
mThread = smackMsg.getThread();
}
}
/**
* Construct a message from a parcel.
*
* @param in
* parcel to use for construction
*/
private Message(final Parcel in) {
mType = in.readInt();
mTo = in.readString();
mBody = in.readString();
mSubject = in.readString();
mThread = in.readString();
}
/**
* Constructor a message of type chat.
*
* @param to
* the destinataire of the message
*/
public Message(final String to) {
this(to, MSG_TYPE_CHAT);
}
/**
* Constructor.
*
* @param to
* the destinataire of the message
* @param type
* the message type
*/
public Message(final String to, final int type) {
mTo = to;
mType = type;
mBody = "";
mSubject = "";
mThread = "";
}
/**
* {@inheritDoc}
*/
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
/**
* Get the body of the message.
*
* @return the Body of the message
*/
public String getBody() {
return mBody;
}
/**
* Get the subject of the message.
*
* @return the subject
*/
public String getSubject() {
return mSubject;
}
/**
* Get the thread of the message.
*
* @return the thread
*/
public String getThread() {
return mThread;
}
/**
* Get the destinataire of the message.
*
* @return the destinataire of the message
*/
public String getTo() {
return mTo;
}
/**
* Get the type of the message.
*
* @return the type of the message.
*/
public int getType() {
return mType;
}
/**
* Set the body of the message.
*
* @param body
* the body to set
*/
public void setBody(String body) {
mBody = body;
}
/**
* Set the subject of the message.
*
* @param subject
* the subject to set
*/
public void setSubject(String subject) {
mSubject = subject;
}
/**
* Set the thread of the message.
*
* @param thread
* the thread to set
*/
public void setThread(String thread) {
mThread = thread;
}
/**
* Set the destinataire of the message.
*
* @param to
* the destinataire to set
*/
public void setTo(String to) {
mTo = to;
}
/**
* Set the type of the message.
*
* @param type
* the type to set
*/
public void setType(int type) {
mType = type;
}
/**
* {@inheritDoc}
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeInt(mType);
dest.writeString(mTo);
dest.writeString(mBody);
dest.writeString(mSubject);
dest.writeString(mThread);
}
}