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 eu.siacs.conversations.xmpp.Jid getDomain() {
69 return new WrappedJid(inner.asDomainBareJid());
70 }
71
72 @Override
73 public String getResource() {
74 final Resourcepart resourcepart = inner.getResourceOrNull();
75 return resourcepart == null ? null : resourcepart.toString();
76 }
77
78 @Override
79 public String toEscapedString() {
80 return inner.toString();
81 }
82
83 @NonNull
84 @Override
85 public String toString() {
86 return inner.asUnescapedString();
87 }
88
89 @Override
90 public int length() {
91 return inner.length();
92 }
93
94 @Override
95 public char charAt(int i) {
96 return inner.charAt(i);
97 }
98
99 @Override
100 public CharSequence subSequence(int i, int i1) {
101 return inner.subSequence(i,i1);
102 }
103
104 @Override
105 public int compareTo(eu.siacs.conversations.xmpp.Jid jid) {
106 if (jid instanceof WrappedJid) {
107 return inner.compareTo(((WrappedJid) jid).inner);
108 } else {
109 return 0;
110 }
111 }
112
113 @Override
114 public boolean equals(Object o) {
115 if (this == o) return true;
116 if (o == null || getClass() != o.getClass()) return false;
117 WrappedJid that = (WrappedJid) o;
118 return inner.equals(that.inner);
119 }
120
121 @Override
122 public int hashCode() {
123 return inner.hashCode();
124 }
125}