package net.sf.openrocket.startup;
import net.sf.openrocket.database.ComponentPresetDao;
import net.sf.openrocket.database.ComponentPresetDatabaseLoader;
import net.sf.openrocket.database.MotorDatabaseLoader;
import net.sf.openrocket.database.motor.MotorDatabase;
import net.sf.openrocket.database.motor.ThrustCurveMotorSetDatabase;
import net.sf.openrocket.formatting.RocketDescriptor;
import net.sf.openrocket.formatting.RocketDescriptorImpl;
import net.sf.openrocket.gui.util.SwingPreferences;
import net.sf.openrocket.gui.watcher.WatchService;
import net.sf.openrocket.gui.watcher.WatchServiceImpl;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.startup.providers.BlockingComponentPresetDatabaseProvider;
import net.sf.openrocket.startup.providers.BlockingMotorDatabaseProvider;
import net.sf.openrocket.startup.providers.TranslatorProvider;
import com.google.inject.AbstractModule;
import com.google.inject.Scopes;
/**
* GuiModule is the Guice Module for the OpenRocket Swing application.
*
* Because the swing application does not fully utilize injection of dependencies,
* proper use of this module requires a little more work on the part of the startup code.
*
* <code>
* GuiModule module = new GuiModule();
* Application.setInjector( Guice.createInjector(guiModule));
* module.startLoading();
* </code>
*
* @author kruland
*
*/
public class GuiModule extends AbstractModule {
private final ComponentPresetDatabaseLoader presetLoader = new ComponentPresetDatabaseLoader();
private final MotorDatabaseLoader motorLoader = new MotorDatabaseLoader();
public GuiModule() {
}
@Override
protected void configure() {
bind(Preferences.class).to(SwingPreferences.class).in(Scopes.SINGLETON);
bind(Translator.class).toProvider(TranslatorProvider.class).in(Scopes.SINGLETON);
bind(RocketDescriptor.class).to(RocketDescriptorImpl.class).in(Scopes.SINGLETON);
bind(WatchService.class).to(WatchServiceImpl.class).in(Scopes.SINGLETON);
BlockingComponentPresetDatabaseProvider componentDatabaseProvider = new BlockingComponentPresetDatabaseProvider(presetLoader);
bind(ComponentPresetDao.class).toProvider(componentDatabaseProvider).in(Scopes.SINGLETON);
BlockingMotorDatabaseProvider motorDatabaseProvider = new BlockingMotorDatabaseProvider(motorLoader);
bind(ThrustCurveMotorSetDatabase.class).toProvider(motorDatabaseProvider).in(Scopes.SINGLETON);
bind(MotorDatabase.class).toProvider(motorDatabaseProvider).in(Scopes.SINGLETON);
}
/**
* startLoader must be called after the Injector created with this module is registered
* in the Application object. This is because loading the database data requires the Application
* object's locator methods to return the correct objects.
*/
public void startLoader() {
presetLoader.startLoading();
motorLoader.startLoading();
}
}