summaryrefslogtreecommitdiffstats
blob: 7b801042db55c4dddf7617a88a93b6194ce455fa (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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
 * Copyright (c) 2010-2015, Isode Limited, London, England.
 * All rights reserved.
 */
package com.isode.stroke.roster;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import com.isode.stroke.elements.RosterItemPayload;
import com.isode.stroke.elements.RosterItemPayload.Subscription;
import com.isode.stroke.jid.JID;

public class XMPPRosterImpl extends XMPPRoster {
	
	private Map<JID, XMPPRosterItem> entries_ = new HashMap<JID, XMPPRosterItem>();

	public void addContact(final JID jid, final String name, final Collection<String> groups, RosterItemPayload.Subscription subscription) {
		JID bareJID = jid.toBare();
		XMPPRosterItem item = entries_.get(bareJID);

		if (item != null) {
			String oldName = item.getName();
			Collection<String> oldGroups = item.getGroups();
			entries_.put(bareJID, new XMPPRosterItem(jid, name, groups, subscription));
			onJIDUpdated.emit(bareJID, oldName, oldGroups);
		}
		else {
			entries_.put(bareJID, new XMPPRosterItem(jid, name, groups, subscription));
			onJIDAdded.emit(bareJID);
		}
	}

	public void removeContact(final JID jid) {
		entries_.remove(jid.toBare());
		onJIDRemoved.emit(jid);
	}

	public void clear() {
		entries_.clear();
		onRosterCleared.emit();
	}

	@Override
	public boolean containsJID(JID jid) {
		return entries_.containsKey(jid.toBare());
	}

	@Override
	public Subscription getSubscriptionStateForJID(JID jid) {
		XMPPRosterItem item = entries_.get(jid.toBare());
		if (item != null) return item.getSubscription();
		return RosterItemPayload.Subscription.None;
	}

	@Override
	public String getNameForJID(JID jid) {
		XMPPRosterItem item = entries_.get(jid.toBare());
		if (item != null) return item.getName();
		return "";
	}

	@Override
	public Collection<String> getGroupsForJID(JID jid) {
		XMPPRosterItem item = entries_.get(jid.toBare());
		if (item != null) return item.getGroups();
		return new ArrayList<String>();
	}

	@Override
	public Collection<XMPPRosterItem> getItems() {
		Collection<XMPPRosterItem> items = new ArrayList<XMPPRosterItem>(entries_.size());
		for (XMPPRosterItem item : entries_.values()) {
			items.add(new XMPPRosterItem(item));
		}
		return items;
	}

	@Override
	public XMPPRosterItem getItem(JID jid) {
		XMPPRosterItem item = entries_.get(jid.toBare());
		if (item != null) return item;

		return null;
	}

	@Override
	public Set<String> getGroups() {
		Set<String> groups = new HashSet<String>();
		for (XMPPRosterItem item : entries_.values())
			groups.addAll(item.getGroups());
		return groups;
	}
	
}