package de.codeshelf.consoleui.prompt.renderer; import de.codeshelf.consoleui.elements.ConfirmChoice; import de.codeshelf.consoleui.elements.InputValue; import de.codeshelf.consoleui.elements.items.ConsoleUIItemIF; import de.codeshelf.consoleui.elements.items.impl.CheckboxItem; import de.codeshelf.consoleui.elements.items.impl.ChoiceItem; import de.codeshelf.consoleui.elements.items.impl.ListItem; import de.codeshelf.consoleui.elements.items.impl.Separator; import org.fusesource.jansi.Ansi; import java.util.ResourceBundle; import static org.fusesource.jansi.Ansi.ansi; /** * User: Andreas Wegmann * Date: 01.01.16 */ public class CUIRenderer { //private final String cursorSymbol = ansi().fg(Ansi.Color.CYAN).a("\uF078> ").toString(); private final String cursorSymbol; private final String noCursorSpace; private final String uncheckedBox; private final String checkedBox; private final String line; private static CUIRenderer renderer = new CUIRenderer(); private final ResourceBundle resourceBundle; public CUIRenderer() { String os = System.getProperty("os.name"); if( os.startsWith("Windows") ) { checkedBox = "(*) "; uncheckedBox = "( ) "; line = "---------"; cursorSymbol = ansi().fg(Ansi.Color.CYAN).a("> ").toString(); noCursorSpace = ansi().fg(Ansi.Color.DEFAULT).a(" ").toString(); } else { checkedBox = "\u25C9 "; uncheckedBox = "\u25EF "; line = "\u2500─────────────"; cursorSymbol = ansi().fg(Ansi.Color.CYAN).a("\u276F ").toString(); noCursorSpace = ansi().fg(Ansi.Color.DEFAULT).a(" ").toString(); } resourceBundle = ResourceBundle.getBundle("consoleui_messages"); } public static CUIRenderer getRenderer() { return renderer; } public String render(ConsoleUIItemIF item, boolean withCursor) { if (item instanceof CheckboxItem) { CheckboxItem checkboxItem = (CheckboxItem) item; String prefix; if (withCursor) { prefix = cursorSymbol; } else { prefix = noCursorSpace; } return prefix + ansi() .fg(checkboxItem.isEnabled() ? Ansi.Color.GREEN : Ansi.Color.WHITE) .a(checkboxItem.isChecked() ? checkedBox : uncheckedBox) .reset().a(checkboxItem.getText() + (checkboxItem.isDisabled() ? " (" + checkboxItem.getDisabledText() + ")" : "") ).reset().toString(); } if (item instanceof ListItem) { ListItem listItem = (ListItem) item; if (withCursor) { return cursorSymbol + ansi() .fg(Ansi.Color.CYAN).a(listItem.getText() ).reset().toString(); } else { return noCursorSpace + ansi() .fg(Ansi.Color.DEFAULT).a(listItem.getText() ).reset().toString(); } } if (item instanceof ChoiceItem) { ChoiceItem checkboxItem = (ChoiceItem) item; if (withCursor) { return cursorSymbol + ansi() .fg(Ansi.Color.CYAN).a(checkboxItem.getKey() + " - " + checkboxItem.getMessage()).reset().toString(); } else return noCursorSpace + ansi() .fg(Ansi.Color.DEFAULT).a(checkboxItem.getKey() + " - " + checkboxItem.getMessage()).reset().toString(); } if (item instanceof Separator) { Separator separator = (Separator) item; return ansi().fg(Ansi.Color.WHITE).a( separator.getMessage() != null ? separator.getMessage() : line).reset().toString(); } return ""; } public String renderOptionalDefaultValue(InputValue inputElement) { if (inputElement.getDefaultValue() != null) { return " (" + inputElement.getDefaultValue() + ") "; } return " "; } public String renderValue(InputValue inputElement) { if (inputElement.getValue() != null) { return inputElement.getValue(); } return ""; } public String renderConfirmChoiceOptions(ConfirmChoice confirmChoice) { if (confirmChoice.getDefaultConfirmation() == ConfirmChoice.ConfirmationValue.YES) { return resourceBundle.getString("confirmation_yes_default"); } else if (confirmChoice.getDefaultConfirmation() == ConfirmChoice.ConfirmationValue.NO) { return resourceBundle.getString("confirmation_no_default"); } return resourceBundle.getString("confirmation_without_default"); } }