package org.jabref.gui;
import java.util.function.Function;
import org.jabref.Globals;
import org.jabref.gui.keyboard.KeyBindingRepository;
import org.jabref.gui.util.TaskExecutor;
import org.jabref.logic.journals.JournalAbbreviationLoader;
import org.jabref.preferences.JabRefPreferences;
import com.airhacks.afterburner.injection.Injector;
import com.airhacks.afterburner.injection.PresenterFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class DefaultInjector implements PresenterFactory {
private static final Log LOGGER = LogFactory.getLog(DefaultInjector.class);
/**
* This method takes care of creating dependencies.
* By default, it just creates a new instance of the class.
* Dependencies without default constructor are constructed by hand.
*/
private static Object createDependency(Class<?> clazz) {
if (clazz == DialogService.class) {
return new FXDialogService();
} else if (clazz == TaskExecutor.class) {
return Globals.taskExecutor;
} else if (clazz == JabRefPreferences.class) {
return Globals.prefs;
} else if (clazz == KeyBindingRepository.class) {
return Globals.getKeyPrefs();
} else if (clazz == JournalAbbreviationLoader.class) {
return Globals.journalAbbreviationLoader;
} else if (clazz == StateManager.class) {
return Globals.stateManager;
} else {
try {
return clazz.newInstance();
} catch (InstantiationException | IllegalAccessException ex) {
LOGGER.error("Cannot instantiate dependency: " + clazz, ex);
return null;
}
}
}
@Override
public <T> T instantiatePresenter(Class<T> clazz, Function<String, Object> injectionContext) {
LOGGER.debug("Instantiate " + clazz.getName());
// Use our own method to construct dependencies
Injector.setInstanceSupplier(DefaultInjector::createDependency);
return Injector.instantiatePresenter(clazz, injectionContext);
}
}