1package eu.siacs.conversations.xmpp;
2
3
4import androidx.annotation.NonNull;
5
6import org.jxmpp.jid.Jid;
7import org.jxmpp.jid.impl.JidCreate;
8import org.jxmpp.jid.parts.Domainpart;
9import org.jxmpp.jid.parts.Localpart;
10import org.jxmpp.jid.parts.Resourcepart;
11import org.jxmpp.stringprep.XmppStringprepException;
12
13
14public class WrappedJid implements eu.siacs.conversations.xmpp.Jid {
15 private final Jid inner;
16
17 WrappedJid(Jid inner) {
18 this.inner = inner;
19 }
20
21 @Override
22 public boolean isFullJid() {
23 return inner.isEntityFullJid() || inner.isDomainFullJid();
24 }
25
26 @Override
27 public boolean isBareJid() {
28 return inner.isDomainBareJid() || inner.isEntityBareJid();
29 }
30
31 @Override
32 public boolean isDomainJid() {
33 return inner.isDomainBareJid() || inner.isDomainFullJid();
34 }
35
36 @Override
37 public eu.siacs.conversations.xmpp.Jid asBareJid() {
38 return new WrappedJid(inner.asBareJid());
39 }
40
41 @Override
42 public eu.siacs.conversations.xmpp.Jid withResource(CharSequence resource) {
43 final Localpart localpart = inner.getLocalpartOrNull();
44 try {
45 final Resourcepart resourcepart = Resourcepart.from(resource.toString());
46 if (localpart == null) {
47 return new WrappedJid(JidCreate.domainFullFrom(inner.getDomain(),resourcepart));
48 } else {
49 return new WrappedJid(
50 JidCreate.fullFrom(
51 localpart,
52 inner.getDomain(),
53 resourcepart
54 ));
55 }
56 } catch (XmppStringprepException e) {
57 throw new IllegalArgumentException(e);
58 }
59 }
60
61 @Override
62 public String getLocal() {
63 final Localpart localpart = inner.getLocalpartOrNull();
64 return localpart == null ? null : localpart.asUnescapedString();
65 }
66
67 @Override
68 public String getEscapedLocal() {
69 final Localpart localpart = inner.getLocalpartOrNull();
70 return localpart == null ? null : localpart.toString();
71 }
72
73 @Override
74 public eu.siacs.conversations.xmpp.Jid getDomain() {
75 return new WrappedJid(inner.asDomainBareJid());
76 }
77
78 @Override
79 public String getResource() {
80 final Resourcepart resourcepart = inner.getResourceOrNull();
81 return resourcepart == null ? null : resourcepart.toString();
82 }
83
84 @Override
85 public String toEscapedString() {
86 return inner.toString();
87 }
88
89 @NonNull
90 @Override
91 public String toString() {
92 return inner.asUnescapedString();
93 }
94
95 @Override
96 public int length() {
97 return inner.length();
98 }
99
100 @Override
101 public char charAt(int i) {
102 return inner.charAt(i);
103 }
104
105 @Override
106 public CharSequence subSequence(int i, int i1) {
107 return inner.subSequence(i,i1);
108 }
109
110 @Override
111 public int compareTo(eu.siacs.conversations.xmpp.Jid jid) {
112 if (jid instanceof WrappedJid) {
113 return inner.compareTo(((WrappedJid) jid).inner);
114 } else {
115 return 0;
116 }
117 }
118
119 @Override
120 public boolean equals(Object o) {
121 if (this == o) return true;
122 if (o == null || getClass() != o.getClass()) return false;
123 WrappedJid that = (WrappedJid) o;
124 return inner.equals(that.inner);
125 }
126
127 @Override
128 public int hashCode() {
129 return inner.hashCode();
130 }
131}