package de.uni_passau.fim.pkjab.util;
public final class Jid implements Comparable {
private final String user;
private final String domain;
private final String resource;
// caching
private String bareJid = null;
private String qualifiedJid = null;
public Jid(String user, String domain, String resource) {
if (user == null || domain == null) {
throw new IllegalArgumentException();
}
this.user = user;
this.domain = domain;
this.resource = resource;
}
public boolean isQualified() {
return resource != null;
}
public String getBareJid() {
if (bareJid == null) {
bareJid = user + "@" + domain;
}
return bareJid;
}
public String getQualifiedJid() {
if (qualifiedJid == null) {
qualifiedJid = isQualified() ? user + "@" + domain + "/" + resource : null;
}
return qualifiedJid;
}
public String toString() {
return isQualified() ? getQualifiedJid() : getBareJid();
}
public String getUser() {
return user;
}
public String getDomain() {
return domain;
}
public String getResource() {
return resource;
}
public boolean equals(Object o) {
return (o instanceof Jid) ? equals((Jid) o) : false;
}
public boolean equals(Jid o) {
return (o != null)
&& (user == o.user || user.equalsIgnoreCase(o.user))
&& (domain == o.domain || domain.equalsIgnoreCase(o.domain))
&& (resource == o.resource || (resource != null && resource.equalsIgnoreCase(o.resource)));
}
public boolean equals(String o) {
return toString().equalsIgnoreCase(o);
}
public int compareTo(Object o) {
if (o != null && o instanceof Jid) {
return toString().compareToIgnoreCase(o.toString());
} else {
return -1;
}
}
public int compareTo(String o) {
return toString().compareToIgnoreCase(o);
}
public static Jid fromString(String jid) {
if (jid == null) {
return null;
}
String[] parts = jid.split("/");
if (parts.length > 2) {
return null;
}
String resource = (parts.length == 2) ? parts[1] : null;
parts = parts[0].split("@");
if (parts.length != 2) {
return null;
}
Jid result = new Jid(parts[0], parts[1], resource);
if (result.isQualified()) {
result.qualifiedJid = jid;
} else {
result.bareJid = jid;
}
return result;
}
}