summaryrefslogtreecommitdiff
path: root/src/main/java/design/controller/userinput/Menu.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/design/controller/userinput/Menu.java')
-rw-r--r--src/main/java/design/controller/userinput/Menu.java54
1 files changed, 54 insertions, 0 deletions
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();
+ }
+ }
+
+}