KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > oddjob > jmx > client > ClientIconHelper


1 package org.oddjob.jmx.client;
2
3 import java.rmi.RemoteException JavaDoc;
4 import java.util.ArrayList JavaDoc;
5 import java.util.Iterator JavaDoc;
6 import java.util.List JavaDoc;
7
8 import org.oddjob.images.IconEvent;
9 import org.oddjob.images.IconHelper;
10 import org.oddjob.images.IconListener;
11
12 /**
13  * Implement a remote state listener. This handles remote state events and also
14  * propogates them on the client side as normal state events.
15  *
16  * @author Rob Gordon
17  */

18
19 class ClientIconHelper {
20
21     /** Remember the last event so new state listeners can be told it. */
22     private IconEvent lastEvent = new IconEvent(this, IconHelper.NULL);
23
24     /** listeners */
25     private final List JavaDoc listeners = new ArrayList JavaDoc();
26
27     /** The owner, to be used as the source of the event. */
28     private final Object JavaDoc owner;
29
30     /**
31      * Constructor.
32      *
33      * @param owner The owning (source) object.
34      *
35      * @throws RemoteException From underlying RMI.
36      */

37     public ClientIconHelper(Object JavaDoc owner) {
38         super();
39         this.owner = owner;
40     }
41
42     public void iconEvent(IconEvent event) {
43         // The event that comes over the wire has a null source, so create a new one
44
// job node client as the source.
45
IconEvent iconEvent = new IconEvent(owner, event.getIconId());
46
47         lastEvent = event;
48         
49         synchronized (listeners) {
50             for (Iterator JavaDoc it = listeners.iterator(); it.hasNext();) {
51                 ((IconListener)it.next()).iconEvent(iconEvent);
52             }
53         }
54     }
55     
56     public void addIconListener(IconListener listener) {
57         IconEvent nowEvent = null;
58         nowEvent = lastEvent;
59         synchronized (listeners) {
60             listener.iconEvent(nowEvent);
61             listeners.add(listener);
62         }
63     }
64
65     /**
66      * Remove a job state listener.
67      *
68      * @param listener The job state listener.
69      */

70     public void removeIconListener(IconListener listener) {
71         synchronized (listeners) {
72             listeners.remove(listener);
73         }
74     }
75
76 }
77
Popular Tags