in core/src/main/java/org/apache/stormcrawler/util/ConfigurableHelper.java [77:131]
static <T extends Configurable> List<@NotNull T> createConfiguredInstance(
@NotNull String configName,
@NotNull Class<T> filterClass,
@NotNull Map<String, Object> stormConf,
@NotNull JsonNode filtersConf) {
// initialises the filters
List<T> filterLists = new ArrayList<>();
// get the filters part
filtersConf = filtersConf.get(configName);
if (filtersConf == null) {
LOG.info("No field {} in JSON config. Skipping...", configName);
return filterLists;
}
// conf node contains a list of objects
Iterator<JsonNode> filterIter = filtersConf.elements();
while (filterIter.hasNext()) {
JsonNode afilterConf = filterIter.next();
String filterName = "<unnamed>";
JsonNode nameNode = afilterConf.get("name");
if (nameNode != null) {
filterName = nameNode.textValue();
}
JsonNode classNode = afilterConf.get("class");
if (classNode == null) {
LOG.error("Filter {} doesn't specified a 'class' attribute", filterName);
continue;
}
String className = classNode.textValue().trim();
filterName += '[' + className + ']';
// check that it is available and implements the interface
// ParseFilter
try {
T filterInstance =
InitialisationUtil.initializeFromQualifiedName(className, filterClass);
JsonNode paramNode = afilterConf.get("params");
if (paramNode != null) {
filterInstance.configure(stormConf, paramNode, filterName);
} else {
// Pass in a nullNode if missing
filterInstance.configure(stormConf, NullNode.getInstance(), filterName);
}
filterLists.add(filterInstance);
LOG.info("Setup {}", filterName);
} catch (Exception e) {
LOG.error("Can't setup {}: {}", filterName, e);
throw new RuntimeException("Can't setup " + filterName, e);
}
}
return filterLists;
}