amidstest/src/main/java/amidst/PerApplicationInjector.java

122 lines
4.4 KiB
Java
Raw Normal View History

2017-02-24 11:36:17 -08:00
package amidst;
2017-02-23 14:56:34 -08:00
import amidst.documentation.AmidstThread;
import amidst.documentation.CalledOnlyBy;
import amidst.documentation.NotThreadSafe;
import amidst.fragment.FragmentManager;
2017-02-23 14:56:34 -08:00
import amidst.fragment.layer.LayerBuilder;
import amidst.gui.license.LicenseWindow;
import amidst.gui.main.Actions;
2017-02-23 14:56:34 -08:00
import amidst.gui.main.MainWindow;
2017-02-24 10:43:13 -08:00
import amidst.gui.main.MainWindowDialogs;
2017-02-24 11:36:17 -08:00
import amidst.gui.main.PerMainWindowInjector;
2017-02-23 14:56:34 -08:00
import amidst.gui.main.UpdatePrompt;
import amidst.gui.main.viewer.BiomeSelection;
2017-02-24 11:36:17 -08:00
import amidst.gui.main.viewer.PerViewerFacadeInjector;
import amidst.gui.main.viewer.ViewerFacade;
import amidst.gui.main.viewer.Zoom;
2017-02-23 14:56:34 -08:00
import amidst.gui.profileselect.ProfileSelectWindow;
import amidst.mojangapi.MojangApi;
import amidst.mojangapi.MojangApiBuilder;
import amidst.mojangapi.file.DotMinecraftDirectoryNotFoundException;
2017-06-01 11:56:03 -07:00
import amidst.mojangapi.file.PlayerInformationCache;
import amidst.mojangapi.file.PlayerInformationProvider;
2017-02-23 14:56:34 -08:00
import amidst.mojangapi.minecraftinterface.local.LocalMinecraftInterfaceCreationException;
import amidst.mojangapi.world.SeedHistoryLogger;
import amidst.mojangapi.world.World;
2017-02-23 14:56:34 -08:00
import amidst.mojangapi.world.WorldBuilder;
import amidst.settings.biomeprofile.BiomeProfileDirectory;
import amidst.threading.ThreadMaster;
@NotThreadSafe
public class PerApplicationInjector {
private final AmidstMetaData metadata;
private final AmidstSettings settings;
private final PlayerInformationProvider playerInformationProvider;
2017-02-23 14:56:34 -08:00
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 Zoom zoom;
private final FragmentManager fragmentManager;
private final BiomeSelection biomeSelection;
2017-02-23 14:56:34 -08:00
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.playerInformationProvider = new PlayerInformationCache();
2017-02-23 14:56:34 -08:00
this.seedHistoryLogger = SeedHistoryLogger.from(parameters.seedHistoryFile);
this.worldBuilder = new WorldBuilder(playerInformationProvider, seedHistoryLogger);
2017-02-23 14:56:34 -08:00
this.mojangApi = new MojangApiBuilder(worldBuilder, parameters).construct();
this.biomeProfileDirectory = BiomeProfileDirectory.create(parameters.biomeProfilesDirectory);
this.threadMaster = new ThreadMaster();
this.layerBuilder = new LayerBuilder();
this.zoom = new Zoom(settings.maxZoom);
this.fragmentManager = new FragmentManager(layerBuilder.getConstructors(), layerBuilder.getNumberOfLayers());
this.biomeSelection = new BiomeSelection();
2017-02-23 14:56:34 -08:00
this.application = new Application(
mojangApi,
this::createNoisyUpdatePrompt,
this::createSilentUpdatePrompt,
this::createMainWindow,
this::createProfileSelectWindow,
this::createLicenseWindow);
}
@CalledOnlyBy(AmidstThread.EDT)
2017-02-24 10:43:13 -08:00
private UpdatePrompt createNoisyUpdatePrompt(MainWindowDialogs dialogs) {
return UpdatePrompt.from(metadata.getVersion(), threadMaster.getWorkerExecutor(), dialogs, false);
2017-02-23 14:56:34 -08:00
}
@CalledOnlyBy(AmidstThread.EDT)
private UpdatePrompt createSilentUpdatePrompt() {
return UpdatePrompt.from(metadata.getVersion(), threadMaster.getWorkerExecutor(), null, true);
}
@CalledOnlyBy(AmidstThread.EDT)
private MainWindow createMainWindow() {
2017-02-24 10:43:13 -08:00
return new PerMainWindowInjector(
2017-02-23 14:56:34 -08:00
application,
metadata,
settings,
mojangApi,
biomeProfileDirectory,
this::createViewerFacade,
2017-02-24 10:43:13 -08:00
threadMaster).getMainWindow();
2017-02-23 14:56:34 -08:00
}
@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);
}
@CalledOnlyBy(AmidstThread.EDT)
private ViewerFacade createViewerFacade(World world, Actions actions) {
return new PerViewerFacadeInjector(
settings,
threadMaster.getWorkerExecutor(),
zoom,
layerBuilder,
fragmentManager,
biomeSelection,
world,
actions).getViewerFacade();
}
@CalledOnlyBy(AmidstThread.EDT)
public Application getApplication() {
return application;
}
2017-02-23 14:56:34 -08:00
}