diff options
author | Alex Clayton <alex.clayton@isode.com> | 2016-02-02 11:26:01 (GMT) |
---|---|---|
committer | Alex Clayton <alex.clayton@isode.com> | 2016-02-04 10:09:21 (GMT) |
commit | be72c822d3cffd840e753e01fe28857b081cf6f3 (patch) | |
tree | ae3fe8fe22175f9bfee89f0688b71ca377f7f1e9 /src/com/isode/stroke/serializer | |
parent | 2c9305a872e4ca958bfd86472c4540cc10d11a2f (diff) | |
download | stroke-be72c822d3cffd840e753e01fe28857b081cf6f3.zip stroke-be72c822d3cffd840e753e01fe28857b081cf6f3.tar.bz2 |
Add Block Parser and Serializer
Add BlockParser and BlockSerializer for the block payload classes.
This required slightly different approach to the Swiften code as C++ templates
are different to Java generics. In short needed to add a type hierachy to the
Block payload classes and to the Parsers and Serilaizers associated with them.
Test-information:
Ran unit tests everything passed ok.
Change-Id: I3ea2d66afd7cb3b5c4c3515be3a1ef99d7dbb566
Diffstat (limited to 'src/com/isode/stroke/serializer')
4 files changed, 135 insertions, 0 deletions
diff --git a/src/com/isode/stroke/serializer/payloadserializers/BlockBlockListPayloadSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/BlockBlockListPayloadSerializer.java new file mode 100644 index 0000000..8556f6d --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/BlockBlockListPayloadSerializer.java @@ -0,0 +1,27 @@ +/* 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.serializer.payloadserializers; + +import com.isode.stroke.elements.BlockListPayload; + +/** + * {@link BlockSerializer} for {@link BlockListPayload} + */ +public class BlockBlockListPayloadSerializer extends BlockSerializer<BlockListPayload> { + + /** + * Constructor + * @param tag Tag + */ + protected BlockBlockListPayloadSerializer(String tag) { + super(BlockListPayload.class, tag); + } + +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/BlockBlockPayloadSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/BlockBlockPayloadSerializer.java new file mode 100644 index 0000000..4800681 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/BlockBlockPayloadSerializer.java @@ -0,0 +1,27 @@ +/* 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.serializer.payloadserializers; + +import com.isode.stroke.elements.BlockPayload; + +/** + * {@link BlockSerializer} for {@link BlockPayload} + */ +public class BlockBlockPayloadSerializer extends BlockSerializer<BlockPayload> { + + /** + * Constructor + * @param tag Tag + */ + public BlockBlockPayloadSerializer(String tag) { + super(BlockPayload.class, tag); + } + +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/BlockSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/BlockSerializer.java new file mode 100644 index 0000000..2bdfea9 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/BlockSerializer.java @@ -0,0 +1,55 @@ +/* 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.serializer.payloadserializers; + +import com.isode.stroke.elements.AbstractBlockPayload; +import com.isode.stroke.jid.JID; +import com.isode.stroke.serializer.GenericPayloadSerializer; +import com.isode.stroke.serializer.xml.XMLElement; + +/** + * Abstract class for serializing pay loads of type {@link AbstractBlockPayload} + * + * @param <T> Type of {@link AbstractBlockPayload} to serialize + */ +public abstract class BlockSerializer<T extends AbstractBlockPayload> extends GenericPayloadSerializer<T> { + /* + * Note this is slightly different to Swiften code as templates in C++ work + * different to Java Generics. In Swiften there exits a BlockSerialize 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 final String tag; + + /** + * Constructor + * @param c Class of the {@link AbstractBlockPayload} that this will serialize + * @param tag Tag for the XML element to serialize + */ + protected BlockSerializer(Class<T> c,String tag) { + super(c); + this.tag = tag; + } + + @Override + protected String serializePayload(T payload) { + XMLElement element = new XMLElement(tag,"urn:xmpp:blocking"); + for (JID jid : payload.getItems()) { + XMLElement item = new XMLElement("item"); + item.setAttribute("jid", jid.toString()); + element.addNode(item); + } + return element.serialize(); + } + +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/BlockUnblockPayloadSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/BlockUnblockPayloadSerializer.java new file mode 100644 index 0000000..598b708 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/BlockUnblockPayloadSerializer.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.serializer.payloadserializers; + +import com.isode.stroke.elements.UnblockPayload; + +/** + * {@link BlockSerializer} for {@link UnblockPayload} + */ +public class BlockUnblockPayloadSerializer extends BlockSerializer<UnblockPayload> { + + /** + * @param tag Tag + */ + public BlockUnblockPayloadSerializer(String tag) { + super(UnblockPayload.class, tag); + } + +} |