/** * Create a {@link BaggageHandlerRegistry} instance by parsing the mappings configured in the provided * {@link Config} * * @param config a typesafe config * @return a {@link BaggageHandlerRegistry} instance with handlers loaded for the configured bag keys */ static BaggageHandlerRegistry create(Config config) { Map<BagKey, BaggageHandler<?>> mapping = new TreeMap<>(); for (Entry<String, ConfigValue> x : config.getConfig(BAGS_CONFIGURATION_KEY).entrySet()) { String bagHandlerClassName = x.getValue().unwrapped().toString(); Integer bagNumber = parseBagKey(x.getKey(), bagHandlerClassName); if (bagNumber == null) continue; BagKey key = BagKey.indexed(bagNumber); BaggageHandler<?> handler = resolveHandler(bagHandlerClassName); if (handler == null) continue; mapping.put(key, handler); } if (mapping.size() == 0) { log.warn("No baggage handlers are registered -- if this is unexpected, ensure `bag` is correctly configured"); } else { String handlersString = mapping.entrySet().stream() .map(e -> "\t" + e.getKey().toString() + ": " + e.getValue().getClass().getName().toString()) .collect(Collectors.joining("\n")); log.info(mapping.size() + " baggage handlers registered:\n" + handlersString); } return new BaggageHandlerRegistry(new Registrations(mapping)); }