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}