package com.robert.vesta.service.impl.provider;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import com.robert.vesta.util.IpUtils;
public class IpConfigurableMachineIdProvider implements MachineIdProvider {
private static final Logger log = LoggerFactory
.getLogger(IpConfigurableMachineIdProvider.class);
private long machineId;
private Map<String, Long> ipsMap = new HashMap<String, Long>();
public IpConfigurableMachineIdProvider() {
log.debug("IpConfigurableMachineIdProvider constructed.");
}
public IpConfigurableMachineIdProvider(String ips) {
setIps(ips);
init();
}
public void init() {
String ip = IpUtils.getHostIp();
if (StringUtils.isEmpty(ip)) {
String msg = "Fail to get host IP address. Stop to initialize the IpConfigurableMachineIdProvider provider.";
log.error(msg);
throw new IllegalStateException(msg);
}
if (!ipsMap.containsKey(ip)) {
String msg = String
.format("Fail to configure ID for host IP address %s. Stop to initialize the IpConfigurableMachineIdProvider provider.",
ip);
log.error(msg);
throw new IllegalStateException(msg);
}
machineId = ipsMap.get(ip);
log.info("IpConfigurableMachineIdProvider.init ip {} id {}", ip,
machineId);
}
public void setIps(String ips) {
log.debug("IpConfigurableMachineIdProvider ips {}", ips);
if (!StringUtils.isEmpty(ips)) {
String[] ipArray = ips.split(",");
for (int i = 0; i < ipArray.length; i++) {
ipsMap.put(ipArray[i], (long) i);
}
}
}
public long getMachineId() {
return machineId;
}
public void setMachineId(long machineId) {
this.machineId = machineId;
}
}