Jid.java

  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;
 10import java.util.regex.Matcher;
 11import java.util.regex.Pattern;
 12
 13public interface Jid extends Comparable<Jid>, Serializable, CharSequence {
 14
 15    Pattern JID = Pattern.compile("^((.*?)@)?([^/@]+)(/(.*))?$");
 16
 17    static Jid of(CharSequence local, CharSequence domain, CharSequence resource) {
 18        if (local == null) {
 19            if (resource == null) {
 20                return ofDomain(domain);
 21            } else {
 22                return ofDomainAndResource(domain, resource);
 23            }
 24        }
 25        if (resource == null) {
 26            return ofLocalAndDomain(local, domain);
 27        }
 28        try {
 29            return new WrappedJid(JidCreate.entityFullFrom(
 30                    Localpart.fromUnescaped(local.toString()),
 31                    Domainpart.from(domain.toString()),
 32                    Resourcepart.from(resource.toString())
 33            ));
 34        } catch (XmppStringprepException e) {
 35            throw new IllegalArgumentException(e);
 36        }
 37    }
 38
 39    static Jid ofEscaped(CharSequence local, CharSequence domain, CharSequence resource) {
 40        try {
 41            if (resource == null) {
 42                return new WrappedJid(
 43                        JidCreate.bareFrom(
 44                                Localpart.from(local.toString()),
 45                                Domainpart.from(domain.toString())
 46                        )
 47                );
 48            }
 49            return new WrappedJid(JidCreate.entityFullFrom(
 50                    Localpart.from(local.toString()),
 51                    Domainpart.from(domain.toString()),
 52                    Resourcepart.from(resource.toString())
 53            ));
 54        } catch (XmppStringprepException e) {
 55            throw new IllegalArgumentException(e);
 56        }
 57    }
 58
 59
 60    static Jid ofDomain(CharSequence domain) {
 61        try {
 62            return new WrappedJid(JidCreate.domainBareFrom(domain));
 63        } catch (XmppStringprepException e) {
 64            throw new IllegalArgumentException(e);
 65        }
 66    }
 67
 68    static Jid ofLocalAndDomain(CharSequence local, CharSequence domain) {
 69        try {
 70            return new WrappedJid(
 71                    JidCreate.bareFrom(
 72                            Localpart.fromUnescaped(local.toString()),
 73                            Domainpart.from(domain.toString())
 74                    )
 75            );
 76        } catch (XmppStringprepException e) {
 77            throw new IllegalArgumentException(e);
 78        }
 79    }
 80
 81    static Jid ofDomainAndResource(CharSequence domain, CharSequence resource) {
 82        try {
 83            return new WrappedJid(
 84                    JidCreate.domainFullFrom(
 85                            Domainpart.from(domain.toString()),
 86                            Resourcepart.from(resource.toString())
 87                    ));
 88        } catch (XmppStringprepException e) {
 89            throw new IllegalArgumentException(e);
 90        }
 91    }
 92
 93    static Jid ofLocalAndDomainEscaped(CharSequence local, CharSequence domain) {
 94        try {
 95            return new WrappedJid(
 96                    JidCreate.bareFrom(
 97                            Localpart.from(local.toString()),
 98                            Domainpart.from(domain.toString())
 99                    )
100            );
101        } catch (XmppStringprepException e) {
102            throw new IllegalArgumentException(e);
103        }
104    }
105
106    static Jid of(CharSequence jid) {
107        if (jid instanceof Jid) {
108            return (Jid) jid;
109        }
110        Matcher matcher = JID.matcher(jid);
111        if (matcher.matches()) {
112            return of(matcher.group(2), matcher.group(3), matcher.group(5));
113        } else {
114            throw new IllegalArgumentException("Could not parse JID: " + jid);
115        }
116    }
117
118    static Jid ofEscaped(CharSequence jid) {
119        try {
120            return new WrappedJid(JidCreate.from(jid));
121        } catch (final XmppStringprepException e) {
122            throw new IllegalArgumentException(e);
123        }
124    }
125
126    boolean isFullJid();
127
128    boolean isBareJid();
129
130    boolean isDomainJid();
131
132    Jid asBareJid();
133
134    Jid withResource(CharSequence resource);
135
136    String getLocal();
137
138    String getEscapedLocal();
139
140    Jid getDomain();
141
142    String getResource();
143
144    String toEscapedString();
145}