package org.limewire.friend.impl.address; import org.limewire.io.PermanentAddress; import org.limewire.util.Objects; /** * Provides a permanent address for a full jabber id including * its resource. * * An {@link FriendAddress} is equal to another one if the full * id matches up to the first 5 characters in the resource part. */ public class FriendAddress implements PermanentAddress { private final String id; /** * Id prefix used for equals and hashcode semantics. */ private final String idPrefix; public static String parseIdPrefix(String id) { int slash = id.indexOf('/'); if (slash == -1) { return id; } int endPrefix = Math.min(id.length(), slash + 6); return id.substring(0, endPrefix); } /** * * @param id the full jabber id including resource */ public FriendAddress(String id) { this(Objects.nonNull(id, "id"), parseIdPrefix(id)); } FriendAddress(String id, String idPrefix) { this.id = id; this.idPrefix = idPrefix; } /** * Returns the full jabber id including resource. */ public String getFullId() { return id; } @Override public String getAddressDescription() { return id; } /** * Returns the jabber id email address without resource. */ public String getId() { return parseBareAddress(id); } @Override public String toString() { return org.limewire.util.StringUtils.toString(this); } /** * Returns the XMPP address with any resource information removed. For example, * for the address "matt@jivesoftware.com/Smack", "matt@jivesoftware.com" would * be returned. * * @param XMPPAddress the XMPP address. * @return the bare XMPP address without resource information. */ public static String parseBareAddress(String XMPPAddress) { if (XMPPAddress == null) { return null; } int slashIndex = XMPPAddress.indexOf("/"); if (slashIndex < 0) { return XMPPAddress; } else if (slashIndex == 0) { return ""; } else { return XMPPAddress.substring(0, slashIndex); } } @Override public int hashCode() { return idPrefix.hashCode(); } @Override public boolean equals(Object obj) { if(!(obj instanceof FriendAddress)) { return false; } FriendAddress other = (FriendAddress)obj; return idPrefix.equals(other.idPrefix); } }