View Javadoc

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  * *** Centre de Calcul de l'IN2P3 - Lyon (France) ***
14  * ***             http://cc.in2p3.fr/             ***
15  * ***************************************************
16  * File:   FilteredJobStatusListener
17  * Author: Sylvain Reynaud (sreynaud@in2p3.fr)
18  * Date:   11 janv. 2008
19  * ***************************************************
20  * Description:                                      */
21  /**
22   *
23   */
24  public class FilteredJobStatusListener extends AbstractJobStatusListener implements JobStatusNotifier {
25      private ListenFilteredJob m_adaptor;
26      private Map m_subscribedJobs;
27  
28      /** constructor */
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      /** destructor */
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  }