diff options
Diffstat (limited to 'src/com/isode/stroke/roster/XMPPRosterImpl.java')
-rw-r--r-- | src/com/isode/stroke/roster/XMPPRosterImpl.java | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/com/isode/stroke/roster/XMPPRosterImpl.java b/src/com/isode/stroke/roster/XMPPRosterImpl.java new file mode 100644 index 0000000..61d0bc3 --- /dev/null +++ b/src/com/isode/stroke/roster/XMPPRosterImpl.java @@ -0,0 +1,95 @@ +/* + * 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>(); + + 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); + } + } + + void removeContact(final JID jid) { + entries_.remove(jid.toBare()); + onJIDRemoved.emit(jid); + } + + void clear() { + entries_.clear(); + onRosterCleared.emit(); + } + + @Override + public boolean containsJID(JID jid) { + return entries_.containsKey(jid); + } + + @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() { + return entries_.values(); + } + + @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; + } + +} |