3 import Analysis.TaskStateAnalysis.*;
8 public class WebInterface {
9 TaskAnalysis taskanalysis;
13 Hashtable taskgraphmap;
14 GarbageAnalysis garbageanalysis;
16 public WebInterface(State state, TaskAnalysis taskanalysis, TaskGraph taskgraph, GarbageAnalysis garbageanalysis) {
18 this.taskanalysis=taskanalysis;
19 this.taskgraph=taskgraph;
20 this.garbageanalysis=garbageanalysis;
22 taskmap=new Hashtable();
23 taskgraphmap=new Hashtable();
26 public boolean specialRequest(String filename) {
27 System.out.println(filename);
28 if (filename.equals("/index.html"))
30 if (taskmap.containsKey(filename))
32 if (taskgraphmap.containsKey(filename))
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);
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());
56 Runtime r=Runtime.getRuntime();
57 FileOutputStream dotstream=new FileOutputStream(file,false);
58 FlagState.DOTVisitor.visit(dotstream, objects, namers);
60 Process p=r.exec("dot -Tjpg "+cd.getSymbol()+".dot -o"+cd.getSymbol()+".jpg");
62 p=r.exec("dot -Tps "+cd.getSymbol()+".dot -o"+cd.getSymbol()+".ps");
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\">");
69 } catch (Exception e) {e.printStackTrace();System.exit(-1);}
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");
78 Runtime r=Runtime.getRuntime();
79 FileOutputStream dotstream=new FileOutputStream(file,false);
80 FlagState.DOTVisitor.visit(dotstream, objects);
82 Process p=r.exec("dot -Tjpg "+cd.getSymbol()+"-t.dot -o"+cd.getSymbol()+"-t.jpg");
84 p=r.exec("dot -Tps "+cd.getSymbol()+".dot -o"+cd.getSymbol()+"-t.ps");
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\">");
91 } catch (Exception e) {e.printStackTrace();System.exit(-1);}
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>");
103 taskmap.put("/"+cd.getSymbol()+".html", cd);
105 if (taskgraph.getTaskNodes(cd)!=null) {
106 pw.println("<a href=\""+cd.getSymbol()+"-t.html\">"+ cd.getSymbol() +"</a>");
108 taskgraphmap.put("/"+cd.getSymbol()+"-t.html", cd);