package org.openstack.atlas.adapter.helpers;
import com.zxtm.service.client.PoolPriorityValueDefinition;
import org.openstack.atlas.service.domain.entities.Node;
import org.openstack.atlas.service.domain.entities.NodeCondition;
import org.openstack.atlas.service.domain.entities.NodeType;
import org.openstack.atlas.util.converters.StringConverter;
import java.util.*;
public class ZeusNodePriorityContainer {
private List<PoolPriorityValueDefinition> priorityValues;
private Map<String, Integer> priorityValuesMap;
private Set<String> priorityValuesSet;
private boolean constainsSecondary;
private boolean constainsPrimary;
public ZeusNodePriorityContainer(Collection<Node> nodesIn) {
Map<String, Integer> pMap = new HashMap<String, Integer>();
priorityValuesSet = new HashSet<String>();
priorityValues = new ArrayList<PoolPriorityValueDefinition>();
constainsSecondary = false;
constainsPrimary = true;
for (Node node : nodesIn) {
if (node.getCondition() == NodeCondition.DISABLED) {
continue; // This node is not enabled so it doesn't count as either primary or secondary.
}
PoolPriorityValueDefinition pVal = new PoolPriorityValueDefinition();
int zPri;
String nodeIpStr = IpHelper.createZeusIpString(node.getIpAddress(), node.getPort());
if (node.getType() == NodeType.SECONDARY) {
zPri = 1;
constainsSecondary = true;
} else {
zPri = 2;
constainsPrimary = true;
}
pMap.put(nodeIpStr, zPri);
pVal.setNode(nodeIpStr);
pVal.setPriority(zPri);
priorityValues.add(pVal);
priorityValuesSet.add(String.format("%s:%d", nodeIpStr, zPri));
}
priorityValuesMap = pMap;
}
public PoolPriorityValueDefinition[][] getPriorityValues() {
PoolPriorityValueDefinition[][] out = null;
if (priorityValues.size() > 0) {
out = new PoolPriorityValueDefinition[1][];
out[0] = priorityValues.toArray(new PoolPriorityValueDefinition[1]);
}
return out;
}
public Map<String, Integer> getPriorityValuesMap() {
return priorityValuesMap;
}
public Set<String> getPriorityValuesSet() {
return priorityValuesSet;
}
public boolean hasSecondary() {
return constainsSecondary;
}
public boolean hasPrimary() {
return constainsPrimary;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder(256);
List<String> nodeStrList = new ArrayList<String>();
String nodeStr;
int i;
int priCount = 0;
int secCount = 0;
String nodeName;
int zPri;
for (PoolPriorityValueDefinition pv : priorityValues) {
nodeName = pv.getNode();
zPri = pv.getPriority();
if (zPri >= 2) {
priCount++;
} else {
secCount++;
}
nodeStr = String.format("{addr:\"%s\",priority: %d}", nodeName, zPri);
nodeStrList.add(nodeStr);
}
nodeStr = StringConverter.commaSeperatedStringList(nodeStrList);
sb.append(String.format("{ primaryNodeCount: %d,", priCount));
sb.append(String.format(" secondaryNodeCount: %d,", secCount));
sb.append(String.format(" nodes: [%s]}", nodeStr));
return sb.toString();
}
}