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