/**
* Copyright (c) Red Hat, Inc., contributors and others 2013 - 2014. All rights reserved
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.tools.aesh.example;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.text.ITextViewer;
import org.jboss.aesh.cl.builder.CommandBuilder;
import org.jboss.aesh.cl.builder.OptionBuilder;
import org.jboss.aesh.cl.exception.CommandLineParserException;
import org.jboss.aesh.cl.exception.OptionParserException;
import org.jboss.aesh.cl.internal.ProcessedCommand;
import org.jboss.aesh.console.AeshConsoleBuilder;
import org.jboss.aesh.console.Prompt;
import org.jboss.aesh.console.command.Command;
import org.jboss.aesh.console.command.CommandResult;
import org.jboss.aesh.console.command.invocation.CommandInvocation;
import org.jboss.aesh.console.command.registry.AeshCommandRegistryBuilder;
import org.jboss.aesh.console.command.registry.CommandRegistry;
import org.jboss.aesh.console.settings.Settings;
import org.jboss.aesh.console.settings.SettingsBuilder;
import org.jboss.aesh.terminal.CharacterType;
import org.jboss.aesh.terminal.Color;
import org.jboss.aesh.terminal.TerminalCharacter;
import org.jboss.aesh.terminal.TerminalColor;
import org.jboss.tools.aesh.core.console.AbstractConsole;
public class ExampleConsole extends AbstractConsole {
private org.jboss.aesh.console.AeshConsole console;
private ITextViewer textViewer;
public ExampleConsole(ITextViewer textViewer) {
this.textViewer = textViewer;
}
public void start() {
createAeshConsole();
console.start();
}
public void stop() {
console.stop();
}
private void createAeshConsole() {
ProcessedCommand fooCommand;
try {
fooCommand = new CommandBuilder()
.name("foo")
.description("fooing")
.addOption(
new OptionBuilder().name("bar")
.addDefaultValue("en 1 0")
.addDefaultValue("to 2 0").fieldName("bar")
.type(String.class).create())
.generateCommand();
CommandRegistry registry = new AeshCommandRegistryBuilder()
.command(fooCommand, FooCommand.class).create();
console = new AeshConsoleBuilder().commandRegistry(registry)
.settings(createAeshSettings()).prompt(createPrompt())
.create();
} catch (OptionParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CommandLineParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private Prompt createPrompt() {
List<TerminalCharacter> chars = new ArrayList<>();
chars.add(new TerminalCharacter('[', new TerminalColor(Color.DEFAULT, Color.BLUE)));
chars.add(new TerminalCharacter('t', new TerminalColor(Color.DEFAULT, Color.RED),
CharacterType.ITALIC));
chars.add(new TerminalCharacter('e', new TerminalColor(Color.DEFAULT, Color.RED),
CharacterType.INVERT));
chars.add(new TerminalCharacter('s', new TerminalColor(Color.DEFAULT, Color.RED),
CharacterType.CROSSED_OUT));
chars.add(new TerminalCharacter('t', new TerminalColor(Color.DEFAULT, Color.RED),
CharacterType.BOLD));
chars.add(new TerminalCharacter(']', new TerminalColor(Color.DEFAULT, Color.BLUE),
CharacterType.FAINT));
chars.add(new TerminalCharacter('$', new TerminalColor(Color.DEFAULT,
Color.WHITE), CharacterType.UNDERLINE));
chars.add(new TerminalCharacter(' ', new TerminalColor(Color.DEFAULT, Color.WHITE)));
return new Prompt(chars);
}
// this command use a builder defined above to specify the meta data needed
public static class FooCommand implements Command<CommandInvocation> {
private String bar;
@Override
public CommandResult execute(CommandInvocation commandInvocation)
throws IOException {
if (bar == null)
commandInvocation.getShell().out().println("NO BAR!");
else
commandInvocation.getShell().out()
.println("you set bar to: " + bar);
return CommandResult.SUCCESS;
}
}
private Settings createAeshSettings() {
return new SettingsBuilder()
.inputStream(getInputStream())
.outputStream(new PrintStream(getOutputStream()))
.outputStreamError(new PrintStream(getErrorStream()))
.terminal(new ExampleTerminal(textViewer))
.create();
}
}