From: Lukas P. <pe...@us...> - 2002-07-17 12:25:43
|
Update of /cvsroot/javaprofiler/jpiimpl/net/sourceforge/javaprofiler/jpiimpl/realtime In directory usw-pr-cvs1:/tmp/cvs-serv31114 Modified Files: ClassR.java ImageR.java MethodR.java ThreadGroupR.java Log Message: ChildrenListeners added for ImageR Index: ClassR.java =================================================================== RCS file: /cvsroot/javaprofiler/jpiimpl/net/sourceforge/javaprofiler/jpiimpl/realtime/ClassR.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** ClassR.java 2 Jul 2002 20:27:02 -0000 1.5 --- ClassR.java 17 Jul 2002 12:25:36 -0000 1.6 *************** *** 117,122 **** public void refreshMethods() { image.extractChildRoot(this.objId, IProf.CLASS_METHODS, image. ! methodFactory); } --- 117,124 ---- public void refreshMethods() { + List list=new ArrayList(); image.extractChildRoot(this.objId, IProf.CLASS_METHODS, image. ! methodFactory, list); ! image.addMethods(list); } *************** *** 186,190 **** void addMethod(MethodRef o) { methods.add(o); - // PENDING event } --- 188,191 ---- Index: ImageR.java =================================================================== RCS file: /cvsroot/javaprofiler/jpiimpl/net/sourceforge/javaprofiler/jpiimpl/realtime/ImageR.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** ImageR.java 2 Jul 2002 20:27:02 -0000 1.9 --- ImageR.java 17 Jul 2002 12:25:36 -0000 1.10 *************** *** 36,39 **** --- 36,40 ---- import java.util.*; + import javax.swing.event.EventListenerList; import net.sourceforge.javaprofiler.jpiimpl.commun.IProf; import net.sourceforge.javaprofiler.jpiimpl.commun.*; *************** *** 114,130 **** final Constructor monThreadMethodFactory; final Constructor monThreadTraceFactory; - // multi-root ID factories - // final Constructor allocTypeMethodIDFactory; - // final Constructor allocTypeTraceIDFactory; - // final Constructor allocTypeThreadIDFactory; - // final Constructor allocThreadMethodIDFactory; - // final Constructor allocTypeThreadMethodIDFactory; - // final Constructor allocThreadTraceIDFactory; - // final Constructor allocTypeThreadTraceIDFactory; - // final Constructor cpuThreadMethodIDFactory; - // final Constructor cpuThreadTraceIDFactory; Set getAllFlags=new HashSet(); /** Constructs image that mirrors objects gained through given IProf. * It is not intended that end users construct this object, they shall --- 115,131 ---- final Constructor monThreadMethodFactory; final Constructor monThreadTraceFactory; Set getAllFlags=new HashSet(); + /** A list of event listeners for this component. */ + protected EventListenerList threadListeners = new EventListenerList(); + protected EventListenerList typeListeners = new EventListenerList(); + protected EventListenerList classListeners = new EventListenerList(); + protected EventListenerList methodListeners = new EventListenerList(); + protected EventListenerList CPUTraceListeners = new EventListenerList(); + protected EventListenerList allocTraceListeners = new EventListenerList(); + protected EventListenerList monTraceListeners = new EventListenerList(); + protected EventListenerList threadgroupListeners = new EventListenerList(); + /** Constructs image that mirrors objects gained through given IProf. * It is not intended that end users construct this object, they shall *************** *** 241,245 **** "net.sourceforge.javaprofiler.jpiimpl.realtime.MonThreadTraceR" ).getDeclaredConstructor(mrParameterTypes); - // init multi-root ID factories } catch (ClassNotFoundException e) { // PENDING --- 242,245 ---- *************** *** 257,260 **** --- 257,270 ---- } + /** This method performs a call to the profiled machine and gets new + * objects. Only usable for root object types. + * @param direction Type of the root object to query for. Guaranted to + * work are IProf.THREADS, IProf.OBJECT_TYPES, IProf.CLASSES, + * IProf.METHODS, IProf.CPU_TRACES, IProf.ALLOC_TRACES, IProf.MON_TRACES, + * IProf.GROUPS_OF_THREADS + * @param factory Factory used to create new objects holding information + * about the profiled counterparts. + * @param list List to which to append new objects. + */ private void extractRoot(int direction, java.lang.reflect.Constructor factory, List list) { *************** *** 277,282 **** } else { try { ! dataObject=(DataR) factory.newInstance(new Object[] {sid, this ! }); } catch (InstantiationException e) { // PENDING --- 287,292 ---- } else { try { ! dataObject=(DataR) factory.newInstance(new Object[] {sid, ! this}); } catch (InstantiationException e) { // PENDING *************** *** 299,333 **** } - private List getListFromDirection(int direction) { - List list; - switch (direction) { - case IProf.GROUP_THREADS: - list=threads; - break; - case IProf.CLASS_METHODS: - list=methods; - break; - case IProf.CPU_METHOD_TRACES: - list=cpuTraces; - break; - case IProf.ALLOC_METHOD_TRACES: - list=allocTraces; - break; - case IProf.MON_METHOD_TRACES: - list=monTraces; - break; - default: - throw new RuntimeException("Illegal object requested."); - } - return list; - } - // this method is for ThreadGroup->Thread, Class->Method, Method->*Trace // lists refreshing void extractChildRoot(Integer parentId, int direction, ! java.lang.reflect.Constructor factory) { // method should synchronize on image to be thread-safe - // Image has to add new objects into its lists. - List list=getListFromDirection(direction); Iterator itChildren; try { --- 309,317 ---- } // this method is for ThreadGroup->Thread, Class->Method, Method->*Trace // lists refreshing void extractChildRoot(Integer parentId, int direction, ! java.lang.reflect.Constructor factory, List list) { // method should synchronize on image to be thread-safe Iterator itChildren; try { *************** *** 475,479 **** --- 459,471 ---- */ public void refreshThreads() { + List children=threads; + int old=children.size(); extractRoot(IProf.THREADS, threadFactory, threads); + int nw=children.size(); + if (old!=nw && threadListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.THREAD, + children.subList(old, nw).toArray(), createIndicesArray(old, nw) + ), threadListeners); + } } *************** *** 488,492 **** --- 480,492 ---- */ public void refreshTypes() { + List children=types; + int old=children.size(); extractRoot(IProf.OBJECT_TYPES, typeFactory, types); + int nw=children.size(); + if (old!=nw && typeListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.TYPE, + children.subList(old, nw).toArray(), createIndicesArray(old, nw) + ), typeListeners); + } } *************** *** 502,506 **** --- 502,514 ---- */ public void refreshClasses() { + List children=classes; + int old=children.size(); extractRoot(IProf.CLASSES, classFactory, classes); + int nw=children.size(); + if (old!=nw && classListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.CLASS, + children.subList(old, nw).toArray(), createIndicesArray(old, nw) + ), classListeners); + } } *************** *** 516,520 **** --- 524,536 ---- */ public void refreshMethods() { + List children=methods; + int old=children.size(); extractRoot(IProf.METHODS, methodFactory, methods); + int nw=children.size(); + if (old!=nw && methodListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.METHOD, + children.subList(old, nw).toArray(), createIndicesArray(old, nw) + ), methodListeners); + } } *************** *** 527,531 **** --- 543,555 ---- public void refreshCPUTraces() { + List children=cpuTraces; + int old=children.size(); extractRoot(IProf.CPU_TRACES, cpuTraceFactory, cpuTraces); + int nw=children.size(); + if (old!=nw && CPUTraceListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.CPU_TRACE, + children.subList(old, nw).toArray(), createIndicesArray(old, nw) + ), CPUTraceListeners); + } } *************** *** 537,541 **** --- 561,573 ---- public void refreshAllocTraces() { + List children=allocTraces; + int old=children.size(); extractRoot(IProf.ALLOC_TRACES, allocTraceFactory, allocTraces); + int nw=children.size(); + if (old!=nw && allocTraceListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.ALLOC_TRACE, + children.subList(old, nw).toArray(), createIndicesArray(old, nw) + ), allocTraceListeners); + } } *************** *** 547,551 **** --- 579,591 ---- public void refreshMonTraces() { + List children=monTraces; + int old=children.size(); extractRoot(IProf.MON_TRACES, monTraceFactory, monTraces); + int nw=children.size(); + if (old!=nw && monTraceListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.MON_TRACE, + children.subList(old, nw).toArray(), createIndicesArray(old, nw) + ), monTraceListeners); + } } *************** *** 557,561 **** --- 597,609 ---- public void refreshThreadGroups() { + List children=threadGroups; + int old=children.size(); extractRoot(IProf.GROUPS_OF_THREADS, threadGroupFactory, threadGroups); + int nw=children.size(); + if (old!=nw && threadgroupListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.THREADGROUP, + children.subList(old, nw).toArray(), createIndicesArray(old, nw) + ), threadgroupListeners); + } } *************** *** 685,689 **** */ ThreadR resolveThread(Integer oId) { ! return (ThreadR) resolveRoot(oId, null, threadIDFactory, threads); } --- 733,747 ---- */ ThreadR resolveThread(Integer oId) { ! List children=threads; ! int old=children.size(); ! ThreadR res=(ThreadR) resolveRoot(oId, null, threadIDFactory, ! children); ! int nw=children.size(); ! if (old!=nw && threadListeners.getListenerCount()!=0) { ! fireChildrenAdded(new ChildrenEvent(this, Constants.THREAD, ! children.subList(old, nw).toArray(), new int[]{old}), ! threadListeners); ! } ! return res; } *************** *** 694,698 **** ThreadR resolveThread(IProf.sID sid) { Integer oId=new Integer(sid.objId); ! return (ThreadR) resolveRoot(oId, sid, threadFactory, threads); } --- 752,765 ---- ThreadR resolveThread(IProf.sID sid) { Integer oId=new Integer(sid.objId); ! List children=threads; ! int old=children.size(); ! ThreadR res=(ThreadR) resolveRoot(oId, sid, threadFactory, threads); ! int nw=children.size(); ! if (old!=nw && threadListeners.getListenerCount()!=0) { ! fireChildrenAdded(new ChildrenEvent(this, Constants.THREAD, ! children.subList(old, nw).toArray(), new int[]{old}), ! threadListeners); ! } ! return res; } *************** *** 702,706 **** */ AllocTypeR resolveAllocType(Integer oId) { ! return (AllocTypeR) resolveRoot(oId, null, typeIDFactory, types); } --- 769,783 ---- */ AllocTypeR resolveAllocType(Integer oId) { ! List children=types; ! int old=children.size(); ! AllocTypeR res=(AllocTypeR) resolveRoot(oId, null, typeIDFactory, ! children); ! int nw=children.size(); ! if (old!=nw && typeListeners.getListenerCount()!=0) { ! fireChildrenAdded(new ChildrenEvent(this, Constants.TYPE, ! children.subList(old, nw).toArray(), new int[]{old}), ! threadListeners); ! } ! return res; } *************** *** 711,715 **** AllocTypeR resolveAllocType(IProf.sID sid) { Integer oId = new Integer(sid.objId); ! return (AllocTypeR) resolveRoot(oId, sid, typeFactory, types); } --- 788,801 ---- AllocTypeR resolveAllocType(IProf.sID sid) { Integer oId = new Integer(sid.objId); ! List children=types; ! int old=children.size(); ! AllocTypeR res=(AllocTypeR) resolveRoot(oId, sid, typeFactory, types); ! int nw=children.size(); ! if (old!=nw && typeListeners.getListenerCount()!=0) { ! fireChildrenAdded(new ChildrenEvent(this, Constants.TYPE, ! children.subList(old, nw).toArray(), new int[]{old}), ! threadListeners); ! } ! return res; } *************** *** 719,723 **** */ ClassR resolveClass(Integer oId) { ! return (ClassR) resolveRoot(oId, null, classIDFactory, classes); } --- 805,819 ---- */ ClassR resolveClass(Integer oId) { ! List children=classes; ! int old=children.size(); ! ClassR res=(ClassR) resolveRoot(oId, null, classIDFactory, ! children); ! int nw=children.size(); ! if (old!=nw && classListeners.getListenerCount()!=0) { ! fireChildrenAdded(new ChildrenEvent(this, Constants.CLASS, ! children.subList(old, nw).toArray(), new int[]{old}), ! classListeners); ! } ! return res; } *************** *** 728,732 **** ClassR resolveClass(IProf.sID sid) { Integer oId=new Integer(sid.objId); ! return (ClassR) resolveRoot(oId, sid, classFactory, classes); } --- 824,837 ---- ClassR resolveClass(IProf.sID sid) { Integer oId=new Integer(sid.objId); ! List children=classes; ! int old=children.size(); ! ClassR res=(ClassR) resolveRoot(oId, sid, classFactory, classes); ! int nw=children.size(); ! if (old!=nw && classListeners.getListenerCount()!=0) { ! fireChildrenAdded(new ChildrenEvent(this, Constants.CLASS, ! children.subList(old, nw).toArray(), new int[]{old}), ! classListeners); ! } ! return res; } *************** *** 736,740 **** */ MethodR resolveMethod(Integer oId) { ! return (MethodR) resolveRoot(oId, null, methodIDFactory, methods); } --- 841,855 ---- */ MethodR resolveMethod(Integer oId) { ! List children=methods; ! int old=children.size(); ! MethodR res=(MethodR) resolveRoot(oId, null, methodIDFactory, ! children); ! int nw=children.size(); ! if (old!=nw && methodListeners.getListenerCount()!=0) { ! fireChildrenAdded(new ChildrenEvent(this, Constants.METHOD, ! children.subList(old, nw).toArray(), new int[]{old}), ! methodListeners); ! } ! return res; } *************** *** 745,749 **** MethodR resolveMethod(IProf.sID sid) { Integer oId=new Integer(sid.objId); ! return (MethodR) resolveRoot(oId, sid, methodFactory, methods); } --- 860,873 ---- MethodR resolveMethod(IProf.sID sid) { Integer oId=new Integer(sid.objId); ! List children=methods; ! int old=children.size(); ! MethodR res=(MethodR) resolveRoot(oId, sid, methodFactory, methods); ! int nw=children.size(); ! if (old!=nw && methodListeners.getListenerCount()!=0) { ! fireChildrenAdded(new ChildrenEvent(this, Constants.METHOD, ! children.subList(old, nw).toArray(), new int[]{old}), ! methodListeners); ! } ! return res; } *************** *** 753,758 **** */ AllocTraceR resolveAllocTrace(Integer oId) { ! return (AllocTraceR) resolveRoot(oId, null, allocTraceIDFactory, ! allocTraces); } --- 877,891 ---- */ AllocTraceR resolveAllocTrace(Integer oId) { ! List children=allocTraces; ! int old=children.size(); ! AllocTraceR res=(AllocTraceR) resolveRoot(oId, null, allocTraceIDFactory, ! children); ! int nw=children.size(); ! if (old!=nw && allocTraceListeners.getListenerCount()!=0) { ! fireChildrenAdded(new ChildrenEvent(this, Constants.ALLOC_TRACE, ! children.subList(old, nw).toArray(), new int[]{old}), ! allocTraceListeners); ! } ! return res; } *************** *** 763,768 **** AllocTraceR resolveAllocTrace(IProf.sID sid) { Integer oId = new Integer(sid.objId); ! return (AllocTraceR) resolveRoot(oId, sid, allocTraceFactory, allocTraces); } --- 896,910 ---- AllocTraceR resolveAllocTrace(IProf.sID sid) { Integer oId = new Integer(sid.objId); ! List children=allocTraces; ! int old=children.size(); ! AllocTraceR res=(AllocTraceR) resolveRoot(oId, sid, allocTraceFactory, allocTraces); + int nw=children.size(); + if (old!=nw && allocTraceListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.ALLOC_TRACE, + children.subList(old, nw).toArray(), new int[]{old}), + allocTraceListeners); + } + return res; } *************** *** 772,777 **** */ CPUTraceR resolveCPUTrace(Integer oId) { ! return (CPUTraceR) resolveRoot(oId, null, cpuTraceIDFactory, ! cpuTraces); } --- 914,928 ---- */ CPUTraceR resolveCPUTrace(Integer oId) { ! List children=cpuTraces; ! int old=children.size(); ! CPUTraceR res=(CPUTraceR) resolveRoot(oId, null, cpuTraceIDFactory, ! children); ! int nw=children.size(); ! if (old!=nw && CPUTraceListeners.getListenerCount()!=0) { ! fireChildrenAdded(new ChildrenEvent(this, Constants.CPU_TRACE, ! children.subList(old, nw).toArray(), new int[]{old}), ! CPUTraceListeners); ! } ! return res; } *************** *** 782,787 **** CPUTraceR resolveCPUTrace(IProf.sID sid) { Integer oId = new Integer(sid.objId); ! return (CPUTraceR) resolveRoot(oId, sid, cpuTraceFactory, cpuTraces); } --- 933,947 ---- CPUTraceR resolveCPUTrace(IProf.sID sid) { Integer oId = new Integer(sid.objId); ! List children=cpuTraces; ! int old=children.size(); ! CPUTraceR res=(CPUTraceR) resolveRoot(oId, sid, cpuTraceFactory, cpuTraces); + int nw=children.size(); + if (old!=nw && CPUTraceListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.CPU_TRACE, + children.subList(old, nw).toArray(), new int[]{old}), + CPUTraceListeners); + } + return res; } *************** *** 791,796 **** */ MonTraceR resolveMonTrace(Integer oId) { ! return (MonTraceR) resolveRoot(oId, null, monTraceIDFactory, ! monTraces); } --- 951,965 ---- */ MonTraceR resolveMonTrace(Integer oId) { ! List children=monTraces; ! int old=children.size(); ! MonTraceR res=(MonTraceR) resolveRoot(oId, null, monTraceIDFactory, ! children); ! int nw=children.size(); ! if (old!=nw && monTraceListeners.getListenerCount()!=0) { ! fireChildrenAdded(new ChildrenEvent(this, Constants.MON_TRACE, ! children.subList(old, nw).toArray(), new int[]{old}), ! monTraceListeners); ! } ! return res; } *************** *** 801,806 **** MonTraceR resolveMonTrace(IProf.sID sid) { Integer oId = new Integer(sid.objId); ! return (MonTraceR) resolveRoot(oId, sid, monTraceFactory, monTraces); } --- 970,984 ---- MonTraceR resolveMonTrace(IProf.sID sid) { Integer oId = new Integer(sid.objId); ! List children=monTraces; ! int old=children.size(); ! MonTraceR res=(MonTraceR) resolveRoot(oId, sid, monTraceFactory, monTraces); + int nw=children.size(); + if (old!=nw && monTraceListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.MON_TRACE, + children.subList(old, nw).toArray(), new int[]{old}), + monTraceListeners); + } + return res; } *************** *** 810,815 **** */ ThreadGroupR resolveThreadGroup(Integer oId) { ! return (ThreadGroupR) resolveRoot(oId, null, threadGroupIDFactory, ! threadGroups); } --- 988,1002 ---- */ ThreadGroupR resolveThreadGroup(Integer oId) { ! List children=threadGroups; ! int old=children.size(); ! ThreadGroupR res=(ThreadGroupR) resolveRoot(oId, null, threadGroupIDFactory, ! children); ! int nw=children.size(); ! if (old!=nw && threadgroupListeners.getListenerCount()!=0) { ! fireChildrenAdded(new ChildrenEvent(this, Constants.THREADGROUP, ! children.subList(old, nw).toArray(), new int[]{old}), ! threadgroupListeners); ! } ! return res; } *************** *** 820,827 **** ThreadGroupR resolveThreadGroup(IProf.sID sid) { Integer oId=new Integer(sid.objId); ! return (ThreadGroupR) resolveRoot(oId, sid, threadGroupFactory, threadGroups); } // ------------------------------------------- getAll / getChanged wrapping --- 1007,1095 ---- ThreadGroupR resolveThreadGroup(IProf.sID sid) { Integer oId=new Integer(sid.objId); ! List children=threadGroups; ! int old=children.size(); ! ThreadGroupR res=(ThreadGroupR) resolveRoot(oId, sid, threadGroupFactory, threadGroups); + int nw=children.size(); + if (old!=nw && threadgroupListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.THREADGROUP, + children.subList(old, nw).toArray(), new int[]{old}), + threadgroupListeners); + } + return res; } + // ------------------------------------------------------ children addition + + void addThreads(List l) { + if (! l.isEmpty()) { + List children=threads; + int old=children.size(); + children.addAll(l); + int nw=children.size(); + if (threadListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.THREAD, + children.subList(old, nw).toArray(), createIndicesArray(old, + nw)), threadListeners); + } + } + } + + void addMethods(List l) { + if (! l.isEmpty()) { + List children=methods; + int old=children.size(); + children.addAll(l); + int nw=children.size(); + if (methodListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.METHOD, + children.subList(old, nw).toArray(), createIndicesArray(old, + nw)), methodListeners); + } + } + } + + void addCPUTraces(List l) { + if (! l.isEmpty()) { + List children=cpuTraces; + int old=children.size(); + children.addAll(l); + int nw=children.size(); + if (CPUTraceListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.CPU_TRACE, + children.subList(old, nw).toArray(), createIndicesArray(old, + nw)), CPUTraceListeners); + } + } + } + + void addAllocTraces(List l) { + if (! l.isEmpty()) { + List children=allocTraces; + int old=children.size(); + children.addAll(l); + int nw=children.size(); + if (allocTraceListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.ALLOC_TRACE, + children.subList(old, nw).toArray(), createIndicesArray(old, + nw)), allocTraceListeners); + } + } + } + + void addMonTraces(List l) { + if (! l.isEmpty()) { + List children=monTraces; + int old=children.size(); + children.addAll(l); + int nw=children.size(); + if (monTraceListeners.getListenerCount()!=0) { + fireChildrenAdded(new ChildrenEvent(this, Constants.MON_TRACE, + children.subList(old, nw).toArray(), createIndicesArray(old, + nw)), monTraceListeners); + } + } + } + // ------------------------------------------- getAll / getChanged wrapping *************** *** 945,959 **** } ! public void removeChildrenListener(int type, ChildrenListener listener) { ! // PENDING } public List getGCRuns() { // PENDING return null; - } - - public void addChildrenListener(int type, ChildrenListener listener) { - // PENDING } --- 1213,1304 ---- } ! // -------------------------------------------------------------- listeners ! ! /** ! * Removes an <code>ChildrenListener</code> from this object. ! * @param type Type of children to listen events for. Constants are defined ! * in net.sourceforge.javaprofiler.jpi.Constants. ! * @param l the listener to be removed ! */ ! public void removeChildrenListener(int type, ChildrenListener l) { ! if (type==Constants.THREAD) ! threadListeners.remove(ChildrenListener.class, l); ! if (type==Constants.TYPE) ! typeListeners.remove(ChildrenListener.class, l); ! if (type==Constants.CLASS) ! classListeners.remove(ChildrenListener.class, l); ! if (type==Constants.METHOD) ! methodListeners.remove(ChildrenListener.class, l); ! if (type==Constants.CPU_TRACE) ! CPUTraceListeners.remove(ChildrenListener.class, l); ! if (type==Constants.ALLOC_TRACE) ! allocTraceListeners.remove(ChildrenListener.class, l); ! if (type==Constants.MON_TRACE) ! monTraceListeners.remove(ChildrenListener.class, l); ! if (type==Constants.THREADGROUP) ! threadgroupListeners.remove(ChildrenListener.class, l); ! else ! throw new IllegalArgumentException("Illegal child type."); } + /** + * Adds an <code>ChildrenListener</code> to this object. + * <strong>Warning:</strong> Events are not dispatched in the swing event- + * dispatching thread, rather they are dispatched in the thread which + * caused new data to be loaded. + * @param type Type of children to listen events for. Constants are defined + * in net.sourceforge.javaprofiler.jpi.Constants. + * @param l the listener to be added + */ + public void addChildrenListener(int type, ChildrenListener l) { + if (type==Constants.THREAD) + threadListeners.add(ChildrenListener.class, l); + if (type==Constants.TYPE) + typeListeners.add(ChildrenListener.class, l); + if (type==Constants.CLASS) + classListeners.add(ChildrenListener.class, l); + if (type==Constants.METHOD) + methodListeners.add(ChildrenListener.class, l); + if (type==Constants.CPU_TRACE) + CPUTraceListeners.add(ChildrenListener.class, l); + if (type==Constants.ALLOC_TRACE) + allocTraceListeners.add(ChildrenListener.class, l); + if (type==Constants.MON_TRACE) + monTraceListeners.add(ChildrenListener.class, l); + if (type==Constants.THREADGROUP) + threadgroupListeners.add(ChildrenListener.class, l); + else + throw new IllegalArgumentException("Illegal child type."); + } + + /** Returns an array of int containing all numbers from <code>from</code> + * (inclusive) to <code>to</code> (exclusive). + */ + private int[] createIndicesArray(int from, int to) { + int[] r=new int[to-from]; + for (int i=0; i<(to-from); i++) + r[i]=i+from; + return r; + } + + /** + * Notifies all listeners that have registered interest for + * notification on this event type. The event instance + * is taken from a parameter. + * @param e the event to fire + * @param list list holding the listeners to receive the event + */ + private void fireChildrenAdded(ChildrenEvent e, EventListenerList list) { + // Guaranteed to return a non-null array + Object[] listeners = list.getListenerList(); + // Process the listeners last to first, notifying all + for (int i = listeners.length-2; i>=0; i-=2) { + ((ChildrenListener)listeners[i+1]).childrenAdded(e); + } + } + public List getGCRuns() { // PENDING return null; } Index: MethodR.java =================================================================== RCS file: /cvsroot/javaprofiler/jpiimpl/net/sourceforge/javaprofiler/jpiimpl/realtime/MethodR.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** MethodR.java 11 Jul 2002 18:17:23 -0000 1.8 --- MethodR.java 17 Jul 2002 12:25:36 -0000 1.9 *************** *** 156,161 **** public void refreshCPUTraces() { image.extractChildRoot(this.objId, IProf.CPU_METHOD_TRACES, image. ! cpuTraceFactory); } --- 156,163 ---- public void refreshCPUTraces() { + List list=new ArrayList(); image.extractChildRoot(this.objId, IProf.CPU_METHOD_TRACES, image. ! cpuTraceFactory, list); ! image.addCPUTraces(list); } *************** *** 167,172 **** public void refreshAllocTraces() { image.extractChildRoot(this.objId, IProf.ALLOC_METHOD_TRACES, image. ! allocTraceFactory); } --- 169,176 ---- public void refreshAllocTraces() { + List list=new ArrayList(); image.extractChildRoot(this.objId, IProf.ALLOC_METHOD_TRACES, image. ! allocTraceFactory, list); ! image.addAllocTraces(list); } *************** *** 178,183 **** public void refreshMonTraces() { image.extractChildRoot(this.objId, IProf.MON_METHOD_TRACES, image. ! monTraceFactory); } --- 182,189 ---- public void refreshMonTraces() { + List list=new ArrayList(); image.extractChildRoot(this.objId, IProf.MON_METHOD_TRACES, image. ! monTraceFactory, list); ! image.addMonTraces(list); } Index: ThreadGroupR.java =================================================================== RCS file: /cvsroot/javaprofiler/jpiimpl/net/sourceforge/javaprofiler/jpiimpl/realtime/ThreadGroupR.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -r1.5 -r1.6 *** ThreadGroupR.java 2 Jul 2002 20:27:02 -0000 1.5 --- ThreadGroupR.java 17 Jul 2002 12:25:36 -0000 1.6 *************** *** 36,39 **** --- 36,40 ---- import java.util.*; + import javax.swing.event.EventListenerList; import net.sourceforge.javaprofiler.jpi.*; import net.sourceforge.javaprofiler.jpiimpl.commun.IProf; *************** *** 64,67 **** --- 65,71 ---- threads); + /** A list of event listeners for this component. */ + protected EventListenerList threadListeners = new EventListenerList(); + /** Constructs new object with info. * @param sid Object with data from communication layer. *************** *** 95,100 **** public void refreshThreads() { image.extractChildRoot(this.objId, IProf.GROUP_THREADS, image. ! threadFactory); } --- 99,106 ---- public void refreshThreads() { + List list=new ArrayList(); image.extractChildRoot(this.objId, IProf.GROUP_THREADS, image. ! threadFactory, list); ! image.addThreads(list); } *************** *** 134,138 **** void addThread(ThreadRef thread) { threads.add(thread); ! // PENDING event } --- 140,145 ---- void addThread(ThreadRef thread) { threads.add(thread); ! fireChildrenAdded(new ChildrenEvent(this, Constants.THREAD, new Object[] ! {thread}, new int[]{threads.size()-1}), threadListeners); } *************** *** 185,195 **** } ! public void removeChildrenListener(int type, ChildrenListener listener) { ! // PENDING } ! public void addChildrenListener(int type, ChildrenListener listener) { ! // PENDING } } --- 192,236 ---- } ! // -------------------------------------------------------------- listeners ! ! /** ! * Removes an <code>ChildrenListener</code> from this object. ! * @param l the listener to be removed ! */ ! public void removeChildrenListener(int type, ChildrenListener l) { ! if (type==Constants.THREAD) ! threadListeners.remove(ChildrenListener.class, l); ! else ! throw new IllegalArgumentException("Illegal child type."); } ! /** ! * Adds an <code>ChildrenListener</code> to this object. ! * <strong>Warning:</strong> Events are not dispatched in the swing event- ! * dispatching thread, rather they are dispatched in the thread which ! * caused new data to be loaded. ! * @param l the listener to be added ! */ ! public void addChildrenListener(int type, ChildrenListener l) { ! if (type==Constants.THREAD) ! threadListeners.add(ChildrenListener.class, l); ! else ! throw new IllegalArgumentException("Illegal child type."); } + /** + * Notifies all listeners that have registered interest for + * notification on this event type. The event instance + * is taken from a parameter. + * @param e the event to fire + * @param list list holding the listeners to receive the event + */ + private void fireChildrenAdded(ChildrenEvent e, EventListenerList list) { + // Guaranteed to return a non-null array + Object[] listeners = list.getListenerList(); + // Process the listeners last to first, notifying all + for (int i = listeners.length-2; i>=0; i-=2) { + ((ChildrenListener)listeners[i+1]).childrenAdded(e); + } + } } |