X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=samples%2Fbsh%2Fsrc%2Fdolda%2Fbsvc%2FShellPage.java;h=aa9f2c89cbcfef1441dc28acf0e97e8f5a91952a;hb=f997a53abaaaaa01ea1a7ae45ac576e41b5d886b;hp=c26998e337eca7abe646f5958bb14f8eda079239;hpb=123ab71b482616cb75f7b22c9d299f340d6a1a82;p=jsvc.git diff --git a/samples/bsh/src/dolda/bsvc/ShellPage.java b/samples/bsh/src/dolda/bsvc/ShellPage.java index c26998e..aa9f2c8 100644 --- a/samples/bsh/src/dolda/bsvc/ShellPage.java +++ b/samples/bsh/src/dolda/bsvc/ShellPage.java @@ -2,71 +2,23 @@ package dolda.bsvc; import dolda.jsvc.*; import dolda.jsvc.util.*; +import dolda.jsvc.next.*; +import org.w3c.dom.*; import java.io.*; import bsh.Interpreter; -public class ShellPage extends SimpleWriter { +public class ShellPage implements Responder { private Console cons = new Console(); private Interpreter ip = new Interpreter(cons); - private static class Console implements bsh.ConsoleInterface { - ByteArrayOutputStream obuf = new ByteArrayOutputStream(); - ByteArrayOutputStream ebuf = new ByteArrayOutputStream(); - Reader in = new StringReader(""); - PrintStream out; - PrintStream err; - { - try { - out = new PrintStream(obuf, false, "UTF-8"); - err = new PrintStream(ebuf, false, "UTF-8"); - } catch(UnsupportedEncodingException e) { - throw(new Error(e)); - } - } - - public void error(Object msg) { - getErr().println(msg); - } - - public void print(Object o) { - getOut().print(o); - } - - public void println(Object o) { - getOut().println(o); - } - - public PrintStream getOut() { - return(out); - } - - public PrintStream getErr() { - return(err); - } - - public Reader getIn() { - return(in); - } - - public void reset() { - obuf.reset(); - ebuf.reset(); - } - } - - public void respond(Request req, PrintWriter out) { + public void respond(Request req) { MultiMap params = req.params(); String cmd = params.get("cmd"); - out.println(""); - out.println(""); - out.println(""); - out.println(""); - out.println("Shell"); - out.println(""); - out.println(""); - out.println(""); - out.println("

Shell

"); + Html buf = Html.xhtml11("Shell"); + buf.addcss("css", null); + buf.insert("body", buf.el("h1", buf.text("Shell"))); + if((req.method() == "POST") && (cmd != null)) { String eo, ee; synchronized(cons) { @@ -75,47 +27,40 @@ public class ShellPage extends SimpleWriter { try { ip.set("req", req); resp = ip.eval(cmd); - out.println("
");
-		    out.println(Misc.htmlq((resp == null)?"(null)":(resp.toString())));
-		    out.println("
"); + buf.insert("body", buf.el("pre", buf.text((resp == null)?"(null)":(resp.toString())))); } catch(bsh.EvalError exc) { - out.println("

Evaluation error

"); - out.println("
");
-		    out.print(exc.toString());
-		    out.println("
"); + buf.insert("body", buf.el("h2", buf.text("Evaluation error"))); + buf.insert("body", buf.el("pre", buf.text(exc.toString()))); if(exc instanceof bsh.TargetError) { bsh.TargetError te = (bsh.TargetError)exc; - out.println("

Target error

"); - out.println("
");
-			te.getTarget().printStackTrace(out);
-			out.println("
"); + buf.insert("body", buf.el("h3", buf.text("Target error"))); + StringWriter sbuf = new StringWriter(); + te.getTarget().printStackTrace(new PrintWriter(sbuf)); + buf.insert("body", buf.el("pre", buf.text(sbuf.toString()))); } } eo = new String(cons.obuf.toByteArray(), Misc.utf8); ee = new String(cons.ebuf.toByteArray(), Misc.utf8); } if(eo.length() > 0) { - out.println("

Output

"); - out.println("
");
-		out.println(Misc.htmlq(eo));
-		out.println("
"); + buf.insert("body", buf.el("h2", buf.text("Output"))); + buf.insert("body", buf.el("pre", buf.text(eo))); } if(ee.length() > 0) { - out.println("

Errors

"); - out.println("
");
-		out.println(Misc.htmlq(ee));
-		out.println("
"); + buf.insert("body", buf.el("h2", buf.text("Errors"))); + buf.insert("body", buf.el("pre", buf.text(ee))); } } - out.println("
"); - out.println(""); - out.println(""); - out.println(""); - out.println("
"); - out.println(""); - out.println(""); + + Element form; + buf.insert("body", buf.el("form", form = buf.el("p", null), "action=sh", "method=post")); + form.appendChild(buf.el("textarea", buf.text(cmd), "cols=80", "rows=5", "name=cmd")); + form.appendChild(buf.el("input", null, "type=submit", "value=Evaluate")); + form.appendChild(buf.el("input", null, "type=reset", "value=Reset")); + try { + buf.output(req); + } catch(IOException e) { + throw(new RuntimeException(e)); + } } }