9b62ce3d79aeef78c37f37687e01bf5aaa2c0b42
[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         namers.add(new Allocations());
54         try {
55             //Generate jpg
56             Runtime r=Runtime.getRuntime();
57             FileOutputStream dotstream=new FileOutputStream(file,false);
58             FlagState.DOTVisitor.visit(dotstream, objects, namers);
59             dotstream.close();
60             Process p=r.exec("dot -Tjpg "+cd.getSymbol()+".dot -o"+cd.getSymbol()+".jpg");
61             p.waitFor();
62             p=r.exec("dot -Tps "+cd.getSymbol()+".dot -o"+cd.getSymbol()+".ps");
63             p.waitFor();
64
65             PrintWriter pw=new PrintWriter(out);
66             pw.println("<a href=\"/"+ cd.getSymbol()+".ps\">ps</a><br>");
67             pw.println("<img src=\"/"+ cd.getSymbol()+".jpg\">");
68             pw.flush();
69         } catch (Exception e) {e.printStackTrace();System.exit(-1);}
70         return null;
71     }
72
73     private String taskstate(ClassDescriptor cd, BufferedWriter out, HTTPResponse resp) {
74         Set objects=taskgraph.getTaskNodes(cd);
75         File file=new File(cd.getSymbol()+"-t.dot");
76         try {
77             //Generate jpg
78             Runtime r=Runtime.getRuntime();
79             FileOutputStream dotstream=new FileOutputStream(file,false);
80             FlagState.DOTVisitor.visit(dotstream, objects);
81             dotstream.close();
82             Process p=r.exec("dot -Tjpg "+cd.getSymbol()+"-t.dot -o"+cd.getSymbol()+"-t.jpg");
83             p.waitFor();
84             p=r.exec("dot -Tps "+cd.getSymbol()+".dot -o"+cd.getSymbol()+"-t.ps");
85             p.waitFor();
86
87             PrintWriter pw=new PrintWriter(out);
88             pw.println("<a href=\"/"+ cd.getSymbol()+"-t.ps\">ps</a><br>");
89             pw.println("<img src=\"/"+ cd.getSymbol()+"-t.jpg\">");
90             pw.flush();
91         } catch (Exception e) {e.printStackTrace();System.exit(-1);}
92         return null;
93     }
94
95
96     private String indexpage(BufferedWriter out, HTTPResponse resp) {
97         PrintWriter pw=new PrintWriter(out);
98         for(Iterator it_classes=state.getClassSymbolTable().getDescriptorsIterator();it_classes.hasNext();) {
99             ClassDescriptor cd=(ClassDescriptor) it_classes.next();
100             if (taskanalysis.getFlagStates(cd)!=null) {
101                 pw.println("<a href=\""+cd.getSymbol()+".html\">"+ cd.getSymbol() +"</a>");
102                 pw.println("<br>");
103                 taskmap.put("/"+cd.getSymbol()+".html", cd);
104             }
105             if (taskgraph.getTaskNodes(cd)!=null) {
106                 pw.println("<a href=\""+cd.getSymbol()+"-t.html\">Task Graph "+ cd.getSymbol() +"</a>");
107                 pw.println("<br>");
108                 taskgraphmap.put("/"+cd.getSymbol()+"-t.html", cd);
109             }
110         }
111         pw.flush();
112         return null;
113     }
114
115 }