diff options
Diffstat (limited to 'src/test')
3 files changed, 255 insertions, 2 deletions
diff --git a/src/test/java/com/juick/tests/SerializationTests.java b/src/test/java/com/juick/tests/SerializationTests.java index 61b86c5f..022a1bc7 100644 --- a/src/test/java/com/juick/tests/SerializationTests.java +++ b/src/test/java/com/juick/tests/SerializationTests.java @@ -6,7 +6,6 @@ import com.juick.Message; import com.juick.Tag; import com.juick.User; import com.juick.json.MessageSerializer; -import com.juick.json.UserSerializer; import com.juick.xmpp.extensions.JuickMessage; import org.json.JSONObject; import org.junit.Test; @@ -14,7 +13,10 @@ import org.w3c.dom.Document; import org.xml.sax.InputSource; import org.xml.sax.SAXException; -import javax.xml.bind.*; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; diff --git a/src/test/java/com/juick/xmpp/extensions/JuickMessage.java b/src/test/java/com/juick/xmpp/extensions/JuickMessage.java new file mode 100644 index 00000000..ae7fc89c --- /dev/null +++ b/src/test/java/com/juick/xmpp/extensions/JuickMessage.java @@ -0,0 +1,173 @@ +/* + * 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 <http://www.gnu.org/licenses/>. + */ +package com.juick.xmpp.extensions; + +import com.juick.Tag; +import com.juick.util.DateFormattersHolder; +import com.juick.xmpp.StanzaChild; +import com.juick.xmpp.utils.XmlUtils; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; +import java.text.ParseException; + +/** + * @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"; + + public JuickMessage() { + } + + public JuickMessage(com.juick.Message msg) { + super(msg); + } + + @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.setReplyto(Integer.parseInt(sReplyTo)); + } + final String sPrivacy = parser.getAttributeValue(null, "privacy"); + if (sPrivacy != null) { + jmsg.setPrivacy(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 ts = parser.getAttributeValue(null, "ts"); + if (ts != null) { + jmsg.setDate(DateFormattersHolder.getMessageFormatterInstance().parse(ts)); + } + jmsg.setAttachmentType(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.getTags().add(new Tag(XmlUtils.getTagText(parser))); + } else { + XmlUtils.skip(parser); + } + } + return jmsg; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + + builder.append("<").append(TagName).append(" xmlns=\"").append(XMLNS).append("\""); + + if (getMid() > 0) + builder.append(" mid=\"").append(getMid()).append("\""); + + if (getRid() > 0) + builder.append(" rid=\"").append(getRid()).append("\""); + + if (getReplyto() > 0) + builder.append(" replyto=\"").append(getReplyto()).append("\""); + + builder.append(" privacy=\"").append(getPrivacy()).append("\""); + + if (FriendsOnly) + builder.append(" friendsonly=\"1\""); + + if (ReadOnly) + builder.append(" readonly=\"1\""); + + if (getDate() != null) + builder.append(" ts=\"") + .append(DateFormattersHolder.getMessageFormatterInstance().format(getDate())) + .append("\""); + + if (getAttachmentType() != null) + builder.append(" attach=\"").append(getAttachmentType()).append("\""); + + builder.append(">"); + + if (getUser() != null) + builder.append(JuickUser.toString(getUser())); + + if (getText() != null) + builder.append("<body>").append(XmlUtils.escape(getText())).append("</body>"); + + for (com.juick.Tag tag : getTags()) + builder.append("<tag>").append(XmlUtils.escape(tag.getName())).append("</tag>"); + + builder.append("</").append(TagName).append(">"); + + return builder.toString(); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) + return true; + + 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 == this) + return 0; + + if (!(obj instanceof JuickMessage)) + throw new ClassCastException(); + + JuickMessage jmsg = (JuickMessage) obj; + int cmp = Integer.compare(jmsg.getMid(), getMid()); + if (cmp == 0) + cmp = Integer.compare(getRid(), jmsg.getRid()); + + return cmp; + } +} diff --git a/src/test/java/com/juick/xmpp/extensions/JuickUser.java b/src/test/java/com/juick/xmpp/extensions/JuickUser.java new file mode 100644 index 00000000..08e38c41 --- /dev/null +++ b/src/test/java/com/juick/xmpp/extensions/JuickUser.java @@ -0,0 +1,78 @@ +/* + * 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 <http://www.gnu.org/licenses/>. + */ +package com.juick.xmpp.extensions; + +import com.juick.xmpp.StanzaChild; +import com.juick.xmpp.utils.XmlUtils; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; + +/** + * @author Ugnich Anton + */ +public class JuickUser extends com.juick.User implements StanzaChild { + public final static String XMLNS = "http://juick.com/user"; + public final static String TagName = "user"; + + public JuickUser() { + } + + public JuickUser(com.juick.User user) { + super(user); + } + + @Override + public String getXMLNS() { + return XMLNS; + } + + @Override + public JuickUser parse(final XmlPullParser parser) throws XmlPullParserException, IOException { + JuickUser juser = new JuickUser(); + String strUID = parser.getAttributeValue(null, "uid"); + if (strUID != null) { + juser.setUid(Integer.parseInt(strUID)); + } + juser.setName(parser.getAttributeValue(null, "uname")); + XmlUtils.skip(parser); + return juser; + } + + public static String toString(com.juick.User user) { + StringBuilder builder = new StringBuilder(); + + builder.append("<").append(TagName).append(" xmlns='").append(XMLNS).append("'"); + + if (user.getUid() > 0) + builder.append(" uid='").append(user.getUid()).append("'"); + + if (user.getName() != null && user.getName().length() > 0) + builder.append(" uname='").append(XmlUtils.escape(user.getName())).append("'"); + + builder.append("/>"); + + return builder.toString(); + } + + @Override + public String toString() { + return toString(this); + } +} |