package siebog.starter.config; public class NodeInfo { private boolean slave; private String address; private String name; // if slave private String masterAddr; // if slave /** * * @param config If only 'address', then this is a master node. Otherwise, it should be * 'name@address-master_address'. */ public NodeInfo(String config) { config = config.trim(); if (config.isEmpty()) throw new IllegalArgumentException(); int dash = config.indexOf("-"); if (dash == -1) { slave = false; address = config; } else { // slave@address-master slave = true; final String msg = "A slave node needs a name, its own address, and the master's address."; int at = config.indexOf('@'); if (at <= 0 || at >= dash - 1) throw new IllegalArgumentException(msg); name = config.substring(0, at).trim(); address = config.substring(at + 1, dash).trim(); masterAddr = config.substring(dash + 1).trim(); if (name.isEmpty() || address.isEmpty() || masterAddr.isEmpty()) throw new IllegalArgumentException(); } } public boolean isSlave() { return slave; } public String getAddress() { return address; } public String getName() { return name; } public String getMasterAddr() { return masterAddr; } @Override public String toString() { if (slave) return String.format("%s@%s-%s", name, address, masterAddr); return address; } }