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

153 lines
5.7 KiB
Java
Raw Normal View History

2017-02-24 11:36:17 -08:00
package amidst;
2017-02-23 14:56:34 -08:00
2017-06-01 16:39:48 -07:00
import java.io.IOException;
2017-06-01 13:38:28 -07:00
import java.util.Optional;
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.minetest.file.MinetestInstallation;
import amidst.mojangapi.LauncherProfileRunner;
import amidst.mojangapi.RunningLauncherProfile;
2017-02-23 14:56:34 -08:00
import amidst.mojangapi.file.DotMinecraftDirectoryNotFoundException;
2017-06-01 13:38:28 -07:00
import amidst.mojangapi.file.LauncherProfile;
import amidst.mojangapi.file.MinecraftInstallation;
2017-06-01 11:56:03 -07:00
import amidst.mojangapi.file.PlayerInformationCache;
import amidst.mojangapi.file.PlayerInformationProvider;
2017-06-01 16:39:48 -07:00
import amidst.mojangapi.file.VersionListProvider;
2017-02-23 14:56:34 -08:00
import amidst.mojangapi.world.SeedHistoryLogger;
import amidst.mojangapi.world.World;
2017-02-23 14:56:34 -08:00
import amidst.mojangapi.world.WorldBuilder;
2017-06-01 16:39:48 -07:00
import amidst.parsing.FormatException;
2017-02-23 14:56:34 -08:00
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;
2017-06-01 13:38:28 -07:00
private final MinecraftInstallation minecraftInstallation;
private final MinetestInstallation minetestInstallation;
2017-06-01 13:38:28 -07:00
private final Optional<LauncherProfile> preferredLauncherProfile;
2017-02-23 14:56:34 -08:00
private final WorldBuilder worldBuilder;
private final LauncherProfileRunner launcherProfileRunner;
2017-02-23 14:56:34 -08:00
private final BiomeProfileDirectory biomeProfileDirectory;
private final ThreadMaster threadMaster;
2017-06-01 16:39:48 -07:00
private final VersionListProvider versionListProvider;
2017-02-23 14:56:34 -08:00
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)
2017-06-01 16:39:48 -07:00
throws DotMinecraftDirectoryNotFoundException,
FormatException,
IOException {
2017-02-23 14:56:34 -08:00
this.metadata = metadata;
this.settings = settings;
this.playerInformationProvider = new PlayerInformationCache();
2017-02-23 14:56:34 -08:00
this.seedHistoryLogger = SeedHistoryLogger.from(parameters.seedHistoryFile);
2017-06-01 13:38:28 -07:00
this.minecraftInstallation = MinecraftInstallation
.newLocalMinecraftInstallation(parameters.dotMinecraftDirectory);
this.minetestInstallation = MinetestInstallation
.newLocalMinetestInstallationOrDefault(parameters.minetestDirectory);
//this.preferredLauncherProfile = minecraftInstallation
// .tryReadLauncherProfile(parameters.minecraftJarFile, parameters.minecraftJsonFile);
this.preferredLauncherProfile = minetestInstallation
.defaultLauncherProfile();
this.worldBuilder = new WorldBuilder(playerInformationProvider, seedHistoryLogger);
this.launcherProfileRunner = new LauncherProfileRunner(worldBuilder);
2017-02-23 14:56:34 -08:00
this.biomeProfileDirectory = BiomeProfileDirectory.create(parameters.biomeProfilesDirectory);
this.threadMaster = new ThreadMaster();
2017-06-01 16:39:48 -07:00
this.versionListProvider = VersionListProvider
.createLocalAndStartDownloadingRemote(threadMaster.getWorkerExecutor());
2017-02-23 14:56:34 -08:00
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(
preferredLauncherProfile,
launcherProfileRunner,
2017-02-23 14:56:34 -08:00
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(RunningLauncherProfile runningLauncherProfile) {
2017-02-24 10:43:13 -08:00
return new PerMainWindowInjector(
2017-02-23 14:56:34 -08:00
application,
metadata,
settings,
minetestInstallation,
runningLauncherProfile,
2017-02-23 14:56:34 -08:00
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(),
2017-06-01 16:39:48 -07:00
versionListProvider,
minetestInstallation,
launcherProfileRunner,
settings);
2017-02-23 14:56:34 -08:00
}
@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
}