/* * Juick * Copyright (C) 2008-2011, Ugnich Anton * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package com.juick.xmpp.extensions; import com.juick.xmpp.utils.XmlUtils; import com.juick.xmpp.*; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.TimeZone; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; /** * * @author Ugnich Anton */ public class JuickMessage extends com.juick.Message implements StanzaChild { public final static String XMLNS = "http://juick.com/message"; public final static String TagName = "juick"; private SimpleDateFormat df; public JuickMessage() { df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); df.setTimeZone(TimeZone.getTimeZone("UTC")); } public JuickMessage(com.juick.Message msg) { super(msg); df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); df.setTimeZone(TimeZone.getTimeZone("UTC")); } @Override public String getXMLNS() { return XMLNS; } @Override public JuickMessage parse(XmlPullParser parser) throws XmlPullParserException, IOException, ParseException { JuickMessage jmsg = new JuickMessage(); final String sMID = parser.getAttributeValue(null, "mid"); if (sMID != null) { jmsg.setMID(Integer.parseInt(sMID)); } final String sRID = parser.getAttributeValue(null, "rid"); if (sRID != null) { jmsg.setRID(Integer.parseInt(sRID)); } final String sReplyTo = parser.getAttributeValue(null, "replyto"); if (sReplyTo != null) { jmsg.ReplyTo = Integer.parseInt(sReplyTo); } final String sPrivacy = parser.getAttributeValue(null, "privacy"); if (sPrivacy != null) { jmsg.Privacy = Integer.parseInt(sPrivacy); } final String sFriendsOnly = parser.getAttributeValue(null, "friendsonly"); if (sFriendsOnly != null) { jmsg.FriendsOnly = true; } final String sReadOnly = parser.getAttributeValue(null, "readonly"); if (sReadOnly != null) { jmsg.ReadOnly = true; } String timestampString = parser.getAttributeValue(null, "ts"); if (timestampString != null) { jmsg.setDate(df.parse(timestampString)); } jmsg.AttachmentType = parser.getAttributeValue(null, "attach"); while (parser.next() == XmlPullParser.START_TAG) { final String tag = parser.getName(); final String xmlns = parser.getNamespace(); if (tag.equals("body")) { jmsg.setText(XmlUtils.getTagText(parser)); } else if (tag.equals(JuickUser.TagName) && xmlns != null && xmlns.equals(JuickUser.XMLNS)) { jmsg.setUser(new JuickUser().parse(parser)); } else if (tag.equals("tag")) { jmsg.Tags.add(XmlUtils.getTagText(parser)); } else { XmlUtils.skip(parser); } } return jmsg; } @Override public String toString() { String ret = ""; ret = "<" + TagName + " xmlns=\"" + XMLNS + "\""; if (getMID() > 0) { ret += " mid=\"" + getMID() + "\""; } if (getRID() > 0) { ret += " rid=\"" + getRID() + "\""; } if (ReplyTo > 0) { ret += " replyto=\"" + ReplyTo + "\""; } ret += " privacy=\"" + Privacy + "\""; if (FriendsOnly) { ret += " friendsonly=\"1\""; } if (ReadOnly) { ret += " readonly=\"1\""; } if (getDate() != null) { ret += " ts=\"" + df.format(getDate()) + "\""; } if (AttachmentType != null) { ret += " attach=\"" + AttachmentType + "\""; } ret += ">"; if (getUser() != null) { ret += JuickUser.toString(getUser()); } if (getText() != null) { ret += "" + XmlUtils.escape(getText()) + ""; } if (!Tags.isEmpty()) { for (String Tag : Tags) { ret += "" + XmlUtils.escape(Tag) + ""; } } ret += ""; return ret; } @Override public boolean equals(Object obj) { if (!(obj instanceof JuickMessage)) { return false; } JuickMessage jmsg = (JuickMessage) obj; return (this.getMID() == jmsg.getMID() && this.getRID() == jmsg.getRID()); } @Override public int compareTo(Object obj) throws ClassCastException { if (!(obj instanceof JuickMessage)) { throw new ClassCastException(); } JuickMessage jmsg = (JuickMessage) obj; if (this.getMID() != jmsg.getMID()) { if (this.getMID() > jmsg.getMID()) { return -1; } else { return 1; } } if (this.getRID() != jmsg.getRID()) { if (this.getRID() < jmsg.getRID()) { return -1; } else { return 1; } } return 0; } }