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