package org.gridkit.jvmtool;
import java.io.IOException;
import java.io.Reader;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Properties;
import org.gridkit.jvmtool.stacktrace.analytics.BasicFilterFactory;
import org.gridkit.jvmtool.stacktrace.analytics.SimpleCategorizer;
import org.gridkit.jvmtool.stacktrace.analytics.ThreadSnapshotFilter;
import org.gridkit.jvmtool.stacktrace.analytics.TraceFilterPredicateParser;
public class CategorizerParser {
public static void loadCategories(Reader source, SimpleCategorizer categorizer, boolean shortNames, final BasicFilterFactory factory) throws IOException {
final Map<String, ThreadSnapshotFilter> filters = new LinkedHashMap<String, ThreadSnapshotFilter>();
@SuppressWarnings("serial")
Properties props = new Properties() {
@Override
public synchronized Object put(Object key, Object value) {
String skey = (String) key;
String svalue = (String) value;
if (!skey.endsWith("._")) {
ThreadSnapshotFilter filter = TraceFilterPredicateParser.parseFilter(svalue, factory);
filters.put(skey, filter);
}
return super.put(key, value);
}
};
props.load(source);
for(String cat: filters.keySet()) {
String name = cat;
if (!shortNames) {
String desc = props.getProperty(name + "._");
if (desc != null) {
name = desc;
}
}
categorizer.addCategory(name, filters.get(cat));
}
}
}