1package im.conversations.android.xmpp.model.roster;
 2
 3import com.google.common.collect.Collections2;
 4import eu.siacs.conversations.xml.Element;
 5import eu.siacs.conversations.xmpp.Jid;
 6import im.conversations.android.annotation.XmlElement;
 7import im.conversations.android.xmpp.model.Extension;
 8import java.util.Arrays;
 9import java.util.Collection;
10import java.util.List;
11import java.util.Locale;
12import java.util.Objects;
13
14@XmlElement
15public class Item extends Extension {
16
17    public static final List<Subscription> RESULT_SUBSCRIPTIONS =
18            Arrays.asList(Subscription.NONE, Subscription.TO, Subscription.FROM, Subscription.BOTH);
19
20    public Item() {
21        super(Item.class);
22    }
23
24    public Jid getJid() {
25        return getAttributeAsJid("jid");
26    }
27
28    public void setJid(final Jid jid) {
29        this.setAttribute("jid", jid);
30    }
31
32    public String getItemName() {
33        return this.getAttribute("name");
34    }
35
36    public void setItemName(final String serverName) {
37        this.setAttribute("name", serverName);
38    }
39
40    public boolean isPendingOut() {
41        return "subscribe".equalsIgnoreCase(this.getAttribute("ask"));
42    }
43
44    public Subscription getSubscription() {
45        final String value = this.getAttribute("subscription");
46        try {
47            return value == null ? null : Subscription.valueOf(value.toUpperCase(Locale.ROOT));
48        } catch (final IllegalArgumentException e) {
49            return null;
50        }
51    }
52
53    public void setSubscription(final Subscription subscription) {
54        if (subscription == null) {
55            this.removeAttribute("subscription");
56        } else {
57            this.setAttribute("subscription", subscription.toString().toLowerCase(Locale.ROOT));
58        }
59    }
60
61    public Collection<String> getGroups() {
62        return Collections2.filter(
63                Collections2.transform(getExtensions(Group.class), Element::getContent),
64                Objects::nonNull);
65    }
66
67    public void setGroups(final Collection<String> groups) {
68        for (final String group : groups) {
69            this.addExtension(new Group());
70        }
71    }
72
73    public enum Subscription {
74        NONE,
75        TO,
76        FROM,
77        BOTH,
78        REMOVE
79    }
80}