package org.xbib.elasticsearch.gatherer; import org.elasticsearch.common.collect.ImmutableMap; import org.elasticsearch.common.collect.Maps; import org.elasticsearch.common.inject.AbstractModule; import org.elasticsearch.common.inject.Module; import org.elasticsearch.common.inject.Modules; import org.elasticsearch.common.inject.SpawnModules; import org.elasticsearch.common.settings.Settings; import java.util.Collection; import java.util.Map; import static org.elasticsearch.common.collect.Lists.newLinkedList; public class GathererModule extends AbstractModule implements SpawnModules { private final Settings settings; private Map<String, Class<? extends Module>> gathererModules = Maps.newHashMap(); public GathererModule(Settings settings) { this.settings = settings; } @Override protected void configure() { bind(GathererService.class).asEagerSingleton(); bind(GathererRegistry.class).toInstance(new GathererRegistry(gathererModules)); } /** * Registers a custom gatherer module. * * @param name the name * @param module he module */ public void registerGathererModule(String name, Class<? extends Module> module) { gathererModules.put(name, module); } @Override public Iterable<? extends Module> spawnModules() { Collection<Module> modules = newLinkedList(); for (Map.Entry<String, Class<? extends Module>> me : gathererModules.entrySet()) { modules.add(Modules.createModule(me.getValue(), settings)); } return modules; } }