From 98ebc2b0f6fdde1f7502a35ebe067fb95e5ee336 Mon Sep 17 00:00:00 2001 From: Kostya Date: Fri, 14 Aug 2026 11:02:33 +0000 Subject: Wire buyShares and menu commands, replace factory interfaces with DI Implement LocalGuessMarketContext.buyShares/loadEvents via a new TradingOperation and Loader, backed by in-memory repositories. Replace the ConsoleInputProviderFactory/ConsoleOutputProviderFactory pattern with picocontainer-injected providers, and drive the menu from a list of MenuCommand implementations instead of a hardcoded printout. --- .../src/main/java/market/guess/ui/console/App.java | 39 ++++++++++++---------- .../ui/console/ConsoleInputProviderFactory.java | 9 ----- .../guess/ui/console/ConsoleOutputProvider.java | 5 +++ .../ui/console/ConsoleOutputProviderFactory.java | 9 ----- .../guess/ui/console/InputProviderFactory.java | 5 --- .../main/java/market/guess/ui/console/Menu.java | 30 +++++++++-------- .../market/guess/ui/console/OutputProvider.java | 2 ++ .../guess/ui/console/OutputProviderFactory.java | 5 --- .../ui/console/command/LoadFileMenuCommand.java | 35 +++++++++++++++++++ .../guess/ui/console/command/MenuCommand.java | 11 ++++++ 10 files changed, 92 insertions(+), 58 deletions(-) delete mode 100644 ui-console/src/main/java/market/guess/ui/console/ConsoleInputProviderFactory.java delete mode 100644 ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProviderFactory.java delete mode 100644 ui-console/src/main/java/market/guess/ui/console/InputProviderFactory.java delete mode 100644 ui-console/src/main/java/market/guess/ui/console/OutputProviderFactory.java create mode 100644 ui-console/src/main/java/market/guess/ui/console/command/LoadFileMenuCommand.java create mode 100644 ui-console/src/main/java/market/guess/ui/console/command/MenuCommand.java (limited to 'ui-console/src/main/java/market/guess/ui/console') diff --git a/ui-console/src/main/java/market/guess/ui/console/App.java b/ui-console/src/main/java/market/guess/ui/console/App.java index 5158478..ccffc06 100644 --- a/ui-console/src/main/java/market/guess/ui/console/App.java +++ b/ui-console/src/main/java/market/guess/ui/console/App.java @@ -1,5 +1,16 @@ package market.guess.ui.console; +import market.guess.api.GuessMarketContext; +import market.guess.service.LocalGuessMarketContext; +import market.guess.service.TradingOperation; +import market.guess.service.TradingOperationImpl; +import market.guess.service.infrastructure.provider.Loader; +import market.guess.service.infrastructure.provider.XMLLoader; +import market.guess.service.repository.EventRepository; +import market.guess.service.repository.InMemoryEventRepository; +import market.guess.service.repository.InMemoryUserRepository; +import market.guess.service.repository.UserRepository; +import market.guess.ui.console.command.LoadFileMenuCommand; import org.picocontainer.DefaultPicoContainer; import org.picocontainer.behaviors.Caching; @@ -7,25 +18,19 @@ public class App { public static void main() { var pico = new DefaultPicoContainer(new Caching()); - pico.addComponent(ConsoleInputProviderFactory.class); - pico.addComponent(ConsoleOutputProviderFactory.class); + pico.addComponent(EventRepository.class, InMemoryEventRepository.class); + pico.addComponent(UserRepository.class, InMemoryUserRepository.class); + + pico.addComponent(TradingOperation.class, TradingOperationImpl.class); + pico.addComponent(Loader.class, XMLLoader.class); + pico.addComponent(GuessMarketContext.class, LocalGuessMarketContext.class); + + pico.addComponent(LoadFileMenuCommand.class); + + pico.addComponent(InputProvider.class, ConsoleInputProvider.class); + pico.addComponent(OutputProvider.class, ConsoleOutputProvider.class); pico.addComponent(Menu.class); pico.start(); - // var context = new LocalGuessMarketContext(); - // var factory = new ConsoleInputProviderFactory(); - // var oFactory = new ConsoleOutputProviderFactory(); - // - // context.LoadAsync(); - // printMenu(oFactory.create()); - // - // try (var provider = factory.create()) { - // var input = provider.nextInt(); - // while (input != 0) { - // input = provider.nextInt(); - // } - // } catch (Exception ex) { - // ex.printStackTrace(); - // } } diff --git a/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProviderFactory.java b/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProviderFactory.java deleted file mode 100644 index a7433b7..0000000 --- a/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProviderFactory.java +++ /dev/null @@ -1,9 +0,0 @@ -package market.guess.ui.console; - -public class ConsoleInputProviderFactory implements InputProviderFactory { - - @Override - public InputProvider create() { - return new ConsoleInputProvider(); - } -} diff --git a/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProvider.java b/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProvider.java index 84017ac..3009d95 100644 --- a/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProvider.java +++ b/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProvider.java @@ -11,4 +11,9 @@ public class ConsoleOutputProvider implements OutputProvider { public void println(Object object) { IO.println(object); } + + @Override + public void newLine() { + IO.println(""); + } } diff --git a/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProviderFactory.java b/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProviderFactory.java deleted file mode 100644 index 3665df3..0000000 --- a/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProviderFactory.java +++ /dev/null @@ -1,9 +0,0 @@ -package market.guess.ui.console; - -public class ConsoleOutputProviderFactory implements OutputProviderFactory { - - @Override - public OutputProvider create() { - return new ConsoleOutputProvider(); - } -} diff --git a/ui-console/src/main/java/market/guess/ui/console/InputProviderFactory.java b/ui-console/src/main/java/market/guess/ui/console/InputProviderFactory.java deleted file mode 100644 index dcbb1c6..0000000 --- a/ui-console/src/main/java/market/guess/ui/console/InputProviderFactory.java +++ /dev/null @@ -1,5 +0,0 @@ -package market.guess.ui.console; - -public interface InputProviderFactory { - InputProvider create(); -} diff --git a/ui-console/src/main/java/market/guess/ui/console/Menu.java b/ui-console/src/main/java/market/guess/ui/console/Menu.java index 81dade0..1f3f2be 100644 --- a/ui-console/src/main/java/market/guess/ui/console/Menu.java +++ b/ui-console/src/main/java/market/guess/ui/console/Menu.java @@ -1,17 +1,24 @@ package market.guess.ui.console; +import java.util.List; +import market.guess.ui.console.command.MenuCommand; import org.picocontainer.Startable; -public class Menu implements Startable { - private final OutputProvider outputProvider; +public final class Menu implements Startable { + private final OutputProvider out; + private final InputProvider in; + private final List commands; - public Menu(OutputProviderFactory factory) { - this.outputProvider = factory.create(); + public Menu( + List commands, OutputProvider outputProvider, InputProvider inputProvider) { + this.commands = commands; + this.out = outputProvider; + this.in = inputProvider; } @Override public void start() { - printMenu(outputProvider); + printMenu(); } @Override @@ -19,13 +26,10 @@ public class Menu implements Startable { // Do nothing. } - private static void printMenu(OutputProvider provider) { - provider.println("[1] Load Marketplace"); - provider.println("[2] Save Marketplace"); - provider.println("[3] Show All Events"); - provider.println("[4] Event Info"); - provider.println("[5] Participate In Event"); - provider.println("[6] Close Event"); - provider.println("[7] Exit"); + private void printMenu() { + out.newLine(); + for (var command : commands) { + out.println(" %d -- %s".formatted(command.getIndex(), command.getName())); + } } } diff --git a/ui-console/src/main/java/market/guess/ui/console/OutputProvider.java b/ui-console/src/main/java/market/guess/ui/console/OutputProvider.java index 57ff001..e49bec5 100644 --- a/ui-console/src/main/java/market/guess/ui/console/OutputProvider.java +++ b/ui-console/src/main/java/market/guess/ui/console/OutputProvider.java @@ -3,5 +3,7 @@ package market.guess.ui.console; public interface OutputProvider { void print(Object object); + void newLine(); + void println(Object object); } diff --git a/ui-console/src/main/java/market/guess/ui/console/OutputProviderFactory.java b/ui-console/src/main/java/market/guess/ui/console/OutputProviderFactory.java deleted file mode 100644 index 6d6601f..0000000 --- a/ui-console/src/main/java/market/guess/ui/console/OutputProviderFactory.java +++ /dev/null @@ -1,5 +0,0 @@ -package market.guess.ui.console; - -public interface OutputProviderFactory { - OutputProvider create(); -} diff --git a/ui-console/src/main/java/market/guess/ui/console/command/LoadFileMenuCommand.java b/ui-console/src/main/java/market/guess/ui/console/command/LoadFileMenuCommand.java new file mode 100644 index 0000000..eddc68f --- /dev/null +++ b/ui-console/src/main/java/market/guess/ui/console/command/LoadFileMenuCommand.java @@ -0,0 +1,35 @@ +package market.guess.ui.console.command; + +import market.guess.api.GuessMarketContext; +import market.guess.ui.console.OutputProvider; + +public final class LoadFileMenuCommand implements MenuCommand { + private final GuessMarketContext context; + private final OutputProvider out; + + public LoadFileMenuCommand(GuessMarketContext context, OutputProvider out) { + this.context = context; + this.out = out; + } + + @Override + public int getIndex() { + return 1; + } + + @Override + public String getName() { + return "Load events from file"; + } + + @Override + public boolean allowed() { + return true; + } + + @Override + public void execute() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'execute'"); + } +} diff --git a/ui-console/src/main/java/market/guess/ui/console/command/MenuCommand.java b/ui-console/src/main/java/market/guess/ui/console/command/MenuCommand.java new file mode 100644 index 0000000..8a28dfe --- /dev/null +++ b/ui-console/src/main/java/market/guess/ui/console/command/MenuCommand.java @@ -0,0 +1,11 @@ +package market.guess.ui.console.command; + +public interface MenuCommand { + int getIndex(); + + String getName(); + + boolean allowed(); + + void execute(); +} -- cgit v1.2.3