WrappedJid.java

  1package eu.siacs.conversations.xmpp;
  2
  3
  4import androidx.annotation.NonNull;
  5
  6import org.jxmpp.jid.Jid;
  7import org.jxmpp.jid.impl.JidCreate;
  8import org.jxmpp.jid.parts.Localpart;
  9import org.jxmpp.jid.parts.Resourcepart;
 10import org.jxmpp.stringprep.XmppStringprepException;
 11
 12
 13public class WrappedJid implements eu.siacs.conversations.xmpp.Jid {
 14    private final Jid inner;
 15
 16    WrappedJid(Jid inner) {
 17        this.inner = inner;
 18    }
 19
 20    @Override
 21    public boolean isFullJid() {
 22        return inner.isEntityFullJid() || inner.isDomainFullJid();
 23    }
 24
 25    @Override
 26    public boolean isBareJid() {
 27        return inner.isDomainBareJid() || inner.isEntityBareJid();
 28    }
 29
 30    @Override
 31    public boolean isDomainJid() {
 32        return inner.isDomainBareJid() || inner.isDomainFullJid();
 33    }
 34
 35    @Override
 36    public eu.siacs.conversations.xmpp.Jid asBareJid() {
 37        return new WrappedJid(inner.asBareJid());
 38    }
 39
 40    @Override
 41    public eu.siacs.conversations.xmpp.Jid withResource(CharSequence resource) {
 42        final Localpart localpart = inner.getLocalpartOrNull();
 43        try {
 44            final Resourcepart resourcepart = Resourcepart.from(resource.toString());
 45            if (localpart == null) {
 46                return new WrappedJid(JidCreate.domainFullFrom(inner.getDomain(),resourcepart));
 47            } else {
 48                return new WrappedJid(
 49                        JidCreate.fullFrom(
 50                                localpart,
 51                                inner.getDomain(),
 52                                resourcepart
 53                        ));
 54            }
 55        } catch (XmppStringprepException e) {
 56            throw new IllegalArgumentException(e);
 57        }
 58    }
 59
 60    @Override
 61    public String getLocal() {
 62        final Localpart localpart = inner.getLocalpartOrNull();
 63        return localpart == null ? null : localpart.asUnescapedString();
 64    }
 65
 66    @Override
 67    public String getEscapedLocal() {
 68        final Localpart localpart = inner.getLocalpartOrNull();
 69        return localpart == null ? null : localpart.toString();
 70    }
 71
 72    @Override
 73    public eu.siacs.conversations.xmpp.Jid getDomain() {
 74        return new WrappedJid(inner.asDomainBareJid());
 75    }
 76
 77    @Override
 78    public String getResource() {
 79        final Resourcepart resourcepart = inner.getResourceOrNull();
 80        return resourcepart == null ? null : resourcepart.toString();
 81    }
 82
 83    @Override
 84    public String toEscapedString() {
 85        return inner.toString();
 86    }
 87
 88    @NonNull
 89    @Override
 90    public String toString() {
 91        return inner.asUnescapedString();
 92    }
 93
 94    @Override
 95    public int length() {
 96        return inner.length();
 97    }
 98
 99    @Override
100    public char charAt(int i) {
101        return inner.charAt(i);
102    }
103
104    @Override
105    public CharSequence subSequence(int i, int i1) {
106        return inner.subSequence(i,i1);
107    }
108
109    @Override
110    public int compareTo(eu.siacs.conversations.xmpp.Jid jid) {
111        if (jid instanceof WrappedJid) {
112            return inner.compareTo(((WrappedJid) jid).inner);
113        } else {
114            return 0;
115        }
116    }
117
118    @Override
119    public boolean equals(Object o) {
120        if (this == o) return true;
121        if (o == null || getClass() != o.getClass()) return false;
122        WrappedJid that = (WrappedJid) o;
123        return inner.equals(that.inner);
124    }
125
126    @Override
127    public int hashCode() {
128        return inner.hashCode();
129    }
130}