Roster.java

 1package eu.siacs.conversations.entities;
 2
 3import java.util.ArrayList;
 4import java.util.List;
 5import java.util.concurrent.ConcurrentHashMap;
 6
 7import eu.siacs.conversations.xmpp.jid.Jid;
 8
 9public class Roster {
10	final Account account;
11	final ConcurrentHashMap<String, Contact> contacts = new ConcurrentHashMap<>();
12	private String version = null;
13
14	public Roster(Account account) {
15		this.account = account;
16	}
17
18	public Contact getContactFromRoster(Jid jid) {
19		if (jid == null) {
20			return null;
21		}
22		final Contact contact = contacts.get(jid.toBareJid().toString());
23		if (contact != null && contact.showInRoster()) {
24			return contact;
25		} else {
26			return null;
27		}
28	}
29
30	public Contact getContact(final Jid jid) {
31		final Jid bareJid = jid.toBareJid();
32		if (contacts.containsKey(bareJid.toString())) {
33			return contacts.get(bareJid.toString());
34		} else {
35			final Contact contact = new Contact(bareJid);
36			contact.setAccount(account);
37			contacts.put(bareJid.toString(), contact);
38			return contact;
39		}
40	}
41
42	public void clearPresences() {
43		for (Contact contact : getContacts()) {
44			contact.clearPresences();
45		}
46	}
47
48	public void markAllAsNotInRoster() {
49		for (final Contact contact : getContacts()) {
50			contact.resetOption(Contact.Options.IN_ROSTER);
51		}
52	}
53
54	public void clearSystemAccounts() {
55		for (final Contact contact : getContacts()) {
56			contact.setPhotoUri(null);
57			contact.setSystemName(null);
58			contact.setSystemAccount(null);
59		}
60	}
61
62	public List<Contact> getContacts() {
63		return new ArrayList<>(this.contacts.values());
64	}
65
66	public void initContact(final Contact contact) {
67		contact.setAccount(account);
68		contact.setOption(Contact.Options.IN_ROSTER);
69		contacts.put(contact.getJid().toBareJid().toString(), contact);
70	}
71
72	public void setVersion(String version) {
73		this.version = version;
74	}
75
76	public String getVersion() {
77		return this.version;
78	}
79
80	public Account getAccount() {
81		return this.account;
82	}
83}