diff --git a/core/build.xml b/core/build.xml index 2af57b225..1104bc19a 100644 --- a/core/build.xml +++ b/core/build.xml @@ -118,14 +118,14 @@ - - diff --git a/core/src/net/sf/openrocket/startup/ComponentPresetDatabaseLoader.java b/core/src/net/sf/openrocket/database/ComponentPresetDatabaseLoader.java similarity index 95% rename from core/src/net/sf/openrocket/startup/ComponentPresetDatabaseLoader.java rename to core/src/net/sf/openrocket/database/ComponentPresetDatabaseLoader.java index a4b9d6bd4..2d1deb444 100644 --- a/core/src/net/sf/openrocket/startup/ComponentPresetDatabaseLoader.java +++ b/core/src/net/sf/openrocket/database/ComponentPresetDatabaseLoader.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.startup; +package net.sf.openrocket.database; import java.io.IOException; import java.io.InputStream; @@ -6,14 +6,13 @@ import java.io.ObjectInputStream; import java.util.Collection; import java.util.List; -import net.sf.openrocket.database.AsynchronousDatabaseLoader; -import net.sf.openrocket.database.ComponentPresetDatabase; import net.sf.openrocket.file.iterator.DirectoryIterator; import net.sf.openrocket.file.iterator.FileIterator; import net.sf.openrocket.gui.util.SimpleFileFilter; import net.sf.openrocket.gui.util.SwingPreferences; import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.preset.xml.OpenRocketComponentLoader; +import net.sf.openrocket.startup.Application; import net.sf.openrocket.util.BugException; import net.sf.openrocket.util.Pair; diff --git a/core/src/net/sf/openrocket/startup/MotorDatabaseLoader.java b/core/src/net/sf/openrocket/database/MotorDatabaseLoader.java similarity index 97% rename from core/src/net/sf/openrocket/startup/MotorDatabaseLoader.java rename to core/src/net/sf/openrocket/database/MotorDatabaseLoader.java index 86b48c3c3..97f36f60b 100644 --- a/core/src/net/sf/openrocket/startup/MotorDatabaseLoader.java +++ b/core/src/net/sf/openrocket/database/MotorDatabaseLoader.java @@ -1,4 +1,4 @@ -package net.sf.openrocket.startup; +package net.sf.openrocket.database; import java.io.BufferedInputStream; import java.io.File; @@ -8,7 +8,6 @@ import java.io.InputStream; import java.io.ObjectInputStream; import java.util.List; -import net.sf.openrocket.database.AsynchronousDatabaseLoader; import net.sf.openrocket.database.motor.ThrustCurveMotorSetDatabase; import net.sf.openrocket.file.iterator.DirectoryIterator; import net.sf.openrocket.file.iterator.FileIterator; @@ -17,6 +16,7 @@ import net.sf.openrocket.gui.util.SimpleFileFilter; import net.sf.openrocket.gui.util.SwingPreferences; import net.sf.openrocket.motor.Motor; import net.sf.openrocket.motor.ThrustCurveMotor; +import net.sf.openrocket.startup.Application; import net.sf.openrocket.util.BugException; import net.sf.openrocket.util.Pair; diff --git a/core/src/net/sf/openrocket/gui/components/compass/Tester.java b/core/src/net/sf/openrocket/gui/components/compass/Tester.java index 9273088f7..97ca176b2 100644 --- a/core/src/net/sf/openrocket/gui/components/compass/Tester.java +++ b/core/src/net/sf/openrocket/gui/components/compass/Tester.java @@ -11,8 +11,8 @@ import javax.swing.SwingUtilities; import net.miginfocom.swing.MigLayout; import net.sf.openrocket.gui.adaptors.DoubleModel; import net.sf.openrocket.gui.util.GUIUtil; -import net.sf.openrocket.startup.BasicApplication; import net.sf.openrocket.unit.UnitGroup; +import net.sf.openrocket.utils.BasicApplication; public class Tester { diff --git a/core/src/net/sf/openrocket/gui/preset/ComponentPresetEditor.java b/core/src/net/sf/openrocket/gui/preset/ComponentPresetEditor.java index e4e9f94e2..0f2b2f66b 100644 --- a/core/src/net/sf/openrocket/gui/preset/ComponentPresetEditor.java +++ b/core/src/net/sf/openrocket/gui/preset/ComponentPresetEditor.java @@ -42,7 +42,7 @@ import net.sf.openrocket.preset.loader.RocksimComponentFileTranslator; import net.sf.openrocket.preset.xml.OpenRocketComponentDTO; import net.sf.openrocket.preset.xml.OpenRocketComponentSaver; import net.sf.openrocket.startup.Application; -import net.sf.openrocket.startup.BasicApplication; +import net.sf.openrocket.utils.BasicApplication; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/core/src/net/sf/openrocket/preset/loader/RocksimComponentFileTranslator.java b/core/src/net/sf/openrocket/preset/loader/RocksimComponentFileTranslator.java index 3593817dd..15e69bea3 100644 --- a/core/src/net/sf/openrocket/preset/loader/RocksimComponentFileTranslator.java +++ b/core/src/net/sf/openrocket/preset/loader/RocksimComponentFileTranslator.java @@ -9,8 +9,8 @@ import java.util.List; import net.sf.openrocket.material.Material; import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.preset.xml.OpenRocketComponentSaver; -import net.sf.openrocket.startup.BasicApplication; import net.sf.openrocket.util.ArrayList; +import net.sf.openrocket.utils.BasicApplication; public class RocksimComponentFileTranslator { diff --git a/core/src/net/sf/openrocket/startup/GuiModule.java b/core/src/net/sf/openrocket/startup/GuiModule.java index be26ad27a..c5f862330 100644 --- a/core/src/net/sf/openrocket/startup/GuiModule.java +++ b/core/src/net/sf/openrocket/startup/GuiModule.java @@ -1,57 +1,71 @@ 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.Provider; +/** + * 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. + * + * + * GuiModule module = new GuiModule(); + * Application.setInjector( Guice.createInjector(guiModule)); + * module.startLoadin(); + * + * + * @author kruland + * + */ public class GuiModule extends AbstractModule { - private final Provider motorDatabaseProvider; - private final Provider 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;