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}