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