package ui; import model.asn1.exceptions.ParseException; import model.ca.Template; public class TemplateSetScreen implements UIHandler { private final JCA session; /** * EFFECTS: Init with session. */ public TemplateSetScreen(JCA session) { this.session = session; } private Template template; @Override public void help() { System.out.println("show\tView the current template settings\n" + "set\tSet key value\n" + "commit\tSave the template\n" + "exit\tDiscard changes\n" + "help\tPrint this help message\n"); } private void handleSetSubject(String val) { try { template.setSubject(val); } catch (ParseException e) { System.out.println(e.getMessage()); } } private void handleSetValidity(String val) { if (val == null) { System.out.println("Cannot unset validity"); return; } try { long i = Long.parseLong(val); if (i <= 0) { System.out.println("Invalid validity days"); return; } template.setValidity(i); } catch (NumberFormatException ignored) { System.out.println("Invalid validity days"); } } private void handleSet(String... args) { if (args.length != 2 && args.length != 3) { System.out.println("Usage: set "); System.out.println("Supported keys: subject validity"); return; } String val = args.length == 3 ? args[2] : null; switch (args[1]) { case "subject": handleSetSubject(val); break; case "validity": handleSetValidity(val); break; default: System.out.println("Unknown key"); break; } } /** * EFFECTS: Add the template to store and switch to templates screen. * MODIFIES: session */ @Override public void commit() { session.getTemplates().add(template); session.setScreen(Screen.TEMPLATES); session.log("A new template is added."); } /** * EFFECTS: Show template info. */ @Override public void show() { System.out.println("Subject:\t" + template.getSubject()); System.out.println("Validity:\t" + template.getValidity() + " days"); } @Override public void command(String... args) { switch (args[0]) { case "set": handleSet(args); break; default: case "help": help(); break; } } /** * EFFECTS: Return to templates list and clear the current template in editing. */ @Override public Screen exit() { template = null; return Screen.TEMPLATES; } /** * EFFECTS: yuuta@JCA /templates/name/ % */ @Override public String getPS1() { return String.format("/templates/%s/ %%", template.getName()); } /** * EFFECT: Edit args[0]. * REQUIRES: args.length = 1; args[0] instanceof Template * MODIFIES: args[0] */ @Override public void enter(Object... args) { template = (Template) args[0]; } }