/*
* Copyright (c) 2009-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.planet57.gshell.util.io;
import org.jline.reader.LineReader;
import org.jline.reader.LineReaderBuilder;
import org.jline.terminal.Terminal;
import org.sonatype.goodies.common.ComponentSupport;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Helper to prompt user for information.
*
* @since 3.0
*/
public class PromptHelper
extends ComponentSupport
{
private LineReader lineReader;
public PromptHelper(final Terminal terminal) {
checkNotNull(terminal);
this.lineReader = LineReaderBuilder.builder()
.terminal(terminal)
.build();
}
public String readLine() {
log.trace("Read-line");
return lineReader.readLine();
}
public String readLine(final String prompt) {
checkNotNull(prompt);
log.trace("Read-line; prompt={}", prompt);
return lineReader.readLine(prompt);
}
public String readLine(final String prompt, final Character mask) {
checkNotNull(prompt);
checkNotNull(mask);
log.trace("Read-line; prompt={}, mask={}", prompt, mask);
return lineReader.readLine(prompt, mask);
}
/**
* Ask a question which results in a boolean result.
*/
public boolean askBoolean(final String question) {
checkNotNull(question);
log.trace("Ask boolean; question={}", question);
String result = readLine(String.format("%s (yes/no): ", question));
return result.equalsIgnoreCase("yes");
}
}