added PerApplicationInjector
parent
270908dc7d
commit
875f542ec2
|
@ -11,6 +11,7 @@ import org.kohsuke.args4j.CmdLineException;
|
|||
import org.kohsuke.args4j.CmdLineParser;
|
||||
import org.kohsuke.args4j.ParserProperties;
|
||||
|
||||
import amidst.dependency.injection.PerApplicationInjector;
|
||||
import amidst.documentation.AmidstThread;
|
||||
import amidst.documentation.CalledByAny;
|
||||
import amidst.documentation.CalledOnlyBy;
|
||||
|
@ -168,7 +169,7 @@ public class Amidst {
|
|||
AmidstMetaData metadata,
|
||||
AmidstSettings settings) {
|
||||
try {
|
||||
new Application(parameters, metadata, settings).run();
|
||||
new PerApplicationInjector(parameters, metadata, settings).getApplication().run();
|
||||
} catch (DotMinecraftDirectoryNotFoundException e) {
|
||||
AmidstLogger.warn(e);
|
||||
AmidstMessageBox.displayError(
|
||||
|
|
|
@ -1,72 +1,42 @@
|
|||
package amidst;
|
||||
|
||||
import amidst.dependency.injection.Factory0;
|
||||
import amidst.dependency.injection.Factory1;
|
||||
import amidst.documentation.AmidstThread;
|
||||
import amidst.documentation.CalledOnlyBy;
|
||||
import amidst.documentation.NotThreadSafe;
|
||||
import amidst.fragment.layer.LayerBuilder;
|
||||
import amidst.gui.license.LicenseWindow;
|
||||
import amidst.gui.main.MainWindow;
|
||||
import amidst.gui.main.UpdatePrompt;
|
||||
import amidst.gui.main.viewer.ViewerFacadeBuilder;
|
||||
import amidst.gui.profileselect.ProfileSelectWindow;
|
||||
import amidst.mojangapi.MojangApi;
|
||||
import amidst.mojangapi.MojangApiBuilder;
|
||||
import amidst.mojangapi.file.DotMinecraftDirectoryNotFoundException;
|
||||
import amidst.mojangapi.minecraftinterface.local.LocalMinecraftInterfaceCreationException;
|
||||
import amidst.mojangapi.world.SeedHistoryLogger;
|
||||
import amidst.mojangapi.world.WorldBuilder;
|
||||
import amidst.mojangapi.world.player.PlayerInformationCacheImpl;
|
||||
import amidst.settings.biomeprofile.BiomeProfileDirectory;
|
||||
import amidst.threading.ThreadMaster;
|
||||
|
||||
@NotThreadSafe
|
||||
public class Application {
|
||||
private final CommandLineParameters parameters;
|
||||
private final AmidstMetaData metadata;
|
||||
private final AmidstSettings settings;
|
||||
private final MojangApi mojangApi;
|
||||
private final BiomeProfileDirectory biomeProfileDirectory;
|
||||
private final ThreadMaster threadMaster;
|
||||
private final ViewerFacadeBuilder viewerFacadeBuilder;
|
||||
private final Factory1<MainWindow, UpdatePrompt> noisyUpdatePromptFactory;
|
||||
private final Factory0<UpdatePrompt> silentUpdatePromptFactory;
|
||||
private final Factory0<MainWindow> mainWindowFactory;
|
||||
private final Factory0<ProfileSelectWindow> profileSelectWindowFactory;
|
||||
private final Factory0<LicenseWindow> licenseWindowFactory;
|
||||
|
||||
private volatile ProfileSelectWindow profileSelectWindow;
|
||||
private volatile MainWindow mainWindow;
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
public Application(CommandLineParameters parameters, AmidstMetaData metadata, AmidstSettings settings)
|
||||
throws DotMinecraftDirectoryNotFoundException,
|
||||
LocalMinecraftInterfaceCreationException {
|
||||
this.parameters = parameters;
|
||||
this.metadata = metadata;
|
||||
this.settings = settings;
|
||||
this.mojangApi = createMojangApi();
|
||||
this.biomeProfileDirectory = createBiomeProfileDirectory();
|
||||
this.threadMaster = createThreadMaster();
|
||||
this.viewerFacadeBuilder = createViewerFacadeBuilder();
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
private MojangApi createMojangApi()
|
||||
throws DotMinecraftDirectoryNotFoundException,
|
||||
LocalMinecraftInterfaceCreationException {
|
||||
return new MojangApiBuilder(
|
||||
new WorldBuilder(new PlayerInformationCacheImpl(), SeedHistoryLogger.from(parameters.seedHistoryFile)),
|
||||
parameters).construct();
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
private BiomeProfileDirectory createBiomeProfileDirectory() {
|
||||
return BiomeProfileDirectory.create(parameters.biomeProfilesDirectory);
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
private ThreadMaster createThreadMaster() {
|
||||
return new ThreadMaster();
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
private ViewerFacadeBuilder createViewerFacadeBuilder() {
|
||||
return new ViewerFacadeBuilder(settings, threadMaster.getWorkerExecutor(), new LayerBuilder());
|
||||
public Application(
|
||||
MojangApi mojangApi,
|
||||
Factory1<MainWindow, UpdatePrompt> noisyUpdatePromptFactory,
|
||||
Factory0<UpdatePrompt> silentUpdatePromptFactory,
|
||||
Factory0<MainWindow> mainWindowFactory,
|
||||
Factory0<ProfileSelectWindow> profileSelectWindowFactory,
|
||||
Factory0<LicenseWindow> licenseWindowFactory) {
|
||||
this.mojangApi = mojangApi;
|
||||
this.noisyUpdatePromptFactory = noisyUpdatePromptFactory;
|
||||
this.silentUpdatePromptFactory = silentUpdatePromptFactory;
|
||||
this.mainWindowFactory = mainWindowFactory;
|
||||
this.profileSelectWindowFactory = profileSelectWindowFactory;
|
||||
this.licenseWindowFactory = licenseWindowFactory;
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
|
@ -81,32 +51,23 @@ public class Application {
|
|||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
public void checkForUpdates(MainWindow mainWindow) {
|
||||
UpdatePrompt.from(metadata.getVersion(), threadMaster.getWorkerExecutor(), mainWindow, false).check();
|
||||
noisyUpdatePromptFactory.create(mainWindow).check();
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
public void checkForUpdatesSilently() {
|
||||
UpdatePrompt.from(metadata.getVersion(), threadMaster.getWorkerExecutor(), null, true).check();
|
||||
silentUpdatePromptFactory.create().check();
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
public void displayMainWindow() {
|
||||
setMainWindow(
|
||||
new MainWindow(
|
||||
this,
|
||||
metadata,
|
||||
settings,
|
||||
mojangApi,
|
||||
biomeProfileDirectory,
|
||||
viewerFacadeBuilder,
|
||||
threadMaster));
|
||||
setMainWindow(mainWindowFactory.create());
|
||||
setProfileSelectWindow(null);
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
public void displayProfileSelectWindow() {
|
||||
setProfileSelectWindow(
|
||||
new ProfileSelectWindow(this, metadata, threadMaster.getWorkerExecutor(), mojangApi, settings));
|
||||
setProfileSelectWindow(profileSelectWindowFactory.create());
|
||||
setMainWindow(null);
|
||||
}
|
||||
|
||||
|
@ -140,7 +101,7 @@ public class Application {
|
|||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
public void displayLicenseWindow() {
|
||||
new LicenseWindow(metadata);
|
||||
licenseWindowFactory.create();
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
package amidst.dependency.injection;
|
||||
|
||||
public interface Factory0<R> {
|
||||
R create();
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package amidst.dependency.injection;
|
||||
|
||||
public interface Factory1<P1, R> {
|
||||
R create(P1 p1);
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package amidst.dependency.injection;
|
||||
|
||||
public interface Factory2<P1, P2, R> {
|
||||
R create(P1 p1, P2 p2);
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
package amidst.dependency.injection;
|
||||
|
||||
import amidst.AmidstMetaData;
|
||||
import amidst.AmidstSettings;
|
||||
import amidst.Application;
|
||||
import amidst.CommandLineParameters;
|
||||
import amidst.documentation.AmidstThread;
|
||||
import amidst.documentation.CalledOnlyBy;
|
||||
import amidst.documentation.NotThreadSafe;
|
||||
import amidst.fragment.layer.LayerBuilder;
|
||||
import amidst.gui.license.LicenseWindow;
|
||||
import amidst.gui.main.MainWindow;
|
||||
import amidst.gui.main.UpdatePrompt;
|
||||
import amidst.gui.main.viewer.ViewerFacadeBuilder;
|
||||
import amidst.gui.profileselect.ProfileSelectWindow;
|
||||
import amidst.mojangapi.MojangApi;
|
||||
import amidst.mojangapi.MojangApiBuilder;
|
||||
import amidst.mojangapi.file.DotMinecraftDirectoryNotFoundException;
|
||||
import amidst.mojangapi.minecraftinterface.local.LocalMinecraftInterfaceCreationException;
|
||||
import amidst.mojangapi.world.SeedHistoryLogger;
|
||||
import amidst.mojangapi.world.WorldBuilder;
|
||||
import amidst.mojangapi.world.player.PlayerInformationCache;
|
||||
import amidst.mojangapi.world.player.PlayerInformationCacheImpl;
|
||||
import amidst.settings.biomeprofile.BiomeProfileDirectory;
|
||||
import amidst.threading.ThreadMaster;
|
||||
|
||||
@NotThreadSafe
|
||||
public class PerApplicationInjector {
|
||||
private final AmidstMetaData metadata;
|
||||
private final AmidstSettings settings;
|
||||
private final PlayerInformationCache playerInformationCache;
|
||||
private final SeedHistoryLogger seedHistoryLogger;
|
||||
private final WorldBuilder worldBuilder;
|
||||
private final MojangApi mojangApi;
|
||||
private final BiomeProfileDirectory biomeProfileDirectory;
|
||||
private final ThreadMaster threadMaster;
|
||||
private final LayerBuilder layerBuilder;
|
||||
private final ViewerFacadeBuilder viewerFacadeBuilder;
|
||||
private final Application application;
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
public PerApplicationInjector(CommandLineParameters parameters, AmidstMetaData metadata, AmidstSettings settings)
|
||||
throws DotMinecraftDirectoryNotFoundException,
|
||||
LocalMinecraftInterfaceCreationException {
|
||||
this.metadata = metadata;
|
||||
this.settings = settings;
|
||||
this.playerInformationCache = new PlayerInformationCacheImpl();
|
||||
this.seedHistoryLogger = SeedHistoryLogger.from(parameters.seedHistoryFile);
|
||||
this.worldBuilder = new WorldBuilder(playerInformationCache, seedHistoryLogger);
|
||||
this.mojangApi = new MojangApiBuilder(worldBuilder, parameters).construct();
|
||||
this.biomeProfileDirectory = BiomeProfileDirectory.create(parameters.biomeProfilesDirectory);
|
||||
this.threadMaster = new ThreadMaster();
|
||||
this.layerBuilder = new LayerBuilder();
|
||||
this.viewerFacadeBuilder = new ViewerFacadeBuilder(settings, threadMaster.getWorkerExecutor(), layerBuilder);
|
||||
this.application = new Application(
|
||||
mojangApi,
|
||||
this::createNoisyUpdatePrompt,
|
||||
this::createSilentUpdatePrompt,
|
||||
this::createMainWindow,
|
||||
this::createProfileSelectWindow,
|
||||
this::createLicenseWindow);
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
public Application getApplication() {
|
||||
return application;
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
private UpdatePrompt createNoisyUpdatePrompt(MainWindow mainWindow) {
|
||||
return UpdatePrompt.from(metadata.getVersion(), threadMaster.getWorkerExecutor(), mainWindow, false);
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
private UpdatePrompt createSilentUpdatePrompt() {
|
||||
return UpdatePrompt.from(metadata.getVersion(), threadMaster.getWorkerExecutor(), null, true);
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
private MainWindow createMainWindow() {
|
||||
return new MainWindow(
|
||||
application,
|
||||
metadata,
|
||||
settings,
|
||||
mojangApi,
|
||||
biomeProfileDirectory,
|
||||
viewerFacadeBuilder,
|
||||
threadMaster);
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
private ProfileSelectWindow createProfileSelectWindow() {
|
||||
return new ProfileSelectWindow(application, metadata, threadMaster.getWorkerExecutor(), mojangApi, settings);
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
private LicenseWindow createLicenseWindow() {
|
||||
return new LicenseWindow(metadata);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue