Newer
Older
KeeperJerry_Launcher / LaunchServer / source / command / handler / JLineCommandHandler.java
package launchserver.command.handler;

import java.io.IOException;

import jline.console.ConsoleReader;
import launcher.helper.LogHelper;
import launchserver.LaunchServer;
import org.fusesource.jansi.Ansi;

public final class JLineCommandHandler extends CommandHandler {
	private final ConsoleReader reader;

	public JLineCommandHandler(LaunchServer server) throws IOException {
		super(server);

		// Set reader
		reader = new ConsoleReader();
		reader.setExpandEvents(false);

		// Replace writer
		LogHelper.removeStdOutput();
		LogHelper.addOutput(new JLineOutput());
	}

	@Override
	public void bell() throws IOException {
		reader.beep();
	}

	@Override
	public void clear() throws IOException {
		reader.clearScreen();
	}

	@Override
	public String readLine() throws IOException {
		return reader.readLine("> ");
	}

	private final class JLineOutput implements LogHelper.Output {
		private final String ANSI_RESET = LogHelper.JANSI ?
			Ansi.ansi().reset().toString() : "\u0027[m";

		@Override
		public void println(String message) {
			try {
				reader.println(ConsoleReader.RESET_LINE + message + ANSI_RESET);
				reader.drawLine();
				reader.flush();
			} catch (IOException ignored) {
				// Ignored
			}
		}
	}
}