From 158a5ca03eea87054c4cb19d7f0de872059c6000 Mon Sep 17 00:00:00 2001 From: Tarun Gupta Date: Wed, 11 Mar 2015 01:30:51 +0530 Subject: Add functionality for CapsInfo Adds the Element, Parser, Serializer and CapsInfoSerializerTest. License: This patch is BSD-licensed, see Documentation/Licenses/BSD-simplified.txt for details. Test-Information: Ported serializer test from Swiften, which passes. Change-Id: Iefc10f49732c835f1f17e5da00dabed899da975e diff --git a/src/com/isode/stroke/elements/CapsInfo.java b/src/com/isode/stroke/elements/CapsInfo.java new file mode 100644 index 0000000..9c2e937 --- /dev/null +++ b/src/com/isode/stroke/elements/CapsInfo.java @@ -0,0 +1,134 @@ +package com.isode.stroke.elements; + +import com.isode.stroke.base.NotNull; +import java.lang.Comparable; + +public class CapsInfo extends Payload implements Comparable { + + private String node_; + private String version_; + private String hash_; + + /** + * Initialize private variables + */ + public void init(String node, String version, String hash) { + NotNull.exceptIfNull(node, "node"); + NotNull.exceptIfNull(version, "version"); + NotNull.exceptIfNull(hash, "hash"); + this.node_ = node; + this.version_ = version; + this.hash_ = hash; + } + + /** + * CapsInfo(); + */ + public CapsInfo() { + init("", "", "sha-1"); + } + + /** + * CapsInfo(node, "", "sha-1"); + */ + public CapsInfo(String node) { + init(node, "", "sha-1"); + } + + /** + * CapsInfo(node, version, "sha-1"); + */ + public CapsInfo(String node, String version) { + init(node, version, "sha-1"); + } + + /** + * + * @param node CapsInfo node, notnull. + * @param node CapsInfo version, notnull. + * @param node CapsInfo hash, notnull. + */ + public CapsInfo(String node, String version, String hash) { + init(node, version, hash); + } + + @Override + public boolean equals(Object other) { + + if ((!(other instanceof CapsInfo)) || other == null) { + return false; + } + + CapsInfo guest = (CapsInfo) other; + return (node_.equals(guest.node_)) && (version_.equals(guest.version_)) && (hash_.equals(guest.hash_)); + } + + @Override + public int compareTo(CapsInfo other) { + if(other == null) { + return -1; + } + if (node_.equals(other.node_)) { + if (version_.equals(other.version_)) { + return hash_.compareTo(other.hash_); + } + else { + return version_.compareTo(other.version_); + } + } + else { + return node_.compareTo(other.node_); + } + } + + /** + * + * @return Node, notnull. + */ + public String getNode() { + return node_; + } + + /** + * + * @param node, notnull. + */ + public void setNode(String node) { + NotNull.exceptIfNull(node, "node"); + this.node_ = node; + } + + /** + * + * @return version, notnull. + */ + public String getVersion() { + return version_; + } + + /** + * + * @param version, notnull. + */ + public void setVersion(String version) { + NotNull.exceptIfNull(version, "version"); + this.version_ = version; + } + + /** + * + * @return hash, notnull. + */ + public String getHash() { + return hash_; + } + + /** + * + * @param hash, notnull. + */ + public void setHash(String hash) { + NotNull.exceptIfNull(hash, "hash"); + this.hash_ = hash; + } +} diff --git a/src/com/isode/stroke/parser/payloadparsers/CapsInfoParser.java b/src/com/isode/stroke/parser/payloadparsers/CapsInfoParser.java new file mode 100644 index 0000000..de0053f --- /dev/null +++ b/src/com/isode/stroke/parser/payloadparsers/CapsInfoParser.java @@ -0,0 +1,40 @@ +package com.isode.stroke.parser.payloadparsers; + +import com.isode.stroke.parser.GenericPayloadParser; +import com.isode.stroke.parser.AttributeMap; +import com.isode.stroke.elements.CapsInfo; +import com.isode.stroke.base.NotNull; + +public class CapsInfoParser extends GenericPayloadParser { + + private int level_ = 0; + + /** + * CapsInfoParser(); + */ + public CapsInfoParser() { + super(new CapsInfo()); + } + + /** + * @param attributes, notnull. + */ + public void handleStartElement(String element, String ns, AttributeMap attributes) { + NotNull.exceptIfNull(attributes, "attributes"); + if (this.level_ == 0) { + getPayloadInternal().setHash(attributes.getAttribute("hash")); + getPayloadInternal().setNode(attributes.getAttribute("node")); + getPayloadInternal().setVersion(attributes.getAttribute("ver")); + } + ++level_; + } + + public void handleEndElement(String element, String ns) { + --level_; + } + + public void handleCharacterData(String data) { + + } + +} diff --git a/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java b/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java index 4eeb741..e9d0fc1 100644 --- a/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java +++ b/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java @@ -31,6 +31,7 @@ public class FullPayloadParserFactoryCollection extends PayloadParserFactoryColl addFactory(new RosterParserFactory()); addFactory(new GenericPayloadParserFactory("query", "http://jabber.org/protocol/disco#info", DiscoInfoParser.class)); addFactory(new GenericPayloadParserFactory("query", "http://jabber.org/protocol/disco#items", DiscoItemsParser.class)); + addFactory(new GenericPayloadParserFactory ("c", "http://jabber.org/protocol/caps", CapsInfoParser.class)); //addFactory(new CapsInfoParserFactory()); addFactory(new ResourceBindParserFactory()); addFactory(new StartSessionParserFactory()); diff --git a/src/com/isode/stroke/serializer/payloadserializers/CapsInfoSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/CapsInfoSerializer.java new file mode 100644 index 0000000..2aeacb4 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/CapsInfoSerializer.java @@ -0,0 +1,26 @@ +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.serializer.GenericPayloadSerializer; +import com.isode.stroke.elements.CapsInfo; +import com.isode.stroke.base.NotNull; +import com.isode.stroke.serializer.xml.XMLElement; + +public class CapsInfoSerializer extends GenericPayloadSerializer { + + /** + * CapsInfoSerializer(); + */ + public CapsInfoSerializer() { + super(CapsInfo.class); + } + + @Override + protected String serializePayload(CapsInfo capsInfo) { + NotNull.exceptIfNull(capsInfo, "capsInfo"); + XMLElement capsElement = new XMLElement("c", "http://jabber.org/protocol/caps"); + capsElement.setAttribute("node", capsInfo.getNode()); + capsElement.setAttribute("hash", capsInfo.getHash()); + capsElement.setAttribute("ver", capsInfo.getVersion()); + return capsElement.serialize(); + } +} \ No newline at end of file diff --git a/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java b/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java index 591b6ce..83a252f 100644 --- a/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java +++ b/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java @@ -38,7 +38,7 @@ public class FullPayloadSerializerCollection extends PayloadSerializerCollection //addSerializer(new StatusShowSerializer()); addSerializer(new DiscoInfoSerializer()); addSerializer(new DiscoItemsSerializer()); - //addSerializer(new CapsInfoSerializer()); + addSerializer(new CapsInfoSerializer()); addSerializer(new ResourceBindSerializer()); addSerializer(new StartSessionSerializer()); //addSerializer(new SecurityLabelSerializer()); diff --git a/test/com/isode/stroke/serializer/payloadserializers/CapsInfoSerializerTest.java b/test/com/isode/stroke/serializer/payloadserializers/CapsInfoSerializerTest.java new file mode 100644 index 0000000..babaad1 --- /dev/null +++ b/test/com/isode/stroke/serializer/payloadserializers/CapsInfoSerializerTest.java @@ -0,0 +1,19 @@ +package com.isode.stroke.serializer.payloadserializers; + +import static org.junit.Assert.assertEquals; + +import org.junit.BeforeClass; +import org.junit.Test; +import src.com.isode.stroke.elements.CapsInfo; +import src.com.isode.stroke.serializer.payloadserializers.CapsInfoSerializer; + +public class CapsInfoSerializerTest { + + @Test + public void testSerialize() { + CapsInfoSerializer testling = new CapsInfoSerializer(); + CapsInfo priority = new CapsInfo("http://swift.im", "myversion", "sha-1"); + String expected = ""; + assertEquals(expected, testling.serialize(priority)); + } +} \ No newline at end of file -- cgit v0.10.2-6-g49f6