package br.uff.ic.dyevc.model.topology;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
/**
* Map of host aliases. Maintains lists and reverse lists of existing aliases for
* all known hosts in the topology
*
* @author Cristiano
*/
@SuppressWarnings("serial")
public class HostAliases {
/**
* Maps a common name to a host info
*/
private HashMap<String, HostInfo> hostMap;
/**
* Maps an alias to its common name
*/
private HashMap<String, String> commonNames;
public HostAliases(ArrayList<HostInfo> hosts) {
hostMap = new HashMap<String, HostInfo>();
setHosts(hosts);
}
/**
* Sets the list of known hosts
* @param hosts List of known hosts
*/
public final void setHosts(ArrayList<HostInfo> hosts) {
for (HostInfo hostInfo: hosts) {
hostMap.put(hostInfo.getCommonName(), hostInfo);
//fills the reverse list of aliases to common names
for (String alias: hostInfo.getAliases()) {
commonNames.put(alias, hostInfo.getCommonName());
}
}
}
/**
* Gets all known hostnames
* @return
*/
public Set<String> getCommonNames() {
return hostMap.keySet();
}
/**
* Includes host information for a given common name
* @param commonName Common name of the host
* @param value Host information to be added
* @return The host information added
*/
public HostInfo addHostInfo(String commonName, HostInfo value) {
HostInfo result = hostMap.put(commonName, value);
for (String alias: result.getAliases()) {
commonNames.put(alias, commonName);
}
return result;
}
/**
* Includes an alias for a host
* @param commonName Common name of the host
* @param alias Alias to be added
*/
public void addAlias(String commonName, String alias) {
hostMap.get(commonName).addAlias(alias);
commonNames.put(alias, commonName);
}
/**
* Gets the common name for an alias
* @param alias The alias from which to retrieve common name
* @return The common name for the given alias
*/
public String getCommonName(String alias) {
String result = alias;
//If exists a mapping for the alias, gets it. Otherwise, common name
//is the alias itself.
if (commonNames.containsKey(alias)) {
result = commonNames.get(alias);
}
return result;
}
/**
* Gets all known aliases for the given common name
* @param commonName Common Name of the host to get aliases
* @return Set of known aliases for the given common name
*/
public Set<String> getAliases(String commonName) {
return hostMap.get(commonName).getAliases();
}
}