package com.jakeapp.gui.console.commandline;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.LinkedList;
import java.util.List;
public class CmdManager {
private List<Command> commands = new LinkedList<Command>();
private boolean status_ok = true;
public CmdManager(){
commands.add(new Command(){
@Override
public String getHelpString() {
return "get this clutter";
}
@Override
public String getSyntaxString() {
return "help | ?";
}
@Override
public boolean handleLine(String line) {
if(line.equals("help") || line.equals("?")){
help();
return true;
}
return false;
}
});
}
public void registerCommand(Command c) {
commands.add(c);
}
public void handle(InputStream in) throws IOException {
LineNumberReader lnr = new LineNumberReader(new InputStreamReader(in));
status_ok = true;
while (status_ok) {
System.out.flush();
System.err.flush();
System.out.print("> ");
String line = lnr.readLine();
if(line == null)
break;
echo(in, line);
handleLine(line.trim());
}
}
private void echo(InputStream in, String line) {
if(in != System.in){
System.out.println(line.trim());
}
}
public void handleLine(String line) {
for (Command c : commands) {
if (c.handleLine(line))
return;
}
System.out.println("Unknown command: " + line);
help();
}
public void help() {
System.out.println("SYNTAX: ");
for (Command c : commands) {
System.out.println("\t" + c.getSyntaxString());
System.out.println("\t\t" + c.getHelpString());
}
}
public void stop() {
status_ok = false;
}
}