package com.plugtree.solrmeter; import com.google.inject.AbstractModule; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.Provides; import com.google.inject.name.Names; import com.plugtree.solrmeter.runMode.SolrMeterRunMode; import com.plugtree.solrmeter.runMode.SolrMeterRunModeGUI; import com.plugtree.solrmeter.runMode.SolrMeterRunModeHeadless; import com.plugtree.solrmeter.model.SolrMeterConfiguration; import java.util.HashMap; import java.util.Map; public class SolrMeterRunModeModule extends AbstractModule { @Override public void configure(){ configureRunModes(); } private void configureRunModes() { Map<String, Class<? extends SolrMeterRunMode>> map = getRunModesMap(); for(String runModeName:map.keySet()) { bind(SolrMeterRunMode.class).annotatedWith(Names.named(runModeName)).to(map.get(runModeName)); } } private Map<String, Class<? extends SolrMeterRunMode>> getRunModesMap() { Map<String, Class<? extends SolrMeterRunMode>> map = new HashMap<String, Class<? extends SolrMeterRunMode>>(); map.put(SolrMeterRunModeGUI.RUN_MODE_NAME, SolrMeterRunModeGUI.class); map.put(SolrMeterRunModeHeadless.RUN_MODE_NAME, SolrMeterRunModeHeadless.class); return map; } @Provides public SolrMeterRunMode getRunMode(Injector injector) { String name = SolrMeterRunModeGUI.RUN_MODE_NAME; if(SolrMeterConfiguration.isHeadless()) { name = SolrMeterRunModeHeadless.RUN_MODE_NAME; } final Key<SolrMeterRunMode> key = Key.get(SolrMeterRunMode.class, Names.named(name)); return injector.getInstance(key); } }