package com.alibaba.jstorm.elasticsearch.common;
import java.io.Serializable;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
public class EsConfig implements Serializable {
private static final long serialVersionUID = 946576929049344226L;
private static final String SEPARATER = ",";
private static final String DELIMITER = ":";
private final String clusterName;
private final String[] nodes;
private final Map<String, String> additionalConfiguration;
public EsConfig(String clusterName, String nodes) {
this(clusterName, nodes, Collections.<String, String> emptyMap());
}
public EsConfig(String clusterName, String nodes,
Map<String, String> additionalConfiguration) {
this.clusterName = clusterName;
this.nodes = splitNodes(nodes);
this.additionalConfiguration = new HashMap<String, String>(
additionalConfiguration);
checkArguments();
}
private String[] splitNodes(String nodesString) {
String[] nodes = nodesString.split(SEPARATER);
return nodes;
}
private void checkArguments() {
Preconditions.checkNotNull(clusterName);
Preconditions.checkNotNull(additionalConfiguration);
Preconditions.checkNotNull(nodes);
Preconditions.checkArgument(nodes.length != 0, "Nodes cannot be empty");
}
List<TransportAddress> getTransportAddresses() throws UnknownHostException {
List<TransportAddress> transportAddresses = Lists.newArrayList();
for (String node : nodes) {
String[] hostAndPort = node.split(DELIMITER);
Preconditions.checkArgument(hostAndPort.length == 2,
"Incorrect node format");
String host = hostAndPort[0];
int port = Integer.parseInt(hostAndPort[1]);
InetSocketTransportAddress inetSocketTransportAddress = new InetSocketTransportAddress(
InetAddress.getByName(host), port);
transportAddresses.add(inetSocketTransportAddress);
}
return transportAddresses;
}
Settings getSettings() {
return Settings.builder().put("cluster.name", clusterName)
.put(additionalConfiguration).build();
}
}