converted ViewerFacadeBuilder to PerViewerFacadeInjector
parent
875f542ec2
commit
0e9e935fca
|
@ -7,17 +7,22 @@ import amidst.CommandLineParameters;
|
|||
import amidst.documentation.AmidstThread;
|
||||
import amidst.documentation.CalledOnlyBy;
|
||||
import amidst.documentation.NotThreadSafe;
|
||||
import amidst.fragment.FragmentManager;
|
||||
import amidst.fragment.layer.LayerBuilder;
|
||||
import amidst.gui.license.LicenseWindow;
|
||||
import amidst.gui.main.Actions;
|
||||
import amidst.gui.main.MainWindow;
|
||||
import amidst.gui.main.UpdatePrompt;
|
||||
import amidst.gui.main.viewer.ViewerFacadeBuilder;
|
||||
import amidst.gui.main.viewer.BiomeSelection;
|
||||
import amidst.gui.main.viewer.ViewerFacade;
|
||||
import amidst.gui.main.viewer.Zoom;
|
||||
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.World;
|
||||
import amidst.mojangapi.world.WorldBuilder;
|
||||
import amidst.mojangapi.world.player.PlayerInformationCache;
|
||||
import amidst.mojangapi.world.player.PlayerInformationCacheImpl;
|
||||
|
@ -35,7 +40,9 @@ public class PerApplicationInjector {
|
|||
private final BiomeProfileDirectory biomeProfileDirectory;
|
||||
private final ThreadMaster threadMaster;
|
||||
private final LayerBuilder layerBuilder;
|
||||
private final ViewerFacadeBuilder viewerFacadeBuilder;
|
||||
private final Zoom zoom;
|
||||
private final FragmentManager fragmentManager;
|
||||
private final BiomeSelection biomeSelection;
|
||||
private final Application application;
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
|
@ -51,7 +58,9 @@ public class PerApplicationInjector {
|
|||
this.biomeProfileDirectory = BiomeProfileDirectory.create(parameters.biomeProfilesDirectory);
|
||||
this.threadMaster = new ThreadMaster();
|
||||
this.layerBuilder = new LayerBuilder();
|
||||
this.viewerFacadeBuilder = new ViewerFacadeBuilder(settings, threadMaster.getWorkerExecutor(), layerBuilder);
|
||||
this.zoom = new Zoom(settings.maxZoom);
|
||||
this.fragmentManager = new FragmentManager(layerBuilder.getConstructors(), layerBuilder.getNumberOfLayers());
|
||||
this.biomeSelection = new BiomeSelection();
|
||||
this.application = new Application(
|
||||
mojangApi,
|
||||
this::createNoisyUpdatePrompt,
|
||||
|
@ -61,11 +70,6 @@ public class PerApplicationInjector {
|
|||
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);
|
||||
|
@ -84,7 +88,7 @@ public class PerApplicationInjector {
|
|||
settings,
|
||||
mojangApi,
|
||||
biomeProfileDirectory,
|
||||
viewerFacadeBuilder,
|
||||
this::createViewerFacade,
|
||||
threadMaster);
|
||||
}
|
||||
|
||||
|
@ -97,4 +101,22 @@ public class PerApplicationInjector {
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,132 @@
|
|||
package amidst.dependency.injection;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import amidst.AmidstSettings;
|
||||
import amidst.documentation.AmidstThread;
|
||||
import amidst.documentation.CalledOnlyBy;
|
||||
import amidst.documentation.NotThreadSafe;
|
||||
import amidst.fragment.FragmentGraph;
|
||||
import amidst.fragment.FragmentManager;
|
||||
import amidst.fragment.FragmentQueueProcessor;
|
||||
import amidst.fragment.layer.LayerBuilder;
|
||||
import amidst.fragment.layer.LayerManager;
|
||||
import amidst.fragment.layer.LayerReloader;
|
||||
import amidst.gui.main.Actions;
|
||||
import amidst.gui.main.viewer.BiomeSelection;
|
||||
import amidst.gui.main.viewer.Drawer;
|
||||
import amidst.gui.main.viewer.FragmentGraphToScreenTranslator;
|
||||
import amidst.gui.main.viewer.Graphics2DAccelerationCounter;
|
||||
import amidst.gui.main.viewer.Movement;
|
||||
import amidst.gui.main.viewer.Viewer;
|
||||
import amidst.gui.main.viewer.ViewerFacade;
|
||||
import amidst.gui.main.viewer.ViewerMouseListener;
|
||||
import amidst.gui.main.viewer.WorldIconSelection;
|
||||
import amidst.gui.main.viewer.Zoom;
|
||||
import amidst.gui.main.viewer.widget.Widget;
|
||||
import amidst.gui.main.viewer.widget.WidgetBuilder;
|
||||
import amidst.gui.main.viewer.widget.WidgetManager;
|
||||
import amidst.mojangapi.world.World;
|
||||
import amidst.mojangapi.world.export.WorldExporterFactory;
|
||||
import amidst.threading.WorkerExecutor;
|
||||
|
||||
@NotThreadSafe
|
||||
public class PerViewerFacadeInjector {
|
||||
private final Graphics2DAccelerationCounter accelerationCounter;
|
||||
private final Movement movement;
|
||||
private final WorldIconSelection worldIconSelection;
|
||||
private final LayerManager layerManager;
|
||||
private final FragmentGraph graph;
|
||||
private final FragmentGraphToScreenTranslator translator;
|
||||
private final FragmentQueueProcessor fragmentQueueProcessor;
|
||||
private final LayerReloader layerReloader;
|
||||
private final WorldExporterFactory worldExporterFactory;
|
||||
private final WidgetBuilder widgetBuilder;
|
||||
private final List<Widget> widgets;
|
||||
private final Drawer drawer;
|
||||
private final WidgetManager widgetManager;
|
||||
private final ViewerMouseListener viewerMouseListener;
|
||||
private final Viewer viewer;
|
||||
private final ViewerFacade viewerFacade;
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
public PerViewerFacadeInjector(
|
||||
AmidstSettings settings,
|
||||
WorkerExecutor workerExecutor,
|
||||
Zoom zoom,
|
||||
LayerBuilder layerBuilder,
|
||||
FragmentManager fragmentManager,
|
||||
BiomeSelection biomeSelection,
|
||||
World world,
|
||||
Actions actions) {
|
||||
this.accelerationCounter = new Graphics2DAccelerationCounter();
|
||||
this.movement = new Movement(settings.smoothScrolling);
|
||||
this.worldIconSelection = new WorldIconSelection();
|
||||
this.layerManager = layerBuilder
|
||||
.create(settings, world, biomeSelection, worldIconSelection, zoom, accelerationCounter);
|
||||
this.graph = new FragmentGraph(layerManager.getDeclarations(), fragmentManager);
|
||||
this.translator = new FragmentGraphToScreenTranslator(graph, zoom);
|
||||
this.fragmentQueueProcessor = fragmentManager.createQueueProcessor(layerManager, settings.dimension);
|
||||
this.layerReloader = layerManager.createLayerReloader(world);
|
||||
this.worldExporterFactory = new WorldExporterFactory(workerExecutor, world);
|
||||
this.widgetBuilder = new WidgetBuilder(
|
||||
world,
|
||||
graph,
|
||||
translator,
|
||||
zoom,
|
||||
biomeSelection,
|
||||
worldIconSelection,
|
||||
layerReloader,
|
||||
fragmentManager,
|
||||
accelerationCounter,
|
||||
settings,
|
||||
worldExporterFactory::getProgressMessage);
|
||||
this.widgets = widgetBuilder.create();
|
||||
this.drawer = new Drawer(
|
||||
graph,
|
||||
translator,
|
||||
zoom,
|
||||
movement,
|
||||
widgets,
|
||||
layerManager.getDrawers(),
|
||||
settings.dimension,
|
||||
accelerationCounter);
|
||||
this.widgetManager = new WidgetManager(widgets);
|
||||
this.viewerMouseListener = new ViewerMouseListener(widgetManager, graph, translator, zoom, movement, actions);
|
||||
this.viewer = new Viewer(viewerMouseListener, drawer);
|
||||
this.viewerFacade = new ViewerFacade(
|
||||
world,
|
||||
graph,
|
||||
translator,
|
||||
zoom,
|
||||
viewer,
|
||||
layerReloader,
|
||||
worldIconSelection,
|
||||
layerManager,
|
||||
workerExecutor,
|
||||
worldExporterFactory,
|
||||
this::onRepainterTick,
|
||||
this::onFragmentLoaderTick,
|
||||
this::onPlayerFinishedLoading);
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.REPAINTER)
|
||||
private void onRepainterTick() {
|
||||
viewer.repaintComponent();
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.FRAGMENT_LOADER)
|
||||
private void onFragmentLoaderTick() {
|
||||
fragmentQueueProcessor.processQueues();
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
private void onPlayerFinishedLoading() {
|
||||
layerReloader.reloadPlayerLayer();
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
public ViewerFacade getViewerFacade() {
|
||||
return viewerFacade;
|
||||
}
|
||||
}
|
|
@ -16,13 +16,13 @@ import javax.swing.JOptionPane;
|
|||
import amidst.AmidstMetaData;
|
||||
import amidst.AmidstSettings;
|
||||
import amidst.Application;
|
||||
import amidst.dependency.injection.Factory2;
|
||||
import amidst.documentation.AmidstThread;
|
||||
import amidst.documentation.CalledOnlyBy;
|
||||
import amidst.documentation.NotThreadSafe;
|
||||
import amidst.gui.main.menu.AmidstMenu;
|
||||
import amidst.gui.main.menu.AmidstMenuBuilder;
|
||||
import amidst.gui.main.viewer.ViewerFacade;
|
||||
import amidst.gui.main.viewer.ViewerFacadeBuilder;
|
||||
import amidst.gui.seedsearcher.SeedSearcher;
|
||||
import amidst.gui.seedsearcher.SeedSearcherWindow;
|
||||
import amidst.logging.AmidstLogger;
|
||||
|
@ -46,7 +46,7 @@ public class MainWindow {
|
|||
private final AmidstSettings settings;
|
||||
private final MojangApi mojangApi;
|
||||
private final BiomeProfileDirectory biomeProfileDirectory;
|
||||
private final ViewerFacadeBuilder viewerFacadeBuilder;
|
||||
private final Factory2<World, Actions, ViewerFacade> viewerFacadeFactory;
|
||||
private final ThreadMaster threadMaster;
|
||||
|
||||
private final JFrame frame;
|
||||
|
@ -64,14 +64,14 @@ public class MainWindow {
|
|||
AmidstSettings settings,
|
||||
MojangApi mojangApi,
|
||||
BiomeProfileDirectory biomeProfileDirectory,
|
||||
ViewerFacadeBuilder viewerFacadeBuilder,
|
||||
Factory2<World, Actions, ViewerFacade> viewerFacadeFactory,
|
||||
ThreadMaster threadMaster) {
|
||||
this.application = application;
|
||||
this.metadata = metadata;
|
||||
this.settings = settings;
|
||||
this.mojangApi = mojangApi;
|
||||
this.biomeProfileDirectory = biomeProfileDirectory;
|
||||
this.viewerFacadeBuilder = viewerFacadeBuilder;
|
||||
this.viewerFacadeFactory = viewerFacadeFactory;
|
||||
this.threadMaster = threadMaster;
|
||||
this.frame = createFrame();
|
||||
this.contentPane = createContentPane();
|
||||
|
@ -168,7 +168,7 @@ public class MainWindow {
|
|||
private void setWorld(World world) {
|
||||
clearViewerFacade();
|
||||
if (decideWorldPlayerType(world.getMovablePlayerList())) {
|
||||
setViewerFacade(viewerFacadeBuilder.create(world, actions));
|
||||
setViewerFacade(viewerFacadeFactory.create(world, actions));
|
||||
} else {
|
||||
frame.revalidate();
|
||||
frame.repaint();
|
||||
|
|
|
@ -1,110 +0,0 @@
|
|||
package amidst.gui.main.viewer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import amidst.AmidstSettings;
|
||||
import amidst.documentation.AmidstThread;
|
||||
import amidst.documentation.CalledOnlyBy;
|
||||
import amidst.documentation.NotThreadSafe;
|
||||
import amidst.fragment.FragmentGraph;
|
||||
import amidst.fragment.FragmentManager;
|
||||
import amidst.fragment.FragmentQueueProcessor;
|
||||
import amidst.fragment.layer.LayerBuilder;
|
||||
import amidst.fragment.layer.LayerManager;
|
||||
import amidst.fragment.layer.LayerReloader;
|
||||
import amidst.gui.main.Actions;
|
||||
import amidst.gui.main.viewer.widget.Widget;
|
||||
import amidst.gui.main.viewer.widget.WidgetBuilder;
|
||||
import amidst.gui.main.viewer.widget.WidgetManager;
|
||||
import amidst.mojangapi.world.World;
|
||||
import amidst.mojangapi.world.export.WorldExporterFactory;
|
||||
import amidst.threading.WorkerExecutor;
|
||||
|
||||
@NotThreadSafe
|
||||
public class ViewerFacadeBuilder {
|
||||
private final Zoom zoom;
|
||||
private final BiomeSelection biomeSelection = new BiomeSelection();
|
||||
|
||||
private final AmidstSettings settings;
|
||||
private final WorkerExecutor workerExecutor;
|
||||
private final LayerBuilder layerBuilder;
|
||||
private final FragmentManager fragmentManager;
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
public ViewerFacadeBuilder(AmidstSettings settings, WorkerExecutor workerExecutor, LayerBuilder layerBuilder) {
|
||||
this.settings = settings;
|
||||
this.workerExecutor = workerExecutor;
|
||||
this.zoom = new Zoom(settings.maxZoom);
|
||||
this.layerBuilder = layerBuilder;
|
||||
this.fragmentManager = new FragmentManager(layerBuilder.getConstructors(), layerBuilder.getNumberOfLayers());
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
public ViewerFacade create(World world, Actions actions) {
|
||||
Graphics2DAccelerationCounter accelerationCounter = new Graphics2DAccelerationCounter();
|
||||
Movement movement = new Movement(settings.smoothScrolling);
|
||||
WorldIconSelection worldIconSelection = new WorldIconSelection();
|
||||
LayerManager layerManager = layerBuilder
|
||||
.create(settings, world, biomeSelection, worldIconSelection, zoom, accelerationCounter);
|
||||
FragmentGraph graph = new FragmentGraph(layerManager.getDeclarations(), fragmentManager);
|
||||
FragmentGraphToScreenTranslator translator = new FragmentGraphToScreenTranslator(graph, zoom);
|
||||
FragmentQueueProcessor fragmentQueueProcessor = fragmentManager
|
||||
.createQueueProcessor(layerManager, settings.dimension);
|
||||
LayerReloader layerReloader = layerManager.createLayerReloader(world);
|
||||
WorldExporterFactory worldExporterFactory = new WorldExporterFactory(workerExecutor, world);
|
||||
WidgetBuilder widgetBuilder = new WidgetBuilder(
|
||||
world,
|
||||
graph,
|
||||
translator,
|
||||
zoom,
|
||||
biomeSelection,
|
||||
worldIconSelection,
|
||||
layerReloader,
|
||||
fragmentManager,
|
||||
accelerationCounter,
|
||||
settings,
|
||||
worldExporterFactory::getProgressMessage);
|
||||
List<Widget> widgets = widgetBuilder.create();
|
||||
Drawer drawer = new Drawer(
|
||||
graph,
|
||||
translator,
|
||||
zoom,
|
||||
movement,
|
||||
widgets,
|
||||
layerManager.getDrawers(),
|
||||
settings.dimension,
|
||||
accelerationCounter);
|
||||
Viewer viewer = new Viewer(
|
||||
new ViewerMouseListener(new WidgetManager(widgets), graph, translator, zoom, movement, actions),
|
||||
drawer);
|
||||
return new ViewerFacade(
|
||||
world,
|
||||
graph,
|
||||
translator,
|
||||
zoom,
|
||||
viewer,
|
||||
layerReloader,
|
||||
worldIconSelection,
|
||||
layerManager,
|
||||
workerExecutor,
|
||||
worldExporterFactory,
|
||||
() -> onRepainterTick(viewer),
|
||||
() -> onFragmentLoaderTick(fragmentQueueProcessor),
|
||||
() -> onPlayerFinishedLoading(layerReloader));
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.REPAINTER)
|
||||
private void onRepainterTick(final Viewer viewer) {
|
||||
viewer.repaintComponent();
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.FRAGMENT_LOADER)
|
||||
private void onFragmentLoaderTick(final FragmentQueueProcessor fragmentQueueProcessor) {
|
||||
fragmentQueueProcessor.processQueues();
|
||||
}
|
||||
|
||||
@CalledOnlyBy(AmidstThread.EDT)
|
||||
private void onPlayerFinishedLoading(final LayerReloader layerReloader) {
|
||||
layerReloader.reloadPlayerLayer();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue