summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Maudsley <richard.maudsley@isode.com>2014-02-04 09:49:24 (GMT)
committerRichard Maudsley <richard.maudsley@isode.com>2014-03-07 14:28:58 (GMT)
commita511087b1f57f1f6372374f41d0b4b7ebeef9930 (patch)
treea319c6c65f4c4722635f78ac564a823a370d011c /src/com/isode/stroke/serializer
parent535e1a979a164f807aa64bf2df2bb36e7015ff17 (diff)
downloadstroke-a511087b1f57f1f6372374f41d0b4b7ebeef9930.zip
stroke-a511087b1f57f1f6372374f41d0b4b7ebeef9930.tar.bz2
PubSub parsers and serializers, plus manager and test code.
Change-Id: Ie8ca77ba8dbcd83926d46307ad0e73d804ff7422
Diffstat (limited to 'src/com/isode/stroke/serializer')
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java5
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubAffiliationSerializer.java53
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubAffiliationsSerializer.java45
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubConfigureSerializer.java39
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubCreateSerializer.java40
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubDefaultSerializer.java50
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubErrorSerializer.java112
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubEventAssociateSerializer.java39
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubEventCollectionSerializer.java46
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubEventConfigurationSerializer.java43
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubEventDeleteSerializer.java43
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubEventDisassociateSerializer.java39
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubEventItemSerializer.java53
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubEventItemsSerializer.java50
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubEventPurgeSerializer.java39
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubEventRedirectSerializer.java39
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubEventRetractSerializer.java39
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubEventSerializer.java44
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubEventSubscriptionSerializer.java75
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubItemSerializer.java45
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubItemsSerializer.java53
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubOptionsSerializer.java51
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerAffiliationSerializer.java53
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerAffiliationsSerializer.java45
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerConfigureSerializer.java43
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerDefaultSerializer.java39
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerDeleteSerializer.java43
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerPubSubSerializer.java56
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerPurgeSerializer.java39
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerRedirectSerializer.java39
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerSubscriptionSerializer.java51
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerSubscriptionsSerializer.java45
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubPublishSerializer.java45
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubRetractSerializer.java47
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubSerializer.java73
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubSubscribeOptionsSerializer.java39
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubSubscribeSerializer.java44
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubSubscriptionSerializer.java63
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubSubscriptionsSerializer.java45
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/PubSubUnsubscribeSerializer.java47
-rw-r--r--src/com/isode/stroke/serializer/payloadserializers/RawXMLPayloadSerializer.java2
41 files changed, 1899 insertions, 1 deletions
diff --git a/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java b/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java
index d8a7a7d..f846d85 100644
--- a/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java
+++ b/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java
@@ -56,6 +56,11 @@ public class FullPayloadSerializerCollection extends PayloadSerializerCollection
//addSerializer(new NicknameSerializer());
addSerializer(new SearchPayloadSerializer());
addSerializer(new LastSerializer());
+
+ addSerializer(new PubSubSerializer(this));
+ addSerializer(new PubSubEventSerializer(this));
+ addSerializer(new PubSubOwnerPubSubSerializer(this));
+ addSerializer(new PubSubErrorSerializer());
}
}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubAffiliationSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubAffiliationSerializer.java
new file mode 100644
index 0000000..df26b3a
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubAffiliationSerializer.java
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubAffiliation;
+
+public class PubSubAffiliationSerializer extends GenericPayloadSerializer<PubSubAffiliation> {
+public PubSubAffiliationSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubAffiliation.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubAffiliation payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("affiliation", "http://jabber.org/protocol/pubsub");
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ element.setAttribute("affiliation", serializeType(payload.getType()));
+
+ return element.serialize();
+}
+
+private static String serializeType(PubSubAffiliation.Type value) {
+ switch (value) {
+ case None: return "none";
+ case Member: return "member";
+ case Outcast: return "outcast";
+ case Owner: return "owner";
+ case Publisher: return "publisher";
+ case PublishOnly: return "publish-only";
+ }
+ return "undefined-type";
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubAffiliationsSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubAffiliationsSerializer.java
new file mode 100644
index 0000000..bceac02
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubAffiliationsSerializer.java
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubAffiliation;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubAffiliations;
+
+public class PubSubAffiliationsSerializer extends GenericPayloadSerializer<PubSubAffiliations> {
+public PubSubAffiliationsSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubAffiliations.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubAffiliations payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("affiliations", "http://jabber.org/protocol/pubsub");
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ for (PubSubAffiliation item : payload.getAffiliations()) {
+ element.addNode(new XMLRawTextNode((new PubSubAffiliationSerializer(serializers_)).serialize(item)));
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubConfigureSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubConfigureSerializer.java
new file mode 100644
index 0000000..6f5dd10
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubConfigureSerializer.java
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.serializer.payloadserializers.FormSerializer;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubConfigure;
+
+public class PubSubConfigureSerializer extends GenericPayloadSerializer<PubSubConfigure> {
+public PubSubConfigureSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubConfigure.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubConfigure payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("configure", "http://jabber.org/protocol/pubsub");
+
+ element.addNode(new XMLRawTextNode((new FormSerializer()).serialize(payload.getData())));
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubCreateSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubCreateSerializer.java
new file mode 100644
index 0000000..45b4128
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubCreateSerializer.java
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubConfigure;
+import com.isode.stroke.elements.PubSubCreate;
+
+public class PubSubCreateSerializer extends GenericPayloadSerializer<PubSubCreate> {
+public PubSubCreateSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubCreate.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubCreate payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("create", "http://jabber.org/protocol/pubsub");
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubDefaultSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubDefaultSerializer.java
new file mode 100644
index 0000000..88efb53
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubDefaultSerializer.java
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubDefault;
+
+public class PubSubDefaultSerializer extends GenericPayloadSerializer<PubSubDefault> {
+public PubSubDefaultSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubDefault.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubDefault payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("default", "http://jabber.org/protocol/pubsub");
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ element.setAttribute("type", serializeType(payload.getType()));
+
+ return element.serialize();
+}
+
+private static String serializeType(PubSubDefault.Type value) {
+ switch (value) {
+ case None: return "none";
+ case Collection: return "collection";
+ case Leaf: return "leaf";
+ }
+ return "undefined-type";
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubErrorSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubErrorSerializer.java
new file mode 100644
index 0000000..d4f765f
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubErrorSerializer.java
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.elements.PubSubError;
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.xml.XMLElement;
+
+public class PubSubErrorSerializer extends GenericPayloadSerializer<PubSubError> {
+public PubSubErrorSerializer() {
+ super(PubSubError.class);
+}
+
+@Override
+public String serializePayload(PubSubError payload) {
+ if (payload.getType().equals(PubSubError.Type.UnknownType)) {
+ return "";
+ }
+ XMLElement element = new XMLElement(serializeType(payload.getType()), "http://jabber.org/protocol/pubsub#errors");
+ if (payload.getType().equals(PubSubError.Type.Unsupported)) {
+ if (!payload.getUnsupportedFeatureType().equals(PubSubError.UnsupportedFeatureType.UnknownUnsupportedFeatureType)) {
+ element.setAttribute("feature", serializeUnsupportedFeatureType(payload.getUnsupportedFeatureType()));
+ }
+ }
+ return element.serialize();
+}
+
+static String serializeType(PubSubError.Type value) {
+ switch (value) {
+ case UnknownType: return "";
+ case ClosedNode: return "closed-node";
+ case ConfigurationRequired: return "configuration-required";
+ case InvalidJID: return "invalid-jid";
+ case InvalidOptions: return "invalid-options";
+ case InvalidPayload: return "invalid-payload";
+ case InvalidSubscriptionID: return "invalid-subid";
+ case ItemForbidden: return "item-forbidden";
+ case ItemRequired: return "item-required";
+ case JIDRequired: return "jid-required";
+ case MaximumItemsExceeded: return "max-items-exceeded";
+ case MaximumNodesExceeded: return "max-nodes-exceeded";
+ case NodeIDRequired: return "nodeid-required";
+ case NotInRosterGroup: return "not-in-roster-group";
+ case NotSubscribed: return "not-subscribed";
+ case PayloadTooBig: return "payload-too-big";
+ case PayloadRequired: return "payload-required";
+ case PendingSubscription: return "pending-subscription";
+ case PresenceSubscriptionRequired: return "presence-subscription-required";
+ case SubscriptionIDRequired: return "subid-required";
+ case TooManySubscriptions: return "too-many-subscriptions";
+ case Unsupported: return "unsupported";
+ case UnsupportedAccessModel: return "unsupported-access-model";
+ default: return null;
+ }
+}
+
+static String serializeUnsupportedFeatureType(PubSubError.UnsupportedFeatureType value) {
+ switch (value) {
+ case UnknownUnsupportedFeatureType: assert(false); return "";
+ case AccessAuthorize: return "access-authorize";
+ case AccessOpen: return "access-open";
+ case AccessPresence: return "access-presence";
+ case AccessRoster: return "access-roster";
+ case AccessWhitelist: return "access-whitelist";
+ case AutoCreate: return "auto-create";
+ case AutoSubscribe: return "auto-subscribe";
+ case Collections: return "collections";
+ case ConfigNode: return "config-node";
+ case CreateAndConfigure: return "create-and-configure";
+ case CreateNodes: return "create-nodes";
+ case DeleteItems: return "delete-items";
+ case DeleteNodes: return "delete-nodes";
+ case FilteredNotifications: return "filtered-notifications";
+ case GetPending: return "get-pending";
+ case InstantNodes: return "instant-nodes";
+ case ItemIDs: return "item-ids";
+ case LastPublished: return "last-published";
+ case LeasedSubscription: return "leased-subscription";
+ case ManageSubscriptions: return "manage-subscriptions";
+ case MemberAffiliation: return "member-affiliation";
+ case MetaData: return "meta-data";
+ case ModifyAffiliations: return "modify-affiliations";
+ case MultiCollection: return "multi-collection";
+ case MultiSubscribe: return "multi-subscribe";
+ case OutcastAffiliation: return "outcast-affiliation";
+ case PersistentItems: return "persistent-items";
+ case PresenceNotifications: return "presence-notifications";
+ case PresenceSubscribe: return "presence-subscribe";
+ case Publish: return "publish";
+ case PublishOptions: return "publish-options";
+ case PublishOnlyAffiliation: return "publish-only-affiliation";
+ case PublisherAffiliation: return "publisher-affiliation";
+ case PurgeNodes: return "purge-nodes";
+ case RetractItems: return "retract-items";
+ case RetrieveAffiliations: return "retrieve-affiliations";
+ case RetrieveDefault: return "retrieve-default";
+ case RetrieveItems: return "retrieve-items";
+ case RetrieveSubscriptions: return "retrieve-subscriptions";
+ case Subscribe: return "subscribe";
+ case SubscriptionOptions: return "subscription-options";
+ case SubscriptionNotifications: return "subscription-notifications";
+ default: return null;
+ }
+}
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubEventAssociateSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventAssociateSerializer.java
new file mode 100644
index 0000000..83b769b
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventAssociateSerializer.java
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubEventAssociate;
+
+public class PubSubEventAssociateSerializer extends GenericPayloadSerializer<PubSubEventAssociate> {
+public PubSubEventAssociateSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubEventAssociate.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubEventAssociate payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("associate", "http://jabber.org/protocol/pubsub#event");
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubEventCollectionSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventCollectionSerializer.java
new file mode 100644
index 0000000..194d9bb
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventCollectionSerializer.java
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubEventAssociate;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubEventDisassociate;
+import com.isode.stroke.elements.PubSubEventCollection;
+
+public class PubSubEventCollectionSerializer extends GenericPayloadSerializer<PubSubEventCollection> {
+public PubSubEventCollectionSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubEventCollection.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubEventCollection payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("collection", "http://jabber.org/protocol/pubsub#event");
+
+ element.addNode(new XMLRawTextNode((new PubSubEventAssociateSerializer(serializers_)).serialize(payload.getAssociate())));
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ element.addNode(new XMLRawTextNode((new PubSubEventDisassociateSerializer(serializers_)).serialize(payload.getDisassociate())));
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubEventConfigurationSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventConfigurationSerializer.java
new file mode 100644
index 0000000..0876853
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventConfigurationSerializer.java
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.serializer.payloadserializers.FormSerializer;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubEventConfiguration;
+
+public class PubSubEventConfigurationSerializer extends GenericPayloadSerializer<PubSubEventConfiguration> {
+public PubSubEventConfigurationSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubEventConfiguration.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubEventConfiguration payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("configuration", "http://jabber.org/protocol/pubsub#event");
+
+ element.addNode(new XMLRawTextNode((new FormSerializer()).serialize(payload.getData())));
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubEventDeleteSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventDeleteSerializer.java
new file mode 100644
index 0000000..1c54016
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventDeleteSerializer.java
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubEventRedirect;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubEventDelete;
+
+public class PubSubEventDeleteSerializer extends GenericPayloadSerializer<PubSubEventDelete> {
+public PubSubEventDeleteSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubEventDelete.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubEventDelete payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("delete", "http://jabber.org/protocol/pubsub#event");
+
+ element.addNode(new XMLRawTextNode((new PubSubEventRedirectSerializer(serializers_)).serialize(payload.getRedirects())));
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubEventDisassociateSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventDisassociateSerializer.java
new file mode 100644
index 0000000..34cb3d0
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventDisassociateSerializer.java
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubEventDisassociate;
+
+public class PubSubEventDisassociateSerializer extends GenericPayloadSerializer<PubSubEventDisassociate> {
+public PubSubEventDisassociateSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubEventDisassociate.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubEventDisassociate payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("disassociate", "http://jabber.org/protocol/pubsub#event");
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubEventItemSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventItemSerializer.java
new file mode 100644
index 0000000..939f268
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventItemSerializer.java
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.Payload;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubEventItem;
+
+public class PubSubEventItemSerializer extends GenericPayloadSerializer<PubSubEventItem> {
+public PubSubEventItemSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubEventItem.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubEventItem payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("item", "http://jabber.org/protocol/pubsub#event");
+
+ if(payload.getPublisher() != null) {
+ element.setAttribute("publisher", payload.getPublisher());
+ }
+
+ for (Payload item : payload.getData()) {
+ element.addNode(new XMLRawTextNode(serializers_.getPayloadSerializer(item).serialize(item)));
+ }
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ if(payload.getID() != null) {
+ element.setAttribute("id", payload.getID());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubEventItemsSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventItemsSerializer.java
new file mode 100644
index 0000000..9b49e59
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventItemsSerializer.java
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubEventItem;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubEventRetract;
+import com.isode.stroke.elements.PubSubEventItems;
+
+public class PubSubEventItemsSerializer extends GenericPayloadSerializer<PubSubEventItems> {
+public PubSubEventItemsSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubEventItems.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubEventItems payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("items", "http://jabber.org/protocol/pubsub#event");
+
+ for (PubSubEventItem item : payload.getItems()) {
+ element.addNode(new XMLRawTextNode((new PubSubEventItemSerializer(serializers_)).serialize(item)));
+ }
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ for (PubSubEventRetract item : payload.getRetracts()) {
+ element.addNode(new XMLRawTextNode((new PubSubEventRetractSerializer(serializers_)).serialize(item)));
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubEventPurgeSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventPurgeSerializer.java
new file mode 100644
index 0000000..224f6f0
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventPurgeSerializer.java
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubEventPurge;
+
+public class PubSubEventPurgeSerializer extends GenericPayloadSerializer<PubSubEventPurge> {
+public PubSubEventPurgeSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubEventPurge.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubEventPurge payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("purge", "http://jabber.org/protocol/pubsub#event");
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubEventRedirectSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventRedirectSerializer.java
new file mode 100644
index 0000000..53d105c
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventRedirectSerializer.java
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubEventRedirect;
+
+public class PubSubEventRedirectSerializer extends GenericPayloadSerializer<PubSubEventRedirect> {
+public PubSubEventRedirectSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubEventRedirect.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubEventRedirect payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("redirect", "http://jabber.org/protocol/pubsub#event");
+
+ if(payload.getURI() != null) {
+ element.setAttribute("uri", payload.getURI());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubEventRetractSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventRetractSerializer.java
new file mode 100644
index 0000000..dbb6bae
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventRetractSerializer.java
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubEventRetract;
+
+public class PubSubEventRetractSerializer extends GenericPayloadSerializer<PubSubEventRetract> {
+public PubSubEventRetractSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubEventRetract.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubEventRetract payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("retract", "http://jabber.org/protocol/pubsub#event");
+
+ if(payload.getID() != null) {
+ element.setAttribute("id", payload.getID());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubEventSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventSerializer.java
new file mode 100644
index 0000000..e7e09a3
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventSerializer.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2014, Isode Limited, London, England.
+ * All rights reserved.
+ */
+/*
+ * Copyright (c) 2014, Remko Tronçon.
+ * All rights reserved.
+ */
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import java.util.ArrayList;
+
+import com.isode.stroke.elements.PubSubEventPayload;
+import com.isode.stroke.parser.payloadparsers.PubSubEvent;
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+
+public class PubSubEventSerializer extends GenericPayloadSerializer<PubSubEvent> {
+ public PubSubEventSerializer(PayloadSerializerCollection serializer) {
+ super(PubSubEvent.class);
+ }
+
+ protected String serializePayload(PubSubEvent payload) {
+ if (payload == null) {
+ return "";
+ }
+ XMLElement element = new XMLElement("event", "http://jabber.org/protocol/pubsub#event");
+ PubSubEventPayload p = payload.getPayload();
+
+ for (PayloadSerializer serializer : pubsubSerializers_) {
+ if (serializer.canSerialize(p)) {
+ element.addNode(new XMLRawTextNode(serializer.serialize(p)));
+ }
+ }
+ return element.serialize();
+ }
+
+ PayloadSerializerCollection serializers_;
+ ArrayList<PayloadSerializer> pubsubSerializers_ = new ArrayList<PayloadSerializer>();
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubEventSubscriptionSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventSubscriptionSerializer.java
new file mode 100644
index 0000000..d34bfb1
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubEventSubscriptionSerializer.java
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+import com.isode.stroke.elements.PubSubEventSubscription;
+
+public class PubSubEventSubscriptionSerializer extends GenericPayloadSerializer<PubSubEventSubscription> {
+public PubSubEventSubscriptionSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubEventSubscription.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubEventSubscription payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("subscription", "http://jabber.org/protocol/pubsub#event");
+
+ element.setAttribute("subscription", serializeSubscriptionType(payload.getSubscription()));
+
+ if(payload.getSubscriptionID() != null) {
+ element.setAttribute("subid", payload.getSubscriptionID());
+ }
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ if(payload.getJID() != null) {
+ element.setAttribute("jid", payload.getJID().toString());
+ }
+
+ if(payload.getExpiry() != null) {
+ element.setAttribute("expiry", dateToString(payload.getExpiry()));
+ }
+
+ return element.serialize();
+}
+
+private static String serializeSubscriptionType(PubSubEventSubscription.SubscriptionType value) {
+ switch (value) {
+ case None: return "none";
+ case Pending: return "pending";
+ case Subscribed: return "subscribed";
+ case Unconfigured: return "unconfigured";
+ }
+ return "undefined-subscriptiontype";
+}
+
+private static String dateToString(Date date) {
+ SimpleDateFormat dfm = new SimpleDateFormat("YYYY-MM-dd");
+ SimpleDateFormat tfm = new SimpleDateFormat("hh:mm:ss");
+ dfm.setTimeZone(TimeZone.getTimeZone("UTC"));
+ tfm.setTimeZone(TimeZone.getTimeZone("UTC"));
+ String sinceDateString = dfm.format(date) + "T" + tfm.format(date) + "Z";
+ return sinceDateString;
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubItemSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubItemSerializer.java
new file mode 100644
index 0000000..dc34489
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubItemSerializer.java
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.Payload;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubItem;
+
+public class PubSubItemSerializer extends GenericPayloadSerializer<PubSubItem> {
+public PubSubItemSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubItem.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubItem payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("item", "http://jabber.org/protocol/pubsub");
+
+ for (Payload item : payload.getData()) {
+ element.addNode(new XMLRawTextNode(serializers_.getPayloadSerializer(item).serialize(item)));
+ }
+
+ if(payload.getID() != null) {
+ element.setAttribute("id", payload.getID());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubItemsSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubItemsSerializer.java
new file mode 100644
index 0000000..6739e44
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubItemsSerializer.java
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubItem;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubItems;
+
+public class PubSubItemsSerializer extends GenericPayloadSerializer<PubSubItems> {
+public PubSubItemsSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubItems.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubItems payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("items", "http://jabber.org/protocol/pubsub");
+
+ if(payload.getMaximumItems() != null) {
+ element.setAttribute("max_items", payload.getMaximumItems().toString());
+ }
+
+ for (PubSubItem item : payload.getItems()) {
+ element.addNode(new XMLRawTextNode((new PubSubItemSerializer(serializers_)).serialize(item)));
+ }
+
+ if(payload.getSubscriptionID() != null) {
+ element.setAttribute("subid", payload.getSubscriptionID());
+ }
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubOptionsSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubOptionsSerializer.java
new file mode 100644
index 0000000..2f3cb54
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubOptionsSerializer.java
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.serializer.payloadserializers.FormSerializer;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubOptions;
+
+public class PubSubOptionsSerializer extends GenericPayloadSerializer<PubSubOptions> {
+public PubSubOptionsSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubOptions.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubOptions payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("options", "http://jabber.org/protocol/pubsub");
+
+ element.addNode(new XMLRawTextNode((new FormSerializer()).serialize(payload.getData())));
+
+ if(payload.getSubscriptionID() != null) {
+ element.setAttribute("subid", payload.getSubscriptionID());
+ }
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ if(payload.getJID() != null) {
+ element.setAttribute("jid", payload.getJID().toString());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerAffiliationSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerAffiliationSerializer.java
new file mode 100644
index 0000000..144a469
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerAffiliationSerializer.java
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubOwnerAffiliation;
+
+public class PubSubOwnerAffiliationSerializer extends GenericPayloadSerializer<PubSubOwnerAffiliation> {
+public PubSubOwnerAffiliationSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubOwnerAffiliation.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubOwnerAffiliation payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("affiliation", "http://jabber.org/protocol/pubsub#owner");
+
+ if(payload.getJID() != null) {
+ element.setAttribute("jid", payload.getJID().toString());
+ }
+
+ element.setAttribute("affiliation", serializeType(payload.getType()));
+
+ return element.serialize();
+}
+
+private static String serializeType(PubSubOwnerAffiliation.Type value) {
+ switch (value) {
+ case None: return "none";
+ case Member: return "member";
+ case Outcast: return "outcast";
+ case Owner: return "owner";
+ case Publisher: return "publisher";
+ case PublishOnly: return "publish-only";
+ }
+ return "undefined-type";
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerAffiliationsSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerAffiliationsSerializer.java
new file mode 100644
index 0000000..5c9898f
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerAffiliationsSerializer.java
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubOwnerAffiliation;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubOwnerAffiliations;
+
+public class PubSubOwnerAffiliationsSerializer extends GenericPayloadSerializer<PubSubOwnerAffiliations> {
+public PubSubOwnerAffiliationsSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubOwnerAffiliations.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubOwnerAffiliations payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("affiliations", "http://jabber.org/protocol/pubsub#owner");
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ for (PubSubOwnerAffiliation item : payload.getAffiliations()) {
+ element.addNode(new XMLRawTextNode((new PubSubOwnerAffiliationSerializer(serializers_)).serialize(item)));
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerConfigureSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerConfigureSerializer.java
new file mode 100644
index 0000000..bcf03e3
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerConfigureSerializer.java
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.serializer.payloadserializers.FormSerializer;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubOwnerConfigure;
+
+public class PubSubOwnerConfigureSerializer extends GenericPayloadSerializer<PubSubOwnerConfigure> {
+public PubSubOwnerConfigureSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubOwnerConfigure.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubOwnerConfigure payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("configure", "http://jabber.org/protocol/pubsub#owner");
+
+ element.addNode(new XMLRawTextNode((new FormSerializer()).serialize(payload.getData())));
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerDefaultSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerDefaultSerializer.java
new file mode 100644
index 0000000..3b3fe98
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerDefaultSerializer.java
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.serializer.payloadserializers.FormSerializer;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubOwnerDefault;
+
+public class PubSubOwnerDefaultSerializer extends GenericPayloadSerializer<PubSubOwnerDefault> {
+public PubSubOwnerDefaultSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubOwnerDefault.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubOwnerDefault payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("default", "http://jabber.org/protocol/pubsub#owner");
+
+ element.addNode(new XMLRawTextNode((new FormSerializer()).serialize(payload.getData())));
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerDeleteSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerDeleteSerializer.java
new file mode 100644
index 0000000..6518f56
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerDeleteSerializer.java
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubOwnerRedirect;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubOwnerDelete;
+
+public class PubSubOwnerDeleteSerializer extends GenericPayloadSerializer<PubSubOwnerDelete> {
+public PubSubOwnerDeleteSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubOwnerDelete.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubOwnerDelete payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("delete", "http://jabber.org/protocol/pubsub#owner");
+
+ element.addNode(new XMLRawTextNode((new PubSubOwnerRedirectSerializer(serializers_)).serialize(payload.getRedirect())));
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerPubSubSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerPubSubSerializer.java
new file mode 100644
index 0000000..6a72af0
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerPubSubSerializer.java
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import java.util.ArrayList;
+
+import com.isode.stroke.elements.PubSubOwnerPayload;
+import com.isode.stroke.elements.PubSubOwnerPubSub;
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+
+public class PubSubOwnerPubSubSerializer extends GenericPayloadSerializer<PubSubOwnerPubSub> {
+
+public PubSubOwnerPubSubSerializer(PayloadSerializerCollection serializers)
+{
+ super(PubSubOwnerPubSub.class);
+
+ serializers_ = serializers;
+
+ pubsubSerializers_.add(new PubSubOwnerConfigureSerializer(serializers));
+ pubsubSerializers_.add(new PubSubOwnerSubscriptionsSerializer(serializers));
+ pubsubSerializers_.add(new PubSubOwnerDefaultSerializer(serializers));
+ pubsubSerializers_.add(new PubSubOwnerPurgeSerializer(serializers));
+ pubsubSerializers_.add(new PubSubOwnerAffiliationsSerializer(serializers));
+ pubsubSerializers_.add(new PubSubOwnerDeleteSerializer(serializers));
+}
+
+protected String serializePayload(PubSubOwnerPubSub payload)
+{
+ if (payload == null) {
+ return "";
+ }
+ XMLElement element = new XMLElement("pubsub", "http://jabber.org/protocol/pubsub#owner");
+ PubSubOwnerPayload p = payload.getPayload();
+ for (PayloadSerializer serializer : pubsubSerializers_) {
+ if (serializer.canSerialize(p)) {
+ element.addNode(new XMLRawTextNode(serializer.serialize(p)));
+ }
+ }
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+ArrayList<PayloadSerializer> pubsubSerializers_ = new ArrayList<PayloadSerializer>();
+
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerPurgeSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerPurgeSerializer.java
new file mode 100644
index 0000000..59d3d39
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerPurgeSerializer.java
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubOwnerPurge;
+
+public class PubSubOwnerPurgeSerializer extends GenericPayloadSerializer<PubSubOwnerPurge> {
+public PubSubOwnerPurgeSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubOwnerPurge.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubOwnerPurge payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("purge", "http://jabber.org/protocol/pubsub#owner");
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerRedirectSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerRedirectSerializer.java
new file mode 100644
index 0000000..a1ad660
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerRedirectSerializer.java
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubOwnerRedirect;
+
+public class PubSubOwnerRedirectSerializer extends GenericPayloadSerializer<PubSubOwnerRedirect> {
+public PubSubOwnerRedirectSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubOwnerRedirect.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubOwnerRedirect payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("redirect", "http://jabber.org/protocol/pubsub#owner");
+
+ if(payload.getURI() != null) {
+ element.setAttribute("uri", payload.getURI());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerSubscriptionSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerSubscriptionSerializer.java
new file mode 100644
index 0000000..81cbec8
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerSubscriptionSerializer.java
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubOwnerSubscription;
+
+public class PubSubOwnerSubscriptionSerializer extends GenericPayloadSerializer<PubSubOwnerSubscription> {
+public PubSubOwnerSubscriptionSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubOwnerSubscription.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubOwnerSubscription payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("subscription", "http://jabber.org/protocol/pubsub#owner");
+
+ element.setAttribute("subscription", serializeSubscriptionType(payload.getSubscription()));
+
+ if(payload.getJID() != null) {
+ element.setAttribute("jid", payload.getJID().toString());
+ }
+
+ return element.serialize();
+}
+
+private static String serializeSubscriptionType(PubSubOwnerSubscription.SubscriptionType value) {
+ switch (value) {
+ case None: return "none";
+ case Pending: return "pending";
+ case Subscribed: return "subscribed";
+ case Unconfigured: return "unconfigured";
+ }
+ return "undefined-subscriptiontype";
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerSubscriptionsSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerSubscriptionsSerializer.java
new file mode 100644
index 0000000..c66a1b0
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubOwnerSubscriptionsSerializer.java
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubOwnerSubscription;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubOwnerSubscriptions;
+
+public class PubSubOwnerSubscriptionsSerializer extends GenericPayloadSerializer<PubSubOwnerSubscriptions> {
+public PubSubOwnerSubscriptionsSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubOwnerSubscriptions.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubOwnerSubscriptions payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("subscriptions", "http://jabber.org/protocol/pubsub#owner");
+
+ for (PubSubOwnerSubscription item : payload.getSubscriptions()) {
+ element.addNode(new XMLRawTextNode((new PubSubOwnerSubscriptionSerializer(serializers_)).serialize(item)));
+ }
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubPublishSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubPublishSerializer.java
new file mode 100644
index 0000000..ec71839
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubPublishSerializer.java
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubItem;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubPublish;
+
+public class PubSubPublishSerializer extends GenericPayloadSerializer<PubSubPublish> {
+public PubSubPublishSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubPublish.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubPublish payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("publish", "http://jabber.org/protocol/pubsub");
+
+ for (PubSubItem item : payload.getItems()) {
+ element.addNode(new XMLRawTextNode((new PubSubItemSerializer(serializers_)).serialize(item)));
+ }
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubRetractSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubRetractSerializer.java
new file mode 100644
index 0000000..87f18ce
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubRetractSerializer.java
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubItem;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubRetract;
+
+public class PubSubRetractSerializer extends GenericPayloadSerializer<PubSubRetract> {
+public PubSubRetractSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubRetract.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubRetract payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("retract", "http://jabber.org/protocol/pubsub");
+
+ for (PubSubItem item : payload.getItems()) {
+ element.addNode(new XMLRawTextNode((new PubSubItemSerializer(serializers_)).serialize(item)));
+ }
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ element.setAttribute("notify", payload.isNotify() ? "true" : "false");
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubSerializer.java
new file mode 100644
index 0000000..232baa7
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubSerializer.java
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import java.util.ArrayList;
+
+import com.isode.stroke.elements.PubSub;
+import com.isode.stroke.elements.PubSubCreate;
+import com.isode.stroke.elements.PubSubPayload;
+import com.isode.stroke.elements.PubSubSubscribe;
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+
+public class PubSubSerializer extends GenericPayloadSerializer<PubSub> {
+
+public PubSubSerializer(PayloadSerializerCollection serializers) {
+ super(PubSub.class);
+
+ serializers_ = serializers;
+
+ pubsubSerializers_.add(new PubSubItemsSerializer(serializers));
+ pubsubSerializers_.add(new PubSubCreateSerializer(serializers));
+ pubsubSerializers_.add(new PubSubPublishSerializer(serializers));
+ pubsubSerializers_.add(new PubSubOptionsSerializer(serializers));
+ pubsubSerializers_.add(new PubSubAffiliationsSerializer(serializers));
+ pubsubSerializers_.add(new PubSubRetractSerializer(serializers));
+ pubsubSerializers_.add(new PubSubDefaultSerializer(serializers));
+ pubsubSerializers_.add(new PubSubSubscriptionsSerializer(serializers));
+ pubsubSerializers_.add(new PubSubSubscribeSerializer(serializers));
+ pubsubSerializers_.add(new PubSubUnsubscribeSerializer(serializers));
+ pubsubSerializers_.add(new PubSubSubscriptionSerializer(serializers));
+}
+
+@Override
+protected String serializePayload(PubSub payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("pubsub", "http://jabber.org/protocol/pubsub");
+ PubSubPayload p = payload.getPayload();
+
+ for (PayloadSerializer serializer : pubsubSerializers_) {
+ if (serializer.canSerialize(p)) {
+ element.addNode(new XMLRawTextNode(serializer.serialize(p)));
+ PubSubCreate create = null;
+ if(p instanceof PubSubCreate) {
+ create = (PubSubCreate)p;
+ element.addNode(new XMLRawTextNode((new PubSubConfigureSerializer(serializers_)).serialize(create.getConfigure())));
+ }
+ PubSubSubscribe subscribe = null;
+ if (p instanceof PubSubSubscribe) {
+ subscribe = (PubSubSubscribe)p;
+ element.addNode(new XMLRawTextNode((new PubSubConfigureSerializer(serializers_)).serialize(subscribe.getOptions())));
+ }
+ }
+ }
+ return element.serialize();
+}
+
+ArrayList<PayloadSerializer> pubsubSerializers_ = new ArrayList<PayloadSerializer>();
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubSubscribeOptionsSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubSubscribeOptionsSerializer.java
new file mode 100644
index 0000000..40c0298
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubSubscribeOptionsSerializer.java
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubSubscribeOptions;
+
+public class PubSubSubscribeOptionsSerializer extends GenericPayloadSerializer<PubSubSubscribeOptions> {
+public PubSubSubscribeOptionsSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubSubscribeOptions.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubSubscribeOptions payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("subscribe-options", "http://jabber.org/protocol/pubsub");
+
+ if (payload.isRequired()) {
+ element.addNode(new XMLElement("required", ""));
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubSubscribeSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubSubscribeSerializer.java
new file mode 100644
index 0000000..9a886b9
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubSubscribeSerializer.java
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubOptions;
+import com.isode.stroke.elements.PubSubSubscribe;
+
+public class PubSubSubscribeSerializer extends GenericPayloadSerializer<PubSubSubscribe> {
+public PubSubSubscribeSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubSubscribe.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubSubscribe payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("subscribe", "http://jabber.org/protocol/pubsub");
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ if(payload.getJID() != null) {
+ element.setAttribute("jid", payload.getJID().toString());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubSubscriptionSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubSubscriptionSerializer.java
new file mode 100644
index 0000000..41e6f9d
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubSubscriptionSerializer.java
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubSubscribeOptions;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubSubscription;
+
+public class PubSubSubscriptionSerializer extends GenericPayloadSerializer<PubSubSubscription> {
+public PubSubSubscriptionSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubSubscription.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubSubscription payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("subscription", "http://jabber.org/protocol/pubsub");
+
+ element.setAttribute("subscription", serializeSubscriptionType(payload.getSubscription()));
+
+ if(payload.getSubscriptionID() != null) {
+ element.setAttribute("subid", payload.getSubscriptionID());
+ }
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ if(payload.getJID() != null) {
+ element.setAttribute("jid", payload.getJID().toString());
+ }
+
+ element.addNode(new XMLRawTextNode((new PubSubSubscribeOptionsSerializer(serializers_)).serialize(payload.getOptions())));
+
+ return element.serialize();
+}
+
+private static String serializeSubscriptionType(PubSubSubscription.SubscriptionType value) {
+ switch (value) {
+ case None: return "none";
+ case Pending: return "pending";
+ case Subscribed: return "subscribed";
+ case Unconfigured: return "unconfigured";
+ }
+ return "undefined-subscriptiontype";
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubSubscriptionsSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubSubscriptionsSerializer.java
new file mode 100644
index 0000000..2092caa
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubSubscriptionsSerializer.java
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubSubscription;
+import com.isode.stroke.serializer.xml.XMLRawTextNode;
+import com.isode.stroke.elements.PubSubSubscriptions;
+
+public class PubSubSubscriptionsSerializer extends GenericPayloadSerializer<PubSubSubscriptions> {
+public PubSubSubscriptionsSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubSubscriptions.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubSubscriptions payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("subscriptions", "http://jabber.org/protocol/pubsub");
+
+ for (PubSubSubscription item : payload.getSubscriptions()) {
+ element.addNode(new XMLRawTextNode((new PubSubSubscriptionSerializer(serializers_)).serialize(item)));
+ }
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/PubSubUnsubscribeSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PubSubUnsubscribeSerializer.java
new file mode 100644
index 0000000..f0a8bb0
--- /dev/null
+++ b/src/com/isode/stroke/serializer/payloadserializers/PubSubUnsubscribeSerializer.java
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2014, Isode Limited, London, England.
+* All rights reserved.
+*/
+/*
+* Copyright (c) 2014, Remko Tronçon.
+* All rights reserved.
+*/
+
+package com.isode.stroke.serializer.payloadserializers;
+
+import com.isode.stroke.serializer.GenericPayloadSerializer;
+import com.isode.stroke.serializer.PayloadSerializerCollection;
+import com.isode.stroke.serializer.xml.XMLElement;
+import com.isode.stroke.elements.PubSubUnsubscribe;
+
+public class PubSubUnsubscribeSerializer extends GenericPayloadSerializer<PubSubUnsubscribe> {
+public PubSubUnsubscribeSerializer(PayloadSerializerCollection serializers) {
+ super(PubSubUnsubscribe.class);
+
+ serializers_ = serializers;
+}
+
+protected String serializePayload(PubSubUnsubscribe payload) {
+ if (payload == null) {
+ return "";
+ }
+
+ XMLElement element = new XMLElement("unsubscribe", "http://jabber.org/protocol/pubsub");
+
+ if(payload.getSubscriptionID() != null) {
+ element.setAttribute("subid", payload.getSubscriptionID());
+ }
+
+ if(payload.getNode() != null) {
+ element.setAttribute("node", payload.getNode());
+ }
+
+ if(payload.getJID() != null) {
+ element.setAttribute("jid", payload.getJID().toString());
+ }
+
+ return element.serialize();
+}
+
+PayloadSerializerCollection serializers_;
+}
diff --git a/src/com/isode/stroke/serializer/payloadserializers/RawXMLPayloadSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/RawXMLPayloadSerializer.java
index 70c405b..a52ab98 100644
--- a/src/com/isode/stroke/serializer/payloadserializers/RawXMLPayloadSerializer.java
+++ b/src/com/isode/stroke/serializer/payloadserializers/RawXMLPayloadSerializer.java
@@ -14,7 +14,7 @@ import com.isode.stroke.serializer.GenericPayloadSerializer;
class RawXMLPayloadSerializer extends GenericPayloadSerializer<RawXMLPayload> {
public RawXMLPayloadSerializer() {
- super(RawXMLPayloadSerializer.class);
+ super(RawXMLPayload.class);
}
@Override