Java

Assmus Menu (⌐■_■)

Erzeugt aus einer Reihe von annotierten Methoden ein Menü für deine CLI-Anwendung.

Erzeugt aus einer Reihe von annotierten Methoden ein Menü für deine CLI-Anwendung. Dazu muss die Klasse AssmusMenu um eine Kindklasse mit den Methoden der einzelnen Optionen erweitert werden. Die Annotation @MenuOption definiert den Namen im Menü und welcher String für die Auswahl eingegeben werden muss. Nun kann man in der Einsprungmethode der Java-Anwendung eine Instanz der abgeleiteten Klasse erzeugen und die run-Methode des Objekts aufrufen.

App.java
class App extends AssmusMenu {
    App(String title) {
        super(title);
    }

    @MenuOption(name = "Help", pattern = "h")
    public void help() {        
        clear(); // Clears the console output.
        System.out.println("Hello World");
        System.out.println("Hit any key to continue...");
        read(String.class); 
    }

    @MenuOption(name = "Quit", pattern = "q")
    public boolean quit() {
        clear();
        System.out.print("Do you want to exit? (y/n): ");
        boolean exit = false;
        String input = read(String.class);
        // If a boolean is returned, the run variable of 
        // the main loop will be set to its inverse value.
        return input.equalsIgnoreCase("y");
    }
}
Main.java
class Main {
    public static void main(String[] args) {
        App app = new App("MY COOL CLI APP");
        // Starts the application.
        app.run();
    }
}
Output

 MY COOL CLI APP
 =============================================
   (h) Help
   (q) Quit

 >

Methoden

Folgende Methoden sind implementiert und können von der Child-Klasse aus aufgerufen werden:

Return type Passed Object
T <T> read(Class<?>, String fmt, Object ... args) - Gibt einen formatierten String in der Konsole aus und gibt die Eingabe als Instanz des übergebenen Types zurück.
T <T> read(Class<?>) - Gibt die Eingabe als Instanz des übergebenen Types zurück.
void printException(Exception e) - Gibt die übergebene Exception und deren Stack Trace in der Konsole aus.
void clear() - Entfernt die aktuelle Ausgabe der Konsole.

Es werden von <T> read(Class<?>, String fmt, Object ... args) und <T> read(Class<?>) als Rückgabetyp aktuell unterstützt:

  • String
  • Short
  • Integer
  • Long
  • Double
  • Float
  • Byte
  • Boolean
  • BigInteger
  • BigDecimal

Beispiel

class App extends AssmusMenu {
    App(String title) {
        super(title);
    }

    @MenuOption(name = "Add", pattern = "a")
    public void add() {        
        clear();        
        String name = read(String.class, "Name: ");        
        int age = read(Integer.class, "Age: ");        
        double height = read(Double.class, "Height in cm: ");
        clear();
        System.out.println("Name: " + name + ", Age: " + age + ", height: " + height + " cm");
        read(String.class);
    }
}

Rückgabetypen

Die annotierte Methode muss einen Rückgabetyp von void oder boolean haben. Wenn der Typ boolean ist, wird die Laufvariable der Hauptschleife
auf den invertierten Rückgabewert der Methode gesetzt.


OnUnknownInput

Mit der Annotation @OnUnknownInput ist es möglich, eine Methode zu definieren, die unerwartete Benutzereingaben handled.

class App extends AssmusMenu {
    App(String title) {
        super(title);
    }

    @OnUnknownInput
    public void onError() {
        clear();
        System.out.println("Your input couldn't recognized.");
        System.out.println("Hit any key to continue...");
        read(String.class);
    }
}

GitHub - jibbex/Assmus-Menu
Contribute to jibbex/Assmus-Menu development by creating an account on GitHub.
image