3 import Analysis.TaskStateAnalysis.*;
8 public class WebInterface {
9 TaskAnalysis taskanalysis;
12 Hashtable flagstatemap;
13 Hashtable taskgraphmap;
14 Hashtable sourcenodemap; //to hold the filenames for each of the pages linked to the source nodes.
15 Hashtable taskmap; // to hold the filenames for each of the pages linked to tasks in the program.
16 GarbageAnalysis garbageanalysis;
18 public WebInterface(State state, TaskAnalysis taskanalysis, TaskGraph taskgraph, GarbageAnalysis garbageanalysis) {
20 this.taskanalysis=taskanalysis;
21 this.taskgraph=taskgraph;
22 this.garbageanalysis=garbageanalysis;
24 flagstatemap=new Hashtable();
25 taskgraphmap=new Hashtable();
26 taskmap = new Hashtable();
27 sourcenodemap=new Hashtable();
29 for(Iterator it_tasks=state.getTaskSymbolTable().getDescriptorsIterator();it_tasks.hasNext();){
30 TaskDescriptor td=(TaskDescriptor)it_tasks.next();
31 taskmap.put("/"+td.getSymbol()+".html",td);
34 for(Iterator it_classes=state.getClassSymbolTable().getDescriptorsIterator();it_classes.hasNext();) {
35 ClassDescriptor cd=(ClassDescriptor) it_classes.next();
37 Vector rootnodes=taskanalysis.getRootNodes(cd);
40 for(Iterator it_rootnodes=rootnodes.iterator();it_rootnodes.hasNext();){
41 FlagState root=(FlagState)it_rootnodes.next();
42 Vector cd_nodeid=new Vector(); //Vector is designed to contain only 2 elements: ClassDescriptor,Node label
43 // Both the values are required to correctly resolve the rootnode.
44 // Should think of a better way to do this, instead of using a vector(maybe a class)
45 cd_nodeid.addElement(cd); //adding the ClassDescriptor
46 cd_nodeid.addElement(root.getLabel()); //adding the Node label
47 sourcenodemap.put("/"+cd.getSymbol()+"_"+root.getLabel()+".html",cd_nodeid);
53 public boolean specialRequest(String filename) {
54 System.out.println(filename);
55 if (filename.equals("/index.html"))
57 if (filename.equals("/UnifiedTaskGraph.html"))
59 if (flagstatemap.containsKey(filename))
61 if (taskgraphmap.containsKey(filename))
63 if (taskmap.containsKey(filename))
65 if (sourcenodemap.containsKey(filename))
70 public String handleresponse(String filename, OutputStream out, HTTPResponse resp) {
71 if (filename.equals("/index.html"))
72 return indexpage(out, resp);
73 if (filename.equals("/UnifiedTaskGraph.html"))
74 return unifiedTaskGraph(out,resp);
75 if (flagstatemap.containsKey(filename))
76 return flagstate((ClassDescriptor) flagstatemap.get(filename), out, resp);
77 if (taskgraphmap.containsKey(filename))
78 return taskstate((ClassDescriptor) taskgraphmap.get(filename), out, resp);
79 if (taskmap.containsKey(filename))
80 return task((TaskDescriptor)taskmap.get(filename),out,resp);
81 if (sourcenodemap.containsKey(filename))
82 return sourcenode((Vector) sourcenodemap.get(filename), out, resp);
86 private String task(TaskDescriptor td, OutputStream out, HTTPResponse resp){
88 PrintWriter pw=new PrintWriter(out);
89 pw.println("<br><br><h3>Task: "+td.toString()+"</h3><br>");
92 } catch (Exception e) {e.printStackTrace();System.exit(-1);}
96 private String printTask(TaskDescriptor td, PrintWriter pw){
99 for(int i=0; i < td.numParameters();i++){
100 pw.println("FlagState Graph: <a href=\"/"+td.getParamType(i)+".html\">"+td.getParamType(i)+"</a><br>");
101 pw.println("Task Graph: <a href=\"/"+td.getParamType(i)+"-t.html\">"
102 +td.getParamType(i)+"</a><br>");
105 }catch(Exception e) {e.printStackTrace();System.exit(-1);}
109 private String sourcenode(Vector cd_nodeid,OutputStream out, HTTPResponse resp){
110 Vector rootnodes=taskanalysis.getRootNodes((ClassDescriptor)cd_nodeid.elementAt(0));
111 for(Iterator it_rootnodes=rootnodes.iterator();it_rootnodes.hasNext();){
112 FlagState root=(FlagState)it_rootnodes.next();
113 if (root.getLabel().equals((String)cd_nodeid.elementAt(1))){
115 PrintWriter pw=new PrintWriter(out);
116 pw.println("<br><br><h3>Allocating tasks for "+root.getTextLabel()+":</h3><br>");
117 Vector tasks=root.getAllocatingTasks();
118 for(Iterator it_tasks=tasks.iterator();it_tasks.hasNext();){
119 TaskDescriptor td=(TaskDescriptor)it_tasks.next();
120 pw.println("<br><strong>Task: "+td.toString()+"</strong><br>");
124 } catch (Exception e) {e.printStackTrace();System.exit(-1);}
132 private String flagstate(ClassDescriptor cd, OutputStream out, HTTPResponse resp) {
133 Set objects=taskanalysis.getFlagStates(cd);
134 File file=new File(cd.getSymbol()+".dot");
137 Vector namers=new Vector();
138 namers.add(new Namer());
139 namers.add(garbageanalysis);
140 namers.add(new Allocations());
141 namers.add(new TaskEdges());
144 Runtime r=Runtime.getRuntime();
146 FileOutputStream dotstream=new FileOutputStream(file,false);
147 FlagState.DOTVisitor.visit(dotstream, objects, namers);
149 Process p=r.exec("dot -Tcmapx -o"+cd.getSymbol()+".map -Tjpg -o"+cd.getSymbol()+".jpg "+cd.getSymbol()+".dot");
151 p=r.exec("dot -Tps "+cd.getSymbol()+".dot -o"+cd.getSymbol()+".ps");
154 mapfile=new File(cd.getSymbol()+".map");
155 BufferedReader mapbr=new BufferedReader(new FileReader(mapfile));
156 PrintWriter pw=new PrintWriter(out);
157 pw.println("<a href=\"/"+ cd.getSymbol()+".ps\">ps</a><br>");
158 //pw.println("<a href=\"/"+ cd.getSymbol()+".map\"><img src=\"/"+ cd.getSymbol()+".gif\" ismap=\"ismap\"></A>");
159 pw.println("<img src=\""+cd.getSymbol()+".jpg\" usemap=\"#dotvisitor\" />");
160 while((str=mapbr.readLine())!=null){
165 } catch (Exception e) {e.printStackTrace();System.exit(-1);}
169 private String taskstate(ClassDescriptor cd, OutputStream out, HTTPResponse resp) {
170 Set objects=taskgraph.getTaskNodes(cd);
171 File file=new File(cd.getSymbol()+"-t.dot");
174 Vector namers=new Vector();
175 namers.add(new Namer());
176 namers.add(new TaskNodeNamer());
180 Runtime r=Runtime.getRuntime();
181 FileOutputStream dotstream=new FileOutputStream(file,false);
182 FlagState.DOTVisitor.visit(dotstream, objects,namers);
184 Process p=r.exec("dot -Tcmapx -o"+cd.getSymbol()+"-t.map -Tjpg -o"+cd.getSymbol()+"-t.jpg "+cd.getSymbol()+"-t.dot");
186 p=r.exec("dot -Tps "+cd.getSymbol()+".dot -o"+cd.getSymbol()+"-t.ps");
190 mapfile=new File(cd.getSymbol()+"-t.map");
191 BufferedReader mapbr=new BufferedReader(new FileReader(mapfile));
192 PrintWriter pw=new PrintWriter(out);
193 pw.println("<a href=\"/"+ cd.getSymbol()+"-t.ps\">ps</a><br>");
194 // pw.println("<a href=\"/"+ cd.getSymbol()+"-t.map\"><img src=\"/"+ cd.getSymbol()+"-t.gif\" ismap=\"ismap\"></A>");
195 pw.println("<img src=\""+cd.getSymbol()+"-t.jpg\" usemap=\"#dotvisitor\" />");
197 while((str=mapbr.readLine())!=null){
201 } catch (Exception e) {e.printStackTrace();System.exit(-1);}
205 /* public void taskgraph(
208 private String indexpage(OutputStream out, HTTPResponse resp) {
210 PrintWriter pw=new PrintWriter(out);
211 for(Iterator it_classes=state.getClassSymbolTable().getDescriptorsIterator();it_classes.hasNext();) {
212 ClassDescriptor cd=(ClassDescriptor) it_classes.next();
213 if (taskanalysis.getFlagStates(cd)!=null) {
214 pw.println("<a href=\""+cd.getSymbol()+".html\">"+ cd.getSymbol() +"</a>");
216 flagstatemap.put("/"+cd.getSymbol()+".html", cd);
218 if (taskgraph.getTaskNodes(cd)!=null) {
219 pw.println("<a href=\""+cd.getSymbol()+"-t.html\">Task Graph "+ cd.getSymbol() +"</a>");
221 taskgraphmap.put("/"+cd.getSymbol()+"-t.html", cd);
224 pw.println("<br><br><a href=\"/UnifiedTaskGraph.html\">Program flow</a>");
229 private String unifiedTaskGraph(OutputStream out, HTTPResponse resp){
230 Set objects=taskgraph.getAllTaskNodes();
231 File file=new File("UnifiedTaskGraph.dot");
234 Vector namers=new Vector();
235 namers.add(new Namer());
236 namers.add(new TaskNodeNamer());
240 Runtime r=Runtime.getRuntime();
241 FileOutputStream dotstream=new FileOutputStream(file,false);
242 FlagState.DOTVisitor.visit(dotstream, objects);
244 Process p=r.exec("dot -Tjpg -oUnifiedTaskGraph.jpg UnifiedTaskGraph.dot");
246 p=r.exec("dot -Tps UnifiedTaskGraph.dot -oUnifiedTaskGraph.ps");
250 PrintWriter pw=new PrintWriter(out);
251 pw.println("<a href=\"/UnifiedTaskGraph.ps\">ps</a><br>");
252 // pw.println("<a href=\"/"+ cd.getSymbol()+"-t.map\"><img src=\"/"+ cd.getSymbol()+"-t.gif\" ismap=\"ismap\"></A>");
253 pw.println("<img src=\"/UnifiedTaskGraph.jpg\" />");
256 } catch (Exception e) {e.printStackTrace();System.exit(-1);}