package org.openmuc.framework.driver.iec60870.settings;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.MessageFormat;
import org.openmuc.framework.config.ArgumentSyntaxException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DeviceAddress extends GenericSetting {
private final static Logger logger = LoggerFactory.getLogger(DeviceAddress.class);
protected int common_address = 1;
protected InetAddress host_address = null;
protected int port = 2404;
protected static enum Option implements OptionI {
COMMON_ADDRESS("ca", Integer.class, false),
PORT("p", Integer.class, false),
HOST_ADDRESS("h", InetAddress.class, false);
private String prefix;
private Class<?> type;
private boolean mandatory;
private Option(String prefix, Class<?> type, boolean mandatory) {
this.prefix = prefix;
this.type = type;
this.mandatory = mandatory;
}
@Override
public String prefix() {
return this.prefix;
}
@Override
public Class<?> type() {
return this.type;
}
@Override
public boolean mandatory() {
return this.mandatory;
}
}
public DeviceAddress(String deviceAddress) throws ArgumentSyntaxException {
int addressLength = parseFields(deviceAddress, Option.class);
if (addressLength == 0) {
logger.info(MessageFormat.format(
"No device address setted in configuration, default values will be used: host address = localhost; port = {0}",
port));
}
if (host_address == null) {
try {
host_address = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
throw new ArgumentSyntaxException("Could not set default host address: localhost");
}
}
}
/**
* The common address of device
*
* @return common address as integer
*/
public int commonAddress() {
return common_address;
}
/**
* IP host address of device
*
* @return the host address
*/
public InetAddress hostAddress() {
return host_address;
}
/**
* TCP port of device
*
* @return the port as integer
*/
public int port() {
return port;
}
}