motorDatabaseProvider;
- private final Provider extends ComponentPresetDao> componentDatabaseProvider;
+ private final ComponentPresetDatabaseLoader presetLoader = new ComponentPresetDatabaseLoader();
+ private final MotorDatabaseLoader motorLoader = new MotorDatabaseLoader();
+
public GuiModule() {
- this.componentDatabaseProvider = loadPresetComponents();
- this.motorDatabaseProvider = loadMotor();
}
@Override
protected void configure() {
+ bind(Preferences.class).to(SwingPreferences.class);
+ bind(Translator.class).toProvider(TranslatorProvider.class);
+ bind(RocketDescriptor.class).to(RocketDescriptorImpl.class);
+ bind(WatchService.class).to(WatchServiceImpl.class);
+
+ BlockingComponentPresetDatabaseProvider componentDatabaseProvider = new BlockingComponentPresetDatabaseProvider(presetLoader);
bind(ComponentPresetDao.class).toProvider(componentDatabaseProvider);
+
+ BlockingMotorDatabaseProvider motorDatabaseProvider = new BlockingMotorDatabaseProvider(motorLoader);
bind(ThrustCurveMotorSetDatabase.class).toProvider(motorDatabaseProvider);
bind(MotorDatabase.class).toProvider(motorDatabaseProvider);
- bind(WatchService.class).to(WatchServiceImpl.class);
+
}
/**
- * Start loading preset components in background thread.
- *
+ * 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 BlockingComponentPresetDatabaseProvider loadPresetComponents() {
- ComponentPresetDatabaseLoader bg = new ComponentPresetDatabaseLoader();
- bg.startLoading();
- BlockingComponentPresetDatabaseProvider db = new BlockingComponentPresetDatabaseProvider(bg);
- return db;
+ public void startLoader() {
+ presetLoader.startLoading();
+ motorLoader.startLoading();
}
- /**
- * Start loading motors in background thread.
- *
- * Public for Python bindings.
- *
- * @return a provider for the database which blocks before returning the db.
- */
- public BlockingMotorDatabaseProvider loadMotor() {
- MotorDatabaseLoader bg = new MotorDatabaseLoader();
- bg.startLoading();
- BlockingMotorDatabaseProvider db = new BlockingMotorDatabaseProvider(bg);
- return db;
- }
-
-
}
diff --git a/core/src/net/sf/openrocket/startup/JiJStartup.java b/core/src/net/sf/openrocket/startup/JiJStartup.java
index 5b00881ea..8fb0c7553 100644
--- a/core/src/net/sf/openrocket/startup/JiJStartup.java
+++ b/core/src/net/sf/openrocket/startup/JiJStartup.java
@@ -15,8 +15,7 @@ import net.sf.openrocket.startup.jij.PluginClasspathProvider;
*
* The startup class sequence is the following:
* 1. Startup
- * 2. GuiceStartup
- * 3. ApplicationStartup
+ * 2. SwingApplication
*
* This class changes the current classpath to contain the jar-in-jar
* library dependencies and plugins in the current classpath, and
diff --git a/core/src/net/sf/openrocket/startup/SwingApplication.java b/core/src/net/sf/openrocket/startup/SwingApplication.java
index 1bf5c7020..da1ae7069 100644
--- a/core/src/net/sf/openrocket/startup/SwingApplication.java
+++ b/core/src/net/sf/openrocket/startup/SwingApplication.java
@@ -35,12 +35,7 @@ import com.google.inject.Injector;
import com.google.inject.Module;
/**
- * The second class in the OpenRocket startup sequence. This class can assume the
- * Application class to be properly set up, and can use any classes safely.
- *
- * This class needs to complete the application setup, create a child Injector that
- * contains all necessary bindings for the system, replace the Injector in Application
- * and then continue the startup.
+ * Start the OpenRocket swing application.
*
* @author Sampo Niskanen
*/
@@ -118,14 +113,6 @@ public class SwingApplication {
System.setErr(PrintStreamToSLF4J.getPrintStream("STDERR", stdErr));
}
- private Injector initializeGuice() {
- Module applicationModule = new CoreServicesModule();
- GuiModule guiModule = new GuiModule();
- Module pluginModule = new PluginModule();
-
- return Guice.createInjector(applicationModule, guiModule, pluginModule);
- }
-
/**
* Run in the EDT when starting up OpenRocket.
*
@@ -146,18 +133,12 @@ public class SwingApplication {
// Load motors etc.
log.info("Loading databases");
- // There are some latent dependencies in here so the guiced application
- // is created in two parts. In particular, the database loading processes
- // require the translator to be setup correctly.
- Module applicationModule = new CoreServicesModule();
+ GuiModule guiModule = new GuiModule();
Module pluginModule = new PluginModule();
- Injector injector = Guice.createInjector(applicationModule, pluginModule);
+ Injector injector = Guice.createInjector(guiModule, pluginModule);
Application.setInjector(injector);
- // Update injector to contain database bindings
- GuiModule guiModule = new GuiModule();
- Injector injector2 = injector.createChildInjector(guiModule);
- Application.setInjector(injector2);
+ guiModule.startLoader();
// Start update info fetching
final UpdateInfoRetriever updateInfo;
diff --git a/core/src/net/sf/openrocket/startup/BlockingComponentPresetDatabaseProvider.java b/core/src/net/sf/openrocket/startup/providers/BlockingComponentPresetDatabaseProvider.java
similarity index 87%
rename from core/src/net/sf/openrocket/startup/BlockingComponentPresetDatabaseProvider.java
rename to core/src/net/sf/openrocket/startup/providers/BlockingComponentPresetDatabaseProvider.java
index 1e8392e72..a4bf6593d 100644
--- a/core/src/net/sf/openrocket/startup/BlockingComponentPresetDatabaseProvider.java
+++ b/core/src/net/sf/openrocket/startup/providers/BlockingComponentPresetDatabaseProvider.java
@@ -1,6 +1,7 @@
-package net.sf.openrocket.startup;
+package net.sf.openrocket.startup.providers;
import net.sf.openrocket.database.ComponentPresetDatabase;
+import net.sf.openrocket.database.ComponentPresetDatabaseLoader;
import net.sf.openrocket.l10n.Translator;
import org.slf4j.Logger;
diff --git a/core/src/net/sf/openrocket/startup/BlockingMotorDatabaseProvider.java b/core/src/net/sf/openrocket/startup/providers/BlockingMotorDatabaseProvider.java
similarity index 96%
rename from core/src/net/sf/openrocket/startup/BlockingMotorDatabaseProvider.java
rename to core/src/net/sf/openrocket/startup/providers/BlockingMotorDatabaseProvider.java
index d72ba2455..f5d30f981 100644
--- a/core/src/net/sf/openrocket/startup/BlockingMotorDatabaseProvider.java
+++ b/core/src/net/sf/openrocket/startup/providers/BlockingMotorDatabaseProvider.java
@@ -1,4 +1,4 @@
-package net.sf.openrocket.startup;
+package net.sf.openrocket.startup.providers;
import java.awt.SplashScreen;
import java.awt.event.ActionEvent;
@@ -11,6 +11,7 @@ import javax.swing.JProgressBar;
import javax.swing.Timer;
import net.miginfocom.swing.MigLayout;
+import net.sf.openrocket.database.MotorDatabaseLoader;
import net.sf.openrocket.database.motor.ThrustCurveMotorSetDatabase;
import net.sf.openrocket.gui.main.Splash;
import net.sf.openrocket.gui.util.GUIUtil;
diff --git a/core/src/net/sf/openrocket/startup/TranslatorProvider.java b/core/src/net/sf/openrocket/startup/providers/TranslatorProvider.java
similarity index 97%
rename from core/src/net/sf/openrocket/startup/TranslatorProvider.java
rename to core/src/net/sf/openrocket/startup/providers/TranslatorProvider.java
index 36731af90..8111dd203 100644
--- a/core/src/net/sf/openrocket/startup/TranslatorProvider.java
+++ b/core/src/net/sf/openrocket/startup/providers/TranslatorProvider.java
@@ -1,4 +1,4 @@
-package net.sf.openrocket.startup;
+package net.sf.openrocket.startup.providers;
import java.util.Locale;
import java.util.prefs.Preferences;
diff --git a/core/src/net/sf/openrocket/startup/BasicApplication.java b/core/src/net/sf/openrocket/utils/BasicApplication.java
similarity index 89%
rename from core/src/net/sf/openrocket/startup/BasicApplication.java
rename to core/src/net/sf/openrocket/utils/BasicApplication.java
index d1701e1f0..a15995149 100644
--- a/core/src/net/sf/openrocket/startup/BasicApplication.java
+++ b/core/src/net/sf/openrocket/utils/BasicApplication.java
@@ -1,6 +1,7 @@
-package net.sf.openrocket.startup;
+package net.sf.openrocket.utils;
import net.sf.openrocket.plugin.PluginModule;
+import net.sf.openrocket.startup.Application;
import com.google.inject.Guice;
import com.google.inject.Injector;
diff --git a/core/src/net/sf/openrocket/startup/CoreServicesModule.java b/core/src/net/sf/openrocket/utils/CoreServicesModule.java
similarity index 79%
rename from core/src/net/sf/openrocket/startup/CoreServicesModule.java
rename to core/src/net/sf/openrocket/utils/CoreServicesModule.java
index 8d906b307..9900be969 100644
--- a/core/src/net/sf/openrocket/startup/CoreServicesModule.java
+++ b/core/src/net/sf/openrocket/utils/CoreServicesModule.java
@@ -1,9 +1,11 @@
-package net.sf.openrocket.startup;
+package net.sf.openrocket.utils;
import net.sf.openrocket.formatting.RocketDescriptor;
import net.sf.openrocket.formatting.RocketDescriptorImpl;
import net.sf.openrocket.gui.util.SwingPreferences;
import net.sf.openrocket.l10n.Translator;
+import net.sf.openrocket.startup.Preferences;
+import net.sf.openrocket.startup.providers.TranslatorProvider;
import com.google.inject.AbstractModule;
diff --git a/core/src/net/sf/openrocket/utils/RocksimConverter.java b/core/src/net/sf/openrocket/utils/RocksimConverter.java
index 2b40334df..e60a808a1 100644
--- a/core/src/net/sf/openrocket/utils/RocksimConverter.java
+++ b/core/src/net/sf/openrocket/utils/RocksimConverter.java
@@ -9,7 +9,6 @@ import net.sf.openrocket.document.StorageOptions;
import net.sf.openrocket.file.GeneralRocketLoader;
import net.sf.openrocket.file.GeneralRocketSaver;
import net.sf.openrocket.file.RocketLoadException;
-import net.sf.openrocket.startup.BasicApplication;
/**
* Utility that loads Rocksim file formats and saves them in ORK format.
diff --git a/core/src/net/sf/openrocket/startup/SerializeMotors.java b/core/src/net/sf/openrocket/utils/SerializeMotors.java
similarity index 98%
rename from core/src/net/sf/openrocket/startup/SerializeMotors.java
rename to core/src/net/sf/openrocket/utils/SerializeMotors.java
index a07bfff46..fb5e9b6c8 100644
--- a/core/src/net/sf/openrocket/startup/SerializeMotors.java
+++ b/core/src/net/sf/openrocket/utils/SerializeMotors.java
@@ -1,4 +1,4 @@
-package net.sf.openrocket.startup;
+package net.sf.openrocket.utils;
import java.io.File;
import java.io.FileOutputStream;
diff --git a/core/src/net/sf/openrocket/startup/SerializePresets.java b/core/src/net/sf/openrocket/utils/SerializePresets.java
similarity index 98%
rename from core/src/net/sf/openrocket/startup/SerializePresets.java
rename to core/src/net/sf/openrocket/utils/SerializePresets.java
index 6fc329666..fb082f53b 100644
--- a/core/src/net/sf/openrocket/startup/SerializePresets.java
+++ b/core/src/net/sf/openrocket/utils/SerializePresets.java
@@ -1,4 +1,4 @@
-package net.sf.openrocket.startup;
+package net.sf.openrocket.utils;
import java.io.File;
import java.io.FileOutputStream;
diff --git a/core/test/net/sf/openrocket/plugin/PluginTest.java b/core/test/net/sf/openrocket/plugin/PluginTest.java
index 4af1b1157..bff5bf9c1 100644
--- a/core/test/net/sf/openrocket/plugin/PluginTest.java
+++ b/core/test/net/sf/openrocket/plugin/PluginTest.java
@@ -1,6 +1,6 @@
package net.sf.openrocket.plugin;
-import net.sf.openrocket.startup.CoreServicesModule;
+import net.sf.openrocket.utils.CoreServicesModule;
import org.junit.Test;
diff --git a/core/test/net/sf/openrocket/util/BaseTestCase/BaseTestCase.java b/core/test/net/sf/openrocket/util/BaseTestCase/BaseTestCase.java
index 360982965..db762dfab 100644
--- a/core/test/net/sf/openrocket/util/BaseTestCase/BaseTestCase.java
+++ b/core/test/net/sf/openrocket/util/BaseTestCase/BaseTestCase.java
@@ -4,7 +4,7 @@ import net.sf.openrocket.l10n.DebugTranslator;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.plugin.PluginModule;
import net.sf.openrocket.startup.Application;
-import net.sf.openrocket.startup.CoreServicesModule;
+import net.sf.openrocket.utils.CoreServicesModule;
import org.junit.BeforeClass;