Roster.java

 1package eu.siacs.conversations.entities;
 2
 3import java.util.ArrayList;
 4import java.util.List;
 5import java.util.Locale;
 6import java.util.concurrent.ConcurrentHashMap;
 7
 8public class Roster {
 9	Account account;
10	ConcurrentHashMap<String, Contact> contacts = new ConcurrentHashMap<String, Contact>();
11	private String version = null;
12
13	public Roster(Account account) {
14		this.account = account;
15	}
16
17	public Contact getContactFromRoster(String jid) {
18		if (jid == null) {
19			return null;
20		}
21		String cleanJid = jid.split("/", 2)[0];
22		Contact contact = contacts.get(cleanJid);
23		if (contact != null && contact.showInRoster()) {
24			return contact;
25		} else {
26			return null;
27		}
28	}
29
30	public Contact getContact(String jid) {
31		String cleanJid = jid.split("/", 2)[0].toLowerCase(Locale.getDefault());
32		if (contacts.containsKey(cleanJid)) {
33			return contacts.get(cleanJid);
34		} else {
35			Contact contact = new Contact(cleanJid);
36			contact.setAccount(account);
37			contacts.put(cleanJid, 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 (Contact contact : getContacts()) {
50			contact.resetOption(Contact.Options.IN_ROSTER);
51		}
52	}
53
54	public void clearSystemAccounts() {
55		for (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<Contact>(this.contacts.values());
64	}
65
66	public void initContact(Contact contact) {
67		contact.setAccount(account);
68		contact.setOption(Contact.Options.IN_ROSTER);
69		contacts.put(contact.getJid(), 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}