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 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 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 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 (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<>(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}