aboutsummaryrefslogtreecommitdiffstats
path: root/ui-console/src/main/java/market/guess/ui/console
diff options
context:
space:
mode:
authorKostya <mail@sartin.in>2026-08-14 11:02:33 +0000
committerKostya <mail@sartin.in>2026-08-14 11:02:33 +0000
commit98ebc2b0f6fdde1f7502a35ebe067fb95e5ee336 (patch)
tree9704fcc7cc1d17a3743928c0219728887a65862b /ui-console/src/main/java/market/guess/ui/console
parentdb4317bbe0ff5709fa54ade5bec112186ca9aca3 (diff)
downloadguess-market-98ebc2b0f6fdde1f7502a35ebe067fb95e5ee336.tar.gz
guess-market-98ebc2b0f6fdde1f7502a35ebe067fb95e5ee336.tar.xz
guess-market-98ebc2b0f6fdde1f7502a35ebe067fb95e5ee336.zip
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.
Diffstat (limited to 'ui-console/src/main/java/market/guess/ui/console')
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/App.java39
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/ConsoleInputProviderFactory.java9
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProvider.java5
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/ConsoleOutputProviderFactory.java9
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/InputProviderFactory.java5
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/Menu.java30
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/OutputProvider.java2
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/OutputProviderFactory.java5
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/command/LoadFileMenuCommand.java35
-rw-r--r--ui-console/src/main/java/market/guess/ui/console/command/MenuCommand.java11
10 files changed, 92 insertions, 58 deletions
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 @@
1package market.guess.ui.console; 1package market.guess.ui.console;
2 2
3import market.guess.api.GuessMarketContext;
4import market.guess.service.LocalGuessMarketContext;
5import market.guess.service.TradingOperation;
6import market.guess.service.TradingOperationImpl;
7import market.guess.service.infrastructure.provider.Loader;
8import market.guess.service.infrastructure.provider.XMLLoader;
9import market.guess.service.repository.EventRepository;
10import market.guess.service.repository.InMemoryEventRepository;
11import market.guess.service.repository.InMemoryUserRepository;
12import market.guess.service.repository.UserRepository;
13import market.guess.ui.console.command.LoadFileMenuCommand;
3import org.picocontainer.DefaultPicoContainer; 14import org.picocontainer.DefaultPicoContainer;
4import org.picocontainer.behaviors.Caching; 15import org.picocontainer.behaviors.Caching;
5 16
@@ -7,25 +18,19 @@ public class App {
7 public static void main() { 18 public static void main() {
8 var pico = new DefaultPicoContainer(new Caching()); 19 var pico = new DefaultPicoContainer(new Caching());
9 20
10 pico.addComponent(ConsoleInputProviderFactory.class); 21 pico.addComponent(EventRepository.class, InMemoryEventRepository.class);
11 pico.addComponent(ConsoleOutputProviderFactory.class); 22 pico.addComponent(UserRepository.class, InMemoryUserRepository.class);
23
24 pico.addComponent(TradingOperation.class, TradingOperationImpl.class);
25 pico.addComponent(Loader.class, XMLLoader.class);
26 pico.addComponent(GuessMarketContext.class, LocalGuessMarketContext.class);
27
28 pico.addComponent(LoadFileMenuCommand.class);
29
30 pico.addComponent(InputProvider.class, ConsoleInputProvider.class);
31 pico.addComponent(OutputProvider.class, ConsoleOutputProvider.class);
12 pico.addComponent(Menu.class); 32 pico.addComponent(Menu.class);
13 33
14 pico.start(); 34 pico.start();
15 // var context = new LocalGuessMarketContext();
16 // var factory = new ConsoleInputProviderFactory();
17 // var oFactory = new ConsoleOutputProviderFactory();
18 //
19 // context.LoadAsync();
20 // printMenu(oFactory.create());
21 //
22 // try (var provider = factory.create()) {
23 // var input = provider.nextInt();
24 // while (input != 0) {
25 // input = provider.nextInt();
26 // }
27 // } catch (Exception ex) {
28 // ex.printStackTrace();
29 //
30 } 35 }
31} 36}
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 @@
1package market.guess.ui.console;
2
3public class ConsoleInputProviderFactory implements InputProviderFactory {
4
5 @Override
6 public InputProvider create() {
7 return new ConsoleInputProvider();
8 }
9}
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 {
11 public void println(Object object) { 11 public void println(Object object) {
12 IO.println(object); 12 IO.println(object);
13 } 13 }
14
15 @Override
16 public void newLine() {
17 IO.println("");
18 }
14} 19}
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 @@
1package market.guess.ui.console;
2
3public class ConsoleOutputProviderFactory implements OutputProviderFactory {
4
5 @Override
6 public OutputProvider create() {
7 return new ConsoleOutputProvider();
8 }
9}
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 @@
1package market.guess.ui.console;
2
3public interface InputProviderFactory {
4 InputProvider create();
5}
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 @@
1package market.guess.ui.console; 1package market.guess.ui.console;
2 2
3import java.util.List;
4import market.guess.ui.console.command.MenuCommand;
3import org.picocontainer.Startable; 5import org.picocontainer.Startable;
4 6
5public class Menu implements Startable { 7public final class Menu implements Startable {
6 private final OutputProvider outputProvider; 8 private final OutputProvider out;
9 private final InputProvider in;
10 private final List<MenuCommand> commands;
7 11
8 public Menu(OutputProviderFactory factory) { 12 public Menu(
9 this.outputProvider = factory.create(); 13 List<MenuCommand> commands, OutputProvider outputProvider, InputProvider inputProvider) {
14 this.commands = commands;
15 this.out = outputProvider;
16 this.in = inputProvider;
10 } 17 }
11 18
12 @Override 19 @Override
13 public void start() { 20 public void start() {
14 printMenu(outputProvider); 21 printMenu();
15 } 22 }
16 23
17 @Override 24 @Override
@@ -19,13 +26,10 @@ public class Menu implements Startable {
19 // Do nothing. 26 // Do nothing.
20 } 27 }
21 28
22 private static void printMenu(OutputProvider provider) { 29 private void printMenu() {
23 provider.println("[1] Load Marketplace"); 30 out.newLine();
24 provider.println("[2] Save Marketplace"); 31 for (var command : commands) {
25 provider.println("[3] Show All Events"); 32 out.println(" %d -- %s".formatted(command.getIndex(), command.getName()));
26 provider.println("[4] Event Info"); 33 }
27 provider.println("[5] Participate In Event");
28 provider.println("[6] Close Event");
29 provider.println("[7] Exit");
30 } 34 }
31} 35}
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;
3public interface OutputProvider { 3public interface OutputProvider {
4 void print(Object object); 4 void print(Object object);
5 5
6 void newLine();
7
6 void println(Object object); 8 void println(Object object);
7} 9}
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 @@
1package market.guess.ui.console;
2
3public interface OutputProviderFactory {
4 OutputProvider create();
5}
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 @@
1package market.guess.ui.console.command;
2
3import market.guess.api.GuessMarketContext;
4import market.guess.ui.console.OutputProvider;
5
6public final class LoadFileMenuCommand implements MenuCommand {
7 private final GuessMarketContext context;
8 private final OutputProvider out;
9
10 public LoadFileMenuCommand(GuessMarketContext context, OutputProvider out) {
11 this.context = context;
12 this.out = out;
13 }
14
15 @Override
16 public int getIndex() {
17 return 1;
18 }
19
20 @Override
21 public String getName() {
22 return "Load events from file";
23 }
24
25 @Override
26 public boolean allowed() {
27 return true;
28 }
29
30 @Override
31 public void execute() {
32 // TODO Auto-generated method stub
33 throw new UnsupportedOperationException("Unimplemented method 'execute'");
34 }
35}
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 @@
1package market.guess.ui.console.command;
2
3public interface MenuCommand {
4 int getIndex();
5
6 String getName();
7
8 boolean allowed();
9
10 void execute();
11}