summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2025-10-04 15:13:22 -0400
committersowgro <tpoke.ferrari@gmail.com>2025-10-04 15:13:22 -0400
commitd97f1a846bb872db8a0954c2214fb0a757542e8b (patch)
treeaf7a2c4d18d27a9de0b12e2070eb55df20eb4f8b /src/main/java
parentb34c67556d47c74974adad32668dc0801ff9d1ed (diff)
downloaddesignproject-design-6-d97f1a846bb872db8a0954c2214fb0a757542e8b.tar.gz
designproject-design-6-d97f1a846bb872db8a0954c2214fb0a757542e8b.tar.bz2
designproject-design-6-d97f1a846bb872db8a0954c2214fb0a757542e8b.zip
Initial version mostly working
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/design/Main.java10
-rw-r--r--src/main/java/design/ParPal.java9
-rw-r--r--src/main/java/design/controller/userinput/Action.java1
-rw-r--r--src/main/java/design/controller/userinput/Menu.java54
-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.java28
-rw-r--r--src/main/java/design/controller/userinput/menus/MainMenu.java17
-rw-r--r--src/main/java/design/controller/userinput/menus/SelectUser.java20
-rw-r--r--src/main/java/design/controller/userinput/menus/StatisticsMenu.java14
-rw-r--r--src/main/java/design/controller/userinput/menus/UserSettings.java18
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) -> {})
+ );
+ }
+}