package call; public class Contact extends AbstractId { public static enum Reachability { NORMAL, UNREACHABLE, LOOPBACK } private final String host; private final int port; private final String user; private final Reachability reachability; public Contact(String host, int port, String user) { this.host = host.toLowerCase(); this.port = port; this.user = user.toLowerCase(); this.reachability = Reachability.NORMAL; } public Contact(String host, int port, String user, Reachability reachability) { this.host = host.toLowerCase(); this.port = port; this.user = user.toLowerCase(); this.reachability = reachability; } @Override public String toString() { // Util.firstToUpperCase(user) switch (reachability) { case LOOPBACK: return "loopback device"; case UNREACHABLE: return user + "@" + host + " (unreachable)"; case NORMAL: default: if (port == Config.DEFAULT_PORT) return user + "@" + host; else return user + "@" + host + ":" + port; } } @Override public String getId() { switch (reachability) { case LOOPBACK: // return user + "@" + host + ":" + port + " (loop)"; return "loopback device"; case UNREACHABLE: case NORMAL: default: return user + "@" + host + ":" + port; } } public String getHost() { return host; } public int getPort() { return port; } public String getUser() { return user; } public boolean isReachable() { return !isUnreachable(); } public boolean isUnreachable() { return reachability.equals(Reachability.UNREACHABLE) || reachability.equals(Reachability.LOOPBACK); } public boolean isLoop() { return reachability.equals(Reachability.LOOPBACK); } public boolean isHost(String host) { return this.host.equals(host.toLowerCase()); } public boolean isPort(int port) { return this.port == port; } public boolean isUser(String user) { return this.user.equals(user.toLowerCase()); } }