package io.pcp.parfait.pcp;
import java.util.Map;
import io.pcp.parfait.Monitorable;
import io.pcp.parfait.dxm.MetricName;
import com.google.common.collect.Maps;
public class StringParsingTextSource implements TextSource {
private final TextSource delegate;
public StringParsingTextSource(Iterable<String> input, TextSource fallback) {
delegate = new MapTextSource(fallback, parseMap(input));
}
private Map<String, String> parseMap(Iterable<String> input) {
Map<String, String> output = Maps.newHashMap();
int lineNumber = 0;
for (String currentLine : input) {
lineNumber++;
if (!(currentLine.trim().isEmpty() || currentLine.trim().startsWith("#"))) {
String[] elements = currentLine.trim().split("\t");
if (elements.length != 2) {
throw new IllegalArgumentException(
"Error parsing line "
+ lineNumber
+ " of input; should have two tab-delimited columns in format <name>\\t<text>");
}
String metricName = elements[0];
String text = elements[1];
output.put(metricName, text);
}
}
return output;
}
@Override
public String getText(Monitorable<?> monitorable, MetricName mappedName) {
return delegate.getText(monitorable, mappedName);
}
}