diff options
Diffstat (limited to 'src/com/isode/stroke/parser/payloadparsers')
4 files changed, 103 insertions, 50 deletions
diff --git a/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java b/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java index 41f44f5..4eeb741 100644 --- a/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java +++ b/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java @@ -69,7 +69,7 @@ public class FullPayloadParserFactoryCollection extends PayloadParserFactoryColl addFactory(new GenericPayloadParserFactory2<ForwardedParser>("forwarded", "urn:xmpp:forward:0", this, ForwardedParser.class)); addFactory(new GenericPayloadParserFactory2<MAMResultParser>("result", "urn:xmpp:mam:0", this, MAMResultParser.class)); addFactory(new GenericPayloadParserFactory<MAMQueryParser>("query", "urn:xmpp:mam:0", MAMQueryParser.class)); - addFactory(new GenericPayloadParserFactory<MAMArchivedParser>("archived", "urn:xmpp:mam:0", MAMArchivedParser.class)); + addFactory(new GenericPayloadParserFactory<MAMFinParser>("fin", "urn:xmpp:mam:0", MAMFinParser.class)); //addFactory(new NicknameParserFactory()); diff --git a/src/com/isode/stroke/parser/payloadparsers/MAMArchivedParser.java b/src/com/isode/stroke/parser/payloadparsers/MAMArchivedParser.java deleted file mode 100644 index 5547a87..0000000 --- a/src/com/isode/stroke/parser/payloadparsers/MAMArchivedParser.java +++ /dev/null @@ -1,46 +0,0 @@ -/* -* Copyright (c) 2014 Kevin Smith and Remko Tronçon -* All rights reserved. -*/ - -/* -* Copyright (c) 2014, Isode Limited, London, England. -* All rights reserved. -*/ - -package com.isode.stroke.parser.payloadparsers; - -import com.isode.stroke.elements.MAMArchived; -import com.isode.stroke.jid.JID; -import com.isode.stroke.parser.AttributeMap; -import com.isode.stroke.parser.GenericPayloadParser; - -public class MAMArchivedParser extends GenericPayloadParser<MAMArchived> { - public MAMArchivedParser() { - super(new MAMArchived()); - } - - public void handleStartElement(String element, String ns, AttributeMap attributes) { - if (level_ == 0) { - String attributeValue = attributes.getAttributeValue("by"); - if (attributeValue != null) { - getPayloadInternal().setBy(JID.fromString(attributeValue)); - } - attributeValue = attributes.getAttributeValue("id"); - if (attributeValue != null) { - getPayloadInternal().setID(attributeValue); - } - } - - ++level_; - } - - public void handleEndElement(String element, String ns) { - --level_; - } - - public void handleCharacterData(String data) { - } - - private int level_; -} diff --git a/src/com/isode/stroke/parser/payloadparsers/MAMFinParser.java b/src/com/isode/stroke/parser/payloadparsers/MAMFinParser.java new file mode 100644 index 0000000..f5ebdec --- /dev/null +++ b/src/com/isode/stroke/parser/payloadparsers/MAMFinParser.java @@ -0,0 +1,94 @@ +/* +* Copyright (c) 2014 Kevin Smith and Remko Tronçon +* All rights reserved. +*/ + +/* +* Copyright (c) 2014, Isode Limited, London, England. +* All rights reserved. +*/ + +package com.isode.stroke.parser.payloadparsers; + +import com.isode.stroke.elements.MAMFin; +import com.isode.stroke.elements.Payload; +import com.isode.stroke.elements.ResultSet; +import com.isode.stroke.parser.AttributeMap; +import com.isode.stroke.parser.GenericPayloadParser; + +public class MAMFinParser extends GenericPayloadParser<MAMFin> { + + private static final String QUERYID_ATTRIBUTE = "queryid"; + + private static final String STABLE_ATTRIBUTE = "stable"; + + private static final String COMPLETE_ATTRIBUTE = "complete"; + + private static final String SET_ELEMENT = "set"; + + private static final String SET_NS = "http://jabber.org/protocol/rsm"; + + private static final int TOP_LEVEL = 0; + + private static final int PAYLOAD_LEVEL = 1; + + private ResultSetParser resultSetParser_ = null; + + private int level_ = 0; + + public MAMFinParser() { + super(new MAMFin()); + } + + @Override + public void handleStartElement(String element, String ns, + AttributeMap attributes) { + if (level_ == TOP_LEVEL) { + MAMFin internalPayload = getPayloadInternal(); + internalPayload.setComplete(attributes.getBoolAttribute(COMPLETE_ATTRIBUTE, false)); + internalPayload.setStable(attributes.getBoolAttribute(STABLE_ATTRIBUTE, true)); + String idAttributeValue = attributes.getAttributeValue(QUERYID_ATTRIBUTE); + if (idAttributeValue != null) { + internalPayload.setQueryID(idAttributeValue); + } + } + else if (level_ == PAYLOAD_LEVEL) { + if (element == SET_ELEMENT && ns == SET_NS) { + resultSetParser_ = new ResultSetParser(); + } + } + + if (resultSetParser_ != null) { + // Parsing a nested result set + resultSetParser_.handleStartElement(element, ns, attributes); + } + + ++level_; + } + + @Override + public void handleEndElement(String element, String ns) { + --level_; + + if (resultSetParser_ != null && level_ >= PAYLOAD_LEVEL) { + resultSetParser_.handleEndElement(element, ns); + } + + if (resultSetParser_ != null && level_ == PAYLOAD_LEVEL) { + MAMFin internalPayload = getPayloadInternal(); + Payload resultSetParserPayload = resultSetParser_.getPayload(); + if (resultSetParserPayload instanceof ResultSet) { + internalPayload.setResultSet((ResultSet) resultSetParser_.getPayload()); + } + resultSetParser_ = null; + } + } + + @Override + public void handleCharacterData(String data) { + if (resultSetParser_ != null) { + resultSetParser_.handleCharacterData(data); + } + } + +} diff --git a/src/com/isode/stroke/parser/payloadparsers/MAMQueryParser.java b/src/com/isode/stroke/parser/payloadparsers/MAMQueryParser.java index fcfd5e4..2543a68 100644 --- a/src/com/isode/stroke/parser/payloadparsers/MAMQueryParser.java +++ b/src/com/isode/stroke/parser/payloadparsers/MAMQueryParser.java @@ -24,9 +24,14 @@ public class MAMQueryParser extends GenericPayloadParser<MAMQuery> { public void handleStartElement(String element, String ns, AttributeMap attributes) { if (level_ == 0) { - String attributeValue = attributes.getAttributeValue("queryid"); - if (attributeValue != null) { - getPayloadInternal().setQueryID(attributeValue); + MAMQuery payloadInternal = getPayloadInternal(); + String queryIDValue = attributes.getAttributeValue("queryid"); + if (queryIDValue != null) { + payloadInternal.setQueryID(queryIDValue); + } + String nodeValue = attributes.getAttributeValue("node"); + if (nodeValue != null) { + payloadInternal.setNode(nodeValue); } } else if (level_ == 1) { if (element == "x" && ns == "jabber:x:data") { |