summaryrefslogtreecommitdiff
path: root/src/main/java/design/controller
diff options
context:
space:
mode:
authorTyler Ferrari <69283684+Sowgro@users.noreply.github.com>2025-10-05 14:29:39 -0400
committerGitHub <noreply@github.com>2025-10-05 14:29:39 -0400
commit7ce2647830e34c61a479eebc69b679f7d20df94a (patch)
tree18fdc4d99f8f5b23baf156e7753d352607e619d4 /src/main/java/design/controller
parentc5cbe4ffd56b7c96d85dc1676387993c6c15af7b (diff)
parent75ef9ca83d43051616c0083af85eacbd71b4b4b6 (diff)
downloaddesignproject-design-6-7ce2647830e34c61a479eebc69b679f7d20df94a.tar.gz
designproject-design-6-7ce2647830e34c61a479eebc69b679f7d20df94a.tar.bz2
designproject-design-6-7ce2647830e34c61a479eebc69b679f7d20df94a.zip
Merge pull request #3 from RIT-SWEN-262/user-input-dev
User input dev
Diffstat (limited to 'src/main/java/design/controller')
-rw-r--r--src/main/java/design/controller/userinput/Action.java6
-rw-r--r--src/main/java/design/controller/userinput/Menu.java30
-rw-r--r--src/main/java/design/controller/userinput/MenuOption.java19
-rw-r--r--src/main/java/design/controller/userinput/menus/MainMenu.java23
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectUser.java27
-rw-r--r--src/main/java/design/controller/userinput/menus/StatisticsMenu.java21
-rw-r--r--src/main/java/design/controller/userinput/menus/UserSettings.java24
7 files changed, 150 insertions, 0 deletions
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) -> {})
+ );
+ }
+}