StanzaId.java

 1package im.conversations.android.xmpp.model.unique;
 2
 3import com.google.common.collect.ImmutableMap;
 4import eu.siacs.conversations.xmpp.Jid;
 5import im.conversations.android.annotation.XmlElement;
 6import im.conversations.android.xmpp.model.Extension;
 7import java.util.Map;
 8
 9@XmlElement
10public class StanzaId extends Extension {
11
12    public StanzaId() {
13        super(StanzaId.class);
14    }
15
16    public StanzaId(final String id) {
17        this();
18        this.setAttribute("id", id);
19    }
20
21    public Jid getBy() {
22        return this.getAttributeAsJid("by");
23    }
24
25    public String getId() {
26        return this.getAttribute("id");
27    }
28
29    public static String get(
30            final im.conversations.android.xmpp.model.stanza.Message packet, final Jid by) {
31        final var builder = new ImmutableMap.Builder<Jid, String>();
32        for (final var stanzaId : packet.getExtensions(StanzaId.class)) {
33            final var id = stanzaId.getId();
34            final var byAttribute = Jid.Invalid.getNullForInvalid(stanzaId.getBy());
35            if (byAttribute != null && id != null) {
36                builder.put(byAttribute, id);
37            }
38        }
39        final Map<Jid, String> byToId;
40        try {
41            byToId = builder.buildOrThrow();
42        } catch (final IllegalArgumentException e) {
43            return null;
44        }
45        return byToId.get(by);
46    }
47}