public static ReadInterruptionData from(ReadHandlerData handlerData, String partialInput) { Function<String, String> valueProvider = handlerData.getReturnValueProvider(); String retVal = (valueProvider == null) ? null : valueProvider.apply(partialInput); return new ReadInterruptionData(handlerData.getAction()) .withRedrawRequired(handlerData.isRedrawRequired()) .withPayload(handlerData.getPayload()) .withReturnValue(retVal); }
protected String readWithPrompt(TextTerminal<?> textTerminal, List<String> prompt) { printPrompt(prompt, textTerminal); while(true) { String sInput = null; try { sInput = textTerminal.read(inputMasking); } catch (ReadInterruptionException e) { ReadInterruptionData data = e.getReadInterruptionData(); logger.debug("ReadInterruptionException with data: " + data); switch (data.getAction()) { case CONTINUE: logger.error("ReadInterruptionException with action CONTINUE."); // no break here: handle it as RESTART case RESTART: if(data.isRedrawRequired()) { logger.trace("Re-printing prompt before read restart"); textTerminal.println(); printPrompt(prompt, textTerminal); logger.trace("Prompt re-printed."); } continue; case RETURN: return data.getReturnValue(); case ABORT: throw new ReadAbortedException(data.getPayload(), e.getPartialInput()); } } return sInput; } }
@Override public void actionPerformed(ActionEvent e) { CursorBuffer buf = textTerminal.reader.getCursorBuffer(); String partialInput = buf.buffer.toString(); buf.clear(); ReadHandlerData handlerData = handler.apply(textTerminal); ReadInterruptionStrategy.Action action = handlerData.getAction(); if(action == CONTINUE) { buf.write(partialInput); } else { if(action == RESTART) { textTerminal.initialReadBuffer = partialInput; } ReadInterruptionData interruptData = ReadInterruptionData.from(handlerData, partialInput); throw new ReadInterruptionException(interruptData, partialInput); } } }
continue; case RESTART: ReadInterruptionData readInterruptionData = ReadInterruptionData.from(handlerData, input); throw new ReadInterruptionException(readInterruptionData, input); case RETURN:
savedUnmaskedInput = currentUnmaskedInput; ReadInterruptionData readInterruptionData = ReadInterruptionData.from(data, unmaskedInput); throw new ReadInterruptionException(readInterruptionData, unmaskedInput);