package com.ibm.nmon.data.transform.name;
import org.slf4j.Logger;
import java.util.List;
import com.ibm.nmon.data.DataSet;
import com.ibm.nmon.data.matcher.HostMatcher;
public final class HostRenamer {
private static final Logger LOGGER = org.slf4j.LoggerFactory.getLogger(HostRenamer.class);
private final List<HostMatcher> matchers;
private final List<NameTransformer> transformers;
public HostRenamer() {
matchers = new java.util.LinkedList<HostMatcher>();
transformers = new java.util.LinkedList<NameTransformer>();
}
private HostRenamer(HostMatcher matcher, NameTransformer renamer) {
matchers = java.util.Collections.singletonList(matcher);
transformers = java.util.Collections.singletonList(renamer);
}
public void addRenamer(HostMatcher matcher, NameTransformer renamer) {
if ((matcher != null) && (renamer != null)) {
matchers.add(matcher);
transformers.add(renamer);
}
}
public void rename(DataSet data) {
int n = 0;
for (HostMatcher matcher : matchers) {
if (matcher.matchesHost(data)) {
NameTransformer transformer = transformers.get(n);
if (LPARNameTransformer.class.equals(transformer.getClass())) {
transformer = new LPARNameTransformer(data);
}
else if (NMONRunNameTransformer.class.equals(transformer.getClass())) {
transformer = new NMONRunNameTransformer(data);
}
String newHostname = transformer.transform(data.getHostname());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("renaming '{}' to '{}' with '{}'", new Object[] { data.getHostname(), newHostname,
transformer });
}
data.setHostname(newHostname);
break;
}
else {
LOGGER.trace("'{}' does not match '{}'", matcher, data);
}
++n;
}
}
public static final HostRenamer BY_LPAR = new HostRenamer(HostMatcher.ALL, new LPARNameTransformer(null));
public static final HostRenamer BY_RUN = new HostRenamer(HostMatcher.ALL, new NMONRunNameTransformer(null));
public static final HostRenamer BY_HOST = new HostRenamer(HostMatcher.ALL, new NameTransformer() {
@Override
public String transform(String original) {
return original;
}
public String toString() {
return "hostname";
};
});
}