diff options
Diffstat (limited to 'src/main/java')
8 files changed, 152 insertions, 7 deletions
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 new file mode 100644 index 0000000..0b52bfc --- /dev/null +++ b/src/main/java/design/controller/userinput/Action.java @@ -0,0 +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..7677793 --- /dev/null +++ b/src/main/java/design/controller/userinput/Menu.java @@ -0,0 +1,30 @@ +package design.controller.userinput; + +import java.util.*; + +public abstract class Menu { + public abstract String getTitle(); + + public abstract List<MenuOption> getMenuOptions(); + + public void present() { + var menuOptions = getMenuOptions(); + System.out.printf("-- %s --\n", getTitle().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/MenuOption.java b/src/main/java/design/controller/userinput/MenuOption.java new file mode 100644 index 0000000..9635ebd --- /dev/null +++ b/src/main/java/design/controller/userinput/MenuOption.java @@ -0,0 +1,19 @@ +package design.controller.userinput; + +public class MenuOption { + String name; + Action action; + + public MenuOption(String name, Action action) { + this.name = name; + this.action = action; + } + + public String getName() { + return name; + } + + public void onCommand(String[] args) { + action.onCommand(args); + } +} 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..fb3cee9 --- /dev/null +++ b/src/main/java/design/controller/userinput/menus/MainMenu.java @@ -0,0 +1,23 @@ +package design.controller.userinput.menus; + +import design.controller.userinput.Menu; +import design.controller.userinput.MenuOption; + +import java.util.List; + +public class MainMenu extends Menu { + @Override + public String getTitle() { + return "main menu"; + } + + @Override + public List<MenuOption> getMenuOptions() { + return List.of( + 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..1963f1d --- /dev/null +++ b/src/main/java/design/controller/userinput/menus/SelectUser.java @@ -0,0 +1,27 @@ +package design.controller.userinput.menus; + +import design.controller.userinput.Menu; +import design.controller.userinput.MenuOption; +import design.persistence.PersonalDatabase; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class SelectUser extends Menu { + PersonalDatabase personalDB = PersonalDatabase.INSTANCE; + + @Override + public String getTitle() { + return "select user"; + } + + @Override + public List<MenuOption> getMenuOptions() { + var l = new ArrayList<MenuOption>(); + l.addAll(Arrays.stream(personalDB.getGolfers()) + .map(i -> new MenuOption(i.getUsername(), (a) -> {})).toList()); + l.add(new MenuOption("<create>", (a) -> {})); + return l; + } +} 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..66d60e3 --- /dev/null +++ b/src/main/java/design/controller/userinput/menus/StatisticsMenu.java @@ -0,0 +1,21 @@ +package design.controller.userinput.menus; + +import design.controller.userinput.Menu; +import design.controller.userinput.MenuOption; + +import java.util.List; + +public class StatisticsMenu extends Menu { + + @Override + public String getTitle() { + return "statistics menu"; + } + + @Override + public List<MenuOption> getMenuOptions() { + return List.of( + 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..a866889 --- /dev/null +++ b/src/main/java/design/controller/userinput/menus/UserSettings.java @@ -0,0 +1,24 @@ +package design.controller.userinput.menus; + +import design.controller.userinput.Menu; +import design.controller.userinput.MenuOption; + +import java.util.List; + +public class UserSettings extends Menu { + + @Override + public String getTitle() { + return "user settings"; + } + + @Override + public List<MenuOption> getMenuOptions() { + return List.of( + 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) -> {}) + ); + } +} |
