KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > debugger > jpda > breakpoints > BreakpointsEngineListener


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.modules.debugger.jpda.breakpoints;
21
22 import java.beans.PropertyChangeListener JavaDoc;
23 import java.util.HashMap JavaDoc;
24 import java.util.Iterator JavaDoc;
25 import java.util.logging.Logger JavaDoc;
26
27 import org.netbeans.api.debugger.Breakpoint;
28 import org.netbeans.api.debugger.DebuggerEngine;
29 import org.netbeans.api.debugger.DebuggerManager;
30 import org.netbeans.api.debugger.DebuggerManagerListener;
31 import org.netbeans.api.debugger.LazyActionsManagerListener;
32 import org.netbeans.api.debugger.jpda.JPDABreakpoint;
33 import org.netbeans.spi.debugger.ContextProvider;
34 import org.netbeans.api.debugger.Session;
35 import org.netbeans.api.debugger.Watch;
36
37 import org.netbeans.api.debugger.jpda.ClassLoadUnloadBreakpoint;
38 import org.netbeans.api.debugger.jpda.ExceptionBreakpoint;
39 import org.netbeans.api.debugger.jpda.FieldBreakpoint;
40 import org.netbeans.api.debugger.jpda.JPDADebugger;
41 import org.netbeans.api.debugger.jpda.LineBreakpoint;
42 import org.netbeans.api.debugger.jpda.MethodBreakpoint;
43 import org.netbeans.api.debugger.jpda.ThreadBreakpoint;
44
45 import org.netbeans.modules.debugger.jpda.SourcePath;
46 import org.netbeans.modules.debugger.jpda.JPDADebuggerImpl;
47
48
49 /**
50  * Listens on JPDADebugger.PROP_STATE and DebuggerManager.PROP_BREAKPOINTS, and
51  * and creates XXXBreakpointImpl classes for all JPDABreakpoints.
52  *
53  * @author Jan Jancura
54  */

55 public class BreakpointsEngineListener extends LazyActionsManagerListener
56 implements PropertyChangeListener JavaDoc, DebuggerManagerListener {
57     
58     private static Logger JavaDoc logger = Logger.getLogger("org.netbeans.modules.debugger.jpda.breakpoints"); // NOI18N
59

60     private JPDADebuggerImpl debugger;
61     private SourcePath engineContext;
62     private boolean started = false;
63     private Session session;
64     private BreakpointsReader breakpointsReader;
65
66
67     public BreakpointsEngineListener (ContextProvider lookupProvider) {
68         debugger = (JPDADebuggerImpl) lookupProvider.lookupFirst
69             (null, JPDADebugger.class);
70         engineContext = (SourcePath) lookupProvider.
71             lookupFirst (null, SourcePath.class);
72         session = (Session) lookupProvider.lookupFirst(null, Session.class);
73         debugger.addPropertyChangeListener (
74             JPDADebugger.PROP_STATE,
75             this
76         );
77         breakpointsReader = PersistenceManager.findBreakpointsReader();
78     }
79     
80     protected void destroy () {
81         debugger.removePropertyChangeListener (
82             JPDADebugger.PROP_STATE,
83             this
84         );
85         DebuggerManager.getDebuggerManager ().removeDebuggerListener (
86             DebuggerManager.PROP_BREAKPOINTS,
87             this
88         );
89         removeBreakpointImpls ();
90     }
91     
92     public String JavaDoc[] getProperties () {
93         return new String JavaDoc[] {"asd"};
94     }
95
96     public void propertyChange (java.beans.PropertyChangeEvent JavaDoc evt) {
97         if (debugger.getState () == JPDADebugger.STATE_RUNNING) {
98             if (started) return;
99             started = true;
100             createBreakpointImpls ();
101             DebuggerManager.getDebuggerManager ().addDebuggerListener (
102                 DebuggerManager.PROP_BREAKPOINTS,
103                 this
104             );
105         }
106         if (debugger.getState () == JPDADebugger.STATE_DISCONNECTED) {
107             removeBreakpointImpls ();
108             started = false;
109             DebuggerManager.getDebuggerManager ().removeDebuggerListener (
110                 DebuggerManager.PROP_BREAKPOINTS,
111                 this
112             );
113         }
114     }
115     
116     public void actionPerformed (Object JavaDoc action) {
117 // if (action == ActionsManager.ACTION_FIX)
118
// fixBreakpointImpls ();
119
}
120
121     public void breakpointAdded (Breakpoint breakpoint) {
122         createBreakpointImpl (breakpoint);
123     }
124
125     public void breakpointRemoved (Breakpoint breakpoint) {
126         removeBreakpointImpl (breakpoint);
127     }
128     
129
130     public Breakpoint[] initBreakpoints () {return new Breakpoint [0];}
131     public void initWatches () {}
132     public void sessionAdded (Session session) {}
133     public void sessionRemoved (Session session) {}
134     public void watchAdded (Watch watch) {}
135     public void watchRemoved (Watch watch) {}
136     public void engineAdded (DebuggerEngine engine) {}
137     public void engineRemoved (DebuggerEngine engine) {}
138
139
140     // helper methods ..........................................................
141

142     private HashMap JavaDoc<Breakpoint, BreakpointImpl> breakpointToImpl = new HashMap JavaDoc<Breakpoint, BreakpointImpl>();
143     
144     
145     private void createBreakpointImpls () {
146         Breakpoint[] bs = DebuggerManager.getDebuggerManager ().getBreakpoints ();
147         int i, k = bs.length;
148         for (i = 0; i < k; i++)
149             createBreakpointImpl (bs [i]);
150     }
151     
152     private void removeBreakpointImpls () {
153         Breakpoint[] bs = DebuggerManager.getDebuggerManager ().getBreakpoints ();
154         int i, k = bs.length;
155         for (i = 0; i < k; i++)
156             removeBreakpointImpl (bs [i]);
157     }
158     
159     public void fixBreakpointImpls () {
160         Iterator JavaDoc<BreakpointImpl> i = breakpointToImpl.values ().iterator ();
161         while (i.hasNext ())
162             i.next ().fixed ();
163     }
164
165     private void createBreakpointImpl (Breakpoint b) {
166         if (breakpointToImpl.containsKey (b)) return;
167         if (b instanceof LineBreakpoint) {
168             breakpointToImpl.put (
169                 b,
170                 new LineBreakpointImpl (
171                     (LineBreakpoint) b,
172                     breakpointsReader,
173                     debugger,
174                     session,
175                     engineContext
176                 )
177             );
178         } else
179         if (b instanceof ExceptionBreakpoint) {
180             breakpointToImpl.put (
181                 b,
182                 new ExceptionBreakpointImpl (
183                     (ExceptionBreakpoint) b,
184                     debugger,
185                     session
186                 )
187             );
188         } else
189         if (b instanceof MethodBreakpoint) {
190             breakpointToImpl.put (
191                 b,
192                 new MethodBreakpointImpl (
193                     (MethodBreakpoint) b,
194                     debugger,
195                     session
196                 )
197             );
198         } else
199         if (b instanceof FieldBreakpoint) {
200             breakpointToImpl.put (
201                 b,
202                 new FieldBreakpointImpl (
203                     (FieldBreakpoint) b,
204                     debugger,
205                     session
206                 )
207             );
208         } else
209         if (b instanceof ThreadBreakpoint) {
210             breakpointToImpl.put (
211                 b,
212                 new ThreadBreakpointImpl (
213                     (ThreadBreakpoint) b,
214                     debugger,
215                     session
216                 )
217             );
218         } else
219         if (b instanceof ClassLoadUnloadBreakpoint) {
220             breakpointToImpl.put (
221                 b,
222                 new ClassBreakpointImpl (
223                     (ClassLoadUnloadBreakpoint) b,
224                     debugger,
225                     session
226                 )
227             );
228         }
229         logger.finer("BreakpointsEngineListener: created impl "+breakpointToImpl.get(b)+" for "+b);
230     }
231
232     private void removeBreakpointImpl (Breakpoint b) {
233         BreakpointImpl impl = breakpointToImpl.get (b);
234         if (impl == null) return;
235         logger.finer("BreakpointsEngineListener: removed impl "+impl+" for "+b);
236         impl.remove ();
237         breakpointToImpl.remove (b);
238     }
239 }
240
Popular Tags