001 package nl.cwi.sen1.tide.tool.support; 002 003 import java.util.ArrayList; 004 import java.util.HashMap; 005 import java.util.Iterator; 006 import java.util.List; 007 import java.util.Map; 008 009 import aterm.ATerm; 010 011 public class DebugAdapter 012 { 013 private DebugTool tool; 014 private ATerm dap; 015 private Map<Integer, DebugProcess> processes; 016 private List<DebugAdapterListener> listeners; 017 private Info info; 018 019 //{{{ public DebugAdapter(ATerm dap) 020 021 public DebugAdapter(DebugTool tool, ATerm dap) 022 { 023 this.tool = tool; 024 this.dap = dap; 025 processes = new HashMap<Integer, DebugProcess>(); 026 listeners = new ArrayList<DebugAdapterListener>(); 027 info = new Info("DebugAdapter"); 028 } 029 030 //}}} 031 //{{{ public String getName() 032 033 public String getName() 034 { 035 return dap.toString(); 036 } 037 038 //}}} 039 //{{{ public void event(int pid, int rid, ATerm result) 040 041 public void event(int pid, int rid, ATerm result) 042 { 043 /* 044 Set keys = processes.keySet(); 045 Collection values = processes.values(); 046 047 Iterator itkeys = keys.iterator(); 048 Iterator itvalues = values.iterator(); 049 050 051 System.out.println("<---------------- process listing (dap = "+this.getName()+") ------------------>"); 052 while (itkeys.hasNext()) { 053 System.out.println("--- key: "+itkeys.next()); 054 } 055 while (itvalues.hasNext()) { 056 DebugProcess procje = (DebugProcess) itvalues.next(); 057 System.out.println("--- val: "+procje.getName()); 058 } 059 */ 060 DebugProcess proc = findProcess(pid); 061 /* 062 if (proc==null) { 063 System.out.println("shiiiiiiiiiiiiiiiiiiiiiiiiiiiit geen proc\n"); 064 } 065 System.out.println("<-------------------------------------------------------->"); 066 // System.out.println("[DebugAdapter] event() process: "+proc.getName()+", rid: "+rid+", result: "+result); 067 */ 068 proc.event(rid, result); 069 } 070 071 //}}} 072 073 //{{{ public void removeAllProcesses() 074 075 public void removeAllProcesses() 076 { 077 Iterator<DebugProcess> iter = processes.values().iterator(); 078 while (iter.hasNext()) { 079 DebugProcess process = iter.next(); 080 fireProcessDestroyed(process); 081 } 082 processes.clear(); 083 } 084 085 //}}} 086 //{{{ public void addDebugAdapterListener(DebugAdapterListener listener) 087 088 public void addDebugAdapterListener(DebugAdapterListener listener) 089 { 090 listeners.add(listener); 091 } 092 093 //}}} 094 //{{{ public void removeDebugAdapterListener(DebugAdapterListener listener) 095 096 public void removeDebugAdapterListener(DebugAdapterListener listener) 097 { 098 listeners.remove(listener); 099 } 100 101 //}}} 102 103 //{{{ private DebugProcess findProcess(int pid) 104 105 private DebugProcess findProcess(int pid) 106 { 107 return processes.get(new Integer(pid)); 108 } 109 110 //}}} 111 112 //{{{ public void processCreated(int pid, String name) 113 114 public void processCreated(int pid, String name) 115 { 116 DebugProcess proc = new DebugProcess(this, pid, name); 117 processes.put(new Integer(pid), proc); 118 fireProcessCreated(proc); 119 } 120 121 //}}} 122 //{{{ private void fireProcessCreated(DebugProcess proc) 123 124 private void fireProcessCreated(DebugProcess proc) 125 { 126 DebugAdapterListener listener; 127 128 Iterator<DebugAdapterListener> iter = listeners.iterator(); 129 while (iter.hasNext()) { 130 listener = iter.next(); 131 listener.processCreated(this, proc); 132 } 133 } 134 135 //}}} 136 137 //{{{ public void processDestroyed(int pid) 138 139 public void processDestroyed(int pid) 140 { 141 DebugProcess proc = findProcess(pid); 142 fireProcessDestroyed(proc); 143 System.out.println("===================================================== "+pid+","+proc.getName()+" DESTROYED =============================================="); 144 processes.remove(new Integer(pid)); 145 } 146 147 //}}} 148 //{{{ private void fireProcessDestroyed(DebugProcess proc) 149 150 private void fireProcessDestroyed(DebugProcess proc) 151 { 152 DebugAdapterListener listener; 153 154 Iterator<DebugAdapterListener> iter = listeners.iterator(); 155 while (iter.hasNext()) { 156 listener = iter.next(); 157 listener.processDestroyed(this, proc); 158 } 159 } 160 161 //}}} 162 163 //{{{ public void ruleCreated(int pid, Rule rule) 164 165 public void ruleCreated(int pid, Rule rule) 166 { 167 DebugProcess process = findProcess(pid); 168 process.ruleCreated(rule); 169 } 170 171 //}}} 172 //{{{ public void ruleDeleted(int pid, int rid) 173 174 public void ruleDeleted(int pid, int rid) 175 { 176 DebugProcess process = findProcess(pid); 177 process.ruleDeleted(rid); 178 } 179 180 //}}} 181 //{{{ public void ruleModified(int pid, int rid, port, cond, action, enabled) 182 183 public void ruleModified(int pid, int rid, Port port, Expr cond, Expr action, boolean enabled) 184 { 185 DebugProcess process = findProcess(pid); 186 process.ruleModified(rid, port, cond, action, enabled); 187 } 188 189 //}}} 190 191 //{{{ public void evaluationResult(pid, expr, value, tag) 192 193 public void evaluationResult(int pid, Expr expr, Expr value, String tag) 194 { 195 DebugProcess process = findProcess(pid); 196 process.evaluationResult(expr, value, tag); 197 } 198 199 //}}} 200 201 //{{{ public void requestRuleCreation(pid, port, cond, act, tag) 202 203 public void requestRuleCreation(int pid, Port port, Expr cond, Expr act, String tag, boolean enabled) 204 { 205 tool.requestRuleCreation(dap, pid, port, cond, act, tag, enabled); 206 } 207 208 //}}} 209 //{{{ public void requestRuleDeletion(int pid, Rule rule) 210 211 public void requestRuleDeletion(int pid, Rule rule) 212 { 213 tool.requestRuleDeletion(dap, pid, rule); 214 } 215 216 //}}} 217 //{{{ public void requestRuleModification(pid, rule, port, cond, act, enabled) 218 219 public void requestRuleModification(int pid, Rule rule, Port port, Expr cond, Expr act, boolean enabled) 220 { 221 tool.requestRuleModification(dap, pid, rule, port, cond, act, enabled); 222 } 223 224 //}}} 225 //{{{ public void requestBreak(int pid) 226 227 public void requestBreak(int pid) 228 { 229 tool.requestBreak(dap, pid); 230 } 231 232 //}}} 233 //{{{ public void requestResume(int pid) 234 235 public void requestResume(int pid) 236 { 237 info.info("requestResume: " + pid); 238 tool.requestResume(dap, pid); 239 } 240 241 //}}} 242 //{{{ public void requestEvaluation(int pid, Expr expr, String tag) 243 244 public void requestEvaluation(int pid, Expr expr, String tag) 245 { 246 info.info("requestEvaluation: " + pid + "," + expr + "," + tag); 247 tool.requestEvaluation(dap, pid, expr, tag); 248 } 249 250 //}}} 251 } 252