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;
 8import java.util.Map;
 9
10import eu.siacs.conversations.xml.Element;
11
12public class Presences {
13	private final Hashtable<String, Presence> presences = new Hashtable<>();
14
15	public Hashtable<String, Presence> getPresences() {
16		return this.presences;
17	}
18
19	public void updatePresence(String resource, Presence presence) {
20		synchronized (this.presences) {
21			this.presences.put(resource, presence);
22		}
23	}
24
25	public void removePresence(String resource) {
26		synchronized (this.presences) {
27			this.presences.remove(resource);
28		}
29	}
30
31	public void clearPresences() {
32		synchronized (this.presences) {
33			this.presences.clear();
34		}
35	}
36
37	public Presence getMostAvailablePresence() {
38		synchronized (this.presences) {
39			if (presences.size() < 1) { return null; }
40			return Collections.min(presences.values());
41		}
42	}
43
44	public int size() {
45		synchronized (this.presences) {
46			return presences.size();
47		}
48	}
49
50	public String[] asStringArray() {
51		synchronized (this.presences) {
52			final String[] presencesArray = new String[presences.size()];
53			presences.keySet().toArray(presencesArray);
54			return presencesArray;
55		}
56	}
57
58	public List<PresenceTemplate> asTemplates() {
59		synchronized (this.presences) {
60			ArrayList<PresenceTemplate> templates = new ArrayList<>(presences.size());
61			for(Presence p : presences.values()) {
62				templates.add(new PresenceTemplate(p.getStatus(),p.getMessage()));
63			}
64			return templates;
65		}
66	}
67
68	public boolean has(String presence) {
69		synchronized (this.presences) {
70			return presences.containsKey(presence);
71		}
72	}
73
74	public List<String> getStatusMessages() {
75		ArrayList<String> messages = new ArrayList<>();
76		synchronized (this.presences) {
77			for(Presence presence : this.presences.values()) {
78				String message = presence.getMessage() == null ? null : presence.getMessage().trim();
79				if (message != null && !message.isEmpty() && !messages.contains(message)) {
80					messages.add(message);
81				}
82			}
83		}
84		return messages;
85	}
86
87	public boolean allOrNonSupport(String namespace) {
88		synchronized (this.presences) {
89			for(Presence presence : this.presences.values()) {
90				ServiceDiscoveryResult disco = presence.getServiceDiscoveryResult();
91				if (disco == null || !disco.getFeatures().contains(namespace)) {
92					return false;
93				}
94			}
95		}
96		return true;
97	}
98}