001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.api.debugger.jpda;
043:
044: /**
045: * Notifies about class load and class unload events.
046: *
047: * <br><br>
048: * <b>How to use it:</b>
049: * <pre style="background-color: rgb(255, 255, 153);">
050: * DebuggerManager.addBreakpoint (ClassLoadUnloadBreakpoint.create (
051: * "org.netbeans.modules.editor.*",
052: * false,
053: * ClassLoadUnloadBreakpoint.TYPE_CLASS_LOADED
054: * ));</pre>
055: * This breakpoint stops when some class from org.netbeans.modules.editor
056: * package is loaded.
057: *
058: * @author Jan Jancura
059: */
060: public final class ClassLoadUnloadBreakpoint extends JPDABreakpoint {
061:
062: /** Property name constant */
063: public static final String PROP_CLASS_FILTERS = "classFilters"; // NOI18N
064: /** Property name constant */
065: public static final String PROP_CLASS_EXCLUSION_FILTERS = "classExclusionFilters"; // NOI18N
066: /** Name of property for breakpoint type. */
067: public static final String PROP_BREAKPOINT_TYPE = "breakpointType"; // NOI18N
068:
069: /** Catch type property value constant. */
070: public static final int TYPE_CLASS_LOADED = 1;
071: /** Catch type property value constant. */
072: public static final int TYPE_CLASS_UNLOADED = 2;
073: /** Catch type property value constant. */
074: public static final int TYPE_CLASS_LOADED_UNLOADED = 3;
075:
076: /** Property variable. */
077: private int type = TYPE_CLASS_LOADED;
078: private String[] classFilters = new String[0];
079: private String[] classExclusionFilters = new String[0];
080:
081: private ClassLoadUnloadBreakpoint() {
082: }
083:
084: /**
085: * Creates a new breakpoint for given parameters.
086: *
087: * @param classNameFilter class name filter
088: * @param isExclusionFilter if true filter is used as exclusion filter
089: * @param breakpointType one of constants: TYPE_CLASS_LOADED,
090: * TYPE_CLASS_UNLOADED, TYPE_CLASS_LOADED_UNLOADED
091: * @return a new breakpoint for given parameters
092: */
093: public static ClassLoadUnloadBreakpoint create(
094: String classNameFilter, boolean isExclusionFilter,
095: int breakpointType) {
096: ClassLoadUnloadBreakpoint b = new ClassLoadUnloadBreakpoint();
097: if (isExclusionFilter)
098: b
099: .setClassExclusionFilters(new String[] { classNameFilter });
100: else
101: b.setClassFilters(new String[] { classNameFilter });
102: b.setBreakpointType(breakpointType);
103: return b;
104: }
105:
106: /**
107: * Creates a new breakpoint for given parameters.
108: *
109: * @param breakpointType one of constants: TYPE_CLASS_LOADED,
110: * TYPE_CLASS_UNLOADED, TYPE_CLASS_LOADED_UNLOADED
111: * @return a new breakpoint for given parameters
112: */
113: public static ClassLoadUnloadBreakpoint create(int breakpointType) {
114: ClassLoadUnloadBreakpoint b = new ClassLoadUnloadBreakpoint();
115: b.setBreakpointType(breakpointType);
116: return b;
117: }
118:
119: /**
120: * Returns type of breakpoint.
121: *
122: * @return type of breakpoint
123: */
124: public int getBreakpointType() {
125: return type;
126: }
127:
128: /**
129: * Sets type of breakpoint.
130: *
131: * @param type a new value of breakpoint type property
132: */
133: public void setBreakpointType(int type) {
134: if (type == this .type)
135: return;
136: if ((type & (TYPE_CLASS_LOADED | TYPE_CLASS_UNLOADED)) == 0)
137: throw new IllegalArgumentException();
138: int old = this .type;
139: this .type = type;
140: firePropertyChange(PROP_BREAKPOINT_TYPE, new Integer(old),
141: new Integer(type));
142: }
143:
144: /**
145: * Get list of class filters to stop on.
146: *
147: * @return list of class filters to stop on
148: */
149: public String[] getClassFilters() {
150: return classFilters;
151: }
152:
153: /**
154: * Set list of class filters to stop on.
155: *
156: * @param classFilters a new value of class filters property
157: */
158: public void setClassFilters(String[] classFilters) {
159: if (classFilters == this .classFilters)
160: return;
161: Object old = this .classFilters;
162: this .classFilters = classFilters;
163: firePropertyChange(PROP_CLASS_FILTERS, old, classFilters);
164: }
165:
166: /**
167: * Get list of class exclusion filters to stop on.
168: *
169: * @return list of class exclusion filters to stop on
170: */
171: public String[] getClassExclusionFilters() {
172: return classExclusionFilters;
173: }
174:
175: /**
176: * Set list of class exclusion filters to stop on.
177: *
178: * @param classExclusionFilters a new value of class exclusion filters property
179: */
180: public void setClassExclusionFilters(String[] classExclusionFilters) {
181: if (classExclusionFilters == this .classExclusionFilters)
182: return;
183: Object old = this .classExclusionFilters;
184: this .classExclusionFilters = classExclusionFilters;
185: firePropertyChange(PROP_CLASS_EXCLUSION_FILTERS, old,
186: classExclusionFilters);
187: }
188:
189: /**
190: * Returns a string representation of this object.
191: *
192: * @return a string representation of the object
193: */
194: public String toString() {
195: return "ClassLoadUnloadBreakpoint " + classFilters;
196: }
197: }
|