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}