KickJava   Java API By Example, From Geeks To Geeks.

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


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

17
18 class ClientStateHelper {
19
20     /** Remember the last event so new state listeners can be told it. */
21     private JobStateEvent lastEvent;
22
23     /** State listeners */
24     private final List JavaDoc listeners = new ArrayList JavaDoc();
25
26     /** The owner, to be used as the source of the event. */
27     private final Object JavaDoc owner;
28
29     /**
30      * Constructor.
31      *
32      * @param owner The owning (source) object.
33      */

34
35     public ClientStateHelper(Object JavaDoc owner) {
36         this.owner = owner;
37         lastEvent = new JobStateEvent(owner, JobState.READY, null);
38     }
39
40     public void jobStateChange(JobStateEvent event) {
41         // The event that comes over the wire with the wrong source, so create a new one
42
// job node client proxy as the source.
43
JobStateEvent newEvent = new JobStateEvent(owner, event.getJobState(),
44                 event.getTime(), event.getException());
45
46         lastEvent = newEvent;
47         List JavaDoc copy = null;
48         synchronized (listeners) {
49             copy = new ArrayList JavaDoc(listeners);
50         }
51         for (Iterator JavaDoc it = copy.iterator(); it.hasNext();) {
52             ((JobStateListener)it.next()).jobStateChange(newEvent);
53         }
54     }
55     
56     /**
57      * Add a job state listener.
58      *
59      * @param listener The job state listener.
60      */

61     public void addJobStateListener(JobStateListener listener) {
62         synchronized (listeners) {
63             listeners.add(listener);
64             JobStateEvent nowEvent = null;
65             nowEvent = lastEvent;
66             
67             listener.jobStateChange(nowEvent);
68         }
69     }
70
71     /**
72      * Remove a job state listener.
73      *
74      * @param listener The job state listener.
75      */

76     public void removeJobStateListener(JobStateListener listener) {
77         synchronized (listeners) {
78             listeners.remove(listener);
79         }
80     }
81
82 }
83
Popular Tags