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.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        final Localpart localpart = inner.getLocalpartOrNull();
 44        try {
 45            final Resourcepart resourcepart = Resourcepart.from(resource.toString());
 46            if (localpart == null) {
 47                return new WrappedJid(JidCreate.domainFullFrom(inner.getDomain(),resourcepart));
 48            } else {
 49                return new WrappedJid(
 50                        JidCreate.fullFrom(
 51                                localpart,
 52                                inner.getDomain(),
 53                                resourcepart
 54                        ));
 55            }
 56        } catch (XmppStringprepException e) {
 57            throw new IllegalArgumentException(e);
 58        }
 59    }
 60
 61    @Override
 62    public String getLocal() {
 63        final Localpart localpart = inner.getLocalpartOrNull();
 64        return localpart == null ? null : localpart.asUnescapedString();
 65    }
 66
 67    @Override
 68    public String getEscapedLocal() {
 69        final Localpart localpart = inner.getLocalpartOrNull();
 70        return localpart == null ? null : localpart.toString();
 71    }
 72
 73    @Override
 74    public eu.siacs.conversations.xmpp.Jid getDomain() {
 75        return new WrappedJid(inner.asDomainBareJid());
 76    }
 77
 78    @Override
 79    public String getResource() {
 80        final Resourcepart resourcepart = inner.getResourceOrNull();
 81        return resourcepart == null ? null : resourcepart.toString();
 82    }
 83
 84    @Override
 85    public String toEscapedString() {
 86        return inner.toString();
 87    }
 88
 89    @NonNull
 90    @Override
 91    public String toString() {
 92        return inner.asUnescapedString();
 93    }
 94
 95    @Override
 96    public int length() {
 97        return inner.length();
 98    }
 99
100    @Override
101    public char charAt(int i) {
102        return inner.charAt(i);
103    }
104
105    @Override
106    public CharSequence subSequence(int i, int i1) {
107        return inner.subSequence(i,i1);
108    }
109
110    @Override
111    public int compareTo(eu.siacs.conversations.xmpp.Jid jid) {
112        if (jid instanceof WrappedJid) {
113            return inner.compareTo(((WrappedJid) jid).inner);
114        } else {
115            return 0;
116        }
117    }
118
119    @Override
120    public boolean equals(Object o) {
121        if (this == o) return true;
122        if (o == null || getClass() != o.getClass()) return false;
123        WrappedJid that = (WrappedJid) o;
124        return inner.equals(that.inner);
125    }
126
127    @Override
128    public int hashCode() {
129        return inner.hashCode();
130    }
131}