@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); } } }
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; } }
case RESTART: ReadInterruptionData readInterruptionData = ReadInterruptionData.from(handlerData, input); throw new ReadInterruptionException(readInterruptionData, input); case RETURN: setAction(FLUSH);
throw new ReadInterruptionException(readInterruptionData, unmaskedInput);