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}