3 import Analysis.TaskStateAnalysis.*;
8 public class WebInterface {
9 TaskAnalysis taskanalysis;
11 TagAnalysis taganalysis;
13 Hashtable flagstatemap;
14 Hashtable taskgraphmap;
15 Hashtable sourcenodemap; //to hold the filenames for each of the pages linked to the source nodes.
16 Hashtable taskmap; // to hold the filenames for each of the pages linked to tasks in the program.
17 GarbageAnalysis garbageanalysis;
19 public WebInterface(State state, TaskAnalysis taskanalysis, TaskGraph taskgraph, GarbageAnalysis garbageanalysis, TagAnalysis taganalysis) {
21 this.taskanalysis=taskanalysis;
22 this.taskgraph=taskgraph;
23 this.garbageanalysis=garbageanalysis;
24 this.taganalysis=taganalysis;
26 flagstatemap=new Hashtable();
27 taskgraphmap=new Hashtable();
28 taskmap = new Hashtable();
29 sourcenodemap=new Hashtable();
31 for(Iterator it_tasks=state.getTaskSymbolTable().getDescriptorsIterator(); it_tasks.hasNext(); ) {
32 TaskDescriptor td=(TaskDescriptor)it_tasks.next();
33 taskmap.put("/"+td.getSymbol()+".html",td);
36 for(Iterator it_classes=state.getClassSymbolTable().getDescriptorsIterator(); it_classes.hasNext(); ) {
37 ClassDescriptor cd=(ClassDescriptor) it_classes.next();
39 Vector rootnodes=taskanalysis.getRootNodes(cd);
42 for(Iterator it_rootnodes=rootnodes.iterator(); it_rootnodes.hasNext(); ) {
43 FlagState root=(FlagState)it_rootnodes.next();
44 Vector cd_nodeid=new Vector(); //Vector is designed to contain only 2 elements: ClassDescriptor,Node label
45 // Both the values are required to correctly resolve the rootnode.
46 // Should think of a better way to do this, instead of using a vector(maybe a class)
47 cd_nodeid.addElement(cd); //adding the ClassDescriptor
48 cd_nodeid.addElement(root.getLabel()); //adding the Node label
49 System.out.println(cd+" "+root.getLabel());
50 sourcenodemap.put("/"+cd.getSymbol()+"_"+root.getLabel()+".html",cd_nodeid);
56 public boolean specialRequest(String filename) {
57 System.out.println(filename);
58 if (filename.equals("/index.html"))
60 if (filename.equals("/UnifiedTaskGraph.html"))
62 if (flagstatemap.containsKey(filename))
64 if (taskgraphmap.containsKey(filename))
66 if (taskmap.containsKey(filename))
68 if (sourcenodemap.containsKey(filename))
73 public String handleresponse(String filename, OutputStream out, HTTPResponse resp) {
74 if (filename.equals("/index.html"))
75 return indexpage(out, resp);
76 if (filename.equals("/UnifiedTaskGraph.html"))
77 return unifiedTaskGraph(out,resp);
78 if (flagstatemap.containsKey(filename))
79 return flagstate((ClassDescriptor) flagstatemap.get(filename), out, resp);
80 if (taskgraphmap.containsKey(filename))
81 return taskstate((ClassDescriptor) taskgraphmap.get(filename), out, resp);
82 if (taskmap.containsKey(filename))
83 return task((TaskDescriptor)taskmap.get(filename),out,resp);
84 if (sourcenodemap.containsKey(filename))
85 return sourcenode((Vector) sourcenodemap.get(filename), out, resp);
89 private String task(TaskDescriptor td, OutputStream out, HTTPResponse resp) {
91 PrintWriter pw=new PrintWriter(out);
92 pw.println("<br><br><h3>Task: "+td.toString()+"</h3><br>");
95 //printing out the classes that are instantiated by this task
96 pw.println("<br><h3>Instantiated Classes:</h3>");
97 Set newstates=taganalysis.getFlagStates(td);
98 for(Iterator fsit=newstates.iterator(); fsit.hasNext(); ) {
99 FlagState fsnew=(FlagState) fsit.next();
100 ClassDescriptor cd=fsnew.getClassDescriptor();
101 pw.println(" <a href=\"/"+cd.getSymbol()+".html\">"+cd.getSymbol()+"</a><br>");
102 pw.println(" "+fsnew.getTextLabel()+"<br>");
106 } catch (Exception e) {
107 e.printStackTrace(); System.exit(-1);
112 private String printTask(TaskDescriptor td, PrintWriter pw) {
115 for(int i=0; i < td.numParameters(); i++) {
116 pw.println("FlagState Graph: <a href=\"/"+td.getParamType(i)+".html\">"+td.getParamType(i)+"</a><br>");
117 pw.println("Task Graph: <a href=\"/"+td.getParamType(i)+"-t.html\">"
118 +td.getParamType(i)+"</a><br>");
121 } catch(Exception e) {
122 e.printStackTrace(); System.exit(-1);
127 private String sourcenode(Vector cd_nodeid,OutputStream out, HTTPResponse resp) {
128 Vector rootnodes=taskanalysis.getRootNodes((ClassDescriptor)cd_nodeid.elementAt(0));
129 for(Iterator it_rootnodes=rootnodes.iterator(); it_rootnodes.hasNext(); ) {
130 FlagState root=(FlagState)it_rootnodes.next();
131 if (root.getLabel().equals((String)cd_nodeid.elementAt(1))) {
133 PrintWriter pw=new PrintWriter(out);
134 pw.println("<br><br><h3>Allocating tasks for "+root.getTextLabel()+":</h3><br>");
135 Vector tasks=root.getAllocatingTasks();
136 for(Iterator it_tasks=tasks.iterator(); it_tasks.hasNext(); ) {
137 TaskDescriptor td=(TaskDescriptor)it_tasks.next();
138 pw.println("<br><strong>Task: "+td.toString()+"</strong><br>");
142 } catch (Exception e) {
143 e.printStackTrace(); System.exit(-1);
152 private String flagstate(ClassDescriptor cd, OutputStream out, HTTPResponse resp) {
153 Set objects=taskanalysis.getFlagStates(cd);
154 File file=new File(cd.getSymbol()+".dot");
157 Vector namers=new Vector();
158 namers.add(new Namer());
159 namers.add(garbageanalysis);
160 namers.add(new Allocations());
161 namers.add(new TaskEdges());
164 Runtime r=Runtime.getRuntime();
166 FileOutputStream dotstream=new FileOutputStream(file,false);
167 FlagState.DOTVisitor.visit(dotstream, objects, namers);
169 Process p=r.exec("dot -Tcmapx -o"+cd.getSymbol()+".map -Tjpg -o"+cd.getSymbol()+".jpg "+cd.getSymbol()+".dot");
171 p=r.exec("dot -Tps "+cd.getSymbol()+".dot -o"+cd.getSymbol()+".ps");
174 mapfile=new File(cd.getSymbol()+".map");
175 BufferedReader mapbr=new BufferedReader(new FileReader(mapfile));
176 PrintWriter pw=new PrintWriter(out);
177 pw.println("<a href=\"/"+ cd.getSymbol()+".ps\">ps</a><br>");
178 //pw.println("<a href=\"/"+ cd.getSymbol()+".map\"><img src=\"/"+ cd.getSymbol()+".gif\" ismap=\"ismap\"></A>");
179 pw.println("<img src=\""+cd.getSymbol()+".jpg\" usemap=\"#dotvisitor\" />");
180 while((str=mapbr.readLine())!=null) {
185 } catch (Exception e) {
186 e.printStackTrace(); System.exit(-1);
191 private String taskstate(ClassDescriptor cd, OutputStream out, HTTPResponse resp) {
192 Set objects=taskgraph.getTaskNodes(cd);
193 File file=new File(cd.getSymbol()+"-t.dot");
196 Vector namers=new Vector();
197 namers.add(new Namer());
198 namers.add(new TaskNodeNamer());
202 Runtime r=Runtime.getRuntime();
203 FileOutputStream dotstream=new FileOutputStream(file,false);
204 FlagState.DOTVisitor.visit(dotstream, objects,namers);
206 Process p=r.exec("dot -Tcmapx -o"+cd.getSymbol()+"-t.map -Tjpg -o"+cd.getSymbol()+"-t.jpg "+cd.getSymbol()+"-t.dot");
208 p=r.exec("dot -Tps "+cd.getSymbol()+".dot -o"+cd.getSymbol()+"-t.ps");
212 mapfile=new File(cd.getSymbol()+"-t.map");
213 BufferedReader mapbr=new BufferedReader(new FileReader(mapfile));
214 PrintWriter pw=new PrintWriter(out);
215 pw.println("<a href=\"/"+ cd.getSymbol()+"-t.ps\">ps</a><br>");
216 // pw.println("<a href=\"/"+ cd.getSymbol()+"-t.map\"><img src=\"/"+ cd.getSymbol()+"-t.gif\" ismap=\"ismap\"></A>");
217 pw.println("<img src=\""+cd.getSymbol()+"-t.jpg\" usemap=\"#dotvisitor\" />");
219 while((str=mapbr.readLine())!=null) {
223 } catch (Exception e) {
224 e.printStackTrace(); System.exit(-1);
229 /* public void taskgraph(
232 private String indexpage(OutputStream out, HTTPResponse resp) {
234 PrintWriter pw=new PrintWriter(out);
235 for(Iterator it_classes=state.getClassSymbolTable().getDescriptorsIterator(); it_classes.hasNext(); ) {
236 ClassDescriptor cd=(ClassDescriptor) it_classes.next();
238 if (taskanalysis.getFlagStates(cd)!=null) {
239 pw.println("<a href=\""+cd.getSymbol()+".html\">"+ cd.getSymbol() +"</a>");
241 flagstatemap.put("/"+cd.getSymbol()+".html", cd);
243 if (taskgraph.getTaskNodes(cd)!=null) {
244 pw.println("<a href=\""+cd.getSymbol()+"-t.html\">Task Graph "+ cd.getSymbol() +"</a>");
246 taskgraphmap.put("/"+cd.getSymbol()+"-t.html", cd);
250 pw.println("<br><br><a href=\"/UnifiedTaskGraph.html\">Program flow</a>");
255 private String unifiedTaskGraph(OutputStream out, HTTPResponse resp) {
256 Set objects=taskgraph.getAllTaskNodes();
257 File file=new File("UnifiedTaskGraph.dot");
259 Vector namers=new Vector();
260 namers.add(new Namer());
261 namers.add(new TaskNodeNamer());
265 Runtime r=Runtime.getRuntime();
266 FileOutputStream dotstream=new FileOutputStream(file,false);
267 FlagState.DOTVisitor.visit(dotstream, objects, namers);
269 Process p=r.exec("dot -Tjpg -oUnifiedTaskGraph.jpg -Tcmapx -oUnifiedTaskGraph.map UnifiedTaskGraph.dot");
271 p=r.exec("dot -Tps UnifiedTaskGraph.dot -oUnifiedTaskGraph.ps");
275 File mapfile=new File("UnifiedTaskGraph.map");
276 BufferedReader mapbr=new BufferedReader(new FileReader(mapfile));
277 PrintWriter pw=new PrintWriter(out);
278 pw.println("<a href=\"/UnifiedTaskGraph.ps\">ps</a><br>");
279 // pw.println("<a href=\"/"+ cd.getSymbol()+"-t.map\"><img src=\"/"+ cd.getSymbol()+"-t.gif\" ismap=\"ismap\"></A>");
280 pw.println("<img src=\"/UnifiedTaskGraph.jpg\" usemap=\"#dotvisitor\" />");
282 while((str=mapbr.readLine())!=null)
286 } catch (Exception e) {
287 e.printStackTrace(); System.exit(-1);