summaryrefslogtreecommitdiffstats
blob: 232baa75868daa49a1e0eaab8a33759ef2730fe1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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_;
}