summaryrefslogtreecommitdiffstats
blob: 6ec1e5802cd64d485db771dcff903d4a73574c7d (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) 2010, Isode Limited, London, England.
 * All rights reserved.
 */
/*
 * Copyright (c) 2010, Remko Tronçon.
 * All rights reserved.
 */
package com.isode.stroke.serializer.payloadserializers;

import com.isode.stroke.elements.RosterItemPayload;
import com.isode.stroke.elements.RosterPayload;
import com.isode.stroke.serializer.GenericPayloadSerializer;
import com.isode.stroke.serializer.xml.XMLElement;
import com.isode.stroke.serializer.xml.XMLTextNode;
import com.isode.stroke.serializer.xml.XMLRawTextNode;

/**
 * Roster to string.
 */
public class RosterSerializer extends GenericPayloadSerializer<RosterPayload> {

    public RosterSerializer() {
        super(RosterPayload.class);
    }

    @Override
    protected String serializePayload(RosterPayload roster) {
        XMLElement queryElement = new XMLElement("query", "jabber:iq:roster");
       	if (roster.getVersion() != null) {
			queryElement.setAttribute("ver", roster.getVersion());
		}
	for (RosterItemPayload item : roster.getItems()) {
		XMLElement itemElement = new XMLElement("item");
		itemElement.setAttribute("jid", item.getJID().toString());
                if (item.getName() != null) {
			itemElement.setAttribute("name", item.getName());
		}

		if (item.getSubscription() != null) {
			switch (item.getSubscription()) {
				case To: itemElement.setAttribute("subscription", "to"); break;
				case From: itemElement.setAttribute("subscription", "from"); break;
				case Both: itemElement.setAttribute("subscription", "both"); break;
				case Remove: itemElement.setAttribute("subscription", "remove"); break;
				case None: itemElement.setAttribute("subscription", "none"); break;
			}
		}

		if (item.getSubscriptionRequested()) {
			itemElement.setAttribute("ask", "subscribe");
		}

		for (String group : item.getGroups()) {
			XMLElement groupElement = new XMLElement("group");
			groupElement.addNode(new XMLTextNode(group));
			itemElement.addNode(groupElement);
		}


		if (item.getUnknownContent().length() != 0) {
			itemElement.addNode(new XMLRawTextNode(item.getUnknownContent()));
		}

		queryElement.addNode(itemElement);
	}

	return queryElement.serialize();



    }
}