Repackage a bunch of stuff. Rework the GuiModule so it stands alone.

This commit is contained in:
kruland2607 2013-05-13 09:46:56 -05:00
parent ae7b2b3af1
commit 15ecef0bd7
19 changed files with 70 additions and 73 deletions

View File

@ -118,14 +118,14 @@
</target> </target>
<target name="serialize-presets" depends="build" description="Preprocess the orc preset files into serialized form"> <target name="serialize-presets" depends="build" description="Preprocess the orc preset files into serialized form">
<java classname="net.sf.openrocket.startup.SerializePresets" <java classname="net.sf.openrocket.utils.SerializePresets"
fork="true" fork="true"
classpathref="run-classpath" classpathref="run-classpath"
failonerror="true"> failonerror="true">
</java> </java>
</target> </target>
<target name="serialize-motors" depends="build" description="Preprocess the motor files into serialized form"> <target name="serialize-motors" depends="build" description="Preprocess the motor files into serialized form">
<java classname="net.sf.openrocket.startup.SerializeMotors" <java classname="net.sf.openrocket.utils.SerializeMotors"
fork="true" fork="true"
classpathref="run-classpath" classpathref="run-classpath"
failonerror="true"> failonerror="true">

View File

@ -1,4 +1,4 @@
package net.sf.openrocket.startup; package net.sf.openrocket.database;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -6,14 +6,13 @@ import java.io.ObjectInputStream;
import java.util.Collection; import java.util.Collection;
import java.util.List; 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.DirectoryIterator;
import net.sf.openrocket.file.iterator.FileIterator; import net.sf.openrocket.file.iterator.FileIterator;
import net.sf.openrocket.gui.util.SimpleFileFilter; import net.sf.openrocket.gui.util.SimpleFileFilter;
import net.sf.openrocket.gui.util.SwingPreferences; import net.sf.openrocket.gui.util.SwingPreferences;
import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.preset.ComponentPreset;
import net.sf.openrocket.preset.xml.OpenRocketComponentLoader; import net.sf.openrocket.preset.xml.OpenRocketComponentLoader;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.BugException; import net.sf.openrocket.util.BugException;
import net.sf.openrocket.util.Pair; import net.sf.openrocket.util.Pair;

View File

@ -1,4 +1,4 @@
package net.sf.openrocket.startup; package net.sf.openrocket.database;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.File; import java.io.File;
@ -8,7 +8,6 @@ import java.io.InputStream;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
import java.util.List; import java.util.List;
import net.sf.openrocket.database.AsynchronousDatabaseLoader;
import net.sf.openrocket.database.motor.ThrustCurveMotorSetDatabase; import net.sf.openrocket.database.motor.ThrustCurveMotorSetDatabase;
import net.sf.openrocket.file.iterator.DirectoryIterator; import net.sf.openrocket.file.iterator.DirectoryIterator;
import net.sf.openrocket.file.iterator.FileIterator; 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.gui.util.SwingPreferences;
import net.sf.openrocket.motor.Motor; import net.sf.openrocket.motor.Motor;
import net.sf.openrocket.motor.ThrustCurveMotor; import net.sf.openrocket.motor.ThrustCurveMotor;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.BugException; import net.sf.openrocket.util.BugException;
import net.sf.openrocket.util.Pair; import net.sf.openrocket.util.Pair;

View File

@ -11,8 +11,8 @@ import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.gui.adaptors.DoubleModel; import net.sf.openrocket.gui.adaptors.DoubleModel;
import net.sf.openrocket.gui.util.GUIUtil; import net.sf.openrocket.gui.util.GUIUtil;
import net.sf.openrocket.startup.BasicApplication;
import net.sf.openrocket.unit.UnitGroup; import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.utils.BasicApplication;
public class Tester { public class Tester {

View File

@ -42,7 +42,7 @@ import net.sf.openrocket.preset.loader.RocksimComponentFileTranslator;
import net.sf.openrocket.preset.xml.OpenRocketComponentDTO; import net.sf.openrocket.preset.xml.OpenRocketComponentDTO;
import net.sf.openrocket.preset.xml.OpenRocketComponentSaver; import net.sf.openrocket.preset.xml.OpenRocketComponentSaver;
import net.sf.openrocket.startup.Application; 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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

View File

@ -9,8 +9,8 @@ import java.util.List;
import net.sf.openrocket.material.Material; import net.sf.openrocket.material.Material;
import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.preset.ComponentPreset;
import net.sf.openrocket.preset.xml.OpenRocketComponentSaver; import net.sf.openrocket.preset.xml.OpenRocketComponentSaver;
import net.sf.openrocket.startup.BasicApplication;
import net.sf.openrocket.util.ArrayList; import net.sf.openrocket.util.ArrayList;
import net.sf.openrocket.utils.BasicApplication;
public class RocksimComponentFileTranslator { public class RocksimComponentFileTranslator {

View File

@ -1,57 +1,71 @@
package net.sf.openrocket.startup; package net.sf.openrocket.startup;
import net.sf.openrocket.database.ComponentPresetDao; 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.MotorDatabase;
import net.sf.openrocket.database.motor.ThrustCurveMotorSetDatabase; 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.WatchService;
import net.sf.openrocket.gui.watcher.WatchServiceImpl; 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.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.
*
* <code>
* GuiModule module = new GuiModule();
* Application.setInjector( Guice.createInjector(guiModule));
* module.startLoadin();
* </code>
*
* @author kruland
*
*/
public class GuiModule extends AbstractModule { public class GuiModule extends AbstractModule {
private final Provider<ThrustCurveMotorSetDatabase> motorDatabaseProvider; private final ComponentPresetDatabaseLoader presetLoader = new ComponentPresetDatabaseLoader();
private final Provider<? extends ComponentPresetDao> componentDatabaseProvider; private final MotorDatabaseLoader motorLoader = new MotorDatabaseLoader();
public GuiModule() { public GuiModule() {
this.componentDatabaseProvider = loadPresetComponents();
this.motorDatabaseProvider = loadMotor();
} }
@Override @Override
protected void configure() { 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); bind(ComponentPresetDao.class).toProvider(componentDatabaseProvider);
BlockingMotorDatabaseProvider motorDatabaseProvider = new BlockingMotorDatabaseProvider(motorLoader);
bind(ThrustCurveMotorSetDatabase.class).toProvider(motorDatabaseProvider); bind(ThrustCurveMotorSetDatabase.class).toProvider(motorDatabaseProvider);
bind(MotorDatabase.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() { public void startLoader() {
ComponentPresetDatabaseLoader bg = new ComponentPresetDatabaseLoader(); presetLoader.startLoading();
bg.startLoading(); motorLoader.startLoading();
BlockingComponentPresetDatabaseProvider db = new BlockingComponentPresetDatabaseProvider(bg);
return db;
} }
/**
* 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;
}
} }

View File

@ -15,8 +15,7 @@ import net.sf.openrocket.startup.jij.PluginClasspathProvider;
* *
* The startup class sequence is the following: * The startup class sequence is the following:
* 1. Startup * 1. Startup
* 2. GuiceStartup * 2. SwingApplication
* 3. ApplicationStartup
* *
* This class changes the current classpath to contain the jar-in-jar * This class changes the current classpath to contain the jar-in-jar
* library dependencies and plugins in the current classpath, and * library dependencies and plugins in the current classpath, and

View File

@ -35,12 +35,7 @@ import com.google.inject.Injector;
import com.google.inject.Module; import com.google.inject.Module;
/** /**
* The second class in the OpenRocket startup sequence. This class can assume the * Start the OpenRocket swing application.
* Application class to be properly set up, and can use any classes safely.
* <p>
* 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.
* *
* @author Sampo Niskanen <sampo.niskanen@iki.fi> * @author Sampo Niskanen <sampo.niskanen@iki.fi>
*/ */
@ -118,14 +113,6 @@ public class SwingApplication {
System.setErr(PrintStreamToSLF4J.getPrintStream("STDERR", stdErr)); 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. * Run in the EDT when starting up OpenRocket.
* *
@ -146,18 +133,12 @@ public class SwingApplication {
// Load motors etc. // Load motors etc.
log.info("Loading databases"); log.info("Loading databases");
// There are some latent dependencies in here so the guiced application GuiModule guiModule = new GuiModule();
// is created in two parts. In particular, the database loading processes
// require the translator to be setup correctly.
Module applicationModule = new CoreServicesModule();
Module pluginModule = new PluginModule(); Module pluginModule = new PluginModule();
Injector injector = Guice.createInjector(applicationModule, pluginModule); Injector injector = Guice.createInjector(guiModule, pluginModule);
Application.setInjector(injector); Application.setInjector(injector);
// Update injector to contain database bindings guiModule.startLoader();
GuiModule guiModule = new GuiModule();
Injector injector2 = injector.createChildInjector(guiModule);
Application.setInjector(injector2);
// Start update info fetching // Start update info fetching
final UpdateInfoRetriever updateInfo; final UpdateInfoRetriever updateInfo;

View File

@ -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.ComponentPresetDatabase;
import net.sf.openrocket.database.ComponentPresetDatabaseLoader;
import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.l10n.Translator;
import org.slf4j.Logger; import org.slf4j.Logger;

View File

@ -1,4 +1,4 @@
package net.sf.openrocket.startup; package net.sf.openrocket.startup.providers;
import java.awt.SplashScreen; import java.awt.SplashScreen;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
@ -11,6 +11,7 @@ import javax.swing.JProgressBar;
import javax.swing.Timer; import javax.swing.Timer;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.database.MotorDatabaseLoader;
import net.sf.openrocket.database.motor.ThrustCurveMotorSetDatabase; import net.sf.openrocket.database.motor.ThrustCurveMotorSetDatabase;
import net.sf.openrocket.gui.main.Splash; import net.sf.openrocket.gui.main.Splash;
import net.sf.openrocket.gui.util.GUIUtil; import net.sf.openrocket.gui.util.GUIUtil;

View File

@ -1,4 +1,4 @@
package net.sf.openrocket.startup; package net.sf.openrocket.startup.providers;
import java.util.Locale; import java.util.Locale;
import java.util.prefs.Preferences; import java.util.prefs.Preferences;

View File

@ -1,6 +1,7 @@
package net.sf.openrocket.startup; package net.sf.openrocket.utils;
import net.sf.openrocket.plugin.PluginModule; import net.sf.openrocket.plugin.PluginModule;
import net.sf.openrocket.startup.Application;
import com.google.inject.Guice; import com.google.inject.Guice;
import com.google.inject.Injector; import com.google.inject.Injector;

View File

@ -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.RocketDescriptor;
import net.sf.openrocket.formatting.RocketDescriptorImpl; import net.sf.openrocket.formatting.RocketDescriptorImpl;
import net.sf.openrocket.gui.util.SwingPreferences; import net.sf.openrocket.gui.util.SwingPreferences;
import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.startup.Preferences;
import net.sf.openrocket.startup.providers.TranslatorProvider;
import com.google.inject.AbstractModule; import com.google.inject.AbstractModule;

View File

@ -9,7 +9,6 @@ import net.sf.openrocket.document.StorageOptions;
import net.sf.openrocket.file.GeneralRocketLoader; import net.sf.openrocket.file.GeneralRocketLoader;
import net.sf.openrocket.file.GeneralRocketSaver; import net.sf.openrocket.file.GeneralRocketSaver;
import net.sf.openrocket.file.RocketLoadException; import net.sf.openrocket.file.RocketLoadException;
import net.sf.openrocket.startup.BasicApplication;
/** /**
* Utility that loads Rocksim file formats and saves them in ORK format. * Utility that loads Rocksim file formats and saves them in ORK format.

View File

@ -1,4 +1,4 @@
package net.sf.openrocket.startup; package net.sf.openrocket.utils;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;

View File

@ -1,4 +1,4 @@
package net.sf.openrocket.startup; package net.sf.openrocket.utils;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;

View File

@ -1,6 +1,6 @@
package net.sf.openrocket.plugin; package net.sf.openrocket.plugin;
import net.sf.openrocket.startup.CoreServicesModule; import net.sf.openrocket.utils.CoreServicesModule;
import org.junit.Test; import org.junit.Test;

View File

@ -4,7 +4,7 @@ import net.sf.openrocket.l10n.DebugTranslator;
import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.plugin.PluginModule; import net.sf.openrocket.plugin.PluginModule;
import net.sf.openrocket.startup.Application; import net.sf.openrocket.startup.Application;
import net.sf.openrocket.startup.CoreServicesModule; import net.sf.openrocket.utils.CoreServicesModule;
import org.junit.BeforeClass; import org.junit.BeforeClass;