cdb562464c93613c20195b6452317f020af52425
[sbp.git] / src / edu / berkeley / sbp / misc / ParserServlet.java
1 package edu.berkeley.sbp.misc;
2 import edu.berkeley.sbp.util.*;
3 import edu.berkeley.sbp.*;
4 import edu.berkeley.sbp.chr.*;
5 import java.util.*;
6 import java.io.*;
7 import javax.servlet.*;
8 import javax.servlet.http.*;
9 import java.io.*;
10 import java.net.*;
11 import java.util.*;
12
13 public class ParserServlet extends HttpServlet {
14
15     public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException {
16         doPost(req, resp);
17     }
18     public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException {
19         try {
20         try {
21             System.out.println("a");
22            
23             Tree<String> gram =
24                 new CharParser(MetaGrammar.make()).parse(new StringReader(req.getParameter("grammar").trim())).expand1();
25             System.out.println("b");
26             Union meta = MetaGrammar.make();
27             Forest<String> out = new CharParser(meta).parse(new StringReader(req.getParameter("input").trim()));
28             System.out.println(out);
29             
30             final GraphViz gv = new GraphViz();
31             out.toGraphViz(gv);
32
33             resp.setContentType("image/svg+xml");
34             final Process proc = Runtime.getRuntime().exec(new String[] { "dot", "-Tsvg" });
35             new Thread() {
36                 public void run() {
37                     try {
38                         PrintWriter pw = new PrintWriter(new OutputStreamWriter(proc.getOutputStream()));
39                         gv.dump(pw);
40                         pw.flush();
41                         pw.close();
42                     } catch (Exception e) {
43                         e.printStackTrace(); 
44                    }
45                 }
46             }.start();
47
48             byte[] buf = new byte[1024];
49             InputStream is = proc.getInputStream();
50             OutputStream os = resp.getOutputStream();
51
52             while(true) {
53                 int numread = is.read(buf, 0, buf.length);
54                 if (numread==-1) break;
55                 os.write(buf, 0, numread);
56             }
57             os.flush();
58             os.close();
59
60         } catch (ParseFailed e) {
61             e.printStackTrace();
62             resp.setContentType("text/plain");
63             PrintWriter pw = new PrintWriter(new OutputStreamWriter(resp.getOutputStream()));
64             pw.println(e);
65             pw.flush();
66             pw.close();
67         }
68         
69         } catch (Exception e) {
70             throw new ServletException(e);
71         }
72     }
73
74 }