InfoQuery.java

 1package im.conversations.android.xmpp.model.disco.info;
 2
 3import com.google.common.collect.Collections2;
 4import com.google.common.collect.Iterables;
 5import im.conversations.android.annotation.XmlElement;
 6import im.conversations.android.xmpp.model.Extension;
 7import im.conversations.android.xmpp.model.data.Data;
 8import java.util.Collection;
 9import java.util.Objects;
10
11@XmlElement(name = "query")
12public class InfoQuery extends Extension {
13
14    public InfoQuery() {
15        super(InfoQuery.class);
16    }
17
18    public void setNode(final String node) {
19        this.setAttribute("node", node);
20    }
21
22    public String getNode() {
23        return this.getAttribute("node");
24    }
25
26    public Collection<Feature> getFeatures() {
27        return this.getExtensions(Feature.class);
28    }
29
30    public boolean hasFeature(final String feature) {
31        return Iterables.any(getFeatures(), f -> feature.equals(f.getVar()));
32    }
33
34    public Collection<Identity> getIdentities() {
35        return this.getExtensions(Identity.class);
36    }
37
38    public boolean hasIdentityWithCategory(final String category) {
39        return Iterables.any(getIdentities(), i -> category.equals(i.getCategory()));
40    }
41
42    public boolean hasIdentityWithCategoryAndType(final String category, final String type) {
43        return Iterables.any(
44                getIdentities(), i -> (category == null || category.equals(i.getCategory())) && (type == null || type.equals(i.getType())));
45    }
46
47    public Collection<String> getFeatureStrings() {
48        return Collections2.filter(
49                Collections2.transform(getFeatures(), Feature::getVar), Objects::nonNull);
50    }
51
52    public Collection<Data> getServiceDiscoveryExtensions() {
53        return getExtensions(Data.class);
54    }
55
56    public Data getServiceDiscoveryExtension(final String formType) {
57        return Iterables.find(
58                getServiceDiscoveryExtensions(), e -> formType.equals(e.getFormType()), null);
59    }
60
61    public String getServiceDiscoveryExtension(final String formType, final String fieldName) {
62        final var extension =
63                Iterables.find(
64                        getServiceDiscoveryExtensions(),
65                        e -> formType.equals(e.getFormType()),
66                        null);
67        if (extension == null) {
68            return null;
69        }
70        final var field = extension.getFieldByName(fieldName);
71        if (field == null) {
72            return null;
73        }
74        return field.getValue();
75    }
76}