summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/isode/stroke/parser/payloadparsers')
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/BlockBlockListPayloadParser.java26
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/BlockBlockPayloadParser.java26
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/BlockParser.java71
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/BlockUnblockPayloadPaser.java26
-rw-r--r--src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java7
5 files changed, 152 insertions, 4 deletions
diff --git a/src/com/isode/stroke/parser/payloadparsers/BlockBlockListPayloadParser.java b/src/com/isode/stroke/parser/payloadparsers/BlockBlockListPayloadParser.java
new file mode 100644
index 0000000..b957a31
--- /dev/null
+++ b/src/com/isode/stroke/parser/payloadparsers/BlockBlockListPayloadParser.java
@@ -0,0 +1,26 @@
+/* Copyright (c) 2016, Isode Limited, London, England.
+ * All rights reserved.
+ *
+ * Acquisition and use of this software and related materials for any
+ * purpose requires a written license agreement from Isode Limited,
+ * or a written license from an organisation licensed by Isode Limited
+ * to grant such a license.
+ *
+ */
+package com.isode.stroke.parser.payloadparsers;
+
+import com.isode.stroke.elements.BlockListPayload;
+
+/**
+ * {@link BlockParser} for pay loads of type {@link BlockListPayload}
+ */
+public class BlockBlockListPayloadParser extends BlockParser<BlockListPayload> {
+
+ /**
+ * Constructor
+ */
+ public BlockBlockListPayloadParser() {
+ super(new BlockListPayload());
+ }
+
+}
diff --git a/src/com/isode/stroke/parser/payloadparsers/BlockBlockPayloadParser.java b/src/com/isode/stroke/parser/payloadparsers/BlockBlockPayloadParser.java
new file mode 100644
index 0000000..3a0a3df
--- /dev/null
+++ b/src/com/isode/stroke/parser/payloadparsers/BlockBlockPayloadParser.java
@@ -0,0 +1,26 @@
+/* Copyright (c) 2016, Isode Limited, London, England.
+ * All rights reserved.
+ *
+ * Acquisition and use of this software and related materials for any
+ * purpose requires a written license agreement from Isode Limited,
+ * or a written license from an organisation licensed by Isode Limited
+ * to grant such a license.
+ *
+ */
+package com.isode.stroke.parser.payloadparsers;
+
+import com.isode.stroke.elements.BlockPayload;
+
+/**
+ * {@link BlockParser} for pay loads of type {@link BlockPayload}
+ */
+public class BlockBlockPayloadParser extends BlockParser<BlockPayload> {
+
+ /**
+ * Constructor
+ */
+ public BlockBlockPayloadParser() {
+ super(new BlockPayload());
+ }
+
+}
diff --git a/src/com/isode/stroke/parser/payloadparsers/BlockParser.java b/src/com/isode/stroke/parser/payloadparsers/BlockParser.java
new file mode 100644
index 0000000..f7304df
--- /dev/null
+++ b/src/com/isode/stroke/parser/payloadparsers/BlockParser.java
@@ -0,0 +1,71 @@
+/* Copyright (c) 2016, Isode Limited, London, England.
+ * All rights reserved.
+ *
+ * Acquisition and use of this software and related materials for any
+ * purpose requires a written license agreement from Isode Limited,
+ * or a written license from an organisation licensed by Isode Limited
+ * to grant such a license.
+ *
+ */
+package com.isode.stroke.parser.payloadparsers;
+
+import com.isode.stroke.elements.AbstractBlockPayload;
+import com.isode.stroke.elements.BlockListPayload;
+import com.isode.stroke.elements.BlockPayload;
+import com.isode.stroke.elements.Payload;
+import com.isode.stroke.elements.UnblockPayload;
+import com.isode.stroke.jid.JID;
+import com.isode.stroke.parser.AttributeMap;
+import com.isode.stroke.parser.GenericPayloadParser;
+
+
+/**
+ * Base class for parser that pass Block pay loads such as
+ * {@link BlockPayload}, {@link BlockListPayload} and {@link UnblockPayload}
+ * @param <T> Type of {@link Payload} that will be parsed.
+ */
+public abstract class BlockParser<T extends AbstractBlockPayload> extends GenericPayloadParser<T> {
+ /*
+ * Note this is slightly different to Swiften code as templates in C++ work
+ * different to Java Generics. In Swiften there exits a BlockParser template
+ * for which instances can be created of type <BlockPayload>, <BlockListPayload> and
+ * <UnblockPayload>. In Java as we need to pass an instance of the class to the constructor
+ * (which we can't do with generics) we need to create specific sub types for each of
+ * the different Block payloads.
+ */
+
+ private int level = 0;
+
+ /**
+ * Constructor
+ * @param payload New instance of T to create the parsed
+ * version from.
+ */
+ protected BlockParser(T payload) {
+ super(payload);
+ }
+
+ @Override
+ public void handleStartElement(String element, String ns,
+ AttributeMap attributes) {
+ if (level == 1 && "item".equals(element)) {
+ JID jid = new JID(attributes.getAttribute("jid"));
+ if (jid.isValid()) {
+ AbstractBlockPayload payload = getPayloadInternal();
+ payload.addItem(jid);
+ }
+ }
+ ++level;
+ }
+
+ @Override
+ public void handleEndElement(String element, String ns) {
+ --level;
+ }
+
+ @Override
+ public void handleCharacterData(String data) {
+ // Empty method
+ }
+
+}
diff --git a/src/com/isode/stroke/parser/payloadparsers/BlockUnblockPayloadPaser.java b/src/com/isode/stroke/parser/payloadparsers/BlockUnblockPayloadPaser.java
new file mode 100644
index 0000000..6ae9f83
--- /dev/null
+++ b/src/com/isode/stroke/parser/payloadparsers/BlockUnblockPayloadPaser.java
@@ -0,0 +1,26 @@
+/* Copyright (c) 2016, Isode Limited, London, England.
+ * All rights reserved.
+ *
+ * Acquisition and use of this software and related materials for any
+ * purpose requires a written license agreement from Isode Limited,
+ * or a written license from an organisation licensed by Isode Limited
+ * to grant such a license.
+ *
+ */
+package com.isode.stroke.parser.payloadparsers;
+
+import com.isode.stroke.elements.UnblockPayload;
+
+/**
+ * {@link BlockParser} for pay loads of type {@link UnblockPayload}
+ */
+public class BlockUnblockPayloadPaser extends BlockParser<UnblockPayload> {
+
+ /**
+ * Constructor
+ */
+ public BlockUnblockPayloadPaser() {
+ super(new UnblockPayload());
+ }
+
+}
diff --git a/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java b/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java
index 9cb7cb8..39dd9f7 100644
--- a/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java
+++ b/src/com/isode/stroke/parser/payloadparsers/FullPayloadParserFactoryCollection.java
@@ -8,7 +8,6 @@ import com.isode.stroke.parser.GenericPayloadParserFactory;
import com.isode.stroke.parser.GenericPayloadParserFactory2;
import com.isode.stroke.parser.PayloadParserFactory;
import com.isode.stroke.parser.PayloadParserFactoryCollection;
-import com.isode.stroke.parser.payloadparsers.PubSubOwnerPubSubParser;
public class FullPayloadParserFactoryCollection extends PayloadParserFactoryCollection {
public FullPayloadParserFactoryCollection() {
@@ -33,9 +32,9 @@ public class FullPayloadParserFactoryCollection extends PayloadParserFactoryColl
addFactory(new GenericPayloadParserFactory<CapsInfoParser> ("c", "http://jabber.org/protocol/caps", CapsInfoParser.class));
addFactory(new ResourceBindParserFactory());
addFactory(new StartSessionParserFactory());
- // addFactory(new GenericPayloadParserFactory<BlockParser<BlockPayload>("block", "urn:xmpp:blocking", BlockParser.class));
- // addFactory(GenericPayloadParserFactory<BlockParser<BlockListPayload>("blocklist", "urn:xmpp:blocking", BlockParser.class));
- // addFactory(GenericPayloadParserFactory<BlockParser<UnblockPayload>("unblock", "urn:xmpp:blocking", BlockParser.class));
+ addFactory(new GenericPayloadParserFactory<BlockBlockPayloadParser>("block", "urn:xmpp:blocking", BlockBlockPayloadParser.class));
+ addFactory(new GenericPayloadParserFactory<BlockBlockListPayloadParser>("blocklist", "urn:xmpp:blocking", BlockBlockListPayloadParser.class));
+ addFactory(new GenericPayloadParserFactory<BlockUnblockPayloadPaser>("unblock", "urn:xmpp:blocking", BlockUnblockPayloadPaser.class));
addFactory(new SecurityLabelParserFactory());
addFactory(new GenericPayloadParserFactory<SecurityLabelsCatalogParser>("catalog", "urn:xmpp:sec-label:catalog:2", SecurityLabelsCatalogParser.class));
addFactory(new FormParserFactory());