package aQute.remote.agent; import java.io.IOException; import java.io.PrintStream; import org.apache.felix.service.command.CommandSession; import org.apache.felix.service.command.Converter; /** * A redirector that redirects the input of a Gogo Command Processor */ public class Shell extends RedirectInput { CommandSession session; PrintStream out; boolean running; public void open(CommandSession session) { this.session = session; this.out = session.getConsole(); prompt(); } private void prompt() { CharSequence prompt; try { Object value = session.get("prompt"); if (value instanceof CharSequence) { value = session.execute((CharSequence) value); } if (value != null) { prompt = session.format(value, Converter.LINE); } else { prompt = "> "; } } catch (Exception e) { prompt = "> "; } this.out.print(prompt); this.out.flush(); } public void close() { } public synchronized void add(String s) throws IOException { if (running) super.add(s); else { running = true; try { Object result = session.execute(s); if (result != null) { out.println(session.format(result, Converter.INSPECT)); } } catch (Exception e) { e.printStackTrace(out); } finally { running = false; } this.out.flush(); prompt(); } } }