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 void setBy(final Jid by) {
26        this.setAttribute("by", by);
27    }
28
29    public String getId() {
30        return this.getAttribute("id");
31    }
32
33    public static String get(
34            final im.conversations.android.xmpp.model.stanza.Message packet, final Jid by) {
35        final var builder = new ImmutableMap.Builder<Jid, String>();
36        for (final var stanzaId : packet.getExtensions(StanzaId.class)) {
37            final var id = stanzaId.getId();
38            final var byAttribute = Jid.Invalid.getNullForInvalid(stanzaId.getBy());
39            if (byAttribute != null && id != null) {
40                builder.put(byAttribute, id);
41            }
42        }
43        final Map<Jid, String> byToId;
44        try {
45            byToId = builder.buildOrThrow();
46        } catch (final IllegalArgumentException e) {
47            return null;
48        }
49        return byToId.get(by);
50    }
51}