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 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"
classpathref="run-classpath"
failonerror="true">
</java>
</target>
<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"
classpathref="run-classpath"
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.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;

View File

@ -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;

View File

@ -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 {

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.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;

View File

@ -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 {

View File

@ -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.
*
* <code>
* GuiModule module = new GuiModule();
* Application.setInjector( Guice.createInjector(guiModule));
* module.startLoadin();
* </code>
*
* @author kruland
*
*/
public class GuiModule extends AbstractModule {
private final Provider<ThrustCurveMotorSetDatabase> 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;
}
}

View File

@ -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

View File

@ -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.
* <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.
* Start the OpenRocket swing application.
*
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
*/
@ -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;

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.ComponentPresetDatabaseLoader;
import net.sf.openrocket.l10n.Translator;
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.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;

View File

@ -1,4 +1,4 @@
package net.sf.openrocket.startup;
package net.sf.openrocket.startup.providers;
import java.util.Locale;
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.startup.Application;
import com.google.inject.Guice;
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.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;

View File

@ -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.

View File

@ -1,4 +1,4 @@
package net.sf.openrocket.startup;
package net.sf.openrocket.utils;
import java.io.File;
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.FileOutputStream;

View File

@ -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;

View File

@ -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;