1package eu.siacs.conversations.xmpp;
2
3import org.jxmpp.jid.impl.JidCreate;
4import org.jxmpp.jid.parts.Domainpart;
5import org.jxmpp.jid.parts.Localpart;
6import org.jxmpp.jid.parts.Resourcepart;
7import org.jxmpp.stringprep.XmppStringprepException;
8
9import java.io.Serializable;
10
11public interface Jid extends Comparable<Jid>, Serializable, CharSequence {
12
13 static Jid of(CharSequence local, CharSequence domain, CharSequence resource) {
14 if (resource == null) {
15 return ofLocalAndDomain(local, domain);
16 }
17 try {
18 return new WrappedJid(JidCreate.entityFullFrom(
19 Localpart.fromUnescaped(local.toString()),
20 Domainpart.from(domain.toString()),
21 Resourcepart.from(resource.toString())
22 ));
23 } catch (XmppStringprepException e) {
24 throw new IllegalArgumentException(e);
25 }
26 }
27
28 static Jid ofEscaped(CharSequence local, CharSequence domain, CharSequence resource) {
29 try {
30 if (resource == null) {
31 return new WrappedJid(
32 JidCreate.bareFrom(
33 Localpart.from(local.toString()),
34 Domainpart.from(domain.toString())
35 )
36 );
37 }
38 return new WrappedJid(JidCreate.entityFullFrom(
39 Localpart.from(local.toString()),
40 Domainpart.from(domain.toString()),
41 Resourcepart.from(resource.toString())
42 ));
43 } catch (XmppStringprepException e) {
44 throw new IllegalArgumentException(e);
45 }
46 }
47
48
49 static Jid ofDomain(CharSequence domain) {
50 try {
51 return new WrappedJid(JidCreate.domainBareFrom(domain));
52 } catch (XmppStringprepException e) {
53 throw new IllegalArgumentException(e);
54 }
55 }
56
57 static Jid ofLocalAndDomain(CharSequence local, CharSequence domain) {
58 try {
59 return new WrappedJid(
60 JidCreate.bareFrom(
61 Localpart.fromUnescaped(local.toString()),
62 Domainpart.from(domain.toString())
63 )
64 );
65 } catch (XmppStringprepException e) {
66 throw new IllegalArgumentException(e);
67 }
68 }
69
70 static Jid ofLocalAndDomainEscaped(CharSequence local, CharSequence domain) {
71 try {
72 return new WrappedJid(
73 JidCreate.bareFrom(
74 Localpart.from(local.toString()),
75 Domainpart.from(domain.toString())
76 )
77 );
78 } catch (XmppStringprepException e) {
79 throw new IllegalArgumentException(e);
80 }
81 }
82
83 static Jid of(CharSequence jid) {
84 if (jid instanceof Jid) {
85 return (Jid) jid;
86 }
87 try {
88 return new WrappedJid(JidCreate.fromUnescaped(jid));
89 } catch (XmppStringprepException e) {
90 throw new IllegalArgumentException(e);
91 }
92 }
93
94 static Jid ofEscaped(CharSequence jid) {
95 try {
96 return new WrappedJid(JidCreate.from(jid));
97 } catch (XmppStringprepException e) {
98 e.printStackTrace();
99 throw new IllegalArgumentException(e);
100 }
101 }
102
103 boolean isFullJid();
104
105 boolean isBareJid();
106
107 boolean isDomainJid();
108
109 Jid asBareJid();
110
111 Jid withResource(CharSequence resource);
112
113 String getLocal();
114
115 String getEscapedLocal();
116
117 String getDomain();
118
119 String getResource();
120
121 String toEscapedString();
122}