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				if (p.getMessage() != null && !p.getMessage().trim().isEmpty()) {
 63					templates.add(new PresenceTemplate(p.getStatus(), p.getMessage()));
 64				}
 65			}
 66			return templates;
 67		}
 68	}
 69
 70	public boolean has(String presence) {
 71		synchronized (this.presences) {
 72			return presences.containsKey(presence);
 73		}
 74	}
 75
 76	public List<String> getStatusMessages() {
 77		ArrayList<String> messages = new ArrayList<>();
 78		synchronized (this.presences) {
 79			for(Presence presence : this.presences.values()) {
 80				String message = presence.getMessage() == null ? null : presence.getMessage().trim();
 81				if (message != null && !message.isEmpty() && !messages.contains(message)) {
 82					messages.add(message);
 83				}
 84			}
 85		}
 86		return messages;
 87	}
 88
 89	public boolean allOrNonSupport(String namespace) {
 90		synchronized (this.presences) {
 91			for(Presence presence : this.presences.values()) {
 92				ServiceDiscoveryResult disco = presence.getServiceDiscoveryResult();
 93				if (disco == null || !disco.getFeatures().contains(namespace)) {
 94					return false;
 95				}
 96			}
 97		}
 98		return true;
 99	}
100}