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