From 9d19a3187789f01d6dbbc73d14c7f90df3e67560 Mon Sep 17 00:00:00 2001 From: Kostya Date: Mon, 10 Aug 2026 20:21:55 +0000 Subject: Move engine contracts to api module, add I/O provider abstraction and PicoContainer wiring Relocates GuessMarketEngine/GuessMarketContext into market.guess.api so engine and ui-console depend on a shared contract instead of engine internals, and makes context loading async (CompletableFuture). Adds InputProvider/OutputProvider interfaces with console implementations, wires the console app's Menu through a PicoContainer, and adds the generated model classes plus vendored picocontainer jar needed to build it. --- .../src/main/java/market/guess/ui/console/App.java | 26 ++++++++++++++++- .../guess/ui/console/ConsoleInputProvider.java | 22 ++++++++++++++ .../ui/console/ConsoleInputProviderFactory.java | 12 ++++++++ .../guess/ui/console/ConsoleOutputProvider.java | 16 ++++++++++ .../ui/console/ConsoleOutputProviderFactory.java | 12 ++++++++ .../main/java/market/guess/ui/console/Menu.java | 34 ++++++++++++++++++++++ 6 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 ui-console/src/main/java/market/guess/ui/console/ConsoleInputProvider.java create mode 100644 ui-console/src/main/java/market/guess/ui/console/ConsoleInputProviderFactory.java create mode 100644 ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProvider.java create mode 100644 ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProviderFactory.java create mode 100644 ui-console/src/main/java/market/guess/ui/console/Menu.java (limited to 'ui-console/src/main/java/market/guess') 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 06be86d..5158478 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,7 +1,31 @@ package market.guess.ui.console; +import org.picocontainer.DefaultPicoContainer; +import org.picocontainer.behaviors.Caching; + public class App { public static void main() { - IO.println("Hello World"); + var pico = new DefaultPicoContainer(new Caching()); + + pico.addComponent(ConsoleInputProviderFactory.class); + pico.addComponent(ConsoleOutputProviderFactory.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/ConsoleInputProvider.java b/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProvider.java new file mode 100644 index 0000000..71de3be --- /dev/null +++ b/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProvider.java @@ -0,0 +1,22 @@ +package market.guess.ui.console; + +import java.util.Scanner; +import market.guess.InputProvider; + +public class ConsoleInputProvider implements InputProvider { + private final Scanner scanner = new Scanner(System.in); + + @Override + public int nextInt() { + while (!scanner.hasNextInt()) { + scanner.next(); + } + + return scanner.nextInt(); + } + + @Override + public void close() throws Exception { + scanner.close(); + } +} 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 new file mode 100644 index 0000000..d122549 --- /dev/null +++ b/ui-console/src/main/java/market/guess/ui/console/ConsoleInputProviderFactory.java @@ -0,0 +1,12 @@ +package market.guess.ui.console; + +import market.guess.InputProvider; +import market.guess.InputProviderFactory; + +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 new file mode 100644 index 0000000..eb9f31b --- /dev/null +++ b/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProvider.java @@ -0,0 +1,16 @@ +package market.guess.ui.console; + +import market.guess.OutputProvider; + +public class ConsoleOutputProvider implements OutputProvider { + + @Override + public void print(Object object) { + IO.print(object); + } + + @Override + public void println(Object object) { + IO.println(object); + } +} 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 new file mode 100644 index 0000000..6db91fc --- /dev/null +++ b/ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProviderFactory.java @@ -0,0 +1,12 @@ +package market.guess.ui.console; + +import market.guess.OutputProvider; +import market.guess.OutputProviderFactory; + +public class ConsoleOutputProviderFactory implements OutputProviderFactory { + + @Override + public OutputProvider create() { + return new ConsoleOutputProvider(); + } +} 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 new file mode 100644 index 0000000..a5217a4 --- /dev/null +++ b/ui-console/src/main/java/market/guess/ui/console/Menu.java @@ -0,0 +1,34 @@ +package market.guess.ui.console; + +import market.guess.OutputProvider; +import market.guess.OutputProviderFactory; +import org.picocontainer.Startable; + +public class Menu implements Startable { + private final OutputProvider outputProvider; + + public Menu(OutputProviderFactory factory) { + this.outputProvider = factory.create(); + } + + @Override + public void start() { + printMenu(outputProvider); + } + + @Override + public void stop() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'stop'"); + } + + 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"); + } +} -- cgit v1.2.3