diff options
Diffstat (limited to 'src/main/ui/tui/TemplatesScreen.java')
-rw-r--r-- | src/main/ui/tui/TemplatesScreen.java | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/src/main/ui/tui/TemplatesScreen.java b/src/main/ui/tui/TemplatesScreen.java new file mode 100644 index 0000000..6b7f18c --- /dev/null +++ b/src/main/ui/tui/TemplatesScreen.java @@ -0,0 +1,138 @@ +package ui.tui; + +import model.ca.Template; +import model.x501.Name; + +/** + * The screen that allows users to list templates and manage them. + */ +public class TemplatesScreen implements UIHandler { + private final JCA session; + + /** + * EFFECTS: Init with the session. + */ + public TemplatesScreen(JCA session) { + this.session = session; + } + + /** + * EFFECTS: Print help. + */ + @Override + public void help() { + System.out.println("show\tList templates\n" + + "add\tCreate a new template\n" + + "enable\tEnable a template\n" + + "disable\tDisable a template\n" + + "delete\tDelete a template\n" + + "exit\tGo to main menu\n" + + "help\tPrint this message"); + } + + /** + * EFFECTS: List templates in Name[ENABLED / DISABLED] Subject Validity format. + */ + @Override + public void show() { + session.getCa().getTemplates().forEach(tem -> + System.out.printf("%s[%s]\t%s\t%d Days\n", + tem.getName(), + tem.isEnabled() ? "ENABLED" : "DISABLED", + tem.getSubject(), + tem.getValidity())); + } + + /** + * EFFECTS: Create a new template with the given name and switch to the template set screen. + */ + private void handleAdd(String... args) { + if (args.length <= 1) { + System.out.println("Usage: add <name>"); + return; + } + if (session.getCa().findTemplate(args[1], false) != null) { + System.out.println("The template already exists."); + return; + } + + session.setScreen(Screen.TEMPLATE_SET, + new Template(args[1], false, (Name) null, 30)); + } + + /** + * EFFECTS: Handle the enable / disable commands. + * MODIFIES: session + */ + private void handleEnableDisable(boolean enable, String... args) { + if (args.length <= 1) { + System.out.printf("Usage: %s <template>\n", enable ? "enable" : "disable"); + return; + } + Template tmp = session.getCa().findTemplate(args[1], false); + if (tmp == null) { + System.out.println("Cannot find the template specified"); + return; + } + session.getCa().setTemplateEnable(tmp, enable); + session.setUnsaved(true); + } + + /** + * EFFECTS: Handle the delete command + * MODIFIES: session + */ + private void handleDelete(String... args) { + if (args.length <= 1) { + System.out.println("Usage: delete <template>"); + return; + } + Template tmp = session.getCa().findTemplate(args[1], true); + if (tmp == null) { + System.out.println("Cannot find the template specified"); + return; + } + session.getCa().removeTemplate(tmp); + session.setUnsaved(true); + } + + /** + * EFFECTS: Handle commands. + */ + @Override + public void command(String... args) { + switch (args[0]) { + case "add": + handleAdd(args); + break; + case "enable": + handleEnableDisable(true, args); + break; + case "disable": + handleEnableDisable(false, args); + break; + case "delete": + handleDelete(args); + break; + default: + help(); + break; + } + } + + /** + * EFFECTS: Go to main menu. + */ + @Override + public Screen exit() { + return Screen.MAIN; + } + + /** + * EFFECTS: Return "/templates/ %" + */ + @Override + public String getPS1() { + return "/templates/ %"; + } +} |