aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java
diff options
context:
space:
mode:
authorStephen Paul Weber <singpolyma@singpolyma.net>2016-01-10 14:56:55 -0500
committerStephen Paul Weber <singpolyma@singpolyma.net>2016-01-23 10:52:40 -0500
commitfccce229c6a75e3a0b4845199323a00cadf21ac7 (patch)
treeb917b6a8027191be7746441429f327b6bb128b3c /src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java
parent0569a1e7698141262e3f8443be26b5cb053954b8 (diff)
Factor out a representation of XEP-0030 results
And the parser from Element to this representation.
Diffstat (limited to 'src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java')
-rw-r--r--src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java b/src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java
new file mode 100644
index 00000000..96346440
--- /dev/null
+++ b/src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java
@@ -0,0 +1,84 @@
+package eu.siacs.conversations.entities;
+
+import java.util.List;
+import java.util.ArrayList;
+
+import eu.siacs.conversations.xml.Element;
+import eu.siacs.conversations.xmpp.stanzas.IqPacket;
+
+public class ServiceDiscoveryResult {
+ public static class Identity {
+ protected final String category;
+ protected final String type;
+ protected final String name;
+
+ public Identity(final String category, final String type, final String name) {
+ this.category = category;
+ this.type = type;
+ this.name = name;
+ }
+
+ public Identity(final Element el) {
+ this.category = el.getAttribute("category");
+ this.type = el.getAttribute("type");
+ this.name = el.getAttribute("name");
+ }
+
+ public String getCategory() {
+ return this.category;
+ }
+
+ public String getType() {
+ return this.type;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+ }
+
+ protected final List<Identity> identities;
+ protected final List<String> features;
+
+ public ServiceDiscoveryResult(final List<Identity> identities, final List<String> features) {
+ this.identities = identities;
+ this.features = features;
+ }
+
+ public ServiceDiscoveryResult(final IqPacket packet) {
+ this.identities = new ArrayList<>();
+ this.features = new ArrayList<>();
+
+ final List<Element> elements = packet.query().getChildren();
+
+ for (final Element element : elements) {
+ if (element.getName().equals("identity")) {
+ Identity id = new Identity(element);
+ if (id.getType() != null && id.getCategory() != null) {
+ identities.add(id);
+ }
+ } else if (element.getName().equals("feature")) {
+ features.add(element.getAttribute("var"));
+ }
+ }
+ }
+
+ public List<Identity> getIdentities() {
+ return this.identities;
+ }
+
+ public List<String> getFeatures() {
+ return this.features;
+ }
+
+ public boolean hasIdentity(String category, String type) {
+ for(Identity id : this.getIdentities()) {
+ if((category == null || id.getCategory().equals(category)) &&
+ (type == null || id.getType().equals(type))) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+}