Presences.java

 1package eu.siacs.conversations.entities;
 2
 3import java.util.ArrayList;
 4import java.util.Collections;
 5import java.util.Hashtable;
 6import java.util.Iterator;
 7import java.util.List;
 8
 9import eu.siacs.conversations.xml.Element;
10
11public class Presences {
12	private final Hashtable<String, Presence> presences = new Hashtable<>();
13
14	public Hashtable<String, Presence> getPresences() {
15		return this.presences;
16	}
17
18	public void updatePresence(String resource, Presence presence) {
19		synchronized (this.presences) {
20			this.presences.put(resource, presence);
21		}
22	}
23
24	public void removePresence(String resource) {
25		synchronized (this.presences) {
26			this.presences.remove(resource);
27		}
28	}
29
30	public void clearPresences() {
31		synchronized (this.presences) {
32			this.presences.clear();
33		}
34	}
35
36	public Presence getMostAvailablePresence() {
37		synchronized (this.presences) {
38			if (presences.size() < 1) { return null; }
39			return Collections.min(presences.values());
40		}
41	}
42
43	public int size() {
44		synchronized (this.presences) {
45			return presences.size();
46		}
47	}
48
49	public String[] asStringArray() {
50		synchronized (this.presences) {
51			final String[] presencesArray = new String[presences.size()];
52			presences.keySet().toArray(presencesArray);
53			return presencesArray;
54		}
55	}
56
57	public boolean has(String presence) {
58		synchronized (this.presences) {
59			return presences.containsKey(presence);
60		}
61	}
62
63	public List<String> getStatusMessages() {
64		ArrayList<String> messages = new ArrayList<>();
65		synchronized (this.presences) {
66			for(Presence presence : this.presences.values()) {
67				if (presence.message != null && !presence.message.trim().isEmpty()) {
68					messages.add(presence.message.trim());
69				}
70			}
71		}
72		return messages;
73	}
74}