Add web interface. It defaults to port 8000.
[IRC.git] / Robust / src / Interface / WebInterface.java
1 package Interface;
2 import java.io.*;
3 import Analysis.TaskStateAnalysis.*;
4 import IR.*;
5 import java.util.*;
6
7 public class WebInterface {
8     TaskAnalysis taskanalysis;
9     TaskGraph taskgraph;
10     State state;
11     Hashtable taskmap;
12     Hashtable taskgraphmap;
13
14     public WebInterface(State state, TaskAnalysis taskanalysis, TaskGraph taskgraph) {
15         this.state=state;
16         this.taskanalysis=taskanalysis;
17         this.taskgraph=taskgraph;
18         taskmap=new Hashtable();
19         taskgraphmap=new Hashtable();
20     }
21     
22     public boolean specialRequest(String filename) {
23         System.out.println(filename);
24         if (filename.equals("/index.html"))
25             return true;
26         if (taskmap.containsKey(filename))
27             return true;
28         if (taskgraphmap.containsKey(filename))
29             return true;
30         return false;
31     }
32
33     public String handleresponse(String filename, BufferedWriter out, HTTPResponse resp) {
34         if (filename.equals("/index.html"))
35             return indexpage(out, resp);
36         if (taskmap.containsKey(filename))
37             return flagstate((ClassDescriptor) taskmap.get(filename), out, resp);
38         if (taskgraphmap.containsKey(filename))
39             return taskstate((ClassDescriptor) taskgraphmap.get(filename), out, resp);
40         return "NORESP";
41     }
42
43     private String flagstate(ClassDescriptor cd, BufferedWriter out, HTTPResponse resp) {
44         Set objects=taskanalysis.getFlagStates(cd);
45         File file=new File(cd.getSymbol()+".dot");
46         try {
47             //Generate jpg
48             Runtime r=Runtime.getRuntime();
49             FileOutputStream dotstream=new FileOutputStream(file,false);
50             FlagState.DOTVisitor.visit(dotstream, objects);
51             dotstream.close();
52             Process p=r.exec("dot -Tjpg "+cd.getSymbol()+".dot -o"+cd.getSymbol()+".jpg");
53             p.waitFor();
54             p=r.exec("dot -Tps "+cd.getSymbol()+".dot -o"+cd.getSymbol()+".ps");
55             p.waitFor();
56
57             PrintWriter pw=new PrintWriter(out);
58             pw.println("<a href=\"/"+ cd.getSymbol()+".ps\">ps</a><br>");
59             pw.println("<img src=\"/"+ cd.getSymbol()+".jpg\">");
60             pw.flush();
61         } catch (Exception e) {e.printStackTrace();System.exit(-1);}
62         return null;
63     }
64
65     private String taskstate(ClassDescriptor cd, BufferedWriter out, HTTPResponse resp) {
66         Set objects=taskgraph.getTaskNodes(cd);
67         File file=new File(cd.getSymbol()+"-t.dot");
68         try {
69             //Generate jpg
70             Runtime r=Runtime.getRuntime();
71             FileOutputStream dotstream=new FileOutputStream(file,false);
72             FlagState.DOTVisitor.visit(dotstream, objects);
73             dotstream.close();
74             Process p=r.exec("dot -Tjpg "+cd.getSymbol()+"-t.dot -o"+cd.getSymbol()+"-t.jpg");
75             p.waitFor();
76             p=r.exec("dot -Tps "+cd.getSymbol()+".dot -o"+cd.getSymbol()+"-t.ps");
77             p.waitFor();
78
79             PrintWriter pw=new PrintWriter(out);
80             pw.println("<a href=\"/"+ cd.getSymbol()+"-t.ps\">ps</a><br>");
81             pw.println("<img src=\"/"+ cd.getSymbol()+"-t.jpg\">");
82             pw.flush();
83         } catch (Exception e) {e.printStackTrace();System.exit(-1);}
84         return null;
85     }
86
87
88     private String indexpage(BufferedWriter out, HTTPResponse resp) {
89         PrintWriter pw=new PrintWriter(out);
90         for(Iterator it_classes=state.getClassSymbolTable().getDescriptorsIterator();it_classes.hasNext();) {
91             ClassDescriptor cd=(ClassDescriptor) it_classes.next();
92             if (taskanalysis.getFlagStates(cd)!=null) {
93                 pw.println("<a href=\""+cd.getSymbol()+".html\">"+ cd.getSymbol() +"</a>");
94                 pw.println("<br>");
95                 taskmap.put("/"+cd.getSymbol()+".html", cd);
96             }
97             if (taskgraph.getTaskNodes(cd)!=null) {
98                 pw.println("<a href=\""+cd.getSymbol()+"-t.html\">"+ cd.getSymbol() +"</a>");
99                 pw.println("<br>");
100                 taskgraphmap.put("/"+cd.getSymbol()+"-t.html", cd);
101             }
102
103         }
104         pw.flush();
105         return null;
106     }
107
108 }