1package eu.siacs.conversations.xmpp;
2
3
4import android.support.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 try {
44 return new WrappedJid(
45 JidCreate.fullFrom(
46 inner.getLocalpartOrThrow(),
47 inner.getDomain(),
48 Resourcepart.from(resource.toString())
49 ));
50 } catch (XmppStringprepException e) {
51 throw new IllegalArgumentException(e);
52 }
53 }
54
55 @Override
56 public String getLocal() {
57 final Localpart localpart = inner.getLocalpartOrNull();
58 return localpart == null ? null : localpart.asUnescapedString();
59 }
60
61 @Override
62 public String getEscapedLocal() {
63 final Localpart localpart = inner.getLocalpartOrNull();
64 return localpart == null ? null : localpart.toString();
65 }
66
67 @Override
68 public String getDomain() {
69 final Domainpart domainpart = inner.getDomain();
70 return domainpart == null ? null : domainpart.toString();
71 }
72
73 @Override
74 public String getResource() {
75 final Resourcepart resourcepart = inner.getResourceOrNull();
76 return resourcepart == null ? null : resourcepart.toString();
77 }
78
79 @Override
80 public String toEscapedString() {
81 return inner.toString();
82 }
83
84 @NonNull
85 @Override
86 public String toString() {
87 return inner.asUnescapedString();
88 }
89
90 @Override
91 public int length() {
92 return inner.length();
93 }
94
95 @Override
96 public char charAt(int i) {
97 return inner.charAt(i);
98 }
99
100 @Override
101 public CharSequence subSequence(int i, int i1) {
102 return inner.subSequence(i,i1);
103 }
104
105 @Override
106 public int compareTo(eu.siacs.conversations.xmpp.Jid jid) {
107 if (jid instanceof WrappedJid) {
108 return inner.compareTo(((WrappedJid) jid).inner);
109 } else {
110 return 0;
111 }
112 }
113
114 @Override
115 public boolean equals(Object o) {
116 if (this == o) return true;
117 if (o == null || getClass() != o.getClass()) return false;
118 WrappedJid that = (WrappedJid) o;
119 return inner.equals(that.inner);
120 }
121
122 @Override
123 public int hashCode() {
124 return inner.hashCode();
125 }
126}