001: /*
002: * Swing Explorer. Tool for developers exploring Java/Swing-based application internals.
003: * Copyright (C) 2008, Maxim Zakharenkov
004: *
005: * This program is free software; you can redistribute it and/or modify
006: * it under the terms of the GNU General Public License as published by
007: * the Free Software Foundation; either version 2 of the License, or
008: * (at your option) any later version.
009: *
010: * This program is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013: * GNU General Public License for more details.
014: *
015: * You should have received a copy of the GNU General Public License along
016: * with this program; if not, write to the Free Software Foundation, Inc.,
017: * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
018: *
019: * $Header: /cvs/swingexplorer/src/org/swingexplorer/edt_monitor/MdlEDTMonitor.java,v 1.1 2008/03/07 11:46:52 maxz1 Exp $
020: */
021: package org.swingexplorer.edt_monitor;
022:
023: import java.beans.PropertyChangeListener;
024: import java.beans.PropertyChangeSupport;
025:
026: import javax.swing.SwingUtilities;
027:
028: import org.swingexplorer.Problem;
029: import org.swingexplorer.ProblemListener;
030: import org.swingexplorer.instrument.Agent;
031: import org.swingexplorer.util.ListenerSupport;
032:
033: /**
034: *
035: * @author Maxim Zakharenkov
036: */
037: public class MdlEDTMonitor {
038:
039: boolean monitorViolations;
040: boolean monitorDelays;
041:
042: PropertyChangeSupport propChangeSupport = new PropertyChangeSupport(
043: this );
044: ProblemListenerRedispatcher problemListenerRedispatcher = new ProblemListenerRedispatcher();
045: ListenerSupport<ProblemListener> listenerSupport = new ListenerSupport<ProblemListener>(
046: ProblemListener.class);
047:
048: public void setMonitorViolations(boolean _monitorViolations) {
049: boolean old = monitorViolations;
050: monitorViolations = _monitorViolations;
051: if (monitorViolations) {
052: Agent.setProblemListener(problemListenerRedispatcher);
053: } else {
054: Agent.setProblemListener(null);
055: }
056: propChangeSupport.firePropertyChange("monitorViolations", old,
057: monitorViolations);
058: }
059:
060: public int getMinimalMonitoredHangTime() {
061: return (int) EDTDebugQueue.getMinimalMonitoredHangTime();
062: }
063:
064: public void setMinimalMonitoredHangTime(
065: int _minimalMonitoredHangTime) {
066: long old = EDTDebugQueue.getMinimalMonitoredHangTime();
067: EDTDebugQueue
068: .setMinimalMonitoredHangTime(_minimalMonitoredHangTime);
069: propChangeSupport.firePropertyChange(
070: "minimalMonitoredHangTime", old,
071: _minimalMonitoredHangTime);
072: }
073:
074: public void setMonitorDelays(boolean _monitorDelays) {
075: boolean old = monitorDelays;
076: monitorDelays = _monitorDelays;
077: if (monitorDelays) {
078: EDTDebugQueue
079: .setProblemListener(problemListenerRedispatcher);
080: } else {
081: EDTDebugQueue.setProblemListener(null);
082: }
083: propChangeSupport.firePropertyChange("monitorDelays", old,
084: monitorDelays);
085: }
086:
087: public boolean isMonitorDelays() {
088: return monitorDelays;
089: }
090:
091: public boolean isMonitorViolations() {
092: return monitorViolations;
093: }
094:
095: public void addPropertyChangeListener(PropertyChangeListener l) {
096: propChangeSupport.addPropertyChangeListener(l);
097: }
098:
099: public void removePropertyChangeListener(PropertyChangeListener l) {
100: propChangeSupport.removePropertyChangeListener(l);
101: }
102:
103: public void addProblemListener(ProblemListener l) {
104: listenerSupport.addEventListener(l);
105: }
106:
107: public void removeProblemListener(ProblemListener l) {
108: listenerSupport.removeEventListener(l);
109: }
110:
111: class ProblemListenerRedispatcher implements ProblemListener {
112: public void violationOccured(StackTraceElement[] trace,
113: String threadName) {
114:
115: }
116:
117: public void problemOccured(final Problem problem) {
118: // notify all listeners about the problem in the EDT
119: SwingUtilities.invokeLater(new Runnable() {
120: public void run() {
121: listenerSupport.getDispatcher().problemOccured(
122: problem);
123: }
124: });
125: }
126: }
127: }
|