diff options
| -rw-r--r-- | src/main/java/design/Main.java | 10 | ||||
| -rw-r--r-- | src/main/java/design/ParPal.java | 9 | ||||
| -rw-r--r-- | src/main/java/design/controller/userinput/Action.java | 1 | ||||
| -rw-r--r-- | src/main/java/design/controller/userinput/Menu.java | 54 | ||||
| -rw-r--r-- | src/main/java/design/controller/userinput/MenuOption.java (renamed from src/main/java/design/controller/userinput/CommandOption.java) | 8 | ||||
| -rw-r--r-- | src/main/java/design/controller/userinput/ParPalCLI.java | 28 | ||||
| -rw-r--r-- | src/main/java/design/controller/userinput/menus/MainMenu.java | 17 | ||||
| -rw-r--r-- | src/main/java/design/controller/userinput/menus/SelectUser.java | 20 | ||||
| -rw-r--r-- | src/main/java/design/controller/userinput/menus/StatisticsMenu.java | 14 | ||||
| -rw-r--r-- | src/main/java/design/controller/userinput/menus/UserSettings.java | 18 |
10 files changed, 130 insertions, 49 deletions
diff --git a/src/main/java/design/Main.java b/src/main/java/design/Main.java deleted file mode 100644 index 43a8eb6..0000000 --- a/src/main/java/design/Main.java +++ /dev/null @@ -1,10 +0,0 @@ -package design; - -import design.controller.userinput.ParPalCLI; - -public class Main { - public static void main(String[] args) { - var cli = new ParPalCLI(); - cli.start(args); - } -} diff --git a/src/main/java/design/ParPal.java b/src/main/java/design/ParPal.java index db6891e..4ed6949 100644 --- a/src/main/java/design/ParPal.java +++ b/src/main/java/design/ParPal.java @@ -1,14 +1,9 @@ package design; -import design.persistence.MasterDatabase; -import design.persistence.PersonalDatabase; +import design.controller.userinput.menus.MainMenu; public class ParPal { public static void main(String[] args) { - var mdb = MasterDatabase.INSTANCE; - var pdb = PersonalDatabase.INSTANCE; - - System.out.println("done"); - + new MainMenu().present(); } } diff --git a/src/main/java/design/controller/userinput/Action.java b/src/main/java/design/controller/userinput/Action.java index 0569c48..0b52bfc 100644 --- a/src/main/java/design/controller/userinput/Action.java +++ b/src/main/java/design/controller/userinput/Action.java @@ -1,5 +1,6 @@ package design.controller.userinput; +@FunctionalInterface public interface Action { void onCommand(String[] args); } diff --git a/src/main/java/design/controller/userinput/Menu.java b/src/main/java/design/controller/userinput/Menu.java new file mode 100644 index 0000000..407d2ca --- /dev/null +++ b/src/main/java/design/controller/userinput/Menu.java @@ -0,0 +1,54 @@ +package design.controller.userinput; + +import java.util.*; + +public class Menu { + private final String title; + private final List<MenuOption> menuOptions; + + public Menu(String title, List<MenuOption> menuOptions) { + this.title = title; + this.menuOptions = menuOptions; + } + + public Menu(String title) { + this.title = title; + this.menuOptions = new ArrayList<>(); + } + + public boolean remove(MenuOption menuOption) { + return menuOptions.remove(menuOption); + } + + public boolean addAll(List<MenuOption> c) { + return menuOptions.addAll(c); + } + + public boolean addAll(MenuOption... c) { + return addAll(Arrays.stream(c).toList()); + } + + public boolean add(MenuOption menuOption) { + return menuOptions.add(menuOption); + } + + public void present() { + System.out.printf("-- %s --\n", title.toUpperCase()); + for (int i = 0; i < menuOptions.size(); i++) { + MenuOption menuOption = menuOptions.get(i); + System.out.printf("%s: %s\n", i, menuOption.getName()); + } + Scanner sc = new Scanner(System.in); + var line = sc.nextLine(); + var split = line.split(" "); + + try { + int i = Integer.parseInt(split[0]); + menuOptions.get(i).onCommand(Arrays.copyOfRange(split, 1, split.length)); + } catch (Exception ex) { + System.err.printf("Invalid option \"%s\"\n", line); + present(); + } + } + +} diff --git a/src/main/java/design/controller/userinput/CommandOption.java b/src/main/java/design/controller/userinput/MenuOption.java index 31b63d4..9635ebd 100644 --- a/src/main/java/design/controller/userinput/CommandOption.java +++ b/src/main/java/design/controller/userinput/MenuOption.java @@ -1,12 +1,12 @@ package design.controller.userinput; -public class CommandOption { - Action action; +public class MenuOption { String name; + Action action; - public CommandOption(Action action, String name) { - this.action = action; + public MenuOption(String name, Action action) { this.name = name; + this.action = action; } public String getName() { diff --git a/src/main/java/design/controller/userinput/ParPalCLI.java b/src/main/java/design/controller/userinput/ParPalCLI.java deleted file mode 100644 index 7707754..0000000 --- a/src/main/java/design/controller/userinput/ParPalCLI.java +++ /dev/null @@ -1,28 +0,0 @@ -package design.controller.userinput; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; - -public class ParPalCLI { - - public void start(String[] args) { - - } - - public void promptUser(List<CommandOption> commandOptions) { - for (int i = 0; i < commandOptions.size(); i++) { - CommandOption commandOption = commandOptions.get(i); - System.out.printf("%s: %s\n", i, commandOption.getName()); - } - Scanner sc = new Scanner(System.in); - var line = sc.nextLine().split(" "); - - if (line.length > 0) { - int i = Integer.parseInt(line[0]); - - commandOptions.get(i).onCommand(Arrays.copyOfRange(line, 1, line.length)); - } - } -} diff --git a/src/main/java/design/controller/userinput/menus/MainMenu.java b/src/main/java/design/controller/userinput/menus/MainMenu.java new file mode 100644 index 0000000..b6fca7c --- /dev/null +++ b/src/main/java/design/controller/userinput/menus/MainMenu.java @@ -0,0 +1,17 @@ +package design.controller.userinput.menus; + +import design.controller.userinput.Menu; +import design.controller.userinput.MenuOption; + +public class MainMenu extends Menu { + public MainMenu() { + super("main menu"); + + addAll( + new MenuOption("user settings...", (a) -> new UserSettings().present()), + new MenuOption("statistics...", (a) -> new StatisticsMenu().present()), + new MenuOption("log round...", (a) -> {}), + new MenuOption("quit", (a) -> {}) + ); + } +} diff --git a/src/main/java/design/controller/userinput/menus/SelectUser.java b/src/main/java/design/controller/userinput/menus/SelectUser.java new file mode 100644 index 0000000..f5ddd64 --- /dev/null +++ b/src/main/java/design/controller/userinput/menus/SelectUser.java @@ -0,0 +1,20 @@ +package design.controller.userinput.menus; + +import design.controller.userinput.Menu; +import design.controller.userinput.MenuOption; +import design.persistence.PersonalDatabase; + +import java.util.Arrays; + +public class SelectUser extends Menu { + + PersonalDatabase personalDB = PersonalDatabase.INSTANCE; + + public SelectUser() { + super("select user"); + + addAll(Arrays.stream(personalDB.getGolfers()) + .map(i -> new MenuOption(i.getUsername(), (a) -> {})).toList()); + add(new MenuOption("<create>", (a) -> {})); + } +} diff --git a/src/main/java/design/controller/userinput/menus/StatisticsMenu.java b/src/main/java/design/controller/userinput/menus/StatisticsMenu.java new file mode 100644 index 0000000..1d6de4b --- /dev/null +++ b/src/main/java/design/controller/userinput/menus/StatisticsMenu.java @@ -0,0 +1,14 @@ +package design.controller.userinput.menus; + +import design.controller.userinput.Menu; +import design.controller.userinput.MenuOption; + +public class StatisticsMenu extends Menu { + public StatisticsMenu() { + super("statistics menu"); + + addAll( + new MenuOption("return to main menu", (c) -> new MainMenu().present()) + ); + } +} diff --git a/src/main/java/design/controller/userinput/menus/UserSettings.java b/src/main/java/design/controller/userinput/menus/UserSettings.java new file mode 100644 index 0000000..fd9a311 --- /dev/null +++ b/src/main/java/design/controller/userinput/menus/UserSettings.java @@ -0,0 +1,18 @@ +package design.controller.userinput.menus; + +import design.controller.userinput.Menu; +import design.controller.userinput.MenuOption; + +public class UserSettings extends Menu { + + public UserSettings() { + super("user settings"); + + addAll( + new MenuOption("return to main menu", (a) -> new MainMenu().present()), + new MenuOption("switch user...", (a) -> new SelectUser().present()), + new MenuOption("set username...", (a -> {})), + new MenuOption("set password...", (a) -> {}) + ); + } +} |
