summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGurmeen Bindra <gurmeen.bindra@isode.com>2012-04-17 09:29:05 (GMT)
committerKevin Smith <git@kismith.co.uk>2012-04-19 10:45:53 (GMT)
commitd9d9451156ee8a4315de30571131d114af205fa1 (patch)
tree24d0dfb36be867651c39ff6898c944ed035e7f5b /src/com/isode/stroke/parser/payloadparsers
parentb54bc5406f95902ce2438ac64a19390ae0f2f409 (diff)
downloadstroke-d9d9451156ee8a4315de30571131d114af205fa1.zip
stroke-d9d9451156ee8a4315de30571131d114af205fa1.tar.bz2
Port MUC Payload Parsers from Swiften to Stroke
This patch ports the MUC Payload parsers from swiften to stroke. Test-information: ported junits work fine
Diffstat (limited to 'src/com/isode/stroke/parser/payloadparsers')
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java15
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/MUCAdminPayloadParser.java36
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/MUCDestroyPayloadParser.java38
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/MUCInvitationPayloadParser.java35
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/MUCItemParser.java72
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/MUCOwnerPayloadParser.java74
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/MUCOwnerPayloadParserFactory.java41
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/MUCUserPayloadParser.java71
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/MUCUserPayloadParserFactory.java41
9 files changed, 420 insertions, 3 deletions
diff --git a/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java b/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java
index 6b67116..1abce76 100644
--- a/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java
+++ b/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java
@@ -46,9 +46,18 @@ public class FullPayloadParserFactoryCollection extends PayloadParserFactoryColl
//addFactory(new PrivateStorageParserFactory(this));
//addFactory(new ChatStateParserFactory());
//addFactory(new DelayParserFactory());
- //addFactory(new MUCUserPayloadParserFactory());
- //addFactory(new NicknameParserFactory());
-
+ addFactory(new MUCUserPayloadParserFactory(this));
+ addFactory(new MUCOwnerPayloadParserFactory(this));
+ addFactory(new GenericPayloadParserFactory<MUCInvitationPayloadParser>("x",
+ "jabber:x:conference",MUCInvitationPayloadParser.class));
+ addFactory(new GenericPayloadParserFactory<MUCAdminPayloadParser>("query",
+ "http://jabber.org/protocol/muc#admin",MUCAdminPayloadParser.class));
+ addFactory(new GenericPayloadParserFactory<MUCDestroyPayloadParser>("destroy",
+ "http://jabber.org/protocol/muc#user",MUCDestroyPayloadParser.class));
+ addFactory(new GenericPayloadParserFactory<MUCDestroyPayloadParser>("destroy",
+ "http://jabber.org/protocol/muc#owner",MUCDestroyPayloadParser.class));
+
+ //addFactory(new NicknameParserFactory());
PayloadParserFactory defaultFactory = new RawXMLPayloadParserFactory();
setDefaultFactory(defaultFactory);
diff --git a/src/com/isode/stroke/parser/payloadparsers/MUCAdminPayloadParser.java b/src/com/isode/stroke/parser/payloadparsers/MUCAdminPayloadParser.java
new file mode 100644
index 0000000..3c3dfb3
--- /dev/null
+++ b/src/com/isode/stroke/parser/payloadparsers/MUCAdminPayloadParser.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2012, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2011, Kevin Smith
+ * All rights reserved.
+ */
+package com.isode.stroke.parser.payloadparsers;
+
+import com.isode.stroke.elements.MUCAdminPayload;
+import com.isode.stroke.elements.MUCItem;
+import com.isode.stroke.parser.GenericPayloadTreeParser;
+import com.isode.stroke.parser.tree.ParserElement;
+
+/**
+ * Class representing a parser for MUC Admin payload
+ *
+ */
+public class MUCAdminPayloadParser extends GenericPayloadTreeParser<MUCAdminPayload>{
+
+ /**
+ * Create the parser
+ */
+ public MUCAdminPayloadParser() {
+ super(new MUCAdminPayload());
+ }
+
+ @Override
+ public void handleTree(ParserElement root) {
+ for (ParserElement itemElement : root.getChildren("item", "http://jabber.org/protocol/muc#admin")) {
+ MUCItem item = MUCItemParser.itemFromTree(itemElement);
+ getPayloadInternal().addItem(item);
+ }
+ }
+}
diff --git a/src/com/isode/stroke/parser/payloadparsers/MUCDestroyPayloadParser.java b/src/com/isode/stroke/parser/payloadparsers/MUCDestroyPayloadParser.java
new file mode 100644
index 0000000..f6b7790
--- /dev/null
+++ b/src/com/isode/stroke/parser/payloadparsers/MUCDestroyPayloadParser.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2012, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2011, Kevin Smith
+ * All rights reserved.
+ */
+package com.isode.stroke.parser.payloadparsers;
+
+import com.isode.stroke.elements.MUCDestroyPayload;
+import com.isode.stroke.jid.JID;
+import com.isode.stroke.parser.GenericPayloadTreeParser;
+import com.isode.stroke.parser.tree.ParserElement;
+
+/**
+ * Class representing a parser for MUC Destroy payload
+ *
+ */
+public class MUCDestroyPayloadParser extends GenericPayloadTreeParser<MUCDestroyPayload> {
+
+ /**
+ * Create the parser
+ */
+ public MUCDestroyPayloadParser() {
+ super(new MUCDestroyPayload());
+ }
+
+ @Override
+ public void handleTree(ParserElement root) {
+ String ns = root.getNamespace();
+ String jid = root.getAttributes().getAttribute("jid");
+ if (jid != null && !jid.isEmpty()) {
+ getPayloadInternal().setNewVenue(new JID(jid));
+ }
+ getPayloadInternal().setReason(root.getChild("reason", ns).getText());
+ }
+}
diff --git a/src/com/isode/stroke/parser/payloadparsers/MUCInvitationPayloadParser.java b/src/com/isode/stroke/parser/payloadparsers/MUCInvitationPayloadParser.java
new file mode 100644
index 0000000..27ab0d8
--- /dev/null
+++ b/src/com/isode/stroke/parser/payloadparsers/MUCInvitationPayloadParser.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2012, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2011, Kevin Smith
+ * All rights reserved.
+ */
+package com.isode.stroke.parser.payloadparsers;
+
+import com.isode.stroke.elements.MUCInvitationPayload;
+import com.isode.stroke.jid.JID;
+import com.isode.stroke.parser.GenericPayloadTreeParser;
+import com.isode.stroke.parser.tree.ParserElement;
+
+/**
+ * Class representing a parser for MUC Invitation payload
+ *
+ */
+public class MUCInvitationPayloadParser extends GenericPayloadTreeParser<MUCInvitationPayload> {
+
+ public MUCInvitationPayloadParser() {
+ super(new MUCInvitationPayload());
+ }
+
+ @Override
+ public void handleTree(ParserElement root) {
+ MUCInvitationPayload invite = getPayloadInternal();
+ invite.setIsContinuation(root.getAttributes().getBoolAttribute("continue", false));
+ invite.setJID(new JID(root.getAttributes().getAttribute("jid")));
+ invite.setPassword(root.getAttributes().getAttribute("password"));
+ invite.setReason(root.getAttributes().getAttribute("reason"));
+ invite.setThread(root.getAttributes().getAttribute("thread"));
+ }
+}
diff --git a/src/com/isode/stroke/parser/payloadparsers/MUCItemParser.java b/src/com/isode/stroke/parser/payloadparsers/MUCItemParser.java
new file mode 100644
index 0000000..1a1bb74
--- /dev/null
+++ b/src/com/isode/stroke/parser/payloadparsers/MUCItemParser.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2012, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2011, Kevin Smith
+ * All rights reserved.
+ */
+package com.isode.stroke.parser.payloadparsers;
+
+import com.isode.stroke.elements.MUCItem;
+import com.isode.stroke.elements.MUCOccupant.Affiliation;
+import com.isode.stroke.elements.MUCOccupant.Role;
+import com.isode.stroke.jid.JID;
+import com.isode.stroke.parser.tree.ParserElement;
+
+/**
+ * Class containing parser functions for MUC Item
+ *
+ */
+public class MUCItemParser {
+
+ /**
+ * Get the MUC Item from the node
+ * @param root XML node element
+ * @return MUC Item, not null
+ */
+ public static MUCItem itemFromTree(ParserElement root) {
+ MUCItem item = new MUCItem();
+ String affiliation = root.getAttributes().getAttribute("affiliation");
+ String role = root.getAttributes().getAttribute("role");
+ String nick = root.getAttributes().getAttribute("nick");
+ String jid = root.getAttributes().getAttribute("jid");
+ item.affiliation = parseAffiliation(affiliation);
+ item.role = parseRole(role);
+ if (!jid.isEmpty()) {
+ item.realJID = new JID(jid);
+ }
+ if (!nick.isEmpty()) {
+ item.nick = nick;
+ }
+ String xmlns = root.getNamespace();
+ String reason = root.getChild("reason", xmlns).getText();
+ String actor = root.getChild("actor", xmlns).getAttributes().getAttribute("jid");
+ if (!reason.isEmpty()) {
+ item.reason = reason;
+ }
+ if (!actor.isEmpty()) {
+ item.actor = new JID(actor);
+ }
+
+ return item;
+ }
+
+ private static Role parseRole(String val) {
+ for(Role role : Role.values()) {
+ if(role.nodeName.equals(val)) {
+ return role;
+ }
+ }
+ return null;
+ }
+
+ private static Affiliation parseAffiliation(String val) {
+ for(Affiliation aff : Affiliation.values()) {
+ if(aff.nodeName.equals(val)) {
+ return aff;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/com/isode/stroke/parser/payloadparsers/MUCOwnerPayloadParser.java b/src/com/isode/stroke/parser/payloadparsers/MUCOwnerPayloadParser.java
new file mode 100644
index 0000000..dd5e186
--- /dev/null
+++ b/src/com/isode/stroke/parser/payloadparsers/MUCOwnerPayloadParser.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2012, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2011, Kevin Smith
+ * All rights reserved.
+ */
+package com.isode.stroke.parser.payloadparsers;
+
+import com.isode.stroke.elements.MUCOwnerPayload;
+import com.isode.stroke.parser.AttributeMap;
+import com.isode.stroke.parser.GenericPayloadParser;
+import com.isode.stroke.parser.PayloadParser;
+import com.isode.stroke.parser.PayloadParserFactory;
+import com.isode.stroke.parser.PayloadParserFactoryCollection;
+
+
+/**
+ * Class representing a parser for MUC Owner payload
+ *
+ */
+public class MUCOwnerPayloadParser extends GenericPayloadParser<MUCOwnerPayload> {
+ private PayloadParserFactoryCollection factories_;
+ private int level;
+ private PayloadParser currentPayloadParser;
+
+ /**
+ * Create the parser
+ * @param factories payload parser factory collection, not null
+ */
+ public MUCOwnerPayloadParser(PayloadParserFactoryCollection factories) {
+ super(new MUCOwnerPayload());
+ this.factories_ = factories;
+ level = 0;
+ }
+
+ @Override
+ public void handleStartElement(String element, String ns, AttributeMap attributes) {
+ if (level == 1) {
+ PayloadParserFactory payloadParserFactory = factories_.getPayloadParserFactory(
+ element, ns, attributes);
+ if (payloadParserFactory != null) {
+ currentPayloadParser = payloadParserFactory.createPayloadParser();
+ }
+ }
+
+ if (level >= 1 && currentPayloadParser != null) {
+ currentPayloadParser.handleStartElement(element, ns, attributes);
+ }
+ ++level;
+ }
+
+ @Override
+ public void handleEndElement(String element, String ns) {
+ --level;
+ if (currentPayloadParser != null) {
+ if (level >= 1) {
+ currentPayloadParser.handleEndElement(element, ns);
+ }
+
+ if (level == 1) {
+ getPayloadInternal().setPayload(currentPayloadParser.getPayload());
+ }
+ }
+ }
+
+ @Override
+ public void handleCharacterData(String data) {
+ if (level > 1 && currentPayloadParser != null) {
+ currentPayloadParser.handleCharacterData(data);
+ }
+ }
+}
diff --git a/src/com/isode/stroke/parser/payloadparsers/MUCOwnerPayloadParserFactory.java b/src/com/isode/stroke/parser/payloadparsers/MUCOwnerPayloadParserFactory.java
new file mode 100644
index 0000000..6d016d9
--- /dev/null
+++ b/src/com/isode/stroke/parser/payloadparsers/MUCOwnerPayloadParserFactory.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2012, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2011, Kevin Smith
+ * All rights reserved.
+ */
+package com.isode.stroke.parser.payloadparsers;
+
+import com.isode.stroke.parser.AttributeMap;
+import com.isode.stroke.parser.PayloadParser;
+import com.isode.stroke.parser.PayloadParserFactory;
+import com.isode.stroke.parser.PayloadParserFactoryCollection;
+
+/**
+ * Factory for MUC Owner Payload Parser
+ *
+ */
+public class MUCOwnerPayloadParserFactory implements PayloadParserFactory {
+
+ private PayloadParserFactoryCollection factories;
+
+ /**
+ * Create the MUC Owner Payload Parser factory
+ * @param factories reference to Payload Parser Factory Collection, not null
+ */
+ public MUCOwnerPayloadParserFactory(PayloadParserFactoryCollection factories) {
+ this.factories = factories;
+ }
+
+ @Override
+ public boolean canParse(String element, String ns, AttributeMap map) {
+ return "query".equals(element) && "http://jabber.org/protocol/muc#owner".equals(ns);
+ }
+
+ @Override
+ public PayloadParser createPayloadParser() {
+ return new MUCOwnerPayloadParser(factories);
+ }
+}
diff --git a/src/com/isode/stroke/parser/payloadparsers/MUCUserPayloadParser.java b/src/com/isode/stroke/parser/payloadparsers/MUCUserPayloadParser.java
new file mode 100644
index 0000000..170e935
--- /dev/null
+++ b/src/com/isode/stroke/parser/payloadparsers/MUCUserPayloadParser.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2012, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2010, Kevin Smith
+ * All rights reserved.
+ */
+package com.isode.stroke.parser.payloadparsers;
+
+import com.isode.stroke.elements.MUCItem;
+import com.isode.stroke.elements.MUCUserPayload;
+import com.isode.stroke.jid.JID;
+import com.isode.stroke.parser.GenericPayloadTreeParser;
+import com.isode.stroke.parser.PayloadParserFactoryCollection;
+import com.isode.stroke.parser.tree.ParserElement;
+import com.isode.stroke.parser.tree.TreeReparser;
+
+/**
+ * Class representing a parser for MUC User payload
+ *
+ */
+public class MUCUserPayloadParser extends GenericPayloadTreeParser<MUCUserPayload> {
+
+ private PayloadParserFactoryCollection factories;
+
+ /**
+ * Create the parser
+ * @param collection reference to payload parser factory collection, not null
+ */
+ public MUCUserPayloadParser(PayloadParserFactoryCollection collection){
+ super(new MUCUserPayload());
+ this.factories = collection;
+ }
+
+ @Override
+ public void handleTree(ParserElement root) {
+ for (ParserElement child : root.getAllChildren()) {
+ if ("item".equals(child.getName()) && child.getNamespace().equals(root.getNamespace())) {
+ MUCItem item = MUCItemParser.itemFromTree(child);
+ getPayloadInternal().addItem(item);
+ } else if ("password".equals(child.getName()) && child.getNamespace().equals(root.getNamespace())) {
+ getPayloadInternal().setPassword(child.getText());
+ } else if ("invite".equals(child.getName()) && child.getNamespace().equals(root.getNamespace())) {
+ MUCUserPayload.Invite invite = new MUCUserPayload.Invite();
+ String to = child.getAttributes().getAttribute("to");
+ if (to != null && !to.isEmpty()) {
+ invite.to = JID.fromString(to);
+ }
+ String from = child.getAttributes().getAttribute("from");
+ if (from != null && !from.isEmpty()) {
+ invite.from = JID.fromString(from);
+ }
+ ParserElement reason = child.getChild("reason", root.getNamespace());
+ if (reason != null) {
+ invite.reason = reason.getText();
+ }
+ getPayloadInternal().setInvite(invite);
+ } else if ("status".equals(child.getName()) && child.getNamespace().equals(root.getNamespace())) {
+ MUCUserPayload.StatusCode status = new MUCUserPayload.StatusCode();
+ try {
+ status.code = Integer.parseInt(child.getAttributes().getAttribute("code"));
+ getPayloadInternal().addStatusCode(status);
+ }catch (NumberFormatException e) {
+ }
+ } else {
+ getPayloadInternal().setPayload(TreeReparser.parseTree(child, factories));
+ }
+ }
+ }
+}
diff --git a/src/com/isode/stroke/parser/payloadparsers/MUCUserPayloadParserFactory.java b/src/com/isode/stroke/parser/payloadparsers/MUCUserPayloadParserFactory.java
new file mode 100644
index 0000000..0712eea
--- /dev/null
+++ b/src/com/isode/stroke/parser/payloadparsers/MUCUserPayloadParserFactory.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2012, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2011, Kevin Smith
+ * All rights reserved.
+ */
+package com.isode.stroke.parser.payloadparsers;
+
+import com.isode.stroke.parser.AttributeMap;
+import com.isode.stroke.parser.PayloadParser;
+import com.isode.stroke.parser.PayloadParserFactory;
+import com.isode.stroke.parser.PayloadParserFactoryCollection;
+
+/**
+ * Factory for MUC User Payload Parser
+ *
+ */
+public class MUCUserPayloadParserFactory implements PayloadParserFactory {
+
+ private PayloadParserFactoryCollection factories;
+
+ /**
+ * Create the MUC User Payload Parser factory
+ * @param factories reference to Payload Parser Factory Collection, not null
+ */
+ public MUCUserPayloadParserFactory(PayloadParserFactoryCollection factories) {
+ this.factories = factories;
+ }
+
+ @Override
+ public boolean canParse(String element, String ns, AttributeMap map) {
+ return "x".equals(element) && "http://jabber.org/protocol/muc#user".equals(ns);
+ }
+
+ @Override
+ public PayloadParser createPayloadParser() {
+ return new MUCUserPayloadParser(factories);
+ }
+}