1 package fr.in2p3.jsaga.engine.job.monitor.listen;
2
3 import fr.in2p3.jsaga.adaptor.job.monitor.*;
4 import fr.in2p3.jsaga.engine.job.monitor.JobMonitorCallback;
5 import fr.in2p3.jsaga.engine.job.monitor.request.JobStatusRequestor;
6 import org.ogf.saga.error.NoSuccessException;
7 import org.ogf.saga.error.TimeoutException;
8
9 import java.util.HashMap;
10 import java.util.Map;
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public class FilteredJobStatusListener extends AbstractJobStatusListener implements JobStatusNotifier {
25 private ListenFilteredJob m_adaptor;
26 private Map m_subscribedJobs;
27
28
29 public FilteredJobStatusListener(ListenFilteredJob adaptor, JobStatusRequestor requestor) throws TimeoutException, NoSuccessException {
30 super(requestor);
31 m_adaptor = adaptor;
32 m_adaptor.subscribeFilteredJob(this);
33 m_subscribedJobs = new HashMap();
34 }
35
36
37 protected void finalize() throws Throwable {
38 super.finalize();
39 m_adaptor.unsubscribeFilteredJob();
40 }
41
42 protected synchronized void doSubscribeJob(String nativeJobId, JobMonitorCallback callback) throws TimeoutException, NoSuccessException {
43 m_subscribedJobs.put(nativeJobId, callback);
44 }
45
46 public synchronized void unsubscribeJob(String nativeJobId) throws TimeoutException, NoSuccessException {
47 m_subscribedJobs.remove(nativeJobId);
48 }
49
50 public void notifyChange(JobStatus status) {
51 JobMonitorCallback callback = (JobMonitorCallback) m_subscribedJobs.get(status.getNativeJobId());
52 if (callback != null) {
53 callback.setState(status.getSagaState(), status.getStateDetail(), status.getSubState(), status.getCause());
54 }
55 }
56 }